Используя эти данные:
head(USArrests)
nrow(USArrests)
Я могу сделать PCA следующим образом:
plot(USArrests)
otherPCA <- princomp(USArrests)
Я могу получить новые компоненты в
otherPCA$scores
и доля дисперсии объясняется компонентами с
summary(otherPCA)
Но что, если я хочу знать, какие переменные в основном объясняются какими основными компонентами? И наоборот: например, ПК1 или ПК2 в основном объясняются murder
? Как я могу это сделать?
Могу ли я сказать, например, что PC1 на 80% объясняется murder
или assault
?
Я думаю, что нагрузки помогают мне здесь, но они показывают направленность, а не дисперсию, объясненную, как я понимаю, например
otherPCA$loadings
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
Murder 0.995
Assault -0.995
UrbanPop -0.977 -0.201
Rape -0.201 0.974
r
pca
dimensionality-reduction
regression-strategies
user1320502
источник
источник
Ответы:
Вы правы, нагрузки могут помочь вам здесь. Они могут использоваться для вычисления корреляции между переменными и основными компонентами. Более того, сумма квадратов нагрузок одной переменной по всем основным компонентам равна 1. Следовательно, квадрат нагрузок сообщает вам долю дисперсии одной переменной, объясненную одним главным компонентом.
Проблема с princomp в том, что он показывает только «очень высокие» нагрузки. Но поскольку нагрузки являются только собственными векторами ковариационной матрицы, все нагрузки можно получить с помощью
eigen
команды в R:Теперь у вас есть нужная информация в матрице
explvar
.источник
assault
илиurban pop
мы могли бы сделать это? Частично запутано, потому что в матрице присутствует только одна корреляция дляassault
Я думаю, что принятый ответ может быть опасно вводящим в заблуждение (-1). В ОП есть как минимум четыре разных вопроса. Я буду рассматривать их один за другим.
Кроме того, если PCA выполняется на ковариациях (а не на корреляциях), то загрузки также дают ковариации, а не корреляции. Чтобы получить корреляции, нужно вычислить их вручную, следуя PCA. [В настоящее время принятый ответ неясен по этому поводу.]
Как выбрать подмножество, объясняющее данное количество отклонений, было предложено @FrankHarrell (+1).
источник
источник
Данные об арестах в США, связанные с R, являются лишь примером здесь, но я отмечаю, что расчеты нагрузок в вопросе происходят из PCA ковариационной матрицы . Это где-то между произвольным и бессмысленным, поскольку переменные измеряются в разных масштабах.
Городское население выглядит как процент. Калифорния составляет 91% и выше.
Три криминальных переменных, как представляется, представляют собой число арестов за преступления, выраженные по отношению к численности населения (предположительно, в течение некоторого периода времени). Предположительно это где-то задокументировано, будь то аресты на 1000, 10000 или что-то еще.
Среднее значение переменной нападения в данных единицах составляет около 171, а среднее убийство - около 8. Таким образом, объяснение ваших нагрузок состоит в том, что в значительной степени шаблон является артефактом: он зависит от очень различной изменчивости переменных.
Таким образом, хотя в данных есть смысл в том, что арестов за нападения гораздо больше, чем за убийства и т. Д., Этот известный (или неудивительный) факт доминирует в анализе.
Это показывает, что, как и везде в статистике, вы должны думать о том, что вы делаете на PCA.
Если вы берете это дальше:
Я бы сказал, что процент городского населения лучше оставить вне анализа. Быть городским - не преступление; это, конечно, может служить прокси для переменных, влияющих на преступность.
На мой взгляд, PCA, основанный на корреляционной матрице, имеет больше смысла. Другая возможность - работать с логарифмами числа арестов, а не с числом арестов (все значения положительные; см. Ниже).
Примечание. В ответе @ random_guy сознательно используется ковариационная матрица.
Вот некоторая сводная статистика. Я использовал Stata, но это совершенно несущественно.
источник