首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何建立具有随机效应的逐步模型(lme4 + lmerTest?)

如何建立具有随机效应的逐步模型(lme4 + lmerTest?)
EN

Stack Overflow用户
提问于 2019-04-11 17:48:48
回答 1查看 7.1K关注 0票数 7

我试图执行一个具有随机效应的逐步模型,其中我可以得到一个BIC值。

lmerTest包表示它适用于lme4,但只有从模型中删除一个自变量(这是一个有两个选项的因素(TM)),我才能让它工作。

错误代码是:

$<-中的错误(*tmp*,公式,值=术语):没有分配此S4类子集的方法

As_lmerModLmerTest(模型)中的错误:模型非类'lmerMod':无法强迫类'lmerModLmerTest‘

我在某个地方读过,它可能与drop1有关,但我仍然没有弄清楚。我也愿意听取其他方案和功能的建议。

之前,当尝试full.model <- lm (.一切正常。在换成lmer之后,就不再是这样了。

我现在使用的代码:

代码语言:javascript
复制
full.model <- lme4::lmer(dep ~ TM + ind + (1 | dorp),  data=test)  #lmerTest:: give same outcome

step.model<- lmerTest::step(full.model, direction="both",k=log(16))   # n=16

summary(step.model)

BIC(step.model)
代码语言:javascript
复制
#Example dataset

test <- data.frame(TM = as.factor(c(rep("org", 3), rep("min", 3),rep("org", 3), rep("min", 3),rep("org", 3), rep("min", 3))),
                   dep = runif(18,0,20),
                   ind = runif(18,0,7),
                   dorp = as.factor(c(rep(1,6),rep(2,6),rep(3,6))))
EN

回答 1

Stack Overflow用户

发布于 2019-04-12 11:22:21

问题是在随机效应选择阶段,当模型中的所有随机效应都被消除时,lmerTest::step.lmerModLmerTest就会中断。它可能不应该(我认为早期版本的包可能不是),但它并不是太困难的工作。您可以指定不应简化随机效果模型(step(full.model, reduce.random=FALSE)),或者,当您遇到此错误时,丢弃模型的随机效应组件,然后对生成的线性模型使用step()

代码语言:javascript
复制
fixmodel <- lm(formula(full.model,fixed.only=TRUE),
               data=eval(getCall(full.model)$data))
step(fixmodel)

(因为它包含eval(),所以这只能在R可以找到data=参数所引用的数据框架的环境中工作)。

我已经提交了一个关于这个问题的问题

此外(令人困惑的是),stats::steplmerTest包中的step.lmerModLmerTest有不同的参数/做出不同的假设。stats::step被定义为

代码语言:javascript
复制
step(object, scope, scale = 0,
     direction = c("both", "backward", "forward"),
     trace = 1, keep = NULL, steps = 1000, k = 2, ...)

step.lmerModLmerTest使用

代码语言:javascript
复制
step(object, ddf = c("Satterthwaite",
  "Kenward-Roger"), alpha.random = 0.1, alpha.fixed = 0.05,
  reduce.fixed = TRUE, reduce.random = TRUE, keep, ...)

特别是,direction参数不适用(step.lmerModLmerTest只执行向后消除),k也不适用(我相信step.lmerModLmerTest使用AIC,但我必须反复检查)。

代码语言:javascript
复制
set.seed(1001)
dd <- data.frame(x1=rnorm(500),x2=rnorm(500),
                 x3=rnorm(500),f=factor(rep(1:50,each=10)))
library(lme4)
dd$y <- simulate(~x1+x2+x3+(1|f),
                 newdata=dd,
                 newparams=list(theta=1,beta=c(1,2,0,0),
                                sigma=1),
                 family=gaussian)[[1]]
library(lmerTest)
full.model <- lmer(y~x1+x2+x3+(1|f), data=dd)
step.model<- step(full.model)

step.model有类step_list;有一个打印方法,但没有汇总方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55638476

复制
相关文章

相似问题

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