2

我想根据多个相关项目生成一个二项式向量,每个项目都具有定义的概率。当我使用 egrbinom(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贡献了一种很好的方法来生成相关的二项式数据。我认为它接近我的需求,但它是为成对设计的,我想要 1.,单个向量和 2.,更多变量p。我已经尝试修改函数以产生更多的变量,但到目前为止没有成功,我经常面临

Error in commonprob2sigma(commonprob, simulvals) : 
Matrix commonprob not admissible. 

由导入的bindata包发送。

我的想法是在Josh 的函数中定义四个(或更好的任意数量)概率和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's 的范围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...的向量,如开头所示,但它所派生的项目应该与可定义的程度相关(即其中一个项目可能根本没有相关性)。

4

0 回答 0