如何使用 broom::tidy() 从 lme4::lmer() 创建的线性混合效应模型计算 p 值?

How to calculate p-value from a linear mixed effect model created by lme4::lmer() using broom::tidy()?

我使用 lme4 包中的 lmer() 函数构建了一个混合效果模型。 lme4 包出于某些很好的哲学原因不输出系数的 p 值。但是,我仍然需要 p 值才能在我的出版物中报告。我知道有多种方法可以使用 lmer() 创建的模型来计算 p 值,例如here.

我的问题是:我想使用 broom 包中的 tidy() 函数提取 p 值。在这里,我真的想坚持使用 tidy() 因为我想维护以下管道:

data_frame %>% group_by(grouping variables) %>% do(tidy(fitted_model))

一种选择是创建自定义函数并将其附加到管道。但是,broom 包 (http://rpackages.ianhowson.com/cran/broom/man/lme4_tidiers.html) 的手册页说:

"p.value  P-value computed from t-statistic (may be missing/NA)". 

据此,我假设一个根据 lmer 模型给出的 t 值计算 p 值的函数已经在 broom 中实现。所以,我不愿意重新发明轮子。

问题是我根本没有得到名称为 p.value 的列。我期待一个名为 p.value 的列,其中 NA 是最坏的情况。

代码:

library(lme4)
library(broom)
lme <- lmer(Reaction ~ Days + (1 + Days | Subject), sleepstudy)
tidy(lme)
tidy(lme, effects = "fixed")

输出:

> tidy(lme)
                         term     estimate std.error statistic    group
1                  (Intercept) 251.40510485  6.824557 36.838306    fixed
2                         Days  10.46728596  1.545789  6.771485    fixed
3       sd_(Intercept).Subject  24.74045195        NA        NA  Subject
4              sd_Days.Subject   5.92213312        NA        NA  Subject
5 cor_(Intercept).Days.Subject   0.06555113        NA        NA  Subject
6      sd_Observation.Residual  25.59181564        NA        NA Residual
> tidy(lme, effects = "fixed")
         term  estimate std.error statistic
1 (Intercept) 251.40510  6.824557 36.838306
2        Days  10.46729  1.545789  6.771485

您将需要包 lmerTest 来获取 p 值。 tidy 不适用于 lme 对象,您需要将其附加到您的格式中。

attach(mtcars)
lme <- lmer(mpg ~ cyl + (1 + cyl | carb), mtcars)
summary(lme)

您可以使用 sjstats::p_value() 从许多不同的模型中获取 p 值,包括(广义)混合模型。