lme4模型功能概述(lmerTest)

Jon*_*nas 5 r summary lme4

如果有以下数据

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)")
Run Code Online (Sandbox Code Playgroud)

并且想要使用lme4拟合线性模型

require(lme4)
require(lmerTest)
m  = lmer(f, d)
s  = summary(m)
Run Code Online (Sandbox Code Playgroud)

这很好用......但是如果模型适合于另一个函数

gglm = function(form, data){
    lm = lmer(form, data=data)
    return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误.

summary from lme4 is returned
some computational error has occurred in lmerTest
Run Code Online (Sandbox Code Playgroud)

显然,这是因为模型的拟合是通过一个被调用的对象完成的,该对象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))
Run Code Online (Sandbox Code Playgroud)

相反并得到不同的数据,总结的结果是错误的.

这似乎不是最好的方法,我认为很容易犯错误.正常lm及其相应的summary功能没有这个问题.有没有办法让lmerTest摘要不易出错?

Die*_*nne 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)
Run Code Online (Sandbox Code Playgroud)