2016-05-12 5 views
0

Ich möchte 3 Variablen simulieren (normalerweise mit Mittelwert = 1 und sd = 1 verteilt), die eine spezifische Korrelationsstruktur haben.Erstellen Sie alle möglichen Korrelationsmatrizen für 3 Variablen

Für jede Variable Ich mag würde durch die Korrelation gehen Werte 0,1 bis 0,9 in Schritten von 0,1

SO möglichen Korrelationen der drei Variablen

X1 X2 X3 
0.1 0.1 0.1 
0.1 0.1 0.2 
0.1 0.1 0.3 
.. 
0.9 0.9 0.9 

Am Ende wäre Ich mag würde zu Verwenden Sie diese drei Korrelationswerte, um eine Varianz-Kovarianz-Matrix zu konstruieren.

Gibt es eine einfache Möglichkeit, dies zu tun?

+0

Wenn ich richtig verstanden habe, möchten Sie eine Reihe von (möglicherweise) 729 Datensätze mit jeweils einer anderen Korrelationsstruktur generieren? –

+0

ja das ist genau das, was ich suche – user6193945

+0

OK, dann sei vorsichtig, dass einige deiner "Korrelationsmatrizen" eigentlich keine Korrelationsmatrizen sind: sie werden negative Eigenwerte haben. Zum Beispiel ergibt die Kombination 0.8 0.7 0.1 etwas, das keine Korrelationsmatrix ist. (Ich habe einige Berechnungen durchgeführt und ich denke, das betrifft 78 von 729 möglichen Kombinationen) –

Antwort

0

Versuchen Sie das r-Paket mvtnorm.

Definieren Sie Ihre Korrelationsmatrix s und simulieren Sie die Variable wie folgt aus:

x<-rmvnorm(n, mean = rep(0, nrow(sigma)), sigma = s) 

Jetzt können Sie eine Schleife konstruieren, und gehen durch alle Kombinationen von s, was Sie wollen.

+0

Ich denke, man könnte 'mapply' anstelle expliziter Schleifen verwenden, z.B. 'do.call (mapply, c (FUN = Funktion (i, j, k) {i + j + k}, expand.grid (i = 1: 3, j = 1: 3, k = 1: 3))) ' –