Как я могу импортировать и работать с корреляционной матрицей как единственным источником данных в PCA и PCF в R - PullRequest
0 голосов
/ 09 марта 2019

Я новичок в R и работаю над проблемой * переноса и работы с корреляционной матрицей как единственным источником данных в PCA и PCF в R

Я сослался на банки ответов переполнения стека и даже книги, я не смог найти никаких подсказок, он заставляет R работать только с файлом данных переменных, тогда как в SAS вы можете просто ввести матрицу корреляции и получить результаты PCA и PCF без труда. Надеюсь, я ошибаюсь.

Я попытался взглянуть на банки ответов переполнения стека, и они в основном касаются того, как вычислить матрицу коров или разложение по собственным значениям.

Ниже мои попытки:

setwd ("D: / BlueHDD / MAQAB / RStudio / R / PCA / Intelligence")

mydata <- read.csv ("Intelligence.csv", na.strings = ".") </p>

голова (MYDATA)

  X     M     P     C     E     H     F
1 M 1.000 0.620 0.540 0.320 0.284 0.370
2 P 0.620 1.000 0.510 0.380 0.351 0.430
3 C 0.540 0.510 1.000 0.360 0.336 0.405
4 E 0.320 0.380 0.360 1.000 0.686 0.730
5 H 0.284 0.351 0.336 0.686 1.000 0.735
6 F 0.370 0.430 0.405 0.730 0.735 1.000

ii <- as.matrix (mydata [, 2: 7]) </p>

имена строк (ii) <- c («M», «P», «C», «E», «H», «F») </p>

имена (ii) <- c («M», «P», «C», «E», «H», «F») </p>

головка (II) * * тысяча двадцать пять

      M     P     C     E     H     F
M 1.000 0.620 0.540 0.320 0.284 0.370
P 0.620 1.000 0.510 0.380 0.351 0.430
C 0.540 0.510 1.000 0.360 0.336 0.405
E 0.320 0.380 0.360 1.000 0.686 0.730
H 0.284 0.351 0.336 0.686 1.000 0.735
F 0.370 0.430 0.405 0.730 0.735 1.000

myPCA <- eigen (ii) </p>

голова (myPCA)

$ значения

[1] 3.3670861 1.1941791 0.5070061 0.3718472 0.3131559 0.2467257

$ векторов

           [,1]       [,2]         [,3]        [,4]         [,5]        [,6]
[1,] -0.3677678 -0.5098401  0.266985551  0.72768020  0.047584025 -0.04178482
[2,] -0.3913477 -0.4092063  0.485916591 -0.66464527 -0.005392018 -0.03872816
[3,] -0.3719504 -0.3825819 -0.831626240 -0.15204371 -0.003331423 -0.02352388
[4,] -0.4321872  0.3748248  0.021531885  0.06531777 -0.742970281 -0.34056682
[5,] -0.4219572  0.4214599  0.002730054  0.01174474  0.665109730 -0.44922966
[6,] -0.4565228  0.3288196  0.023032686  0.03473540  0.057617669  0.82365511

myPCA $ значения

[1] 3.3670861 1.1941791 0.5070061 0.3718472 0.3131559 0.2467257

myPCA $ векторов

           [,1]       [,2]         [,3]        [,4]         [,5]        [,6]
[1,] -0.3677678 -0.5098401  0.266985551  0.72768020  0.047584025 -0.04178482
[2,] -0.3913477 -0.4092063  0.485916591 -0.66464527 -0.005392018 -0.03872816
[3,] -0.3719504 -0.3825819 -0.831626240 -0.15204371 -0.003331423 -0.02352388
[4,] -0.4321872  0.3748248  0.021531885  0.06531777 -0.742970281 -0.34056682
[5,] -0.4219572  0.4214599  0.002730054  0.01174474  0.665109730 -0.44922966
[6,] -0.4565228  0.3288196  0.023032686  0.03473540  0.057617669  0.82365511

Проблема теперь в векторе, все "+" и "-" противоположны!


Кроме того, отсюда я не знаю, как получить матрицу загрузки. Я пробовал ниже, но не получается:

fit <- princomp(ii)

summary(fit) # print variance accounted for 

loadings(fit) # pc loadings 

plot(fit,type="lines") # scree plot 

fit$scores # the principal components

biplot(fit)

1 Ответ

1 голос
/ 09 марта 2019

Вы можете выполнить PCA в R с помощью функции princomp. В документации сказано, что если вы предоставите аргумент covmat, он вычислит основные компоненты из ковариационной матрицы. Но это также работает, чтобы использовать этот аргумент с матрицей корреляции.

Вот простой пример использования данных радужной оболочки.

## principal components from the original data
princomp(iris[,1:4], cor=T)
Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4 
1.7083611 0.9560494 0.3830886 0.1439265

Теперь предположим, что у вас есть только корреляционная матрица

## from correlation matrix
CM = cor(iris[,1:4])
myPCA = princomp(covmat=CM)
myPCA
Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4 
1.7083611 0.9560494 0.3830886 0.1439265 

Вы получите тот же ответ в любом случае. Если вы хотите загрузки, они хранятся в структуре myPCA.

myPCA$loadings

Loadings:
             Comp.1 Comp.2 Comp.3 Comp.4
Sepal.Length  0.521  0.377  0.720  0.261
Sepal.Width  -0.269  0.923 -0.244 -0.124
Petal.Length  0.580        -0.142 -0.801
Petal.Width   0.565        -0.634  0.524

               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...