Genere tres variables aleatorias correlacionadas uniformemente distribuidas

15

Supongamos que tenemos

X 2unif ( n , 0 , 1 ) ,

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

donde es una muestra aleatoria uniforme de tamaño n, yunif(n,0,1)

Y=X1,

Z=0.4X1+10.4X2.

Entonces la correlación entre y es .Z 0.4YZ0.4

¿Cómo puedo extender esto a tres variables: , , ?X 2 X 3X1X2X3

usuario9292
fuente
He editado tu pregunta para que sea más fácil de leer. Por favor, verifique que todo esté bien. Con respecto a su pregunta, ¿en qué sentido extendería su procedimiento? La correlación se define para dos variables aleatorias, por lo que no está claro para mí entender lo que quieres decir.
ocram
33
Z no es uniforme, por lo que si está tratando de generalizar ese resultado, no parece que esté tratando de generar tres RV uniformes correlacionados. ¿Se pregunta cómo calcular la correlación entre y ? X1aX1+bX2+cX3
MånsT
Supongamos que tenemos , , ~ unif (n, 0,1) e Y = f (X_2, X_3) , Z = f (X_1, X_2, X_3) . Entonces, ¿qué son Y y Z ? X1X2X3  unif(n,0,1)Y=f(X2,X3)Z=f(X1,X2,X3)YZ
user9292
66
{Distributions of correlated uniforms}{Copulas}
cardenal
44
¿Por qué n entra en la discusión? Si X1 y X2 son variables aleatorias univariantes, ¿no son simplemente uniformes en [0,1]?
Michael R. Chernick

Respuestas:

12

La pregunta contiene varios errores como se señala en los comentarios: como se define en la pregunta, Z no es uniforme ni tiene la correlación especificada.

cardinal menciona cópulas, y esa es la forma más general de hacerlo. Sin embargo, hay varias formas bastante fáciles de obtener uniformes correlacionados (que pueden verse como simples accesos directos a diferentes tipos de cópulas).

Entonces, comencemos con algunas formas de obtener un par de uniformes correlacionados.

1) Si agrega dos uniformes, el resultado es triangular, no uniforme. Pero puede usar el cdf de la variable resultante como una transformación para llevar el resultado a un uniforme. El resultado ya no está correlacionado linealmente, por supuesto.

Aquí hay una función R para transformar un triangular simétrico en (0,2) a uniforme estándar

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

Vamos a ver si da un uniforme

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

ingrese la descripción de la imagen aquí

Y está correlacionado con u1 y 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

pero no linealmente, debido a la transformación monotónica a la uniformidad

ingrese la descripción de la imagen aquí

Con esto como herramienta podemos generar algunas variables adicionales para obtener tres uniformes equicorrelacionados:

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

La relación entre las variables v se ve así:

ingrese la descripción de la imagen aquí

-

Una segunda alternativa es generar tomando una mezcla . En lugar de sumar uniformes, tómalos con probabilidades fijas.

p.ej

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

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

ingrese la descripción de la imagen aquí

Que nuevamente se puede utilizar para generar múltiples uniformes correlacionados.

-

Un tercer enfoque simple es generar normales correlacionadas y transformarlas en uniformidad.

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

Entonces ahora convertimos a uniforme:

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

ingrese la descripción de la imagen aquí

Una cosa buena acerca de los métodos 2 y 3 es que obtienes mucha variedad en tu elección de cuán correlacionadas podrían estar las cosas (y no tienen que estar equicorrelacionadas como los ejemplos aquí).

Hay una gran variedad de otros enfoques, por supuesto, pero todos estos son rápidos y fáciles.

La parte difícil es obtener exactamente la correlación de población deseada; no es tan simple como cuando solo quieres gaussianos correlacionados. La respuesta de Quantibex en Generar pares de números aleatorios distribuidos y correlacionados uniformemente proporciona un enfoque que modifica mi tercer método aquí, que debería proporcionar la correlación de población deseada.

Glen_b -Reinstate a Monica
fuente
Glen_b. Gracias, muy hermosa e interesante respuesta!
user9292
No entiendo de dónde provienen los 0.6 y 0.8 en su tercer enfoque.
manuel
ρρNi+1ρ2NjNiNjρNi1ρ2NjXYZ
2

X1,X2ZX1 0.40.4YY=0.4X1+1(0.4)2X2

ρcos23cos0

Esto debería comenzar a descomponer una serie en sus componentes de la misma manera que descompondría un vector en sus componentes ortogonales.

Dmitry Rubanovich
fuente