PCA в R с помощью prcomp

#r

#r

Вопрос:

Я пытаюсь вычислить индекс с помощью PCA. Я использую ‘mtcars’ в качестве своего набора данных. Это мой код:

  pca_mt<- prcomp(mtcars[,c(1:7,10,11)], center = TRUE,scale. = TRUE)
 

Как мне получить веса для каждой переменной, чтобы суммировать их для вычисления индекса?
Буду признателен, если кто-нибудь сможет объяснить, о чем
pca_mt$rotation , pca_mt$x являются.

Комментарии:

1. Взгляните на prcomp

Ответ №1:

Может быть, это поможет вам лучше понять pca_mt$rotation , что pca_mt$x ,:

 data <- mtcars[,c(1:7,10,11)]
pca_mt<- prcomp(data, center = F,scale. = F)
sum(data[1,] * pca_mt$rotation[,1]) == pca_mt$x[1,1]
[1] TRUE
 

Обратите внимание, что это работает только потому center=F , что и scale.=F .

Для дальнейшего чтения я рекомендую https://builtin.com/data-science/step-step-explanation-principal-component-analysis чтобы получить первое представление о том, что такое PCA.

Итак, чтобы узнать, насколько сильно разница может быть объяснена с помощью компонентов PCA, вы можете использовать

 summary(pca_mt)
Importance of components:
                            PC1      PC2      PC3     PC4     PC5     PC6    PC7    PC8    PC9
Standard deviation     310.1169 40.88309 15.83774 2.12821 0.99854 0.74271 0.4412 0.2913 0.2168
Proportion of Variance   0.9803  0.01704  0.00256 0.00005 0.00001 0.00001 0.0000 0.0000 0.0000
Cumulative Proportion    0.9803  0.99738  0.99993 0.99998 0.99999 1.00000 1.0000 1.0000 1.0000
 

Первый компонент объясняет 98,03% дисперсии в данных, следующий (98,03%-99,738%) и так далее. Итак, используя первый компонент, вы можете объяснить почти все различия в ваших данных.

Комментарии:

1. Я понимаю. Поскольку PC1 объясняет 98,03%, я могу pca_mt $ вращение PC1 в качестве моих весов, верно? Я прочитал с сайта, что квадрат вращения — это вес. Спасибо.

2. Я не уверен, что вы подразумеваете под «весами». Вы хотите сгенерировать индекс, указывающий, какая переменная наиболее важна для / внутри PC1? Я думаю, тогда вы можете возвести вращение в квадрат [,1] (я предполагаю, что center = T, scale = T должны быть установлены в вашем анализе, чтобы избежать проблем с масштабированием).

3. Я пытаюсь найти вес, чтобы я мог умножить его на свой необработанный набор данных и суммировать их в индекс. Но я видел другой комментарий о том, что мы должны выбрать PC1 из pca_mt $ x в качестве индекса