(lmerTest)中lme4模型的总结

5
如果有以下数据:
d = data.frame(out=rnorm(10), explain=rnorm(10), age=rnorm(10), sex=sample(c("M", "F"), size=10, replace=T), group=rep(c(1:5), 2))
f = as.formula("out ~ explain + age + sex + (1|group)")

如果你想使用lme4拟合线性模型,可以这样做:

require(lme4)
require(lmerTest)
m  = lmer(f, d)
s  = summary(m)

可以,这很好。但是如果该模型在另一个函数中进行拟合,例如

gglm = function(form, data){
    lm = lmer(form, data=data)
    return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)

我遇到了一个错误。

summary from lme4 is returned
some computational error has occurred in lmerTest

显然,这是因为模型的匹配是使用一个名为data的对象完成的,该对象在外部范围内不可见。因此,如果我执行data = d,我将获得与之前相同的结果。但是,如果我执行

data = data.frame(out=rnorm(10), explain=rnorm(10), age=rnorm(10), sex=sample(c("M", "F"), size=10, replace=T), group=rep(c(1:5), 2))

使用 lmerTest 的汇总结果可能会出现错误,因为它在处理数据时与普通的 lm 和对应的 summary 函数不同。这种方法似乎不是最优解,容易出错。 是否有办法使 lmerTest 的总结更少出现错误?


看起来是作用域问题。您应该提交一个错误报告。 - Roland
可能是一个bug,但请检查一下https://dev59.com/DGbWa4cB1Zd3GeqPa9VW是否有帮助。 - Dieter Menne
1个回答

2
do.call技巧可以实现(但这显然是一个解决方法)。
gglm = function(form, data){
  lm = do.call(lmer, list(formula=form, data=data))
  return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接