【问题标题】:lme4 and languageR compatibility error: "input model is not a mer object”lme4 和 languageR 兼容性错误:“输入模型不是 mer 对象”
【发布时间】:2013-10-05 15:59:41
【问题描述】:

我有一个数据集 dat2,我想在其上拟合线性混合效应模型。我过去使用 lmer()(包 lme4)作为 pvals.fnc 的补充来计算相关的 p 值。

但是,由于我使用新的 lme4 (1.0.4) 和 languageR (1.4) 软件包重新安装了 R 3.0.2 版本,因此我收到有关 lmer 函数输出的错误。它表示输出不是 mer 对象。事实上,它的类是 lmeRmod。

这是我使用的代码:

names(dat2)<-c("auc","subj","decod","soa","vis")
attach(dat2)
mod1 <- lmer(auc ~ decod + (1 | subj))
mod2 <- lmer(auc ~ vis+ (1 | subj))
mod3 <- lmer(auc ~ decod + vis + (1 | subj))
mod4 <- lmer(auc ~ decod + vis + decod*vis + (1 | subj))
pvals.fnc(mod1)

我得到这个错误:

> pvals.fnc(mod1)
the input model is not a mer object
NULL

确实,当我查看 mod1 时,我发现它是一个 lmeRmod 对象,而不是一个 mer 对象。

> mod1
Linear mixed model fit by REML ['lmerMod']
Formula: auc ~ decod + (1 | subj) 
REML criterion at convergence: -213.3884 
Random effects:
 Groups   Name        Std.Dev.
 subj     (Intercept) 0.04187 
 Residual             0.11087 
Number of obs: 155, groups: subj, 6
Fixed Effects:
(Intercept)       decod2       decod3       decod4  
     0.9798      -0.1141      -0.3599      -0.3090 

这个问题与here 中的问题非常相似。关于 1/ 问题可能是什么(为什么我不输出 mer 对象)和 2/ 如何解决它(我尝试重新安装旧版本但我在包之间存在兼容性问题)的任何想法?

任何帮助都会很棒! 谢谢!

【问题讨论】:

    标签: r lme4


    【解决方案1】:

    我确认pvals.fnc 函数在新的languageR 中不起作用——这本质上是因为mcmcsamp 没有在新版本的lme4 中实现,这反过来又是因为它被发现了在许多情况下是不可靠的。

    我们(lme4 作者)很抱歉让languageR 用户以这种方式陷入困境,但这在某种程度上是不可避免的。

    https://github.com/lme4/lme4/blob/master/man/pvalues.Rd 提供了一些关于如何计算 p 值的替代建议。

    https://github.com/lme4/lme4/blob/master/man/drop1.merMod.Rd 给出了关于如何使用pbkrtest::KRmodcomp 获取模型中所有预测变量的 p 值的特定配方(针对 lme4 的开发版本):

     fm1 <- lmer(Reaction~Days+(Days|Subject),sleepstudy)
     ## Likelihood ratio test
     drop1(fm1,test="Chisq")
     if (require(pbkrtest)) {
        KRSumFun <- function(object, objectDrop, ...) {
           krnames <- c("ndf","ddf","Fstat","p.value","F.scaling")
           r <- if (missing(objectDrop)) {
               setNames(rep(NA,5),krnames)
           } else {
              krtest <- KRmodcomp(object,objectDrop)
              unlist(krtest$stats[krnames])
           }
           attr(r,"method") <- c("Kenward-Roger via pbkrtest package")
           r
        }
        drop1(fm1,test="user",sumFun=KRSumFun)
    }
    

    这个例子产生:

    Single term deletions
    
    Model:
    Reaction ~ Days + (Days | Subject)
    Method: 
    Kenward-Roger via pbkrtest package
    
    
           ndf ddf  Fstat    p.value F.scaling
    <none>                                    
    Days     1  17 45.853 3.2638e-06         1
    

    【讨论】:

    • 这似乎不适用于当前分发的 lme4 (lme4_1.0-5) 版本,因为 drop1.merMod 方法是: *1 - 仍然被 stats 包中的 drop1 版本隐藏某些原因 *2 - 查看 lme4:::drop1.merMod 表明该方法仅采用以下参数进行测试: test = c("none", "Chisq") 所以它会引发错误。你知道github上的新版本什么时候会更新到CRAN吗?
    • 否,但 1.1-2 版应可通过:install.packages("lme4",repos="http://lme4.r-forge.r-project.org/repos") 获得。如果它不起作用,请告诉我。
    【解决方案2】:

    您可以使用 Package ‘lmerTest’ 来获取 p_values。 请参见下面的示例:

    #import lme4 package and lmerTest package
    library(lmerTest)
    # an object of class merModLmerTest
    m <- lmer(Informed.liking ~ Gender+Information+Product +(1|Consumer), data=ham)
    # gives summary of lmer object. The same as of class merMod but with
    # additional p-values calculated based on Satterthwate's approximations
    summary(m)
    

    有关“lmerTest”包的更多信息,请参阅以下链接: http://cran.r-project.org/web/packages/lmerTest/lmerTest.pdf

    【讨论】:

      【解决方案3】:

      您可以查看 here 找到的 afex 包中的混合函数。它使用 Kenward-Rogers 作为 df。

      【讨论】:

      • “虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。”
      猜你喜欢
      • 2012-01-21
      • 2013-09-18
      • 1970-01-01
      • 2011-07-24
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      相关资源
      最近更新 更多