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 / 2uich ich, i = 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)XUD V′UVDsvd
R
und 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 R
der svd
Prozedur 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
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.u11uich ju21( 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( uich j, uich′j′)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 R
SVD-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 R
Code 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=".")