Ich versuche gerade, Werte einer dimensionalen Zufallsvariablen zu simulieren , die eine multivariate Normalverteilung mit dem mittleren Vektor und der Kovarianzmatrix .
Ich hoffe, eine Prozedur zu verwenden, die der inversen CDF-Methode ähnelt, was bedeutet, dass ich zuerst eine dimensionale einheitliche Zufallsvariable generieren und diese dann in die inverse CDF dieser Verteilung stecken möchte , um den Wert zu generieren .
Ich habe Probleme, weil das Verfahren nicht gut dokumentiert ist und es leichte Unterschiede zwischen der Funktion mvnrnd in MATLAB und einer Beschreibung gibt, die ich auf Wikipedia gefunden habe .
In meinem Fall wähle ich auch die Parameter der Verteilung nach dem Zufallsprinzip aus. Insbesondere ich jedes der aus einer Gleichverteilung . Ich erstelle dann die Kovarianzmatrix mit der folgenden Prozedur:
Erstellen Sie eine untere Dreiecksmatrix mit für und für
Sei wobei die Transponierte von .
Mit dieser Prozedur kann ich sicherstellen, dass symmetrisch und positiv bestimmt ist. Es gibt auch eine untere Dreiecksmatrix so dass , was meiner Meinung nach erforderlich ist, um Werte aus der Verteilung zu generieren.L S = L L T
Unter Verwendung der Wikipedia-Richtlinien sollte es mir möglich sein, Werte mit einer dimensionalen Uniform wie folgt zu generieren :N
Gemäß der MATLAB-Funktion geschieht dies jedoch normalerweise wie folgt:
Wobei die inverse CDF einer dimensionalen, trennbaren Normalverteilung ist und der einzige Unterschied zwischen beiden Methoden einfach darin besteht, ob oder L ^ T verwendet wird . N L L T
Ist MATLAB oder Wikipedia der richtige Weg? Oder sind beide falsch?
Antworten:
Wenn ist ein Spaltenvektor der Standardnormal RV, dann , wenn sie gesetzt , die Kovarianz von ist . Y = L X Y L L TX∼N(0,I) Y=LX Y LLT
Ich denke, das Problem, das Sie haben, kann sich aus der Tatsache ergeben, dass die mvnrnd- Funktion von matlab Zeilenvektoren als Stichproben zurückgibt, auch wenn Sie den Mittelwert als Spaltenvektor angeben. z.B,
Beachten Sie, dass die Transformation eines Zeilenvektors die entgegengesetzte Formel ergibt. wenn ein Zeilenvektor ist, dann ist auch ein Zeilenvektor, also ist ein Spaltenvektor, und die Kovarianz von kann geschrieben werden .X Z=XLT ZT=LXT ZT E[ZTZ]=LLT
Basierend auf dem, was Sie geschrieben haben, ist die Wikipedia-Formel korrekt: Wenn ein von matlab zurückgegebener Zeilenvektor ist, können Sie ihn nicht mit linksmultiplizieren . ( Wenn Sie jedoch mit der rechten Maustaste mit multiplizieren , erhalten Sie eine Stichprobe mit der gleichen Kovarianz von )Φ−1(U) LT LT LLT
quelle