Я пытаюсь найти способ генерации коррелированных случайных чисел из нескольких биномиальных распределений.
Я знаю, как это сделать с обычными дистрибутивами (используя mvrnorm), но я не нашел функцию, применимую к биномиальным.
Я пытаюсь найти способ генерации коррелированных случайных чисел из нескольких биномиальных распределений.
Я знаю, как это сделать с обычными дистрибутивами (используя mvrnorm), но я не нашел функцию, применимую к биномиальным.
Вы можете создать коррелированную униформу с помощью пакета copula
, а затем использовать функцию qbinom
, чтобы преобразовать их в биномиальные переменные. Вот один быстрый пример:
library(copula)
tmp <- normalCopula( 0.75, dim=2 )
x <- rcopula(tmp, 1000)
x2 <- cbind( qbinom(x[,1], 10, 0.5), qbinom(x[,2], 15, 0.7) )
Теперь x2
- это матрица с 2 столбцами, представляющими две биномиальные переменные, которые коррелированы.
Биномиальная переменная с n испытаниями и вероятностью p успеха в каждом испытание можно рассматривать как сумму n испытаний Бернулли, каждая из которых также имеет вероятность успеха p.
Аналогично, вы можете построить пары коррелированных биномиальных вариаций на суммируя пары вариаций Бернулли с нужной корреляцией r.
require(bindata)
# Parameters of joint distribution
size <- 20
p1 <- 0.5
p2 <- 0.3
rho<- 0.2
# Create one pair of correlated binomial values
trials <- rmvbin(size, c(p1,p2), bincorr=(1-rho)*diag(2)+rho)
colSums(trials)
# A function to create n correlated pairs
rmvBinomial <- function(n, size, p1, p2, rho) {
X <- replicate(n, {
colSums(rmvbin(size, c(p1,p2), bincorr=(1-rho)*diag(2)+rho))
})
t(X)
}
# Try it out, creating 1000 pairs
X <- rmvBinomial(1000, size=size, p1=p1, p2=p2, rho=rho)
# cor(X[,1], X[,2])
# [1] 0.1935928 # (In ~8 trials, sample correlations ranged between 0.15 & 0.25)
Важно отметить, что существует множество различных совлокальных распределений, которые разделяют желаемый коэффициент корреляции. Метод моделирования в rmvBinomial()
создает один из них, но независимо от того, зависит ли он от процесса, генерирующего ваши данные.
Как отмечено в этот ответ R-help на аналогичный вопрос (который затем продолжается более подробно объясните идею):
тогда как двумерная нормаль (заданные средства и дисперсии) однозначно определяется коэффициентом корреляции, это не относится к двумерному биномиальному