Me gustaría generar pares de números aleatorios con cierta correlación. Sin embargo, el enfoque habitual de usar una combinación lineal de dos variables normales no es válido aquí, porque una combinación lineal de variables uniformes ya no es una variable distribuida uniformemente. Necesito que las dos variables sean uniformes.
¿Alguna idea sobre cómo generar pares de variables uniformes con una correlación dada?
correlation
random-generation
uniform
Onturenio
fuente
fuente
Respuestas:
No conozco un método universal para generar variables aleatorias correlacionadas con cualquier distribución marginal dada. Por lo tanto, propondré un método ad hoc para generar pares de variables aleatorias distribuidas uniformemente con una correlación dada (Pearson). Sin pérdida de generalidad, supongo que la distribución marginal deseada es uniforme estándar (es decir, el soporte es ).[0,1]
El enfoque propuesto se basa en lo siguiente:U1 U2 F1 F2 Fi(Ui)=Ui i=1,2
Entonces, el coeficiente de correlación de Spearman rho y Pearson son iguales (las versiones de muestra pueden, sin embargo, diferir).
a) Para las variables aleatorias uniformes estándar y U 2 con las funciones de distribución respectivas F 1 y F 2 , tenemos F i ( U i ) = U i , para i = 1 , 2 . Por lo tanto, por definición , rho de Spearman es ρ S ( U 1 , U 2 ) = c o r r ( F
b) Si son variables aleatorias con márgenes continuos y cópula gaussiana con coeficiente de correlación (Pearson) ρ , entonces rho de Spearman es ρ S ( X 1 , X 2 ) = 6X1,X2 ρ
Esto facilita la generación de variables aleatorias que tienen un valor deseado de rho de Spearman.
El enfoque consiste en generar datos de la cópula gaussiana con un coeficiente de correlación apropiado tal que el rho de Spearman corresponda a la correlación deseada para las variables aleatorias uniformes.ρ
Algoritmo de simulaciónr n
Deje denotar el nivel deseado de correlación, yn el número de pares que se generarán. El algoritmo es:
Ejemplor=0.6 n=500 parejas.
El siguiente código es un ejemplo de implementación de este algoritmo usando R con una correlación objetivo y n = 500
En la figura siguiente, las gráficas diagonales muestran histogramas de las variables y U 2 , y las gráficas fuera de la diagonal muestran gráficas de dispersión de U 1 yU1 U2 U1 .
U2
Por construcción, las variables aleatorias tienen márgenes uniformes y un coeficiente de correlación (cercano a) . Pero debido al efecto del muestreo, el coeficiente de correlación de los datos simulados no es exactamente igual a rr r .
Tenga en cuenta que la
gen.gauss.cop
función debería funcionar con más de dos variables simplemente especificando una matriz de correlación más grande.fuente
gen.gauss.cop
función funcionará para más de dos variables con un ajuste (trivial). Si no le gusta la adición o desea expresarla de manera diferente, revierta o cambie según sea necesario.From the fact thatV(w1)=1/12 , we get E(w21)=1/3 , so
E(u1u2)=p/12+1/4 , that is:
cov(u1u2)=p/12 .
Since V(u1)=V(u2)=1/12 , we get finally that cor(u1,u2)=p .
fuente
Here is one easy method for positive correlation: Let(u1,u2)=Iw1+(1−I)(w2,w3) , where w1,w2, and w3 are independent U(0,1) and I is Bernoulli(p ). u1 and u2 will then have U(0,1) distributions with correlation p . This extends immediately to k -tuples of uniforms with compound symmetric variance matrix.
If you want pairs with negative correlation, use(u1,u2)=I(w1,1−w1)+(1−I)(w2,w3) , and the correlation will be −p .
fuente