Seltsame Korrelationen in den SVD-Ergebnissen von Zufallsdaten; Haben sie eine mathematische Erklärung oder handelt es sich um einen LAPACK-Fehler?

21

Ich beobachte ein sehr seltsames Verhalten beim SVD-Ergebnis von Zufallsdaten, das ich sowohl in Matlab als auch in R reproduzieren kann. Es scheint ein numerisches Problem in der LAPACK-Bibliothek zu sein. ist es?

Ich ziehe Proben aus dem dimensionalen Gaußschen mit dem Mittelwert Null und der Identitätskovarianz: . Ich setze sie in eine Datenmatrix . (Ich kann wahlweise oder nicht, dies hat keinen Einfluss auf Folgendes.) Dann führe ich eine Singularwertzerlegung (SVD) durch, um . Nehmen wir zwei bestimmte Elemente von , z. B. und , und fragen Sie, wie sie in verschiedenen Zügen von . Ich würde das erwarten, wenn die Nummern=1000k=2XN(0,I)1000×2XXX=USVUU11U22XNrep von Ziehungen ist ziemlich groß, dann sollten alle diese Korrelationen um Null liegen (dh Populationskorrelationen sollten Null sein und Stichprobenkorrelationen werden klein sein).

Ich beobachte jedoch einige seltsam starke Korrelationen (um ) zwischen , , und und nur zwischen diesen Elementen. Alle anderen Elementpaare weisen erwartungsgemäß Korrelationen um Null auf. So sieht die Korrelationsmatrix für die "oberen" Elemente von aus (die ersten Elemente der ersten Spalte, dann die ersten Elemente der zweiten Spalte):±0.2U11U12U21U2220U1010

SVD seltsame Korrelationen

Beachten Sie seltsam hohe Werte in den oberen linken Ecken jedes Quadranten.

Es war dieser Kommentar von @ whuber, der mich auf diesen Effekt aufmerksam machte. @whuber argumentierte, dass PC1 und PC2 nicht unabhängig voneinander sind und präsentierte diese starke Korrelation als Beweis dafür. Mein Eindruck ist jedoch, dass er versehentlich einen numerischen Fehler in der LAPACK-Bibliothek entdeckt hat. Was geht hier vor sich?

Hier ist der R-Code von @ whuber:

stat <- function(x) {u <- svd(x)$u; c(u[1,1], u[2, 2])};
Sigma <- matrix(c(1,0,0,1), 2);
sim <- t(replicate(1e3, stat(MASS::mvrnorm(10, c(0,0), Sigma))));
cor.test(sim[,1], sim[,2]);

Hier ist mein Matlab-Code:

clear all
rng(7)

n = 1000;     %// Number of variables
k = 2;        %// Number of observations
Nrep = 1000;  %// Number of iterations (draws)

for rep = 1:Nrep
    X = randn(n,k);
    %// X = bsxfun(@minus, X, mean(X));
    [U,S,V] = svd(X,0);

    t(rep,:) = [U(1:10,1)' U(1:10,2)'];
end

figure
imagesc(corr(t), [-.5 .5])
axis square
hold on
plot(xlim, [10.5 10.5], 'k')
plot([10.5 10.5], ylim, 'k')
Amöbe sagt Reinstate Monica
quelle
Wenn Sie n = 4 und k = 3 verwenden, sehen Sie auch die Korrelationen.
Aksakal
@Aksakal: Ja, in der Tat, danke. Ich habe bearbeitet, um den behaupteten Unterschied zwischen k = 2 und k = 3 zu entfernen.
Amöbe sagt Reinstate Monica

Antworten:

23

Dies ist kein Fehler.

Wie wir (ausführlich) in den Kommentaren untersucht haben, geschehen zwei Dinge. Zum einen müssen die Spalten von die SVD-Anforderungen erfüllen: Jede muss eine Einheitslänge haben und zu allen anderen orthogonal sein. Betrachtet man als eine Zufallsvariable, die mit einem bestimmten SVD-Algorithmus aus einer Zufallsmatrix , so stellt man fest, dass diese funktional unabhängigen Nebenbedingungen statistische Abhängigkeiten zwischen den Spalten von erzeugen .UUXk(k+1)/2U

Diese Abhängigkeiten können auf eine mehr oder weniger stark aufgedeckt werden , indem die Korrelationen zwischen den Komponenten des Studierens , sondern ein zweites Phänomen entsteht : die SVD - Lösung nicht eindeutig ist. Zumindest kann jede Spalte von unabhängig negiert werden, was mindestens verschiedene Lösungen mit Spalten ergibt . Starke Korrelationen (größer als ) können durch geeignete Änderung der Vorzeichen der Spalten induziert werden. (Ein Weg, dies zu tun, ist in meinem ersten Kommentar zu Amoebas Antwort in diesem Thread angegeben: Ich erzwinge alleUU 2 k k 1 / 2 u i i , i = 1 , ... , kU2kk1/2uichich,ich=1,,kdasselbe Vorzeichen haben und alle mit gleicher Wahrscheinlichkeit negativ oder alle positiv machen.) Andererseits können alle Korrelationen verschwinden, indem die Vorzeichen zufällig, unabhängig voneinander und mit gleicher Wahrscheinlichkeit ausgewählt werden. (Ich gebe ein Beispiel unten im Abschnitt "Bearbeiten".)

Mit Vorsicht können wir beide Phänomene teilweise erkennen, wenn wir Streudiagramm-Matrizen der Komponenten von lesen . Bestimmte Merkmale - wie das Auftreten von Punkten, die in genau definierten Kreisregionen nahezu gleichmäßig verteilt sind - lassen auf mangelnde Unabhängigkeit schließen. Andere, wie zum Beispiel Streudiagramme, die eindeutige Korrelationen ungleich Null zeigen, hängen offensichtlich von den im Algorithmus getroffenen Entscheidungen ab - aber solche Entscheidungen sind nur möglich, weil es an erster Stelle an Unabhängigkeit mangelt.U

Der ultimative Test für einen Zerlegungsalgorithmus wie SVD (oder Cholesky, LR, LU usw.) ist, ob er das tut, was er behauptet. Unter diesen Umständen genügt es zu prüfen , ob bis zum erwarteten Gleitkommafehler durch das Produkt wiederhergestellt wird, wenn SVD das Dreifache der Matrizen zurückgibt . dass die Spalten von und von orthonormal sind; und dass diagonal ist, seine diagonalen Elemente nicht negativ sind und in absteigender Reihenfolge angeordnet sind. Ich habe solche Tests auf den Algorithmus in angewendet(U,D,V)XUDVUVDsvdRund habe es nie für falsch befunden. Obwohl dies keine Zusicherung ist, ist es völlig richtig, dass solche Erfahrungen - von denen ich glaube, dass sie von sehr vielen Menschen geteilt werden - darauf hindeuten, dass jeder Fehler eine außergewöhnliche Art von Input erfordert, um sich zu manifestieren.

Was folgt, ist eine detailliertere Analyse der in der Frage aufgeworfenen Punkte.


Mit Rder svdProzedur von 's können Sie zunächst überprüfen, ob die Korrelationen zwischen den Koeffizienten von zunehmendem schwächer werden, aber immer noch ungleich Null sind. Wenn Sie einfach eine größere Simulation durchführen würden, würden Sie feststellen, dass diese signifikant sind. (Wenn , sollten 50000 Iterationen ausreichen.) Entgegen der Behauptung in der Frage verschwinden die Korrelationen nicht "vollständig".kUk = 3k=3

Zweitens lässt sich dieses Phänomen besser untersuchen, indem man auf die Grundfrage der Unabhängigkeit der Koeffizienten zurückgeht. Obwohl die Korrelationen in den meisten Fällen gegen Null tendieren, ist der Mangel an Unabhängigkeit klar ersichtlich. Dies wird am deutlichsten durch die vollständige multivariate Verteilung der Koeffizienten des Studierens . Die Art der Verteilung zeigt sich bereits in kleinen Simulationen, in denen die Nicht-Null-Korrelationen (noch) nicht erfasst werden können. Untersuchen Sie beispielsweise eine Streudiagramm-Matrix der Koeffizienten. Um dies praktikabel zu machen, habe ich die Größe jedes simulierten Datensatzes auf und beibehalten , um Realisierungen der zu zeichnenU4k=210004×2 Matrix , wodurch eine Matrix erstellt wird. Hier ist die vollständige Streudiagramm-Matrix mit den Variablen, die nach ihrer Position in aufgelistet sind :U1000×8U

Zahl

Das der ersten Spalte zeigt einen interessanten Mangel an Unabhängigkeit zwischen und dem anderen : Sehen Sie sich beispielsweise an, wie der obere Quadrant des mit fast leer ist. oder untersuchen Sie die elliptisch nach oben geneigte Wolke, die die und die nach unten geneigte Wolke für das . Bei genauer Betrachtung zeigt sich ein deutlicher Mangel an Unabhängigkeit bei fast allen dieser Koeffizienten: Nur sehr wenige von ihnen sehen aus der Ferne unabhängig aus, obwohl die meisten von ihnen eine Korrelation nahe Null aufweisen.u11uichju21(u11,u22)(u21,u12)

(NB: Die meisten kreisförmigen Wolken sind Projektionen von einer Hypersphäre, die durch die Normalisierungsbedingung erzeugt wurden und die Summe der Quadrate aller Komponenten jeder Spalte zu einer Einheit zwingen.)

Scatterplot-Matrizen mit und weisen ähnliche Muster auf: Diese Phänomene sind weder auf , noch hängen sie von der Größe jedes simulierten Datensatzes ab. Sie werden nur schwieriger zu generieren und zu untersuchen.k=3k=4k=2

Die Erklärungen für diese Muster beziehen sich auf den Algorithmus, der verwendet wird, um bei der Singularwertzerlegung zu erhalten , aber wir wissen, dass solche Muster der Nichtunabhängigkeit durch die sehr definierenden Eigenschaften von existieren müssen : da jede aufeinanderfolgende Spalte (geometrisch) orthogonal zu der vorhergehenden ist Unter diesen Orthogonalitätsbedingungen bestehen funktionelle Abhängigkeiten zwischen den Koeffizienten, die sich dadurch in statistischen Abhängigkeiten zwischen den entsprechenden Zufallsvariablen niederschlagen.UUU


Bearbeiten

In Reaktion auf Kommentare ist es möglicherweise erwähnenswert, inwieweit diese Abhängigkeitsphänomene den zugrunde liegenden Algorithmus (zur Berechnung einer SVD) widerspiegeln und inwieweit sie der Art des Prozesses inhärent sind.

Die spezifischen Korrelationsmuster zwischen den Koeffizienten hängen in hohem Maße von willkürlichen Auswahlen ab, die vom SVD-Algorithmus getroffen werden, da die Lösung nicht eindeutig ist: Die Spalten von können immer unabhängig voneinander mit oder multipliziert werden . Es gibt keinen eigentlichen Weg, das Zeichen zu wählen. Wenn also zwei SVD-Algorithmen unterschiedliche (willkürliche oder sogar zufällige) Vorzeichenwahlen treffen, können sie zu unterschiedlichen Mustern von der . Wenn Sie dies sehen möchten, ersetzen Sie die Funktion im folgenden Code durchU-11(uichj,uichj)stat

stat <- function(x) {
  i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
  u <- svd(x[i, ])$u         # Perform SVD
  as.vector(u[order(i), ])   # Unpermute the rows of u
}

Diese ordnet die Beobachtungen zunächst nach dem Zufallsprinzip neu an x, führt eine SVD durch und wendet dann die umgekehrte Reihenfolge an u, um mit der ursprünglichen Beobachtungssequenz übereinzustimmen. Da der Effekt darin besteht, Mischungen aus reflektierten und gedrehten Versionen der ursprünglichen Streudiagramme zu bilden, sehen die Streudiagramme in der Matrix viel gleichmäßiger aus. Alle Beispielkorrelationen sind extrem nahe bei Null (konstruktionsbedingt sind die zugrunde liegenden Korrelationen genau Null). Dennoch wird der Mangel an Unabhängigkeit weiterhin offensichtlich sein (in den einheitlichen Kreisformen, die insbesondere zwischen und ).uich,juich,j

Das Fehlen von Daten in einigen Quadranten einiger der ursprünglichen Streudiagramme (siehe Abbildung oben) ergibt sich daraus, wie der RSVD-Algorithmus Vorzeichen für die Spalten auswählt.

An den Schlussfolgerungen ändert sich nichts. Da die zweite Spalte von orthogonal zur ersten ist, ist sie (als multivariate Zufallsvariable betrachtet) von der ersten abhängig (auch als multivariate Zufallsvariable betrachtet). Sie können nicht alle Komponenten einer Spalte von allen Komponenten der anderen unabhängig machen. Alles, was Sie tun können, ist, die Daten so zu betrachten, dass die Abhängigkeiten verschleiert werden - die Abhängigkeit bleibt jedoch bestehen.U


Hier wird der RCode aktualisiert , um die Fälle und einen Teil der Streudiagramm-Matrix zu zeichnen.k>2

k <- 2    # Number of variables
p <- 4    # Number of observations
n <- 1e3  # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")
whuber
quelle
3
Die Korrelation tritt zwischen den ersten Komponenten der Spalten von weil der SVD-Algorithmus so funktioniert. Dass die Zeilen von Gauß sind, spielt keine Rolle: Ich bin sicher, Sie haben bemerkt, dass die Koeffizienten von nicht Gauß sind. X UUXU
whuber
2
Übrigens habe ich gerade herausgefunden, dass durch einfaches Ersetzen svd(X,0)durch svds(X)in meinem Matlab-Code der Effekt verschwindet! Soweit ich weiß, verwenden diese beiden Funktionen unterschiedliche SVD-Algorithmen (beide sind LAPACK-Routinen, aber offensichtlich unterschiedliche). Ich weiß nicht, ob R eine ähnliche Funktion wie Matlab hat svds, aber ich frage mich, ob Sie immer noch behaupten werden, dass es sich um einen "echten" Effekt und nicht um ein numerisches Problem handelt.
Amöbe sagt Reinstate Monica
4
Meine Herren, warten Sie eine Minute. Warum sprichst du nicht vom Zeichen? Das Vorzeichen eines Eigenvektors ist grundsätzlich beliebig. Aber das Programm von svd weist es nicht zufällig zu, das Vorzeichen ist abhängig von der Implementierung von svd und von Daten. Wenn Sie nach dem Extrahieren Uzufällig entscheiden, ob jede ihrer Spalten unverändert bleiben oder das Vorzeichen ändern soll, verschwinden dann nicht die Korrelationen, von denen Sie sprechen?
ttnphns
2
@ttnphns Das ist richtig, wie in meiner Bearbeitung erläutert. Obwohl dadurch die Korrelationen verschwinden, gehen die Abhängigkeiten zwischen den Spalten von nicht verloren. (Die von mir bereitgestellte erweiterte Version entspricht einer zufälligen Änderung der Zeichen der Spalten.)Ustat
whuber
2
Ein kleiner Punkt (zu diesem großen Thread!) Die SVD erfordert nicht, dass die Elemente in der Diagonale von Sin einer bestimmten Reihenfolge sind; Es ist eine Frage der Bequemlichkeit. Andere Routinen garantieren dies (z. B. MATLABs svds), aber das ist keine allgemeine Anforderung. @amoeba: Betrachtet man svds(was von diesem problematischen Verhalten frei zu sein scheint), basiert die Berechnung darauf, dass zuerst die Eigenwerte berechnet werden (es werden also nicht die Standard- dgesdd/ dgesvdLAPACK-Routinen verwendet - ich vermute stark, dass es zuerst dsyevr/ verwendet dsyevx).
usεr11852 sagt Reinstate Monic
11

Diese Antwort enthält eine Replikation der Ergebnisse von @ whuber in Matlab sowie eine direkte Demonstration, dass die Korrelationen ein "Artefakt" dafür sind, wie die SVD-Implementierung das Vorzeichen für Komponenten auswählt.

In Anbetracht der langen Kette von möglicherweise verwirrenden Kommentaren möchte ich für die zukünftigen Leser betonen, dass ich mit Folgendem einverstanden bin:

  1. Im Rahmen dieser Diskussion sicherlich ist eine Zufallsvariable.U
  2. Spalten von müssen die Länge 1 haben . Dies bedeutet, dass die Elemente in jeder Spalte nicht unabhängig sind. ihre Quadrate summieren sich zu eins. Allerdings bedeutet dies nicht , irgendeine Wechselbeziehung zwischen U i 1 und U j 1 für i j und die Probe sollten Korrelation für große Anzahl winziger seine N r e p von Zufall zieht.U1Uich1Uj1ichjNrep
  3. Spalten von müssen orthogonal sein. Dies bedeutet, dass die Elemente aus verschiedenen Spalten nicht unabhängig sind. Ihr Skalarprodukt ist Null. Dies impliziert wiederum keine Korrelation zwischen U i 1 und U j 2 , und die Probenkorrelation sollte winzig sein.UUich1Uj2

Meine Frage war: Warum sehen wir hohe Korrelationen von wenn für eine große Anzahl zufälliger Ziehungen N r e p = 1000 gilt ?0,2Nrep=1000

Hier ist eine Replikation von @ whubers Beispiel mit , k = 2 und N r e p = 1000 in Matlab:n=4k=2Nrep=1000

SVD

Links die Korrelationsmatrix, rechts die Streudiagramme ähnlich wie bei @ whuber's. Die Übereinstimmung zwischen unseren Simulationen scheint perfekt zu sein.

Nun ordne ich, einem genialen Vorschlag von @ttnphns folgend, den Spalten von zufällige Vorzeichen zu , dh nach dieser Zeile:U

[U,S,V] = svd(X,0);

Ich füge die folgenden zwei Zeilen hinzu:

U(:,1) = U(:,1) * sign(randn(1));
U(:,2) = U(:,2) * sign(randn(1));

Hier ist das Ergebnis:

SVD mit zufälligen Vorzeichen

Alle Korrelationen verschwinden, genau wie ich es von Anfang an erwartet hatte !

11

UU

PS. Herzlichen Glückwunsch an @whuber, dass er heute 100.000 Punkte erreicht hat!

Amöbe sagt Reinstate Monica
quelle
statstat <- function(x) { u <- svd(x)$u; as.vector(sign(runif(1) - 1/2)*u %*% diag(sign(diag(u)))) }U(u11,u22,,ukk)UU
svdssvdUU
R±2/30,2
1
U
1
Intuitiv ist das fair. Sobald die erste Hauptachse im Raum definiert ist, wird der Rest pr. Achsen bekommen eingeschränkte Freiheit. Bei 2D-Daten ist der zweite (letzte) PC bis auf das Vorzeichen vollständig gebunden. Ich würde es lieber als Einschränkung bezeichnen, nicht als Abhängigkeit im statistischen Sinne.
TTNPHNS
0

xy

x2+y2=1

COv[x,y]=Veinr[xy]=E[x2y2]-E[xy]2

xy

Aksakal
quelle
k(k+1)/2UUDUUDk(k-1)/2
U1Unkn>kUnn=1000n=4x2+y2=1U
xUyx2+y2=1Cov(x,y)=0x=cos(θ)y=Sünde(θ)θ[0,2π)
UUichj01/nnn1/n=1
1
UXU11U21ρnρρρ=0
Amöbe sagt Reinstate Monica