通常通过对独立的伯努利变量求和来创建二项式变量。让我们看看是否可以从一对相关的伯努利变量并做同样的事情。(X,Y)
假设是伯努利变量(即和),是伯努利变量。为了确定他们的联合分布,我们需要指定结果的所有四个组合。写我们可以很容易地从概率公理中找出其余部分:X(p )PR (X= 1 )= pý (q )PR ((X ,Ý )= (0 ,0 ))= 一,镨((X ,Ý )= (1 ,0 ))= 1 − q − a ,PR (X= 0 )= 1 − pÿ(q)
PR ((X,Y)= (0 ,0 ))= 一,
PR ((X,Y)= (1 ,0 ))= 1 - q− a ,PR ((X,Y)= (0 ,1 ))= 1 - p - 一个,PR ((X,Y)= (1 ,1 ))= 一个+ p + q− 1。
将其代入相关系数的公式并求解,即可得出一个= (1 - p )(1 - q )+ ρ √ρ
a = (1 − p )(1 − q)+ ρ p q(1 − p )(1 − q)-------------√。(1)
假设所有四个概率均为非负数,这将给出有效的联合分布-并且此解决方案将所有双变量伯努利分布参数化。(当,对于和之间所有在数学上有意义的相关性都有一个解。)当我们对这些变量中的求和时,相关性保持不变-但现在边际分布为二项式和根据需要二项式。− 1 1 n (n ,p )(n ,q )p = q− 11个ñ(n ,p )(Ñ ,q)
例
令,,,我们希望相关性为。到该溶液中是(以及其他的概率大约,,和)。这是来自联合分布的实现的图:n = 10q = 3 / 4 ρ = - 4 / 5 (1 )一个= 0.00336735 0.247 0.663 0.087 1000p = 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 ,ÿ )ñ{ 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)