5

我有一个数据集 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 

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

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

4

3 回答 3

4

我确认该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给出了一个特定的配方(用于 的开发版本lme4)关于如何使用pbkrtest::KRmodcomp获取所有预测变量的 p 值模型:

 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
于 2013-10-07T14:54:52.907 回答
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

于 2014-01-14T14:56:00.863 回答
1

您可以查看此处找到的 afex 包中的混合功能。它使用 Kenward-Rogers 进行 df。

于 2013-11-12T13:17:48.353 回答