如何计算生成相关二元变量的边际概率

时间:2013-09-18 12:44:31

标签: r bindata

假设我要创建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参数。有人可以帮忙吗?

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

2 个答案:

答案 0 :(得分:4)

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

它不应该是每行和每列中概率之和的向量,因为相关矩阵不能用于确定边际概率。如果您在确定随机变量的边际概率时遇到问题,则必须为问题提供更多上下文,这对math.stackexchange.com更合适。

答案 1 :(得分: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。但确实差异很大。

相关问题