我使用r2openbugs拟合一组模型。这需要我为我尝试的每个模型创建一个新的模型文件。我有一组我想测试的组合(不同的协变量集,是否包括随机效应,是否计算预测等)。我想创建一个脚本,它接受一组参数(包括协变量列表,随机效果和预测的T / F)并输出一个有效的openbugs模型文件。
目前对此问题的尝试: 我目前正在编写我想要使用的每个模型,并使用R闭包在它们之间进行选择。但是,这显然会复制很多代码,并且需要很长时间。我确信可以通过根据某些参数添加/修改基本模型的文本来生成适当的模型文件,但我真的不知道从哪里开始。
我想用R来做这件事,但如果有必要,我很乐意使用bash。
示范模型:
BASIC GLM MODEL
create_model(random_effects = F,
predictions = F,
cov_names = c(cov1, cov2, cov3))
将返回
for (k in 1:N_data) {
BetaX_data[k] <- beta[1] +
beta[2] * cov1[k] +
beta[3] * cov2[k] +
beta[4] * cov3[k]
logit(pi_data[k]) <- BetaX_data[k]
m[k] ~ dbin(pi_data[k], n[k])
}
## PRIORS ##
for (g in 1:N_cov) {
beta[g] ~ dnorm(0, 0.00001)
}
GLMM MODEL(与之前的型号相同,但为随机效果添加线条)
create_model(random_effects = T,
predictions = F,
cov_names = c(cov1, cov2, cov3))
将返回
for (i in 1:N_loc) { ## additional lines
U[i] ~ dnorm(0, tau_iid)
}
for (k in 1:N_data) {
BetaX_data[k] <- beta[1] +
beta[2] * cov1[k] +
beta[3] * cov2[k] +
beta[4] * cov3[k]
logit(pi_data[k]) <- BetaX_data[k] + U[location_id[k]]
m[k] ~ dbin(pi_data[k], n[k])
}
## PRIORS ##
for (g in 1:N_cov) {
beta[g] ~ dnorm(0, 0.00001)
}
tau_iid ~ dgamma(0.001,0.001) ## additional lines
GLM模型(删除了cov2)
create_model(random_effects = F,
predictions = F,
cov_names = c(cov1, cov3))
将返回
for (k in 1:N_data) {
BetaX_data[k] <- beta[1] +
beta[2] * cov1[k] +
beta[3] * cov3[k] ## lines changed
logit(pi_data[k]) <- BetaX_data[k]
m[k] ~ dbin(pi_data[k], n[k])
}
## PRIORS ##
for (g in 1:N_cov) {
beta[g] ~ dnorm(0, 0.00001)
}
GLM模型(有预测)
create_model(random_effects = F,
predictions = T,
cov_names = c(cov1, cov2, cov3))
将返回
for (k in 1:N_data) {
BetaX_data[k] <- beta[1] +
beta[2] * cov1[k] +
beta[3] * cov2[k] +
beta[4] * cov3[k]
logit(pi_data[k]) <- BetaX_data[k]
m[k] ~ dbin(pi_data[k], n[k])
}
## PRIORS ##
for (g in 1:N_cov) {
beta[g] ~ dnorm(0, 0.00001)
}
## PREDICTIONS ##
for(l in 1:N_pred) { # additional lines which also
# change depending on covariate set
BetaX_pred[l] <- beta[1] +
beta[2] * cov1[l] +
beta[3] * cov2[l] +
beta[4] * cov3[l]
logit(pi_pred[l]) <- BetaX_pred[l]
}
答案 0 :(得分:0)
我不知道为OpenBUGS专门做这个的方法,但你可以在runjags包(https://www.rdocumentation.org/packages/runjags/versions/2.0.4-2/topics/template.jags)中查看template.jags函数,它完全符合你对JAGS模型的要求但是基于lme4风格的模型语法。另请参见此处的“生成GLMM模板”部分:
http://runjags.sourceforge.net/quickjags.html
如果你使用write.data = FALSE和write.inits = FALSE,那么它只是创建模型,它也应该是有效的OpenBUGS代码。或者您可以只安装JAGS并使用它:)
希望有所帮助。
马特