Как вы используете корреляционную матрицу в качестве входных данных для функции princomp() в R?

У меня есть кадр данных, который представляет матрицу корреляции большого набора данных:

> data
   V1    V2    V3    V4    V5    V6    V7    V8
1 1.000 0.846 0.805 0.859 0.473 0.398 0.301 0.382
2 0.846 1.000 0.881 0.826 0.376 0.326 0.277 0.415
3 0.805 0.881 1.000 0.801 0.380 0.319 0.237 0.345
4 0.859 0.826 0.801 1.000 0.436 0.329 0.327 0.365
5 0.473 0.376 0.380 0.436 1.000 0.762 0.730 0.629
6 0.398 0.326 0.319 0.329 0.762 1.000 0.583 0.577
7 0.301 0.277 0.237 0.327 0.730 0.583 1.000 0.539
8 0.382 0.415 0.345 0.365 0.629 0.577 0.539 1.000

Я хочу выполнить анализ основных компонентов с помощью функции princomp() в {stats}. Я попытался прочитать доступную документацию и получил:

myPCA <- princomp(~V1+V2+V3+V4+V5+V6+V7+V8, data=data, covmat=data)

Но это не делает ничего другого, чем когда я остановился на последнем аргументе. Посоветуйте, как правильно использовать параметры princomp().


person skmathur    schedule 29.03.2014    source источник
comment
Пакет FactoMineR, очевидно, принимает корреляционные матрицы в качестве аргументов, см. factominer.free.fr/faq/index.html.   -  person tumultous_rooster    schedule 29.03.2014


Ответы (2)


Вы можете попробовать использовать функцию principal в пакете psych. https://personality-project.org/r/html/principal.html .

Ниже приведена выдержка из http://www.statmethods.net/advstats/factor.html

 # Principal Axis Factor Analysis
 library(psych)
 fit <- principal(mydata, nfactors=5, rotate="varimax")
 fit # print results

mydata может быть матрицей необработанных данных или ковариационной матрицей.

person ManojVenkat    schedule 29.03.2014

Вы можете рассмотреть возможность использования функции eigen, которая будет производить как собственные значения корреляционной матрицы (эквивалентные квадратам sdevs, полученные princomp), так и собственные векторы (эквивалентные нагрузкам, созданным princomp).

Вызов будет просто:

myPCA <- eigen(data)
myPCA$values
myPCA$vectors
person JasonAment    schedule 29.03.2014