Wie kann man bei gegebener Kovarianzmatrix Daten so generieren, dass sie die Beispiel-Kovarianzmatrix ?
Allgemeiner: Wir sind oft daran interessiert, Daten aus einer Dichte generieren , wobei Daten x einen Parametervektor \ boldsymbol \ theta haben . Dies ergibt eine Stichprobe, aus der wir dann wieder einen Wert \ boldsymbol {\ hat \ theta} abschätzen können . Was mich interessiert, ist das umgekehrte Problem: Was ist, wenn wir eine Reihe von Parametern \ boldsymbol \ theta_ {s} erhalten und wir möchten ein Beispiel x erzeugen , das \ boldsymbol {\ hat \ theta} = \ boldsymbol \ theta_ {s} .
Ist das ein bekanntes Problem? Ist eine solche Methode sinnvoll? Sind Algorithmen verfügbar?
correlation
sampling
random-generation
covariance-matrix
Kees Mulder
quelle
quelle
Antworten:
Es gibt zwei typische Situationen für diese Art von Problemen:
i) Sie möchten eine Stichprobe aus einer bestimmten Verteilung erstellen, deren Populationsmerkmale mit den angegebenen übereinstimmen (aufgrund von Stichprobenvariationen stimmen die Stichprobenmerkmale jedoch nicht genau überein).
ii) Sie möchten eine Stichprobe generieren, deren Stichprobenmerkmale mit den angegebenen übereinstimmen (aufgrund der Einschränkungen, dass die Stichprobenmengen genau auf einen vorgegebenen Satz von Werten abgestimmt sind, stammen Sie jedoch nicht wirklich aus der gewünschten Verteilung).
Sie möchten den zweiten Fall - aber Sie erhalten ihn, indem Sie denselben Ansatz wie im ersten Fall mit einem zusätzlichen Standardisierungsschritt verfolgen.
Für multivariate Normalen kann beides relativ einfach erfolgen:
Im ersten Fall könnten Sie zufällige Normalen ohne die Populationsstruktur verwenden (z. B. iid-Standardnormal mit der Erwartung 0 und der Identitätskovarianzmatrix) und diese dann auferlegen - transformieren, um die gewünschte Kovarianzmatrix und den gewünschten Mittelwert zu erhalten. Wenn und das Populationsmittel und die Kovarianz sind, die Sie benötigen, und normal ist, berechnen Sie für einige mit (z. B. könnte ein geeignetes durch Cholesky-Zerlegung erhalten werden). . Dann hat die gewünschten Populationsmerkmale.μ Σ z y=Lz+μ L LL′=Σ L y
Bei der zweiten müssen Sie zuerst Ihre Zufallsnormalen transformieren, um auch die zufällige Abweichung vom Nullmittelwert und der Identitätskovarianz zu entfernen (wobei Stichprobenmittelwert und Stichprobenkovarianz ), und dann wie zuvor fortfahren. Dieser erste Schritt des Entfernens der Stichprobenabweichung vom exakten Mittelwert , Varianz stört jedoch die Verteilung. (In kleinen Proben kann es ziemlich schwerwiegend sein.)In 0 I
Dies kann durch Subtrahieren des Abtastmittelwerts von ( ) und Berechnen der Cholesky-Zerlegung von . Wenn der linke Cholesky-Faktor ist, sollte Stichprobenmittelwert 0 und die Kovarianz der Identitätsstichprobe haben. Sie können dann berechnen und eine Stichprobe mit den gewünschten Stichprobenmomenten erstellen. (Je nachdem, wie Ihre Stichprobenmengen definiert sind, kann es sein, dass es sich bei der Multiplikation / Division durch Faktoren wie um eine besonders kleine Fiedel handelt , aber es ist einfach genug, diesen Bedarf zu identifizieren.)z z∗=z−z¯ z∗ L∗ z(0)=(L∗)−1z∗ y=Lz(0)+μ n−1n−−−√
quelle
@ Glen_b gab eine gute Antwort (+1), die ich mit etwas Code veranschaulichen möchte.
Wie kann man Samples aus einer dimensionalen multivariaten Gaußverteilung mit einer gegebenen Kovarianzmatrix erzeugen ? Dies ist einfach zu bewerkstelligen, indem Samples aus einem Standard-Gauß-Wert erzeugt und mit einer Quadratwurzel der Kovarianzmatrix multipliziert werden, z. B. mit . Dies wird in vielen Themen zum Lebenslauf behandelt, z. B .: Wie kann ich Daten mit einer vorgegebenen Korrelationsmatrix generieren? Hier ist eine einfache Matlab-Implementierung:n d Σ chol(Σ)
Die Beispiel-Kovarianzmatrix der resultierenden Daten ist natürlich nicht genau ; zB im obigen Beispiel wird zurückgegebenΣ
cov(X)
Wie generiere ich Daten mit einer vorgegebenen Stichprobenkorrelation oder Kovarianzmatrix?
Wie @Glen_b schrieb, zentrieren, bleichen und standardisieren Sie die Daten nach dem Generieren aus einem Standard-Gaußschen, sodass sie die Beispiel-Kovarianzmatrix . erst dann multipliziere es mit .I chol(Σ)
Hier ist die Fortsetzung meines Matlab-Beispiels:
Nun
cov(X)
kehrt er nach Bedarf zurückquelle