Genera tre variabili casuali correlate distribuite uniformemente


15

Supponiamo di avere

X1~Unif(n,0,1),
X2~Unif(n,0,1),

dove è un campione casuale uniforme di dimensione n eUnif(n,0,1)

Y=X1,

Z=0.4X1+1-0.4X2.

Quindi la correlazione tra e è .YZ0.4

Come posso estenderlo a tre variabili: , , ?X1X2X3


Ho modificato la tua domanda per facilitarne la lettura. Per favore, controlla che sia tutto a posto. Per quanto riguarda la tua domanda, in che senso estenderesti la tua procedura? La correlazione è definita per due variabili casuali, quindi non è chiaro per me capire cosa intendi.
Ocram,

3
Z non è uniforme, quindi se stai cercando di generalizzare quel risultato non sembra che tu stia cercando di generare tre camper uniformi correlati. Ti stai chiedendo come calcolare la correlazione tra X1 e un'X1+BX2+cX3 ?
Martedì

Supponiamo di avere X1 , X2 , u n i f ( n , 0 , 1 )X3  uniof(n,0,1) e Y=f(X2,X3) , Z=f(X1,X2,X3) . Allora cosa sono Y e Z ?
user9292

6
{Distribuzioni di uniformi correlate}{copule}
cardinale

4
Perché n entra nella discussione? Se X1 e X2 sono variabili casuali univariate, non sono semplicemente uniformi su [0,1]?
Michael R. Chernick,

Risposte:


12

La domanda contiene diversi errori, come indicato nei commenti: come definito nella domanda, Z non è né uniforme né ha la correlazione specificata.

il cardinale menziona le copule e questo è il modo più generale di procedere. Tuttavia, ci sono molti modi abbastanza semplici per ottenere uniformi correlate (che possono essere viste come semplici scorciatoie per diversi tipi di copule).

Quindi iniziamo con alcuni modi per ottenere un paio di uniformi correlate.

1) Se aggiungi due uniformi il risultato è triangolare, non uniforme. Ma puoi usare il cdf della variabile risultante come una trasformazione per riportare il risultato in un'uniforme. Il risultato non è più linearmente correlato, ovviamente.

Ecco una funzione R per trasformare un triangolare simmetrico su (0,2) in uniforme standard

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

Controlliamo che dia un'uniforme

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

inserisci qui la descrizione dell'immagine

Ed è correlato con u1 e 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

ma non in modo lineare, a causa della trasformazione monotonica in uniformità

inserisci qui la descrizione dell'immagine

Con questo come strumento possiamo generare alcune variabili aggiuntive per ottenere tre uniformi equicorrelate:

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 relazione tra le variabili v è simile alla seguente:

inserisci qui la descrizione dell'immagine

-

Una seconda alternativa è quella di generare prendendo una miscela . Invece di sommare le uniformi, prendile con probabilità fisse.

per esempio

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

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

inserisci qui la descrizione dell'immagine

Che può essere nuovamente utilizzato per generare più uniformi correlate.

-

Un terzo semplice approccio è generare normali correlate e trasformarle in uniformità.

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

Quindi ora convertiamo in 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

inserisci qui la descrizione dell'immagine

Una cosa bella dei metodi 2 e 3 è che hai molta varietà nella scelta di come potrebbero essere le cose correlate (e non devono essere equilorrelate come gli esempi qui).

Naturalmente esiste una grande varietà di altri approcci, ma questi sono tutti facili e veloci.

La parte difficile è ottenere esattamente la correlazione di popolazione desiderata; non è così semplice come quando vuoi solo gaussiani correlati. La risposta di Quantibex su Genera coppie di numeri casuali distribuiti uniformemente e correlati fornisce un approccio che modifica qui il mio terzo metodo che dovrebbe fornire la correlazione della popolazione desiderata.


Glen_b. Grazie, risposta molto bella e interessante!
user9292

Non capisco da dove provengano 0.6 e 0.8 nel tuo terzo approccio.
manuel,

Da una particolare scelta di in , (se e hanno una varianza unitaria) darà un risultato che ha una correlazione di con e con . A causa di tali correlazioni, , e sono quindi normali equicorrelate. (Questo non è il modo più efficiente possibile per farlo, ma è un modo.)ρ N i + ρρNio+1-ρ2NjNioNjρNio1-ρ2NjXYZ
Glen_b -Reinstate Monica

2

Innanzitutto, supponi che siano indipendenti? In tal caso, il coefficiente di correlazione tra e non è . Sarebbe se fosse definito come .X1,X2ZX1 0.40.4YY=0.4X1+1-(0.4)2X2

Un semplice sguardo alla definizione della formula del coefficiente di correlazione e alla legge dei coseni dovrebbe convincerti che è un tra serie se le serie sono trattate come vettori con ciascun punto dati trattato come una dimensione di un vettore. Se hai serie indipendenti in coppia, sono tre vettori che sono tutti ortogonali tra loro (perché i 'degli angoli tra loro sono tutti .ρcos23cos0

Questo dovrebbe iniziare sulla strada della decomposizione di una serie nei suoi componenti nello stesso modo in cui si decompone un vettore nei suoi componenti ortogonali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.