Que diferença faz a centralização (ou remoção do significado) de seus dados para o PCA? Ouvi dizer que isso facilita a matemática ou impede que o primeiro PC seja dominado pelos meios das variáveis, mas sinto que ainda não fui capaz de entender o conceito com firmeza.
Por exemplo, a principal resposta aqui Como a centralização dos dados se livra da interceptação na regressão e no PCA? descreve como a não centralização puxaria o primeiro PCA através da origem, em vez do eixo principal da nuvem de pontos. Com base no meu entendimento de como os PCs são obtidos a partir dos vetores próprios da matriz de covariâncias, não consigo entender por que isso aconteceria.
Além disso, meus próprios cálculos com e sem centralização parecem fazer pouco sentido.
Considere as flores setosa no iris
conjunto de dados em R. Eu calculei os vetores próprios e os valores próprios da matriz de covariância da amostra da seguinte maneira.
data(iris)
df <- iris[iris$Species=='setosa',1:4]
e <- eigen(cov(df))
> e
$values
[1] 0.236455690 0.036918732 0.026796399 0.009033261
$vectors
[,1] [,2] [,3] [,4]
[1,] -0.66907840 0.5978840 0.4399628 -0.03607712
[2,] -0.73414783 -0.6206734 -0.2746075 -0.01955027
[3,] -0.09654390 0.4900556 -0.8324495 -0.23990129
[4,] -0.06356359 0.1309379 -0.1950675 0.96992969
Se eu centralizar o conjunto de dados primeiro, obtenho exatamente os mesmos resultados. Isso parece bastante óbvio, uma vez que a centralização não altera a matriz de covariância.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
A prcomp
função resulta exatamente nessa combinação de valor próprio e vetor próprio, para o conjunto de dados centralizado e não centralizado.
p<-prcomp(df)
p.centered <- prcomp(df.centered)
Standard deviations:
[1] 0.48626710 0.19214248 0.16369606 0.09504347
Rotation:
PC1 PC2 PC3 PC4
Sepal.Length -0.66907840 0.5978840 0.4399628 -0.03607712
Sepal.Width -0.73414783 -0.6206734 -0.2746075 -0.01955027
Petal.Length -0.09654390 0.4900556 -0.8324495 -0.23990129
Petal.Width -0.06356359 0.1309379 -0.1950675 0.96992969
No entanto, a prcomp
função tem a opção padrão center = TRUE
. Desativar esta opção resulta nos seguintes PCs para os dados não centrados ( p.centered
permanece o mesmo quando center
definido como falso):
p.uncentered <- prcomp(df,center=F)
> p.uncentered
Standard deviations:
[1] 6.32674700 0.22455945 0.16369617 0.09766703
Rotation:
PC1 PC2 PC3 PC4
Sepal.Length -0.8010073 0.40303704 0.4410167 0.03811461
Sepal.Width -0.5498408 -0.78739486 -0.2753323 -0.04331888
Petal.Length -0.2334487 0.46456598 -0.8317440 -0.19463332
Petal.Width -0.0395488 0.04182015 -0.1946750 0.97917752
Por que isso é diferente dos meus próprios cálculos de vetor próprio na matriz de covariância dos dados não centrados? Isso tem a ver com o cálculo? Já mencionei que prcomp
usa algo chamado método SVD em vez da decomposição de autovalor para calcular os PCs. A função princomp
usa o último, mas seus resultados são idênticos a prcomp
. Meu problema está relacionado à resposta que descrevi na parte superior desta postagem?
EDIT: O problema foi resolvido pelo útil @ttnphns. Veja seu comentário abaixo, sobre esta questão: O que significa calcular vetores próprios de uma matriz de covariância se os dados não foram centralizados primeiro? e nesta resposta: https://stats.stackexchange.com/a/22520/3277 . Em resumo: uma matriz de covariância já implica implicitamente a centralização dos dados. O PCA usa SVD ou composição automática dos dados centralizados , e a matriz de covariância é então igual a .
through the origin, rather than the main axis of the point cloud
. O PCA sempre perfura a origem. Se os dados foram centralizados, origem = centróide.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Por favor, leia os comentários na resposta para a qual você vincula. Covariâncias implicam centralização de dados, PCA "em covariâncias" = PCA em dados centralizados. Se você não centralizar as variáveis originaisX
, o PCA com base nesses dados será = PCA naX'X/n [or n-1]
matriz. Consulte também uma visão geral importante: stats.stackexchange.com/a/22520/3277 .