Wygeneruj trzy skorelowane równomiernie rozmieszczone zmienne losowe

15

Załóżmy, że mamy

X 2unif ( n , 0 , 1 ) ,

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

gdzie jest jednorodną losową próbką o wielkości n, iunif(n,0,1)

Y=X1,

Z=0.4X1+10.4X2.

Zatem korelacja między i Z wynosi 0,4 .YZ0.4

Jak mogę to rozszerzyć na trzy zmienne: , X 2 , X 3 ?X1X2X3

użytkownik9292
źródło
Zredagowałem twoje pytanie, aby ułatwić czytanie. Sprawdź, czy wszystko jest w porządku. Jeśli chodzi o twoje pytanie, w jakim sensie rozszerzyłbyś swoją procedurę? Korelacja jest zdefiniowana dla dwóch zmiennych losowych, więc nie jest dla mnie jasne, co mam na myśli.
ocram
3
Z nie jest jednolity, więc jeśli próbujesz uogólnić ten wynik, nie wydaje się, że próbujesz wygenerować trzy skorelowane jednolite RV. Czy zastanawiasz się, jak obliczyć korelację pomiędzy i na X 1 + b X 2 + c X 3 ? X1zaX1+bX2)+doX3)
MånsT
Załóżmy, że mamy , X 2 , X 3 u n i f ( n , 0 , 1 ) , a Y = f ( X 2 , X 3 ) ,X1X2)X3)  unjafa(n,0,1)Y=fa(X2),X3)) . Czym są Y i Z ? Z=fa(X1,X2),X3))YZ
user9292,
6
{Rozkłady mundurów skorelowanych}{Copulas}
kardynał
4
Dlaczego n wchodzi w dyskusję? Jeśli X1 i X2 są zmiennymi losowymi jednowymiarowymi, czyż nie są one po prostu jednolite dla [0,1]?
Michael R. Chernick,

Odpowiedzi:

12

Pytanie zawiera kilka błędów wskazanych w komentarzach - jak zdefiniowano w pytaniu, Z nie jest ani jednorodne, ani nie ma określonej korelacji.

kardynał wspomina o kopulach, i to jest najbardziej ogólny sposób na załatwienie tego. Istnieje jednak kilka dość łatwych sposobów uzyskania skorelowanych mundurów (które można postrzegać jako zwykłe skróty do różnych rodzajów kopuł).

Więc zacznijmy od niektórych sposobów, aby uzyskać parę skorelowanych mundurów.

1) Jeśli dodasz dwa mundury, wynik będzie trójkątny, a nie jednolity. Ale możesz użyć cdf wynikowej zmiennej jako transformacji, aby przywrócić wynik do postaci jednolitej. Oczywiście wynik nie jest już skorelowany liniowo.

Oto funkcja R, aby przekształcić symetryczny trójkąt na (0,2) w standardowy mundur

t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2

Sprawdźmy, czy to daje mundur

u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)

wprowadź opis zdjęcia tutaj

I jest skorelowany z u1 i u2:

> 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

ale nie liniowo, ze względu na monotoniczną transformację do jednolitości

wprowadź opis zdjęcia tutaj

Dzięki temu jako narzędziu możemy wygenerować dodatkowe zmienne, aby uzyskać trzy mundury równo-skorelowane:

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

Zależność między zmiennymi v wygląda tak:

wprowadź opis zdjęcia tutaj

-

Drugą alternatywą jest generowanie przez wzięcie mieszaniny . Zamiast sumować mundury, bierz je ze stałym prawdopodobieństwem.

na przykład

z = ifelse(rbinom(30000,1,.7),u1,u2)

cor(cbind(u1,z))
          u1         z
u1 1.0000000 0.7081533
z  0.7081533 1.0000000

wprowadź opis zdjęcia tutaj

Które można ponownie wykorzystać do wygenerowania wielu skorelowanych mundurów.

-

Trzecie proste podejście polega na wygenerowaniu skorelowanych normalnych i przekształceniu w jednolitość.

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

Teraz przechodzimy na mundur:

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

wprowadź opis zdjęcia tutaj

Jedną fajną rzeczą w metodach 2 i 3 jest to, że masz dużą różnorodność w wyborze tego, jak skorelowane mogą być rzeczy (i nie muszą one być równo-skorelowane, jak tutaj przykłady).

Istnieje oczywiście wiele innych podejść, ale wszystkie są szybkie i łatwe.

Trudną częścią jest uzyskanie dokładnie pożądanej korelacji populacji; to nie jest tak proste, jak gdy chcesz po prostu skorelowanych Gaussów. Odpowiedź Quantibex w Generuj pary liczb losowych równomiernie rozmieszczonych i skorelowanych daje podejście, które modyfikuje moją trzecią metodę tutaj, która powinna dać o pożądanej korelacji populacji.

Glen_b - Przywróć Monikę
źródło
Glen_b. Dziękuję bardzo piękna i interesująca odpowiedź!
user9292
Nie rozumiem, skąd pochodzą 0,6 i 0,8 w twoim trzecim podejściu.
manuel
Od konkretnego wyboru w ρ NρρN.ja+1-ρ2)N.jotN.jaN.jotρN.ja1-ρ2)N.jotXYZ
2

X1,X2)ZX1 0,40,4YY=0,4X1+1-(0,4)2)X2)

ρsałata2)3)sałata0

To powinno rozpocząć cię w drodze do dekompozycji szeregu na jego składowe w taki sam sposób, jak rozkładasz wektor na jego składowe ortogonalne.

Dmitrij Rubanowicz
źródło