如何生成n个相关项的二项式向量?

时间:2017-10-30 01:07:24

标签: r random correlation bindata

我想基于多个相关项生成二项式向量,每个相关项都具有定义的概率。当我使用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...,如开头所示,但是从中得出的项目应该是与可定义的程度相关(即其中一个项目可能根本没有相关性)。

0 个答案:

没有答案