Generazione di variabili casuali binomiali correlate


21

Mi chiedevo se fosse possibile generare variabili binomiali casuali correlate seguendo un approccio di trasformazione lineare?

Di seguito, ho provato qualcosa di semplice in R e produce una certa correlazione. Ma mi chiedevo se esiste un modo di principio per farlo?

X1 = rbinom(1e4, 6, .5) ; X2 = rbinom(1e4, 6, .5) ;  X3 = rbinom(1e4, 6, .5) ; a = .5

Y1 = X1 + (a*X2) ; Y2 = X2 + (a*X3) ## Y1 and Y2 are supposed to be correlated

cor(Y1, Y2)

2
Y1 e Y2 possono essere correlati, ma non saranno più binomiali. Esempio, X1=X2=1 quindi Y1=1.5 quindi Yi non può essere una variabile casuale binomiale. Vorrei suggerire di esaminare la distribuzione multinomiale.
Knrumsey - Ripristina Monica il

1
La risposta breve alla domanda è cercare la parola chiave copula, che aiuta a generare variabili dipendenti con margini fissi.
Xi'an,

Risposte:


32

Le variabili binomiali vengono solitamente create sommando variabili indipendenti di Bernoulli. Vediamo se possiamo iniziare con una coppia di variabili di Bernoulli correlate e fare la stessa cosa.(X,Y)

Supponiamo che sia una variabile di Bernoulli (ovvero, e ) e sia una variabile di Bernoulli . Per definire la loro distribuzione congiunta dobbiamo specificare tutte e quattro le combinazioni di risultati. Scrivendo possiamo facilmente capire il resto dagli assiomi della probabilità:( p ) Pr ( X = 1 ) = pX(p)Pr(X=1)=pY ( q ) Pr ( ( X , Y ) = ( 0 , 0 ) ) = a , Pr ( ( X , Y ) = ( 1 , 0 ) ) = 1 - q - un ,Pr(X=0)=1-pY(q)

Pr((X,Y)=(0,0))=un',
Pr((X,Y)=(1,0))=1-q-un',Pr((X,Y)=(0,1))=1-p-un',Pr((X,Y)=(1,1))=un'+p+q-1.

Inserendolo nella formula per il coefficiente di correlazione e risolvendo si ottieneρ

(1)un'=(1-p)(1-q)+ρpq(1-p)(1-q).

A condizione che tutte e quattro le probabilità siano non negative, ciò fornirà una valida distribuzione congiunta e questa soluzione parametrizza tutte le distribuzioni bivariate di Bernoulli. (Quando , esiste una soluzione per tutte le correlazioni matematicamente significative tra e ). Quando sommiamo di queste variabili, la correlazione rimane la stessa - ma ora le distribuzioni marginali sono binomiali e Binomiale , come desiderato.- 1 1 n ( n , p ) ( n , q )p=q-11n(n,p)(n,q)

Esempio

Sia , , e vorremmo che la correlazione fosse . La soluzione a è (e le altre probabilità sono circa , e ). Ecco un diagramma di realizzazioni dalla distribuzione congiunta:p = 1 / 3 q = 3 / 4 ρ = - 4 / 5 ( 1 ) un = ,00,336735 millions 0.247 0.663 0.087 1.000n=10p=1/3q=3/4ρ=-4/5(1)un'=0.003367350,2470,6630,0871000

dispersione

Le linee rosse indicano la media del campione e la linea tratteggiata è la linea di regressione. Sono tutti vicini ai valori previsti. I punti sono stati agitati casualmente in questa immagine per risolvere le sovrapposizioni: dopo tutto, le distribuzioni binomiali producono solo valori integrali, quindi ci sarà una grande quantità di sovrapposizione.

Un modo per generare queste variabili è campionare volte da con le probabilità scelte e quindi convertire ogni in , ciascuno in , ciascuno in e ogni in . Somma i risultati (come vettori) per ottenere una realizzazione di .{ 1 , 2 , 3 , 4 } 1 ( 0 , 0 ) 2 ( 1 , 0 ) 3 ( 0 , 1 ) 4 ( 1 , 1 ) ( X , Y )n{1,2,3,4}1(0,0)2(1,0)3(0,1)4(1,1)(X,Y)

Codice

Ecco Run'implementazione.

#
# Compute Pr(0,0) from rho, p=Pr(X=1), and q=Pr(Y=1).
#
a <- function(rho, p, q) {
  rho * sqrt(p*q*(1-p)*(1-q)) + (1-p)*(1-q)
}
#
# Specify the parameters.
#
n <- 10
p <- 1/3
q <- 3/4
rho <- -4/5
#
# Compute the four probabilities for the joint distribution.
#
a.0 <- a(rho, p, q)
prob <- c(`(0,0)`=a.0, `(1,0)`=1-q-a.0, `(0,1)`=1-p-a.0, `(1,1)`=a.0+p+q-1)
if (min(prob) < 0) {
  print(prob)
  stop("Error: a probability is negative.")
}
#
# Illustrate generation of correlated Binomial variables.
#
set.seed(17)
n.sim <- 1000
u <- sample.int(4, n.sim * n, replace=TRUE, prob=prob)
y <- floor((u-1)/2)
x <- 1 - u %% 2
x <- colSums(matrix(x, nrow=n)) # Sum in groups of `n`
y <- colSums(matrix(y, nrow=n)) # Sum in groups of `n`
#
# Plot the empirical bivariate distribution.
#
plot(x+rnorm(length(x), sd=1/8), y+rnorm(length(y), sd=1/8),
     pch=19, cex=1/2, col="#00000010",
     xlab="X", ylab="Y",
     main=paste("Correlation is", signif(cor(x,y), 3)))
abline(v=mean(x), h=mean(y), col="Red")
abline(lm(y ~ x), lwd=2, lty=3)

Questo approccio può essere esteso per generare un numero qualsiasi di variabili binarie? - adattarsi alla matrice di correlazione data (o avvicinarsi al massimo per adattarla)?
ttnphns,

1
@ttnphns Sì, ma le opzioni esplodono: la tabella delle probabilità deve essere determinata da parametri marginali, il vincolo somma-unità e (quindi) parametri aggiuntivi. Evidentemente avresti molta libertà di selezionare (o vincolare) quei parametri, in base alle proprietà multivariate che desideri creare. Inoltre, un approccio simile potrebbe essere usato per generare variabili binomiali correlate con valori diversi dei loro parametri " ". Parvin: Credo che "quando sommiamo di queste variabili" spiega senza ambiguità ciò che rappresenta. k 2 k - k - 1 n n n2kk2kk1nnn
whuber

Questo è un bel risultato. Solo per scegliere un po 'la tua prima frase. Per ottenere un binomio da variabili di Bernoulli indipendenti non è necessario che abbiano la stessa p? Questo non ha alcun effetto su ciò che hai fatto poiché è solo una motivazione per il tuo approccio.
Michael R. Chernick,

1
@Michael Grazie - hai perfettamente ragione. Un altro motivo per cui non ha attinenza con il metodo delineato qui è che questo metodo comporta ancora la somma delle variabili di Bernoulli con un parametro comune: il parametro è per tutte le variabili e per tutte le variabiliPer mantenere il post ragionevolmente breve, non ho presentato istogrammi delle distribuzioni marginali per dimostrare che sono effettivamente binomiali (ma in realtà l'ho fatto nella mia analisi originale solo per assicurarmi che funzionassero!). X q YpXqY
whuber

@whuber Bel approccio! Potete per favore fatemi sapere se c'è qualche documento a cui posso fare riferimento ??
T Nick
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.