假设我要创建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参数。有人可以帮忙吗?
它应该是每行和每列中概率总和的向量吗?
答案 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。但确实差异很大。