如何在lme4混合模型中获得效果的p值(检查显着性)?


56

我在R中使用lme4来适应混合模型

lmer(value~status+(1|experiment)))

价值是连续的,状态和实验是因素,我得到

Linear mixed model fit by REML 
Formula: value ~ status + (1 | experiment) 
  AIC   BIC logLik deviance REMLdev
 29.1 46.98 -9.548    5.911    19.1
Random effects:
 Groups     Name        Variance Std.Dev.
 experiment (Intercept) 0.065526 0.25598 
 Residual               0.053029 0.23028 
Number of obs: 264, groups: experiment, 10

Fixed effects:
            Estimate Std. Error t value
(Intercept)  2.78004    0.08448   32.91
statusD      0.20493    0.03389    6.05
statusR      0.88690    0.03583   24.76

Correlation of Fixed Effects:
        (Intr) statsD
statusD -0.204       
statusR -0.193  0.476

我怎么知道地位的影响是重大的?R仅报告,而不报告。Ťp


1
根据提供给该问题的答案,我们想知道OP到底对什么感兴趣:针对空值测试系数(香草测试针对空值),或进行方差最小化测试(我们从多种ANOVA中获得的检验)。那两个针对不同的事物。尽管不是关于混合效应模型,但在这里可以找到一个有启发性的答案。ħ 0β = β ˚FŤH0:β=βnullF
Firebug

Answers:


61

GLMM FAQ上有很多关于此主题的信息。但是,在您的特定情况下,我建议您使用

library(nlme)
m1 <- lme(value~status,random=~1|experiment,data=mydata)
anova(m1)

因为您不需要任何提供的东西lmer(更高的速度,交叉随机效果的处理,GLMM ...)。lme应该为您提供完全相同的系数和方差估计值,但还会为您计算df和p值(这在您似乎拥有的“经典”设计中确实有意义)。您可能还需要考虑随机项~status|experiment(允许跨块的状态效应变化,或者等效地包括逐项实验交互)。上面的海报也很正确,即您的t统计数据如此之大,以致您的p值肯定会小于0.05,但是我可以想象您想要“真实的” p值。


3
我不知道这个答案。lmer可以很容易地报告相同类型的p值,但出于正当理由而无法。我想这是评论,这里有任何“真实的” p值困扰着我。您可能会争辩说可以找到一个可能的临界值,并且可以通过任何合理的临界值。但您不能说存在真正的p值。
约翰

11
对于经典设计(平衡,嵌套等),我想我确实可以辩称存在真正的p值,即如果假设为零(beta = 0),则有可能获得估计的贝塔值的估计值或更大的概率。是错误的……我相信lme4不提供这些分母df,因为当指定的模型可以用于某种计算经典分母df的模型可以工作时,通常很难从lme4模型结构中进行检测...
Ben Bolker 2012年

尝试summary(m1)代替(我将其与nlme包一起使用)
jena

36

您可以使用软件包lmerTest。您只需安装/加载它,lmer模型就会得到扩展。所以例如

library(lmerTest)
lmm <- lmer(value~status+(1|experiment)))
summary(lmm)
anova(lmm)

会为您提供p值的结果。如果p值是正确的指示,则有点争议,但是如果您想拥有它们,这是获取它们的方法。


28

如果可以处理放弃的p值(并且应该这样做),则可以通过以下方式计算似然比,该似然比表示状态影响的证据权重:

#compute a model where the effect of status is estimated
unrestricted_fit = lmer(
    formula = value ~ (1|experiment) + status
    , REML = F #because we want to compare models on likelihood
)
#next, compute a model where the effect of status is not estimated
restricted_fit = lmer(
    formula = value ~ (1|experiment)
    , REML = F #because we want to compare models on likelihood
)
#compute the AIC-corrected log-base-2 likelihood ratio (a.k.a. "bits" of evidence)
(AIC(restricted_fit)-AIC(unrestricted_fit))*log2(exp(1))

16
请注意,似然比是渐近的,即不考虑残差方差估计中的不确定性……
Ben Bolker 2012年

5
我对你的最后一行感兴趣。对结果的解释是什么?有没有我可以看的资料?
mguzmann

13

问题在于这些模型的p值的计算并非易事,请参见此处讨论,因此,lme4软件包的作者有意选择不将p值包括在输出中。您可能会找到一种计算这些方法的方法,但是它们不一定正确。


9

考虑您的要求。如果您只是想知道状态影响的总体p值是否通过某种任意的截止值,例如0.05,那么这很容易。首先,您想找出整体效果。你可以从那里得到anova

m <- lmer(...) #just run your lmer command but save the model
anova(m)

现在您有了一个F值。您可以接受它并在一些F表中查找它。只需选择最低的标称值即可。自由程度。截止值大​​约为20。您的F可能大于该值,但我可能错了。即使不是,也可以使用已有的实验次数,从常规ANOVA计算中查看自由度的数目。将该值保留在您的范围内可降低到大约5。现在,您可以轻松地通过学习。模型的“ true” df值将比该值高,因为您正在建模每个数据点,而不是ANOVA会建模的聚合值。

如果您实际上想要一个确切的p值,那么除非您愿意对此做出理论上的陈述,否则就没有这种事情。如果您阅读了Pinheiro&Bates(2001年,也许还有更多关于该主题的书……请参见这些答案中的其他链接),并且为某个特定的df争论不休,那么您可以使用它。但是无论如何,您实际上并不是在寻找确切的p值。我之所以提及这一点,是因为您不应报告确切的p值,而仅报告您的临界值已通过。

您应该真正考虑迈克·劳伦斯(Mike Lawrence)的答案,因为仅坚持使用p值的通过点作为从数据中提取的最终和最重要的信息的整个想法通常是错误的(但您可能不会这样,因为我们不会确实没有足够的信息要知道)。Mike正在使用一个有趣的LR计算的宠物版本,但是可能很难找到很多文档。如果您使用AIC研究模型选择和解释,您可能会喜欢。


9

编辑:lme4的较新版本不再支持此方法。使用pbx101在此答案中建议的lmerTest软件包。

lme4的作者在R列表上有一个帖子,说明为什么不显示p值。他建议改为使用MCMC样本,您可以使用languageR包中的pvals.fnc进行操作:

library("lme4")
library("languageR")
model=lmer(...)
pvals.fnc(model)

有关示例和详细信息,请参见http://www2.hawaii.edu/~kdrager/MixedEffectsModels.pdf


3
lme4不再支持此功能。可以更新此帖子,以使人们不必像我刚才那样发现它。
timothy.s.lau,2015年

5

您是否想知道的综合作用是否对您status有重大影响value?如果是这样,则可以使用包中的Anova函数car(不要与anovabase中的函数混淆R)。

dat <- data.frame(
  experiment = sample(c("A","B","C","D"), 264, replace=TRUE), 
  status = sample(c("D","R","A"), 264, replace=TRUE), 
  value = runif(264)   
)
require(lme4)
(fm <- lmer(value~status+(1|experiment), data=dat))

require(car)
Anova(fm)

?Anova装入car包装后看看。


知道如何car::Anova()避免与Michelle链接的p值计算有关的粘性问题吗?
Mike Lawrence

我没有,但是我的猜测是它通过忽略它们避免了粘性问题!重新阅读原始帖子后,我觉得我可能误解了这个问题。如果OP需要固定效果参数的精确p值,则他/她有麻烦。但是,如果OP只是想知道它们是否重要,我认为t值要比任何精确计算p值的不确定性都大。(换句话说,它们很重要。)
smillig 2012年

1
我认为重定向到ANOVA计算以找出统计信息的整体效果绝对是个好主意,但我不确定对p值进行精细化是否很好。常规anova命令将为您提供F。
2012年

我认为这有点明显。当您想最小化方差时,运行方差分析是有效的,但是从问题措辞来看,我认为OP希望确定变量的边际效应,针对零值测试系数。
Firebug

0

pvals.fnclme4不再支持该功能。使用包lmerTest包,可以使用其他方法来计算p值,例如Kenward-Roger的近似值

model=lmer(value~status+1|experiment)
anova(model, ddf="Kenward-Roger")

0

只需加载afex程序包,即可在lme4程序包的lmer函数的输出中打印p值(您无需使用afex;只需加载它):

library(lme4)  #for mixed model
library(afex)  #for p-values

这将为固定效果自动将一个p值列添加到lmer(yourmodel)的输出中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.