【问题标题】:Summary of lme4 model in function (lmerTest)lme4模型在函数中的总结(lmerTest)
【发布时间】:2014-12-17 14:49:17
【问题描述】:

如果有以下数据

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))

反而和得到不同的数据,总结的结果是错误的。

这似乎不是最好的方法,我认为它很容易出错。正常的lm 及其对应的summary 函数没有这个问题。有没有办法让lmerTest 摘要更不容易出错?

【问题讨论】:

标签: r summary lme4


【解决方案1】:

do.call 技巧有效(但它确实是一种解决方法)。

gglm = function(form, data){
  lm = do.call(lmer, list(formula=form, data=data))
  return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2017-07-31
    • 1970-01-01
    • 2021-01-02
    • 2017-07-17
    相关资源
    最近更新 更多