¿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 )
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 .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.Respuestas:
Y tiene razón al observar que esta no es una formulación muy precisa.
entonces centrar es muy importante y tiene el efecto descrito e ilustrado por @ttnphns en ¿Cómo se elimina la intercepción en la regresión y PCA al centrar los datos?
Puede parecer extraño incluso mencionar este procedimiento "extraño", sin embargo, considere que la PCA se puede realizar de manera muy conveniente a través de la descomposición de valores singulares (SVD) de la matriz de datos misma. Describo esto en detalle aquí: Relación entre SVD y PCA. ¿Cómo usar SVD para realizar PCA? En este caso el procedimiento es el siguiente:X
Si está centrado, esto es equivalente a la PCA estándar realizada a través de una matriz de covarianza. Pero si no, entonces es equivalente a la PCA "no centrada" como se describió anteriormente. Dado que SVD es una forma muy común y muy conveniente de realizar PCA, en la práctica puede ser muy importante recordar centrar los datos antes de llamar a la función. Ciertamente tuve muchos errores debido a que olvidé hacerlo.X
svd
fuente
X'X/(n-1)
y no de la matriz SSCPX'X
, sería en el ejemplo svd, que muestra la equivalencia, descomponer enX/sqrt(n-1)
lugar deX
(como habla actualmente). [Por supuesto, la diferencia está solo en la parte de la escala (valores propios) no en los vectores propios, pero creo que es mejor didácticamente.] Mi segundo punto sería recordar que tan pronto como el centradoX
no tenga lugar, la corrección de Bessel sen-1
vuelve innecesaria,n
Es bienvenido.