Не знаю, почему eigen () дает векторы неправильного знака, а матрица загрузки - просто вектор - PullRequest
0 голосов
/ 09 марта 2019

Не знаю, почему eigen () дает векторы неправильного знака, а матрица загрузки - просто вектор

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

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

head (mydata)

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

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

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

имена столбцов (ii) <- c (" M "," P "," C "," E "," H "," F ") </p>

head (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

myEIG <- eigen (ii) </p>

myEIG $ values ​​

[1] 3.3670861 1.19417910.5070061 0.3718472 0.3131559 0.2467257

myEIG $ векторов

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

myPCA <- princomp (covmat = ii) </p>

head (myPCA)

$ sdev

   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5    Comp.6 
1.8349621 1.0927850 0.7120436 0.6097927 0.5596033 0.4967149 

$ загрузки

Загрузки:

  Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
M  0.368  0.510  0.267  0.728              
P  0.391  0.409  0.486 -0.665              
C  0.372  0.383 -0.832 -0.152              
E  0.432 -0.375               -0.743  0.341
H  0.422 -0.421                0.665  0.449
F  0.457 -0.329                      -0.824


               Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
SS loadings     1.000  1.000  1.000  1.000  1.000  1.000
Proportion Var  0.167  0.167  0.167  0.167  0.167  0.167
Cumulative Var  0.167  0.333  0.500  0.667  0.833  1.000

$ центр [1] NA NA NA NA NA NA

$ шкала

M P C E H F 
1 1 1 1 1 1 

$ n.obs [1] NA

$ очки NULL

сводка (myPCA) # дисперсия печатиприходитсядля важности компонентов:

                         Comp.1    Comp.2     Comp.3     Comp.4
Standard deviation     1.834962 1.0927850 0.71204360 0.60979272
Proportion of Variance 0.561181 0.1990299 0.08450101 0.06197453
Cumulative Proportion  0.561181 0.7602109 0.84471188 0.90668641

                           Comp.5     Comp.6
Standard deviation     0.55960331 0.49671489
Proportion of Variance 0.05219264 0.04112095
Cumulative Proportion  0.95887905 1.00000000

нагрузки (myPCA) # загрузки ПК

нагрузки:

  Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
M  0.368  0.510  0.267  0.728              
P  0.391  0.409  0.486 -0.665              
C  0.372  0.383 -0.832 -0.152              
E  0.432 -0.375               -0.743  0.341
H  0.422 -0.421                0.665  0.449
F  0.457 -0.329                      -0.824


               Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
SS loadings     1.000  1.000  1.000  1.000  1.000  1.000
Proportion Var  0.167  0.167  0.167  0.167  0.167  0.167
Cumulative Var  0.167  0.333  0.500  0.667  0.833  1.000

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

Буду очень признателен за любезную помощь!

1 Ответ

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

Если операция с функцией R или ее возвращаемым значением сбивает с толку, всегда сначала проверяйте файл справки.

help("princomp")

Там мы видим (среди прочего) следующее:

Стоимость:
«Princomp» возвращает список с классом «princomp», содержащий следующие компоненты:
...
нагрузки: матрица переменных нагрузок (т.е. матрица, столбцы которой
содержат собственные векторы) ....
...
Примечание:
Знаки столбцов нагрузок и баллов произвольны,
и так может отличаться между разными программами для PCA и даже
между различными сборками R: «fix_sign = TRUE» облегчает это.

Объяснение того, почему знаки являются произвольными, можно найти здесь или действительно легко можно понять из определения собственных значений и собственных векторов (см., Например, здесь ).

Относительно того, почему элемент loadings просто дает собственные векторы, это потому, что документация говорит, что это то, что он вернет! Однако, относительно того, следует ли вам использовать собственные векторы или собственные векторы, умноженные на квадратный корень из собственных значений, или можете ли вы назвать обе или только последние «нагрузки», исторически были некоторые взад и вперед или путаница в этом (см. этот перекрестный проверенный вопрос и его ответы для некоторого обсуждения по этому вопросу.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...