从混合模型中删除所有固定效果

时间:2013-11-06 14:58:05

标签: r lme4 mixed-models lmer

我尝试使用lmer自动使用混合模型语句识别和删除固定效果的方法。简而言之,我的方法是使用fixef来获取固定的效果名称,然后使用update从模型语句中删除它们。我遇到了一些障碍......

首先,如果固定因子不连续,则fixef返回附加治疗级别的变量名称(例如,levels(variable1)=c("A","B","C")将返回variable1Bvariable1C) 。我尝试通过部分匹配解决这个问题,但我确信它在所有情况下都不会成功(见下文)。

其次,如果存在交互,则部分匹配会崩溃,并且仅识别第一个术语(例如,仅从variable1返回variable1:variable)。我不确定如何解决这个问题。

以下是一些示例代码:

#Create example data
set.seed(9)
data=data.frame(y=rnorm(100,5,10),y.binom=rbinom(100,1,0.5),
                y.poisson=rpois(100,5),fixed1=rnorm(100,20,100),
                fixed2=c("Treatment1","Treatment2"),covar=rnorm(100,20,100),
                rand1=LETTERS[1:2],
                rand2=c(rep("W",25),rep("X",25),rep("Y",25),rep("Z",25)))

library(lme4)

#Fit generalized linear mixed effects model
mod=glmer(y.poisson~fixed1*fixed2+covar+(1|rand2/rand1),family="poisson",data)
#Pull out names of fixed effects
fixef.names=do.call(rbind,lapply(1:length(names(fixef(mod))[-1]),function(j) {
  d=colnames(mod@frame)[pmatch(colnames(mod@frame),names(fixef(mod))[-1][j])>0]
  d[!is.na(d)] } ) )[,1]
# Generate null model (intercept and random effects only, no fixed effects)
null.mod=update(mod,paste(".~.-",paste(fixef.names,collapse="-"),sep=""))

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

findbars()中有一个内置lme4功能,可以帮助您完成大部分工作。您仍然需要解析结果(它们作为language对象返回);用括号保护它们;并将它们粘在配方中。但这似乎有效:

parens <- function(x) paste0("(",x,")")
onlyBars <- function(form) reformulate(sapply(findbars(form),
                                              function(x)  parens(deparse(x))),
                                              response=".")
onlyBars(formula(mod))
## . ~ (1 | rand1:rand2) + (1 | rand2)
update(mod,onlyBars(formula(mod)))

答案 1 :(得分:0)

1)单独使用单个效果:将命名为'variable',然后将处理与用于拟合的数据框中的某些内容进行匹配,获取正确的名称以提取/添加到更新语句中?< / p>

2)对于交互,也许尝试使用:首先进行strsplit。然后检查输出的长度。如果> 1,则匹配两个变量,并根据需要删除/添加更新。它不会像功能一样优雅,但它应该有效。

3)为什么不使用glmulti库?它已经以自动方式完成了这项工作。如果您不想要所有合适的模型,只需提取您想要的并继续前进。但它会将所有拟合对象存储在其对象结构中。