Ich habe die Sample-Kovarianzmatrix eines Samples geschätzt und eine symmetrische Matrix erhalten. Mit , würde Ich mag schaffen -variate normalverteilt rn aber deshalb muss ich die Cholesky - Zerlegung von . Was soll ich tun, wenn nicht eindeutig ist?C n C C
15
Antworten:
Die Frage ist, wie aus einer multivariaten Normalverteilung mit einer (möglicherweise) singulären Kovarianzmatrix Zufallsvariablen erzeugt werden können . Diese Antwort erklärt einen Weg, der für jede Kovarianzmatrix funktioniert . Es bietet eine Implementierung, die die Genauigkeit testet.C
R
Algebraische Analyse der Kovarianzmatrix
Da eine Kovarianzmatrix ist, ist sie notwendigerweise symmetrisch und positiv-semidefinit. Um die Hintergrundinformationen zu vervollständigen, sei μ der Vektor des gewünschten Mittels.C μ
Da symmetrisch ist, haben seine Singular Value Decomposition (SVD) und seine eigendecomposition automatisch die FormC
für einige orthogonale Matrix und diagonale Matrix D 2 . Im Allgemeinen sind die diagonalen Elemente von D 2 nichtnegativ (was bedeutet, dass sie alle echte Quadratwurzeln haben: Wählen Sie die positiven aus, um die diagonale Matrix D zu bilden ). Die Informationen, die wir über C haben, besagen, dass eines oder mehrere dieser diagonalen Elemente Null sind - dies hat jedoch keine Auswirkungen auf die nachfolgenden Operationen und verhindert auch nicht, dass die SVD berechnet wird.V D2 D2 D C
Generierung multivariater Zufallswerte
Es sei eine Standard multivariate Normalverteilung: Jede Komponente hat einen Mittelwert von Null, Einheitsvarianz, und alle Kovarianzen gleich Null sind: seine Kovarianzmatrix die Identität I . Dann wird der Zufallsvariable Y = V D X hat KovarianzmatrixX I Y= V D X
Folglich ist die Zufallsvariable hat eine multivariate Normalverteilung mit Mittelwert μ und die Kovarianzmatrix C .μ + Y μ C
Berechnungs- und Beispielcode
Der folgendeY. 0 10 , 000 Y. 100 C 50
R
Code generiert eine Kovarianzmatrix mit den angegebenen Dimensionen und Rängen, analysiert sie mit der SVD (oder verwendet diese Analyse im auskommentierten Code mit einer Neukomposition), um eine bestimmte Anzahl von Realisierungen von (mit dem Mittelwertvektor 0 ) zu generieren. und vergleicht dann die Kovarianzmatrix dieser Daten sowohl numerisch als auch grafisch mit der beabsichtigten Kovarianzmatrix. Wie gezeigt, erzeugt sie 10 , 000 Realisierungen wo die Dimension Y ist 100 , und der Rang C ist 50 . Die Ausgabe istDas heißt, dass der Rang der Daten auch und die Kovarianzmatrix wie aus den Daten geschätzt ist innerhalb Abstand 8 × 10 - 5 von C --which nahe ist. Zur genaueren Überprüfung werden die Koeffizienten von C gegen die seiner Schätzung aufgetragen. Sie alle liegen nahe an der Linie der Gleichheit:50 8 × 10- 5 C C
Der Code entspricht genau der vorhergehenden Analyse und sollte daher selbsterklärend sein (auch für NichtbenutzerD2 D
R
, die ihn möglicherweise in ihrer bevorzugten Anwendungsumgebung emulieren). Es zeigt sich, dass bei der Verwendung von Gleitkomma-Algorithmen Vorsicht geboten ist: Die Eingaben von können aufgrund von Ungenauigkeiten leicht negativ (aber winzig) sein. Solche Einträge müssen auf Null gesetzt werden, bevor die Quadratwurzel berechnet wird, um D selbst zu finden .quelle
Lösungsmethode A :
In MATLAB wäre der Code
Lösungsmethode B : Formulieren und lösen Sie ein konvexes SDP (Semidefinite Program), um die nächstgelegene Matrix D zu C gemäß der Frobenius-Norm ihrer Differenz zu finden, so dass D positiv definit ist und den minimalen Eigenwert m angibt.
Mit CVX unter MATLAB wäre der Code:
Vergleich der Lösungsmethoden: Abgesehen von der Symmetrisierung der Ausgangsmatrix werden bei der Lösungsmethode A nur die diagonalen Elemente um einen gemeinsamen Betrag angepasst (vergrößert) und die nicht diagonalen Elemente unverändert gelassen. Die Lösungsmethode B findet die nächstgelegene (der ursprünglichen Matrix) positive definite Matrix mit dem angegebenen minimalen Eigenwert im Sinne der minimalen Frobenius-Norm aus der Differenz der positiven definierten Matrix D und der ursprünglichen Matrix C, die auf den Summen von basiert Quadratische Differenzen aller Elemente von D - C, einschließlich der nicht diagonalen Elemente. Durch Anpassen von nicht diagonalen Elementen kann der Betrag verringert werden, um den diagonale Elemente vergrößert werden müssen, und diagonale Elemente werden nicht unbedingt alle um den gleichen Betrag vergrößert.
quelle
Zunächst würde ich über das Modell nachdenken, das Sie schätzen.
Wenn eine Kovarianzmatrix nicht positiv und semidefinit ist, weist dies möglicherweise darauf hin, dass Ihre Variablen ein Colinearitätsproblem aufweisen, das auf ein Problem mit dem Modell hinweist und nicht unbedingt mit numerischen Methoden gelöst werden sollte.
Wenn die Matrix aus numerischen Gründen nicht positiv semidefinit ist, gibt es einige Lösungen, über die hier nachgelesen werden kann
quelle
Eine Möglichkeit wäre, die Matrix aus einer Eigenwertzerlegung zu berechnen. Jetzt gebe ich zu, dass ich nicht allzu viel über die Mathematik hinter diesen Prozessen weiß, aber meiner Recherche nach scheint es fruchtbar, diese Hilfedatei zu lesen:
http://stat.ethz.ch/R-manual/R-patched/library/Matrix/html/chol.html
und einige andere verwandte Befehle in R.
Schauen Sie sich auch 'nearPD' im Matrix-Paket an.
Tut mir leid, dass ich Ihnen nicht weiterhelfen konnte, aber ich hoffe, dass meine Suche Sie in die richtige Richtung bringen kann.
quelle
Sie können die Ergebnisse aus der NearPD-Funktion im Matrix-Paket in R abrufen. Dies gibt Ihnen eine wirklich wertvolle Matrix zurück.
quelle