Warum liefern Eigen- und Svd-Zerlegungen einer Kovarianzmatrix, die auf spärlichen Daten basieren, unterschiedliche Ergebnisse?

12

Ich versuche, eine Kovarianzmatrix zu zerlegen, die auf einem dünn besetzten Datensatz basiert. Ich bemerke, dass die Summe von Lambda (erklärte Varianz), wie sie mit berechnet svdwird, mit zunehmend unsteten Daten verstärkt wird. Ohne Lücken, svdund eigendie gleichen Ergebnisse yeild.

Dies scheint bei einer eigenZersetzung nicht zu passieren . Ich hatte mich für svdLambda entschieden , weil die Lambda-Werte immer positiv sind, aber diese Tendenz ist besorgniserregend. Gibt es eine Art von Korrektur, die angewendet werden muss, oder sollte ich svdfür ein solches Problem ganz vermeiden .

###Make complete and gappy data set
set.seed(1)
x <- 1:100
y <- 1:100
grd <- expand.grid(x=x, y=y)

#complete data
z <- matrix(runif(dim(grd)[1]), length(x), length(y))
image(x,y,z, col=rainbow(100))

#gappy data
zg <- replace(z, sample(seq(z), length(z)*0.5), NaN)
image(x,y,zg, col=rainbow(100))


###Covariance matrix decomposition
#complete data
C <- cov(z, use="pair")
E <- eigen(C)
S <- svd(C)

sum(E$values)
sum(S$d)
sum(diag(C))


#gappy data (50%)
Cg <- cov(zg, use="pair")
Eg <- eigen(Cg)
Sg <- svd(Cg)

sum(Eg$values)
sum(Sg$d)
sum(diag(Cg))



###Illustration of amplification of Lambda
set.seed(1)
frac <- seq(0,0.5,0.1)
E.lambda <- list()
S.lambda <- list()
for(i in seq(frac)){
    zi <- z
    NA.pos <- sample(seq(z), length(z)*frac[i])
    if(length(NA.pos) > 0){
        zi <- replace(z, NA.pos, NaN)
    }
    Ci <- cov(zi, use="pair")
    E.lambda[[i]] <- eigen(Ci)$values
	S.lambda[[i]] <- svd(Ci)$d
}


x11(width=10, height=5)
par(mfcol=c(1,2))
YLIM <- range(c(sapply(E.lambda, range), sapply(S.lambda, range)))

#eigen
for(i in seq(E.lambda)){
    if(i == 1) plot(E.lambda[[i]], t="n", ylim=YLIM, ylab="lambda", xlab="", main="Eigen Decomposition")
    lines(E.lambda[[i]], col=i, lty=1)
}
abline(h=0, col=8, lty=2)
legend("topright", legend=frac, lty=1, col=1:length(frac), title="fraction gaps")

    #svd
for(i in seq(S.lambda)){
    if(i == 1) plot(S.lambda[[i]], t="n", ylim=YLIM, ylab="lambda", xlab="", main="Singular Value Decomposition")
    lines(S.lambda[[i]], col=i, lty=1)
}
abline(h=0, col=8, lty=2)
legend("topright", legend=frac, lty=1, col=1:length(frac), title="fraction gaps")

Bildbeschreibung hier eingeben

Marc in der Kiste
quelle
Es tut mir leid, dass ich Ihrem Code nicht folgen kann (weiß nicht, R), aber hier sind ein oder zwei Begriffe. Negative Eigenwerte können bei der Eigenzerlegung einer cov auftreten. Matrix, wenn die Rohdaten viele fehlende Werte hatten und diese bei der Berechnung der cov paarweise gelöscht wurden. SVD einer solchen Matrix wird diese negativen Eigenwerte (irreführend) als positiv melden. Ihre Bilder zeigen, dass sich sowohl Eigen- als auch Svd-Zerlegungen ähnlich (wenn nicht genau gleich) verhalten, abgesehen davon, dass nur negative Werte unterschieden werden.
TTNPHNS
1
PS Ich hoffe, Sie haben mich verstanden: Die Summe der Eigenwerte muss gleich der Kurve (diagonale Summe) der cov sein. Matrix. SVD ist jedoch "blind" für die Tatsache, dass einige Eigenwerte negativ sein können. SVD wird selten zur Zersetzung von Nicht-Gramm-Cov verwendet. Matrix, wird normalerweise entweder mit wissentlich grammatikalischer (positiv semidefinit) Matrix oder mit Rohdaten verwendet
ttnphns 20.08.12
1
@ttnphns - Vielen Dank für Ihren Einblick. Ich denke, ich wäre nicht so besorgt über das Ergebnis von, svdwenn es nicht die unterschiedliche Form der Eigenwerte gäbe. Das Ergebnis ist offensichtlich, dass den nachgestellten Eigenwerten mehr Bedeutung beigemessen wird, als es sollte.
Marc in der Box

Antworten:

4

Sie müssen die Summe des Absolutwerts der Eigenwerte, dh der Summe (abs (z. B. $ -Werte)), erstellen und mit der Summe der Singularwerte vergleichen. Sie würden gleich sein.

-1

Der Beweis für die Umkehrung dieses schönen Theorems erschien in der Algebra der Hyperboloide der Revolution, Javier F. Cabrera, Lineare Algebra und ihre Anwendungen, Princeton University (jetzt bei Rutgers).

Eine andere Möglichkeit, dies zu begründen, ist die Tatsache, dass sqrt (eigen (t (Cg)% *% Cg)) gleich den Singularwerten von Cg ist. Wenn die Eigenwerte jedoch negativ sind, müssen die Daten in einer hermitischen Form dargestellt werden, wobei die komplexe Ebene berücksichtigt wird, was in der ursprünglichen Formulierung übersehen wurde, dh die Daten, die durch die symmetrische Quadratwurzel der Matrix mit negativem Eigen gebildet werden Werte hätten komplexe Einträge.

Leichenwagen
quelle
1
vielen dank für diese erklärung. Ich war mir der Beziehung zwischen Eigen und Svd bewusst, wusste aber nicht, dass sie angesichts der oben erwähnten Unterschiede bei der Zerlegung der ursprünglichen Matrix immer noch zusammenhängen würden. Nur neugierig - soweit ich das beurteilen kann, ergibt eine Eigenzerlegung negative Werte, wenn eine Matrix nicht "positiv bestimmt" ist. Ist dies bei allen Kovarianzmatrizen der Fall, die auf Gappy-Daten basieren?
Marc in der Box
1
Marc, die positive Bestimmtheit einer reellen symmetrischen Matrix ist gleichbedeutend mit allen positiven Eigenwerten. Es gibt keine enge Beziehung zu "gappy data", was bedeutet, dass es sich um spärliche Matrizen mit vielen Null-Einträgen handelt. Immerhin sind die Diagonalen, die ihre Eigenwerte als Einträge aufweisen, die dünnsten unter den nichtsingulären Matrizen (symmetrisch oder nicht).
whuber
@whuber - danke für deinen Kommentar. In diesem Fall interpretiere ich "gappy" anders als "spärlich", da die Nichtwerte NaNs und nicht 0 (Null) sind. Somit werden die Kovarianzwerte durch die Anzahl der gemeinsamen Werte skaliert (dh durch n-1 geteilt). Insofern glaube ich nicht, dass die Kovarianzmatrix tatsächlich Nullen enthielt.
Marc in der Box
1
Die Kovarianzmatrix anhand solcher fehlenden Daten abzuschätzen, ist eine Herausforderung: Ich habe vor langer Zeit eine ähnliche Frage gestellt und einige anregende Antworten erhalten.
whuber
Ich habe hier eine zusätzliche Frage gestellt, die mein Interesse an dem Thema für die Verwendung in der empirischen Orthogonalfunktionsanalyse (EOF) erläutert
Marc in the box