我想基于多个相关项生成二项式向量,每个相关项都具有定义的概率。当我使用e。 G。 rbinom(1e3, size = 4, prob = c(p.x1, p.x2, p.x3, p.x4))
我得到类似3 3 0 0 2 4 1 0 4 4 0 1 4...
的内容。现在这些x_i具有确定的概率但不相关。
五年前, Josh O'Brien 为generate correlated binomial data贡献了一个很好的方法。我认为它接近我的需求,但它是针对成对设计的,我想要1.,单个向量和2.,更多变量 p 。我已经尝试修改函数以生成更多变量但到目前为止没有成功,我经常面对
Error in commonprob2sigma(commonprob, simulvals) :
Matrix commonprob not admissible.
由导入的bindata
包发送。
我的想法是在Josh's function中定义四个(或更好的任意数量的)概率和 rhos ,类似
rmvBinomial3 <- function(n, size, p1, p2, p3, p4, rho) {
X <- replicate(n, {
colSums(rmvbin(size, c(p1,p2,p3,p4), bincorr=(1-rho)*diag(4)+rho))
})
t(X)
}
当然 - 需要更多 rhos ,我想应该以某种方式包含概率矩阵,因为可以使用bindata
包来完成。我不知道如何加入它。
rho1 <- -0.89; rho2 <- -0.75; rho3 <- -0.62; rho4 <- -0.59
m <- matrix(c(1, rho1, rho2, rho3,
rho1, 1, rho4, rho2,
rho2, rho4, 1, rho1,
rho3, rho2, rho1, 1), ncol = 4)
# [,1] [,2] [,3] [,4]
# [1,] 1.00 -0.89 -0.75 -0.62
# [2,] -0.89 1.00 -0.59 -0.75
# [3,] -0.75 -0.59 1.00 -0.89
# [4,] -0.62 -0.75 -0.89 1.00
不幸的是,为了符合我bindata
检查bindata::check.commonprob(m)
的条件,每个矩阵都会抛出与上面相同的错误。我也无法完成bindata::commonprob2sigma()
创建的矩阵。
对我来说另一个缺点是Josh rmvBinomial()
的范围,它似乎仅在p.X_i = 0.2--0.8的值之间起作用,我需要更小的值,例如0.01--0.1也是。
非常感谢任何帮助。
编辑: 为了澄清,预期的结果确实只是一个单一的向量3 3 0 0 2 4 1 0 4 4 0 1 4...
,如开头所示,但是从中得出的项目应该是与可定义的程度相关(即其中一个项目可能根本没有相关性)。