Angenommen, wir haben
X 2 ~ unif ( n , 0 , 1 ) ,
wobei eine einheitliche Zufallsstichprobe der Größe n ist, und
Dann beträgt die Korrelation zwischen und .Z 0,4
Wie kann ich dies auf drei Variablen erweitern: , , ?X 2 X 3
Angenommen, wir haben
X 2 ~ unif ( n , 0 , 1 ) ,
wobei eine einheitliche Zufallsstichprobe der Größe n ist, und
Dann beträgt die Korrelation zwischen und .Z 0,4
Wie kann ich dies auf drei Variablen erweitern: , , ?X 2 X 3
Antworten:
Die Frage enthält mehrere Fehler, wie in den Kommentaren vermerkt - wie in der Frage definiert, ist Z weder einheitlich noch weist es die angegebene Korrelation auf.
Kardinal erwähnt Copulas, und das ist die allgemeinste Vorgehensweise. Es gibt jedoch mehrere recht einfache Möglichkeiten, korrelierte Uniformen zu erhalten (die als Abkürzungen zu verschiedenen Arten von Copulas angesehen werden können).
Beginnen wir also mit einigen Methoden, um ein Paar korrelierter Uniformen zu erhalten.
1) Wenn Sie zwei Uniformen hinzufügen, ist das Ergebnis dreieckig und nicht gleichmäßig. Sie können jedoch das cdf der resultierenden Variablen als Transformation verwenden, um das Ergebnis wieder in eine Uniform umzuwandeln. Das Ergebnis ist natürlich nicht mehr linear korreliert.
Hier ist eine R-Funktion, um ein symmetrisches Dreieck auf (0,2) in eine Standarduniform umzuwandeln
t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2
Lassen Sie uns überprüfen, ob es eine Uniform gibt
u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)
Und es ist mit u1 und u2 korreliert:
> cor(cbind(u1,u2,v1))
u1 u2 v1
u1 1.000000000 0.006311667 0.7035149
u2 0.006311667 1.000000000 0.7008528
v1 0.703514895 0.700852805 1.0000000
aber nicht linear, aufgrund der monotonen Umwandlung in Gleichförmigkeit
Mit diesem Tool können wir einige zusätzliche Variablen generieren, um drei gleichkorrelierte Uniformen zu erhalten:
u3 = runif(30000)
v2 = t2u(u1+u3)
v3 = t2u(u2+u3)
cor(cbind(v1,v2,v3))
v1 v2 v3
v1 1.0000000 0.4967572 0.4896972
v2 0.4967572 1.0000000 0.4934746
v3 0.4896972 0.4934746 1.0000000
Die Beziehung zwischen den v-Variablen sieht alle so aus:
-
Eine zweite Alternative ist die Erzeugung durch Einnahme einer Mischung . Anstatt Uniformen zu summieren, nehmen Sie sie mit festen Wahrscheinlichkeiten.
z.B
z = ifelse(rbinom(30000,1,.7),u1,u2)
cor(cbind(u1,z))
u1 z
u1 1.0000000 0.7081533
z 0.7081533 1.0000000
Was wiederum verwendet werden kann, um mehrere korrelierte Uniformen zu erzeugen.
-
Ein dritter einfacher Ansatz besteht darin, korrelierte Normalen zu generieren und in Uniformität umzuwandeln.
n1=rnorm(30000)
n2=rnorm(30000)
n3=rnorm(30000)
x=.6*n1+.8*n2
y=.6*n2+.8*n3
z=.6*n3+.8*n1
cor(cbind(x,y,z))
x y z
x 1.0000000 0.4763703 0.4792897
y 0.4763703 1.0000000 0.4769403
z 0.4792897 0.4769403 1.0000000
Also konvertieren wir jetzt zu Uniform:
w1 = pnorm(x)
w2 = pnorm(y)
w3 = pnorm(z)
cor(cbind(w1,w2,w3))
w1 w2 w3
w1 1.0000000 0.4606723 0.4623311
w2 0.4606723 1.0000000 0.4620257
w3 0.4623311 0.4620257 1.0000000
Eine schöne Sache bei Methode 2 und 3 ist, dass Sie eine große Auswahl an korrelierten Dingen haben (und diese müssen nicht wie in den Beispielen hier gleich korreliert sein).
Es gibt natürlich eine Vielzahl anderer Ansätze, aber diese sind alle schnell und einfach.
Der schwierige Teil besteht darin, genau die gewünschte Populationskorrelation zu erhalten. Es ist nicht ganz so einfach, als wenn Sie nur korrelierte Gaußsche wollen. Die Antwort von Quantibex unter Gleichmäßig verteilte und korrelierte Zufallszahlenpaare generieren ergibt einen Ansatz, der meine dritte Methode hier modifiziert, die ungefähr die gewünschte Populationskorrelation ergeben sollte.
Nehmen Sie zunächst an, dass unabhängig sind? Wenn dies der ist, beträgt der Korrelationskoeffizient zwischen und nicht . Es wäre wenn definiert wäre als . Z X 1 0,4 0,4 Y Y = 0,4 X 1 + √
Ein einfacher Blick auf die Definition der Korrelationskoeffizientenformel und des Kosinusgesetzes sollte Sie davon überzeugen, dass ein zwischen Reihen ist, wenn die Reihen als Vektoren behandelt werden, wobei jeder Datenpunkt als Dimension eines Vektors behandelt wird. Wenn Sie paarweise unabhängige Reihen haben, sind das drei Vektoren, die alle orthogonal zueinander sind (weil die der Winkel zwischen ihnen alle ).cos 2 3 cos 0
Dies sollte Sie auf den Weg bringen, eine Reihe in ihre Komponenten zu zerlegen, genauso wie Sie einen Vektor in seine orthogonalen Komponenten zerlegen würden.