2

我正在拟合以下内容:

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”中的交互项?

4

1 回答 1

0

找不到您所指的数据,所以我在下面生成了虚拟变量;

排除对我也不起作用,所以我将排除硬编码到公式中。以下代码对我有用,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= "-")))
于 2018-08-27T01:03:38.193 回答