Ich möchte in der Lage sein, Korrelationsmatrizen mit positivem Semidefinit (PSD) effizient zu erzeugen. Meine Methode verlangsamt sich dramatisch, wenn ich die zu generierenden Matrizen vergrößere.
- Können Sie effiziente Lösungen vorschlagen? Wenn Sie Beispiele in Matlab kennen, wäre ich Ihnen sehr dankbar.
- Wie würden Sie beim Generieren einer PSD-Korrelationsmatrix die Parameter auswählen, um die zu generierenden Matrizen zu beschreiben? Eine durchschnittliche Korrelation, Standardabweichung von Korrelationen, Eigenwerte?
random-generation
correlation-matrix
Eduardas
quelle
quelle
Antworten:
Sie können es rückwärts machen: Jede Matrix (die Menge aller symmetrischen PSD-Matrizen) kann als zerlegt werden p × pC∈ Rp+ + p × p
OC= OTD O wobei eine orthonormale Matrix istO
Um , generieren Sie zuerst eine Zufallsbasis (wobei Zufallsvektoren sind, typischerweise in ). Verwenden Sie von dort den Gram-Schmidt-Orthogonalisierungsprozess, um( v 1 , . . . , V p ) v i ( - 1 , 1 ) ( u 1 , . . . . , U p ) = OO ( v1, . . . , vp) vich ( - 1 , 1 ) ( u1, . . . . , up) = O
Schließlich ist eine Diagonalmatrix, deren Elemente alle positiv sind (dies ist wiederum leicht zu erzeugen: Zufallszahlen erzeugen , quadrieren, sortieren und in die Diagonale einer Identität durch Matrix platzieren).p p pD p p p
quelle
Ein Artikel zur Generierung zufälliger Korrelationsmatrizen auf der Basis von Reben und einer Methode mit erweiterten Zwiebeln von Lewandowski, Kurowicka und Joe (LKJ), 2009, bietet eine einheitliche Behandlung und Darstellung der beiden effizienten Methoden zur Generierung zufälliger Korrelationsmatrizen. Beide Methoden ermöglichen die Erzeugung von Matrizen aus einer gleichmäßigen Verteilung in einem bestimmten, nachstehend definierten Sinne, sind einfach zu implementieren, schnell und haben den zusätzlichen Vorteil, dass sie amüsante Namen haben.
Eine reelle symmetrische Matrix mit der Größe mit Einsen auf der Diagonale hat eindeutige Elemente außerhalb der Diagonale und kann daher als Punkt in parametrisiert werden. . Jeder Punkt in diesem Raum entspricht einer symmetrischen Matrix, aber nicht alle von ihnen sind positiv-definit (wie Korrelationsmatrizen sein müssen). Korrelationsmatrizen bilden daher eine Teilmenge von (eigentlich eine zusammenhängende konvexe Teilmenge), und beide Methoden können Punkte aus einer gleichmäßigen Verteilung über diese Teilmenge erzeugen.d ( d - 1 ) / 2 R d ( d - 1 ) / 2 R d ( d - 1 ) / 2d×d d(d−1)/2 Rd(d−1)/2 Rd(d−1)/2
Ich werde meine eigene MATLAB-Implementierung jeder Methode bereitstellen und sie mit veranschaulichen .d=100
Zwiebelmethode
Die Zwiebelmethode stammt aus einer anderen Veröffentlichung (Lit. 3 in LKJ) und hat ihren Namen der Tatsache zu verdanken, dass die Korrelationsmatrizen beginnend mit Matrix und spaltenweise und zeilenweise wachsen. Die resultierende Verteilung ist gleichmäßig. Ich verstehe die Mathematik hinter der Methode nicht wirklich (und bevorzuge sowieso die zweite Methode), aber hier ist das Ergebnis:1×1
Hier und unter dem Titel jedes Unterplots werden der kleinste und der größte Eigenwert sowie die Determinante (Produkt aller Eigenwerte) angezeigt. Hier ist der Code:
Erweiterte Zwiebelmethode
LKJ modifizieren diese Methode geringfügig, um Korrelationsmatrizen aus einer Verteilung abtasten zu können, die proportional zu [ d e t istC [detC]η−1 η η=1 η=1,10,100,1000,10000,100000
Rebe-Methode
Weinbaumethode mit manueller Probenahme von Teilkorrelationen
Beachten Sie, dass in diesem Fall die Verteilung nicht garantiert permutationsinvariant ist, sodass ich Zeilen und Spalten nach der Generierung zusätzlich zufällig permutiere.
So sehen die Histogramme der nicht diagonalen Elemente für die obigen Matrizen aus (Varianz der Verteilung steigt monoton an):
Update: unter Verwendung von Zufallsfaktoren
Und der Code:
Hier ist der Umhüllungscode, der zum Generieren der Zahlen verwendet wird:
quelle
Je nach Anwendung erhalten Sie möglicherweise nicht die gewünschte Verteilung der Eigenwerte. Kwaks Antwort ist in dieser Hinsicht viel besser. Die Eigenwerte
X
dieses Code-Snippets sollten der Marchenko-Pastur-Verteilung folgen.Um die Korrelationsmatrizen von Aktien zu simulieren, möchten Sie vielleicht einen etwas anderen Ansatz:
quelle
quelle
Sie haben keine Verteilung für die Matrizen angegeben. Zwei gebräuchliche sind die Wishart- und die inverse Wishart-Verteilung. Die Bartlett-Zerlegung ergibt eine Cholesky-Faktorisierung einer zufälligen Wishart-Matrix (die auch effizient gelöst werden kann, um eine zufällige inverse Wishart-Matrix zu erhalten).
Tatsächlich ist der Cholesky-Raum eine bequeme Möglichkeit, andere Arten von zufälligen PSD-Matrizen zu generieren, da Sie nur sicherstellen müssen, dass die Diagonale nicht negativ ist.
quelle
quelle
Wenn Sie mehr Kontrolle über Ihre generierte symmetrische PSD-Matrix haben möchten, z. B. einen synthetischen Validierungsdatensatz generieren möchten, stehen Ihnen eine Reihe von Parametern zur Verfügung. Eine symmetrische PSD-Matrix entspricht einer Hyperellipse im N-dimensionalen Raum mit allen damit verbundenen Freiheitsgraden:
Für eine zweidimensionale Matrix (dh eine 2D-Ellipse) haben Sie also 1 Drehung + 2 Achsen = 3 Parameter.
quelle
Ein billiger und fröhlicher Ansatz, den ich zum Testen verwendet habe, besteht darin, m N (0,1) n-Vektoren V [k] zu generieren und dann P = d * I + Summe {V [k] * V [k] '} zu verwenden. als nxn psd matrix. Mit m <n ist dies für d = 0 singulär und für kleines d hat es eine hohe Bedingungszahl.
quelle