在lmerTest和lme4之间切换

时间:2015-07-09 14:08:12

标签: r lme4

是否可以将merModLmerTest中的lmerTest对象转储为merMod中的lme4个对象?我有许多用例需要在格式之间切换。

根据lmerTest文档:

  

merModLmerTest包含lme4包的merMod类,并重载anova和summary函数。

但是,我无法弄清楚继承是如何工作的。

1 个答案:

答案 0 :(得分:0)

lmerModLmerTest对象与merMod对象几乎相同,但是有一些额外的插槽。减少它们的方法也许是一种优雅的方法,但是我是用蛮力做到的(由于new()函数所做的一些评估,所以我觉得有些棘手。)

示例:

library(lme4)
fm0 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
library(lmerTest)
fm1 <- as(fm0,"lmerModLmerTest")

这可能是错误的设置方式(应使用setAs()等),但是...

as.merMod.lmerModLmerTest <- function(x) {
  r <- list(Class="lmerMod")
  for (s in names(getSlots("merMod"))) {
     r[[s]] <- slot(x,s)
  }
  r$resp <- quote(x@resp)
  r$call <- quote(x@call) ## protect from evaluation
  do.call(new,r)
}

尝试一下:

fm2 <- as.merMod.lmerModLmerTest(fm1)
all.equal(fm0,fm2) ## TRUE