Генерування корельованих біноміальних випадкових величин


21

Мені було цікаво, чи можливо генерувати корельовані випадкові біноміальні змінні після підходу лінійної трансформації?

Нижче я спробував щось просто в R, і це дає певну кореляцію. Але мені було цікаво, чи існує принциповий спосіб цього зробити?

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 і можуть бути співвіднесені, але вони більше не будуть двочленними. Наприклад, то отже, не може бути біноміальними випадковими змінними. Я б запропонував вам ознайомитись з розподілом мультином. X 1 = X 2 = 1 Y 1 = 1,5 Y iY2X1=X2=1Y1=1.5Yi
knrumsey

1
Коротка відповідь на питання полягає в пошуку ключового слова copula, що допомагає генерувати залежні змінні з фіксованими полями.
Сіань

Відповіді:


32

Біноміальні змінні зазвичай створюються шляхом підсумовування незалежних змінних Бернуллі. Подивимось, чи можемо ми почати з пари корельованих змінних Бернуллі і зробити те саме.(X,Y)

Припустимо, - змінна Бернуллі (тобто і ), а - змінна Бернуллі . Для закріплення їх спільного розподілу нам потрібно вказати всі чотири комбінації результатів. Записуючи ми можемо легко зрозуміти решту з аксіом вірогідності:( p ) Pr ( X = 1 ) = p Pr ( X = 0 ) = 1 - p Y ( q ) Pr ( ( X , Y ) = ( 0 , 0 ) ) = a , Pr ( ( X , Y ) = ( 1 , 0 ) ) = 1 - qX(p)Pr(X=1)=pPr(X=0)=1pY(q)

Pr((X,Y)=(0,0))=a,
Pr((X,Y)=(1,0))=1qa,Pr((X,Y)=(0,1))=1pa,Pr((X,Y)=(1,1))=a+p+q1.

Підключення цього до формули для коефіцієнта кореляції і розв’язування даєa = ( 1 - p ) ( 1 - q ) + ρ ρ

(1)a=(1p)(1q)+ρpq(1p)(1q).

За умови, що всі чотири ймовірності є негативними, це дасть дійсний спільний розподіл - і це рішення параметризує всі біваріантні розподіли Бернуллі. (Коли , існує рішення для всіх математично значущих кореляцій між і ) Коли ми підсумовуємо цих змінних, кореляція залишається такою ж, - але тепер граничні розподіли є двочленними і Біноміал , за бажанням.- 1 1 n ( n , p ) ( n , q )p=q11n(n,p)(n,q)

Приклад

Нехай , , , і ми хотіли б, щоб кореляція була . Рішення для дорівнює (а інші ймовірності - приблизно , та ). Ось сюжет з реалізацій від спільного розподілу:р = 1 / 3 д = 3 / 4 ρ = - 4 / 5 ( 1 ) = 0,00336735 0,247 0,663 0,087 тисячіn=10p=1/3q=3/4ρ=4/5(1)a=0.003367350.2470.6630.0871000

Діаграма розкиду

Червоні лінії позначають засоби вибірки, а пунктир - лінія регресії. Всі вони близькі за призначенням. На цьому зображенні випадково розхитуються точки, щоб вирішити перекриття: зрештою, біноміальні розподіли дають лише цілісні значення, тому буде велика кількість перенапруг.

Один із способів генерування цих змінних - вибірка разів з з обраними ймовірностями, а потім перетворення кожного у , кожного у , кожного в , і кожен в . Підсумуйте результати (як вектори), щоб отримати одну реалізацію .{ 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)

Код

Ось Rреалізація.

#
# 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)

Чи можна розширити цей підхід для генерації будь-якої кількості бінарних змінних? - підходити до заданої кореляційної матриці (або максимально близької до неї)?
ttnphns

1
@ttnphns Так, але параметри вибухають: таблиця ймовірностей повинна визначатись граничними параметрами , обмеженням суми до єдності та (отже) додатковими параметрами . Очевидно, ви б мали багато свободи вибирати (або обмежувати) ці параметри відповідно до багатоваріантних властивостей, які ви хочете створити. Крім того, подібний підхід може бути використаний для генерації корельованих біноміальних змінних з різними значеннями їх " " параметрів. Парвін: Я вважаю, "коли ми зведемо цих змінних" однозначно пояснює, що собою являє . k 2 k - k - 1 n n n2kk2kk1nnn
whuber

Це приємний результат. Просто, щоб трохи вибрати своє перше речення. Щоб отримати двочлен від незалежних змінних Бернуллі, їм не потрібно мати однаковий p? Це не впливає на те, що ви робили, оскільки це лише мотивація для вашого підходу.
Майкл Р. Черник

1
@Michael Дякую - ти абсолютно прав. Ще одна причина, яка не має стосунку до описаного тут методу, полягає в тому, що цей метод все ще включає підсумовування змінних Бернуллі за загальним параметром: параметр для всіх змінних і для всіх зміннихЩоб посада була досить короткою, я не представив гістограми граничних розподілів, щоб продемонструвати, що вони справді є двочленними (але я фактично це зробив у своєму первісному аналізі, щоб переконатися, що вони працюють!). X q YpXqY
whuber

@whuber Гарний підхід! Чи можете ви, будь ласка, дайте мені знати, чи є якийсь папір, на який я можу посилатись ??
T Нік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.