La pregunta contiene varios errores, como se señaló en los comentarios - como se define en la pregunta, Z no es ni uniforme ni tiene la correlación especificado.
el cardenal menciona cúpulas, y que es la forma más general para ir sobre ella. Sin embargo, hay varios muy fácil de maneras de obtener correlaciona uniformes (que pueden ser vistos como meros accesos directos a los diferentes tipos de cúpulas).
Así que vamos a empezar con algunas formas de conseguir un par de correlación uniformes.
1) Si se agregan dos uniformes el resultado es triangular, que no es uniforme. Pero usted puede usar la cdf de la variable resultante como una transformación para tomar el resultado a un uniforme. El resultado no se correlaciona de forma lineal, por supuesto.
Aquí está una función de R para transformar simétrica, triangular en (0,2) a los uniformes de las
t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2
Vamos a ver que se da un uniforme
u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)
![enter image description here]()
Y se correlaciona con la 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 de forma lineal, debido a la transformación monotónica a la uniformidad
![enter image description here]()
Con esta herramienta podemos generar algunas variables adicionales para obtener tres equicorrelated uniformes:
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 la v-variables de todo este aspecto:
![enter image description here]()
--
Una segunda alternativa es generar mediante la toma de una mezcla. En lugar de sumar los uniformes, los tome con probabilidades fijas.
por ejemplo,
z = ifelse(rbinom(30000,1,.7),u1,u2)
cor(cbind(u1,z))
u1 z
u1 1.0000000 0.7081533
z 0.7081533 1.0000000
![enter image description here]()
Que a su vez puede ser utilizado para generar múltiples correlaciona uniformes.
--
Un tercer enfoque simple para generar correlaciona normales y transformar a la 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
Así que ahora tenemos que convertir a los uniformes de:
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
![enter image description here]()
Una cosa buena acerca de los métodos 2 y 3 es que usted consigue un montón de variedad en su elección de cómo se correlacionan las cosas podrían ser (y no tienen que ser equicorrelated como los ejemplos aquí).
Hay una gran variedad de otros enfoques, por supuesto, pero todos ellos son de fácil y rápido.
La parte difícil es llegar exactamente a la población deseada de correlación; no es tan simple como cuando simplemente quieres correlaciona Gaussianas.