假设我有4(n = 4)枚导弹,其击中概率为p(p = 0.5)。它们在同一环境中同时被解雇。因此,每枚导弹都应与其他三枚导弹有关。例如,当corr = 1时,所有导弹都会命中或错过。当corr = 0时,它们是二元和独立分布的。
具有挑战性的部分是相关性不能为-1。由于有两个结果(未命中或命中)。
所以我想生成一个随机的离散二项式值(假设在0和4之间,概率为0.4,相关性= 0.6)
我的代码如下。
n <- 100 # size
p <- 0.4 # probability
corr <- 0.6 # correlation
trial <- 10000 # number of trials
p <- rep(p, n)
rho <- corr
library(bindata)
off <- rmvbin(trial, p, bincorr=(1 - rho)*diag(n) + rho)
off
[,1] [,2] [,3] [,4]
[1,] 0 0 1 0
[2,] 0 0 0 0
[3,] 1 1 1 1 # This part gives correlated
[4,] 1 0 1 0 # Bernoulli var for 10000
[5,] 0 0 0 0 # trial. When you sum each
[6,] 1 1 1 1 # row, you get random correlated
[7,] 1 1 1 0 # number of missiles.
[8,] 0 0 0 0
........................
[10000,] 0 0 1 0
cor(off)
[,1] [,2] [,3] [,4]
[1,] 1.0000000 0.6015165 0.5987907 0.6005857 # correlation is as
[2,] 0.6015165 1.0000000 0.6019365 0.6012273 # demanded.
[3,] 0.5987907 0.6019365 1.0000000 0.5972144 #
[4,] 0.6005857 0.6012273 0.5972144 1.0000000 #
但是,当size(n)变大时,代码的健壮性和准确性正在下降。
有没有办法生成它? (在给定相关的区间之间生成整数。)