我想用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)
答案 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
此方法的参考是
Leisch,Friedrich和Weingessel,Andreas和Hornik,Kurt(1998)关于相关人工二进制数据的生成。工作文件SFB“经济和管理科学中的自适应信息系统和建模”,第13页。SFB经济和管理科学中的自适应信息系统和建模,WU维也纳经济贸易大学,维也纳。 https://epub.wu.ac.at/286/