5

假设我想创建 50 个长度为 100 的二进制变量,每个变量都相互关联。

因为我创建了一个具有指定 rho 的相关矩阵:

cor.mat <- matrix(0.2,nrow=50, ncol=50)
diag(cor.mat) <- 1

接下来我使用rmvbin

library(bindata)
rmvbin<-rmvbin(100, margprob=x, bincorr=cor.mat)

但是,我不确定如何计算 margprob 参数。有人可以帮忙吗?

它应该是每行和每列中概率之和的向量吗?

4

2 回答 2

4

margprob应该只是任何单个二进制变量为 1 的概率的重复向量,与其余变量无关;调用这个值p。假设分布相同的变量(给定您的相关矩阵似乎就是这种情况) margprob=rep(p,50),.

它不应该是每行和每列中概率之和的向量,因为相关矩阵不能用于确定边际概率。如果您无法确定随机变量的边际概率是多少,则必须为该问题提供更多背景信息,这将是一个更适合math.stackexchange.com的问题。

于 2013-09-27T17:27:18.097 回答
4

我认为问题在于人们认为解决方案过于简单或没有正确指定。您实际上并没有计算边际概率......您指定它们。然后该rmvbin函数使用边际概率的规范和联合相关性来进行所需的采样,以(平均)给出与这些规范相匹配的联合分布。

library(bindata)
rmvbin<-rmvbin(100, margprob=rep(.5,50), bincorr=cor.mat)

> str(rmvbin)
 num [1:100, 1:50] 0 0 0 1 0 0 0 1 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : NULL

因此,要查看此结果的采样特征,您可以看到与第一列有什么相关性:

Hmisc::describe(apply(rmvbin[,-1], 2, function(col) cor(col, rmvbin[,1]) ) )
apply(rmvbin[, -1], 2, function(col) cor(col, rmvbin[, 1])) 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90 
     49       0      38  0.2009 0.05886 0.09874 0.13309 0.19372 0.25208 0.29723 
    .95 
0.33772 

lowest : 0.03508 0.04013 0.08696 0.09874 0.10889
highest: 0.29942 0.32450 0.34653 0.40902 0.46714 

因此,采样下的平均相关性非常接近标称值 0.2。但它确实差异很大。

于 2013-09-30T02:00:45.850 回答