Генерация коррелированных биномиальных случайных величин

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)
rnorouzian
источник
2
Y1 и могут быть связаны, но они больше не будут биномиальными. Например, тогда Y_1 = 1.5, следовательно, Y_i не может быть биномиальными случайными величинами. Я бы посоветовал вам заглянуть в полиномиальный дистрибутив. X 1 = X 2 = 1 Y 1 = 1,5 Y iY2Икс1знак равноИкс2знак равно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+Q-1.

Включение этого в формулу для коэффициента корреляции и ее решение дает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 1000n=10p=1/3q=3/4ρ=4/5(1)a=0.003367350.2470.6630.0871000

разброс точек

Красные линии обозначают средние значения выборки, а пунктирная линия - линия регрессии. Все они близки к их предполагаемым значениям. Точки были случайно выбиты на этом изображении для устранения перекрытий: в конце концов, биномиальные распределения дают только целые значения, поэтому будет большое количество переполнений.

Один из способов генерирования этих переменных - выборка раз из с выбранными вероятностями, а затем преобразование каждого в , каждого в , каждого в и каждый в . Суммируйте результаты (как векторы), чтобы получить одну реализацию .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)
Whuber
источник
Можно ли расширить этот подход для генерации любого числа двоичных переменных? - соответствовать заданной матрице корреляции (или максимально близко соответствовать ей)?
ttnphns
1
@ttnphns Да, но варианты взрываются: таблица вероятности должна определяться предельными параметрами, ограничением суммы в единицу и (следовательно) дополнительными параметрами. Очевидно, у вас будет большая свобода выбора (или ограничения) этих параметров в соответствии с многомерными свойствами, которые вы хотите создать. Кроме того, аналогичный подход может быть использован для генерации коррелированных биномиальных переменных с различными значениями их « » параметров. Парвин: Я считаю, что «когда мы суммируем этих переменных», однозначно объясняется, что представляет собой . 2kk2kk1nnn
whuber
Это хороший результат. Просто чтобы немного выбрать первое предложение. Чтобы получить бином из независимых переменных Бернулли, им не нужно иметь одинаковое p? Это не влияет на то, что вы сделали, так как это просто мотивация для вашего подхода.
Майкл Р. Черник
1
@ Майкл Спасибо - ты совершенно прав. Другая причина, по которой он не имеет отношения к описанному здесь методу, состоит в том, что этот метод все еще включает суммирование переменных Бернулли с общим параметром: параметр равен для всех переменных и для всех переменныхЧтобы сохранить этот пост достаточно коротким, я не представил гистограммы маргинальных распределений, чтобы продемонстрировать, что они действительно являются биномиальными (но я действительно сделал это в своем первоначальном анализе, просто чтобы убедиться, что они работают!). пИксQY
whuber
@whuber Хороший подход! Можете ли вы дать мне знать, если есть бумага, на которую я могу сослаться?
T Ник