Generieren Sie drei korrelierte gleichmäßig verteilte Zufallsvariablen

15

Angenommen, wir haben

X 2 ~ unif ( n , 0 , 1 ) ,

X1unif(n,0,1),
X2unif(n,0,1),

wobei eine einheitliche Zufallsstichprobe der Größe n ist, undunif(n,0,1)

Y=X1,

Z=0.4X1+10.4X2.

Dann beträgt die Korrelation zwischen und .Z 0,4YZ0.4

Wie kann ich dies auf drei Variablen erweitern: , , ?X 2 X 3X1X2X3

user9292
quelle
Ich habe Ihre Frage bearbeitet, um das Lesen zu erleichtern. Bitte überprüfen Sie, ob alles in Ordnung ist. Inwiefern würden Sie Ihr Verfahren in Bezug auf Ihre Frage ausweiten? Die Korrelation ist für zwei Zufallsvariablen definiert, daher ist es für mich nicht klar, was Sie meinen.
Ocram
3
Z ist nicht einheitlich. Wenn Sie also versuchen, dieses Ergebnis zu verallgemeinern, scheint es nicht so zu sein, als würden Sie versuchen, drei korrelierte einheitliche RVs zu generieren. Sie sich, wie Sie die Korrelation zwischen und ? a X 1 + b X 2 + c X 3X1aX1+bX2+cX3
MånsT
Angenommen, wir haben , , und , . Was sind dann und ? X 2 X 3 u n i f ( n , 0 , 1 ) Y = f ( X 2 , X 3 ) Z = f ( X 1 , X 2 , X 3 ) Y ZX1X2X3  unif(n,0,1)Y=f(X2,X3)Z=f(X1,X2,X3)YZ
user9292
6
{Distributions of correlated uniforms}{Copulas}
Kardinal
4
Warum nimmt n an der Diskussion teil? Wenn X1 und X2 univariate Zufallsvariablen sind, sind sie auf [0,1] nicht einfach einheitlich?
Michael R. Chernick

Antworten:

12

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)

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

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:

Bildbeschreibung hier eingeben

-

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

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

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.

Glen_b - Setzen Sie Monica wieder ein
quelle
Glen_b. Vielen Dank, sehr schöne und interessante Antwort!
user9292
Ich verstehe nicht, wo die 0,6 und 0,8 in Ihrem dritten Ansatz herkommen.
Manuel
Aus einer bestimmten Auswahl von in , (wenn und Einheitsvarianz haben) gibt ein Ergebnis , das eine Korrelation von HAS mit und mit . Aufgrund dieser Korrelationen sind , und dann gleichkorrelierte Normalen. (Dies ist nicht der effizienteste Weg, dies zu tun, aber es ist ein Weg.)ρ N i + ρNiNjρNiρNi+1ρ2NjNiNjρNi NjXYZ1ρ2NjXYZ
Glen_b
2

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 + X1,X2ZX1 0.40.4YY=0.4X1+1(0.4)2X2

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ρcos23cos0

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.

Dmitry Rubanovich
quelle