Usando estes dados:
head(USArrests)
nrow(USArrests)
Eu posso fazer um PCA da seguinte maneira:
plot(USArrests)
otherPCA <- princomp(USArrests)
Eu posso obter os novos componentes em
otherPCA$scores
ea proporção de variância explicada pelos componentes com
summary(otherPCA)
Mas e se eu quiser saber quais variáveis são explicadas principalmente por quais componentes principais? E vice-versa: por exemplo, PC1 ou PC2 é explicado principalmente por murder
? Como posso fazer isso?
Posso dizer, por exemplo, que PC1 é 80% explicado por murder
ou assault
?
Acho que as cargas me ajudam aqui, mas mostram a direcionalidade e não a variação explicada como eu a entendo, por exemplo
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
fonte
fonte
Respostas:
Você está certo, as cargas podem ajudá-lo aqui. Eles podem ser usados para calcular a correlação entre as variáveis e os principais componentes. Além disso, a soma das cargas quadradas de uma variável sobre todos os componentes principais é igual a 1. Portanto, as cargas quadradas informam a proporção de variação de uma variável explicada por um componente principal.
O problema com o princomp é que ele mostra apenas as cargas "muito altas". Mas como os carregamentos são apenas os autovetores da matriz de covariância, é possível obter todos os carregamentos usando o
eigen
comando em R:Agora, você tem as informações desejadas na matriz
explvar
.fonte
assault
ouurban pop
poderíamos fazer isso? parcialmente confuso porque existe apenas uma correlação presente na matriz paraassault
Eu acho que a resposta aceita pode ser perigosamente enganosa (-1). Há pelo menos quatro perguntas diferentes misturadas no OP. Vou considerá-los um após o outro.
Além disso, se o PCA for feito em covariâncias (e não em correlações), os carregamentos também fornecerão covariâncias, não correlações. Para obter correlações, é necessário calculá-las manualmente, seguindo o PCA. [A resposta atualmente aceita não é clara sobre isso.]
Como os PCs são ortogonais (isto é, não correlacionados), pode-se simplesmente somar individuaisr2 R2
Como selecionar um subconjunto explicando determinada quantidade de variação, foi sugerido por @FrankHarrell (+1).
fonte
fonte
Os dados de detenções nos EUA empacotados com R são apenas um exemplo aqui, mas observo que os cálculos de carregamento na pergunta vêm de um PCA do matriz de covariância . Isso é algo entre arbitrário e sem sentido, pois as variáveis são medidas em diferentes escalas.
A população urbana parece um percentual. A Califórnia é 91% e mais alta.
As três variáveis criminais parecem ser o número de detenções por crimes expressos em relação ao tamanho da população (presumivelmente por algum período). Presumivelmente, está documentado em algum lugar, sejam prisões por 1.000 ou 10000 ou o que for.
A média da variável de assalto nas unidades fornecidas é de cerca de 171 e o assassinato médio é de 8. Portanto, a explicação de suas cargas é que, em grande parte, o padrão é um artefato: depende da variabilidade muito diferente das variáveis.
Portanto, embora haja sentido nos dados de que há muito mais detenções por agressões do que por assassinatos etc., esse fato conhecido (ou não surpreendente) domina a análise.
Isso mostra que, como em qualquer outro lugar nas estatísticas, você precisa pensar no que está fazendo em um PCA.
Se você levar isso adiante:
Eu diria que a porcentagem urbana é melhor deixada de fora da análise. Não é crime ser urbano; é claro que pode servir como proxy para variáveis que influenciam o crime.
Um PCA baseado em uma matriz de correlação faria mais sentido na minha opinião. Outra possibilidade é trabalhar com logaritmos de taxas de parada, e não taxas de parada (todos os valores são positivos; veja abaixo).
Nota: a resposta de @ random_guy usa deliberadamente a matriz de covariância.
Aqui estão algumas estatísticas resumidas. Eu usei Stata, mas isso é imaterial.
fonte