metafor в сочетании с glmulti: как исключить нежелательные взаимодействия
Я подхожу к следующему:
rma.glmulti.ran <- function (formula, data, random, ...) {
rma.mv(as.formula(paste(deparse(formula))), Variance, random= ~1 | Experiment, data = msa, method="REML", ...)
}
msa_res <- glmulti(MSA ~ MAPl+MAT_e+Duration.yrl+Fert+Naddl+Ndepl,
data=msa,
level=2,
exclude=c("MAPl:MAT_e","MAPl:Duration.yrl","MAPl:Fert",
"MAPl:Naddl","MAPl:Ndepl","MAT_e:Duration.yrl","MAT_e:Fert","MAT_e:depl",
"Duration.yrl:Fert","Duration.yrl:Ndepl","Duration.yrl:Naddl","Fert:Ndepl","Naddl:Ndepl"),
fitfunction=rma.glmulti.ran, crit="aicc")
Целью этого кода является включение только этих двух взаимодействий: "Naddl:MAT_e" и "Naddl:Fert". Таким образом, я использую exclude=c()
отфильтровывать все другие нежелательные парные взаимодействия из полной модели (level=2
).
Это, теоретически, должно быть таким же, как:
MSA ~ MAPl + MAT_e + ... + Naddl:MAT_e + Naddl:Fert
Однако я получаю эту ошибку, когда я добавляю exclude=c()
в формуле:
Error in glmulti(MSA ~ MAPl + MAT_e + Duration.yrl + Fert + Naddl + Ndepl, :
Improper call of glmulti.
Я что-то упустил exclude=c()
? Есть ли более элегантный способ указать термины взаимодействия в 'glmulti'?
1 ответ
Не удалось найти данные, на которые вы ссылались, поэтому я сгенерировал фиктивные переменные ниже;
Исключение не работает для меня тоже, поэтому я жестко закодировал исключение в формуле. Следующий код работал для меня, и никакие нежелательные взаимодействия не пошли в glmulti.
library('utils')
retain_var <- c('DOW_MON','DOW_TUE','DOW_WED','DOW_THU') #set variables interested for testing
excl_inter_effects <- c('DOW_FRI','DOW_SAT','DOW_SUN') #set variables to exclude
set_depth <- 2 #generate 2 way interaction to exclude explicitly
excl_inter_form <- t(combn(excl_inter_effects,set_depth))
Paste <- function(x) paste(x, collapse = ":")
excl_inter_form <- apply(excl_inter_form, 1, Paste)
rm(list = c('Paste','set_depth','excl_inter_effects')) #clean up
# ----- Generate formula incorporating exclusion -----
glm_formula <- as.formula(paste("y ~",paste(retain_var, collapse= "+"),"-",paste(excl_inter_form, collapse= "-")))