首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数中的lme4模型摘要(lmerTest)

函数中的lme4模型摘要(lmerTest)
EN

Stack Overflow用户
提问于 2014-12-17 22:49:18
回答 1查看 3K关注 0票数 5

如果有以下数据

代码语言:javascript
复制
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拟合线性模型,你可以这样做

代码语言:javascript
复制
require(lme4)
require(lmerTest)
m  = lmer(f, d)
s  = summary(m)

这很有效,很好...但是如果模型被拟合在另一个函数中,比如

代码语言:javascript
复制
gglm = function(form, data){
    lm = lmer(form, data=data)
    return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)

我得到一个错误。

代码语言:javascript
复制
summary from lme4 is returned
some computational error has occurred in lmerTest

显然,这是因为模型的拟合是使用名为data的对象完成的,该对象在外部范围内不可见。所以如果我执行data = d,我会得到和以前一样的结果。但是,如果我这样做了

代码语言:javascript
复制
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摘要不容易出错?

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 01:41:27

do.call技巧是有效的(但这肯定是一种变通方法)。

代码语言:javascript
复制
gglm = function(form, data){
  lm = do.call(lmer, list(formula=form, data=data))
  return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27528245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档