我正在通过模拟 ID 拆分我的数据集,并将 runjags 函数同时应用于每个子集。
现在,每个模拟都包含 1000 个观测值。我知道有时观察的数量会有所不同,因为我会删除符合某些标准的行。我不知道有多少观察会被丢弃,但我可以通过使用来计算groupobs <- fulldata %>% count(SimulID, sort=TRUE).
有没有一种方法可以在每次模拟运行期间更改 N=1000。这意味着每次运行的模拟都必须重写 tempModel.txt 文件。
谢谢你。
#Subset data by SimulID
subsetdata <- split(fulldata, as.factor(fulldata$SimulID))
#Count obs within each group
groupobs <- fulldata %>% count(SimulID, sort=TRUE)
modelString <- "
model{
#Model specification
for (i in 1:1000) {
y[i]~dnorm(muy[i], Inv_sig2_e)
muy[i]<-b0+b1*x1[i]+b2*x2[i]
}
#priors
b0~dnorm(0, 1.0E-6)
b1~dnorm(0, 1.0E-6)
b2~dnorm(0, 1.0E-6)
Inv_sig2_e~dgamma(1.0E-3, 1.0E-3)
#parameter transformation
Sig2_e<-1/Inv_sig2_e
}
"
writeLines(modelString, "tempModel.txt")
output_models <- lapply(subsetdata, function(x){
model_data = x
initsList1 <- list(b0=1, b1=1, b2=1, Inv_sig2_e=1)
initsList2 <- list(b0=1, b1=2, b2=3, Inv_sig2_e=1)
initsList3 <- list(b0=2, b1=3, b2=4, Inv_sig2_e=1)
runJagsOut <- run.jags(method = "parallel",
model = "tempModel.txt",
# NOTE: theta and omega are vectors:
monitor = c( "b0","b1","b2","Sig2_e"),
data = model_data,
inits = list(initsList1, initsList2, initsList3), # NOTE: Let JAGS initialize.
n.chains = 3, # NOTE: Not only 1 chain.
adapt = 500,
burnin = 2500,
sample = 2500,
thin = 1,
summarise = FALSE,
plots = FALSE)
})