¿Qué diferencia hace el centrado (o de-significado) de sus datos para PCA? He oído que facilita las matemáticas o que evita que la primera PC esté dominada por los medios de las variables, pero siento que todavía no he podido comprender el concepto con firmeza.
Por ejemplo, la respuesta principal aquí ¿Cómo se centra el centrado de los datos en deshacerse de la intercepción en regresión y PCA? describe cómo el no centrar atraería al primer PCA a través del origen, en lugar del eje principal de la nube de puntos. Según mi comprensión de cómo se obtienen las PC de los vectores propios de la matriz de covarianza, no puedo entender por qué sucedería esto.
Además, mis propios cálculos con y sin centrado parecen tener poco sentido.
Considere las flores setosa en el iris
conjunto de datos en R. Calculé los vectores propios y los valores propios de la matriz de covarianza de la muestra de la siguiente manera.
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
Si centro el conjunto de datos primero, obtengo exactamente los mismos resultados. Esto parece bastante obvio, ya que el centrado no cambia la matriz de covarianza en absoluto.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
La prcomp
función da como resultado exactamente esta combinación de valor propio-vector propio, tanto para el conjunto de datos centrado como no centrado.
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
Sin embargo, la prcomp
función tiene la opción predeterminada center = TRUE
. La desactivación de esta opción da como resultado las siguientes PC para los datos no centrados ( p.centered
permanece igual cuando center
se establece en 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 qué es diferente de mis propios cálculos de vectores propios en la matriz de covarianza de los datos no centrados? ¿Tiene que ver con el cálculo? He visto mencionar que prcomp
usa algo llamado método SVD en lugar de la descomposición de valores propios para calcular las PC. La función princomp
usa este último, pero sus resultados son idénticos a prcomp
. ¿Mi problema se relaciona con la respuesta que describí al principio de esta publicación?
EDITAR: El problema fue resuelto por los útiles @ttnphns. Vea su comentario a continuación, sobre esta pregunta: ¿Qué significa calcular vectores propios de una matriz de covarianza si los datos no se centraron primero? y en esta respuesta: https://stats.stackexchange.com/a/22520/3277 . En resumen: una matriz de covarianza implícitamente implica centrar los datos ya. PCA usa SVD o descomposición propia de los datos centrados , y la matriz de covarianza es entonces igual a .X ′ X / ( n - 1 )
through the origin, rather than the main axis of the point cloud
. PCA siempre perfora el origen. Si los datos estuvieran centrados, origen = el centroide.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Lea los comentarios en la respuesta a la que se vincula. Las covarianzas implican el centrado de datos, PCA "en covarianzas" = PCA en datos centrados. Si no centra las variables originalesX
, la PCA basada en dichos datos será = PCA en laX'X/n [or n-1]
matriz. Consulte también información general importante: stats.stackexchange.com/a/22520/3277 .