Ich möchte eine zufällige Korrelationsmatrix erzeugen, so dass die Verteilung ihrer nicht diagonalen Elemente ungefähr aussieht normal . Wie kann ich es tun?
Die Motivation ist dies. Für einen Satz von Zeitreihendaten sieht die Korrelationsverteilung oft ziemlich normal aus. Ich möchte viele "normale" Korrelationsmatrizen generieren, um die allgemeine Situation darzustellen und sie zur Berechnung der Risikonummer zu verwenden.
Ich kenne eine Methode, aber die resultierende Standardabweichung (der Verteilung der nicht diagonalen Elemente) ist für meinen Zweck zu klein: einheitliche oder normale Zufallszeilen einer Matrix X erzeugen , die Zeilen standardisieren (Mittelwert subtrahieren, durch dividieren Standardabweichung), dann die Probenkorrelationsmatrix 1hat normalerweise verteilt off-Diagonaleinträge [Aktualisierungnach Kommentare: Standardabweichung wird~n-1/2].
Kann jemand eine bessere Methode vorschlagen, mit der ich die Standardabweichung steuern kann?
Antworten:
I have first provided what I now believe is a sub-optimal answer; therefore I edited my answer to start with a better suggestion.
Using vine method
In this thread: How to efficiently generate random positive-semidefinite correlation matrices? -- I described and provided the code for two efficient algorithms of generating random correlation matrices. Both come from a paper by Lewandowski, Kurowicka, and Joe (2009).
Please see my answer there for a lot of figures and matlab code. Here I would only like to say that the vine method allows to generate random correlation matrices with any distribution of partial correlations (note the word "partial") and can be used to generate correlation matrices with large off-diagonal values. Here is the relevant figure from that thread:
Ich denke, diese Verteilungen sind einigermaßen "normal", und man kann sehen, wie die Standardabweichung allmählich zunimmt. Ich sollte hinzufügen, dass der Algorithmus sehr schnell ist. Einzelheiten finden Sie im verknüpften Thread.
Meine ursprüngliche Antwort
Eine einfache Änderung Ihrer Methode kann den Trick tun (abhängig davon, wie nahe die Verteilung an der Normalität liegen soll). Diese Antwort wurde von den obigen Kommentaren von @ cardinal und von der Antwort von @ psarka auf meine eigene Frage inspiriert Wie kann eine große zufällige Korrelationsmatrix mit vollem Rang und einigen starken Korrelationen erstellt werden?
Der Trick besteht darin, Proben von Ihnen zu machenX. korreliert (keine Merkmale, sondern Stichproben). Hier ein Beispiel: Ich generiere eine ZufallsmatrixX. von 1000 × 100 Größe (alle Elemente von Standard normal), und fügen Sie dann eine Zufallszahl von hinzu [ - a / 2 , a / 2 ] zu jeder Reihe, z a = 0 , 1 , 2 , 5 . Zuma = 0 die Korrelationsmatrix X.⊤X. (nach dem Standardisieren der Merkmale) haben nicht diagonale Elemente, die ungefähr normal mit Standardabweichung verteilt sind 1 / 1000- -- -- -- -√ . Zuma > 0 Ich berechne die Korrelationsmatrix, ohne die Variablen zu zentrieren (dies behält die eingefügten Korrelationen bei), und die Standardabweichung der nicht diagonalen Elemente wächst mit ein wie in dieser Abbildung gezeigt (Zeilen entsprechen a = 0 , 1 , 2 , 5 ):
Alle diese Matrizen sind natürlich eindeutig positiv. Hier ist der Matlab-Code:
Die Ausgabe dieses Codes (minimale und maximale Eigenwerte) lautet:
quelle
Möglicherweise interessieren Sie sich für einen Teil des Codes unter folgendem Link:
Korrelation und Ko-Integration
quelle
Wenn Sie versuchen, zufällige Korrelationsmatrizen zu generieren, ziehen Sie eine Stichprobe aus der Wishart-Verteilung in Betracht. Diese folgende Frage enthält Informationen zur Wishart-Verteilung sowie Hinweise zur Stichprobe: Wie lassen sich zufällige positiv-semidefinite Korrelationsmatrizen effizient generieren?
quelle
Dies ist keine sehr raffinierte Antwort, aber ich kann nicht anders, als zu denken, dass es immer noch eine gute Antwort ist ...
Wenn Ihre Motivation darin besteht, dass Korrelationsparameter, die durch Zeitreihendaten erzeugt werden, normalerweise normal aussehen, warum nicht einfach Zeitreihendaten simulieren, die Korrelationsparameter berechnen und diese verwenden?
Sie haben vielleicht einen guten Grund, dies nicht zu tun, aber es ist mir aus Ihrer Frage nicht klar.
quelle