我正在使用 r2openbugs 拟合一组模型。这需要我为我尝试的每个模型创建一个新的模型文件。我有一组我想测试的组合(不同的协变量集,是否包含随机效应,是否计算预测等)。我想创建一个脚本,它采用一组参数(要包含的协变量列表、随机效应和预测的 T/F)并输出有效的 openbugs 模型文件。
当前对该问题的尝试:我目前正在写出我希望使用的每个模型,并使用 R 闭包在它们之间进行选择。但是,这显然是重复了很多代码,并且需要很长时间。我确信可以通过根据某些参数添加/修改基本模型的文本来生成适当的模型文件,但我真的不知道从哪里开始。
我想使用 R 来做到这一点,但如果有必要,我很乐意使用 bash。
示例模型:
基本 GLM 模型
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]
}