Я хотел бы через 4 года дать более точный ответ на этот вопрос. В качестве примера я использую данные радужной оболочки глаза.
data = iris[, 1:4]
Сначала сделайте PCA с помощью собственного разложения
eigen_res = eigen(cov(data))
l = eigen_res$values
q = eigen_res$vectors
Тогда собственный вектор, соответствующий наибольшему собственному значению, - это факторные нагрузки
q[,1]
Мы можем рассматривать это как ссылку или правильный ответ. Теперь проверим результаты с помощью различных r-функций. Во-первых, функцией princomp
res1 = princomp(data)
res1$loadings[,1]
# compare with
q[,1]
Нет проблем, эта функция фактически просто возвращает те же результаты, что и 'eigen'. Теперь переходим к "основной"
library(psych)
res2 = principal(data, nfactors=4, rotate="none")
# the loadings of the first PC is
res2$loadings[,1]
# compare it with the results by eigendecomposition
sqrt(l[1])*q[,1] # re-scale the eigen vector by sqrt of eigen value
Вы можете обнаружить, что они все еще разные. Проблема в том, что "основная" функция по умолчанию выполняет собственное разложение корреляционной матрицы. Примечание: PCA не инвариантно при изменении масштаба переменных. Если вы измените код как
res2 = principal(data, nfactors=4, rotate="none", cor="cov")
# the loadings of the first PC is
res2$loadings[,1]
# compare it with the results by eigendecomposition
sqrt(l[1])*q[,1] # re-scale the eigen vector by sqrt of eigen value
Теперь вы получите те же результаты, что и «eigen» и «princomp».
Суммировать:
- Если вы хотите сделать PCA, вам лучше применить функцию princomp.
- PCA - это частный случай факторной модели или упрощенная версия факторной модели. Это просто эквивалентно собственному разложению.
- Мы можем применить PCA, чтобы получить приближение факторной модели. Его не волнуют конкретные факторы, например эпсилоны в факторной модели. Итак, если вы измените количество факторов в своей модели, вы получите те же оценки нагрузок. Он отличается от оценки максимального правдоподобия.
- Если вы оцениваете факторную модель, вам лучше использовать «главную» функцию, поскольку она предоставляет больше функций, таких как вращение, вычисление оценок различными методами и т. Д.
- Изменение масштаба загрузок модели PCA не слишком сильно влияет на результаты. Поскольку вы по-прежнему проецируете данные в одном и том же оптимальном направлении, то есть максимизируете вариации на конечном ПК.
person
ANuo
schedule
17.09.2020