以下是模拟数据的功能:
library(mvtnorm)
simu <- function(J,n_j,g00,g10,g01,g11,s2_0,s2_1,s01){
N = sum(rep(n_j,J))
x = rnorm(N)
z = rnorm(J)
mu <- c(0,0)
sig <- matrix(c(s2_0,s01,s01,s2_1),ncol=2)
u <- rmvnorm(J,mean=mu,sigma=sig)
pi_0 <- g00 + g01*z + u[,1]
pi_1 <- g10 + g11*z + u[,2]
eta <- rep(pi_0,each=n_j) + (rep(pi_1,each=n_j))*x
p = exp(eta)/(1+exp(eta))
y <- rbinom(N,1,p)
data <- data.frame(Y=y,X=x,Z=rep(z,each=n_j),cluster=rep(1:J,each=n_j))
return(data)
} # end function simu
a=replicate(5,simu(30,5,-1,.3,.3,.3,.13,1,0)
我希望为参数值的各种组合复制函数simu
1000次,这需要花费很长的处理时间。每次我必须从模拟数据计算许多汇总度量。但是在一次会议中是不可能的。所以我需要设置seed命令,以便a=replicate(5,simu(30,5,-1,.3,.3,.3,.13,1,0))
在每个会话中生成相同的数据集。
我该怎么做?
我想到了类似的东西:
for (i in 1:5){
set.seed(i)
a[i]=simu(30,5,-1,.3,.3,.3,.13,1,0))
}
但它没有用。如果我可以在不使用seed
命令的情况下在其他地方设置for loop
命令会更好。有可能吗?
谢谢!问候。