模拟相关的伯努利数据

时间:2020-01-04 22:13:01

标签: r simulation

我想用5列模拟100个数据。我希望各列之间的相关性为0.5。为了完成它,我已经做了以下动作

F1 <- matrix( c(1, .5, .5, .5,.5,
                   .5, 1, .5, .5,.5,
                   .5, .5, 1, .5,.5,
                   .5, .5, .5, 1,.5,
                   .5, .5, .5, .5,1
), 5,5)

我已经完成了模拟目标数据帧的操作,但是无法正常工作。

 df2 <- as.data.frame (rbinom(100, 1,.5),ncol(5), F1)

1 个答案:

答案 0 :(得分:2)

我很惊讶这不是重复项(this question特别是指非二进制响应,即N> 1的二项式)。 bindata package做您想要的。

library(bindata)
## set up correlation matrix (compound-symmetric with rho=0.5)
m <- matrix(0.5,5,5)
diag(m) <- 1

模拟平均值为0.5(如您的示例):

set.seed(101)
## this simulates 10 rather than 100 realizations
## (I didn't read your question carefully enough)
## but it's easy to change
r <- rmvbin(n=10, margprob=rep(0.5,5), bincorr=m)
round(cor(r,2))

结果

 1.00 0.22  0.80  0.05 0.22
 0.22 1.00  0.00  0.65 1.00
 0.80 0.00  1.00 -0.09 0.00
 0.05 0.65 -0.09  1.00 0.65
 0.22 1.00  0.00  0.65 1.00
  • 这看起来是错误的-相关性不完全是0.5-但平均会 (当我采样10,000个矢量而不是10个矢量时,值的范围在0.48到0.51之间)。同样,如果模拟许多10个样本并计算每个样本的相关矩阵,则应该发现预期的(平均)相关矩阵是正确的。
  • 模拟具有精确精确的值等于指定值要困难得多(根据应用程序的不同,不一定要执行任何操作)
  • 请注意,对于什么均值向量和相关矩阵可行,将存在限制。例如,n×n的化合物对称(等相关)矩阵的对角线元素不能小于-1 /(n-1)。同样,对于给定的一组均值,可能存在哪些相关性可能存在限制(这可能会在技术参考中进行讨论,我尚未检查)。

此方法的参考是

Leisch,Friedrich和Weingessel,Andreas和Hornik,Kurt(1998)关于相关人工二进制数据的生成。工作文件SFB“经济和管理科学中的自适应信息系统和建模”,第13页。SFB经济和管理科学中的自适应信息系统和建模,WU维也纳经济贸易大学,维也纳。 https://epub.wu.ac.at/286/