Qual è la differenza nel centrare (o decifrare) i tuoi dati per PCA? Ho sentito che semplifica la matematica o che impedisce al primo PC di essere dominato dai mezzi delle variabili, ma mi sento come se non fossi ancora riuscito a cogliere fermamente il concetto.
Ad esempio, la risposta principale qui In che modo il centraggio dei dati elimina l'intercettazione in regressione e PCA? descrive come il non centraggio trascinerebbe il primo PCA attraverso l'origine, piuttosto che l'asse principale della nuvola di punti. Sulla base della mia comprensione di come i PC sono ottenuti dagli autovettori della matrice di covarianza, non riesco a capire perché ciò accada.
Inoltre, i miei calcoli con e senza centratura sembrano avere poco senso.
Considera i fiori di setosa nel irisset di dati in R. Ho calcolato gli autovettori e gli autovalori della matrice di covarianza del campione come segue.
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 centro prima il set di dati, ottengo esattamente gli stessi risultati. Ciò sembra abbastanza ovvio, poiché il centraggio non cambia affatto la matrice di covarianza.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
La prcompfunzione si traduce esattamente in questa combinazione autovalore-autovettore, sia per il set di dati centrato che non centrato.
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
Tuttavia, la prcompfunzione ha l'opzione predefinita center = TRUE. La disabilitazione di questa opzione comporta i seguenti PC per i dati non centrati ( p.centeredrimane lo stesso quando centerè impostato su false):
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
Perché è diverso dai miei calcoli di autovettori sulla matrice di covarianza dei dati non centrati? Ha a che fare con il calcolo? Ho visto menzionato che prcomputilizza qualcosa chiamato il metodo SVD piuttosto che la decomposizione degli autovalori per calcolare il PC. La funzione princomputilizza quest'ultima, ma i suoi risultati sono identici a prcomp. Il mio problema riguarda la risposta che ho descritto all'inizio di questo post?
EDIT: il problema è stato risolto dall'utile @ttnphns. Vedi il suo commento qui sotto, su questa domanda: cosa significa calcolare gli autovettori di una matrice di covarianza se i dati non sono stati centrati per primi? e in questa risposta: https://stats.stackexchange.com/a/22520/3277 . In breve: una matrice di covarianza implica implicitamente già il centraggio dei dati. PCA utilizza la composizione SVD o eigend dei dati centrati e la matrice di covarianza è quindi uguale a .
through the origin, rather than the main axis of the point cloud. PCA perfora sempre l'origine. Se i dati erano centrati, origine = centroide.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...Si prega di leggere i commenti nella risposta a cui si collega. Le covarianze implicano la centratura dei dati, l'APC "sulle covarianze" = l'APC sui dati centrati. Se non centrate le variabili originaliX, il PCA basato su tali dati sarà = PCA sullaX'X/n [or n-1]matrice. Vedi anche una panoramica importante: stats.stackexchange.com/a/22520/3277 .