How to extract the goodness-of-fit statistics from lmer() model for msummary from modelsummary package

对着背影说爱祢 提交于 2021-02-04 21:02:03

问题


I am using lmerTest::lmer() to perform linear regression with repeated measures data.

My model contains a fixed effect (factor with 5 levels) and a random effect (subject):

library(lmerTest) 
model_lm  <- lmer(likertscore ~ task.f + (1 | subject), data = df_long)  

I would like to include the total number of observations, the number of subjects, total R^2, and the R^2 of the fixed effects in the regression table which I generate with modelsummary().

I tried to extract these and build a gof_map as described by the author of the package but did not succeed. Below my model output from lmerTest::lmer() the performance measures obtained:

Linear mixed model fit by REML ['lmerModLmerTest']
Formula: likertscore ~ factor + (1 | subject)
   Data: df_long
REML criterion at convergence: 6674.915
Random effects:
 Groups   Name        Std.Dev.
 subject  (Intercept) 1.076   
 Residual             1.514   
Number of obs: 1715, groups:  subject, 245
Fixed Effects:
                      (Intercept)                         factor1                         factor2  
                           3.8262                             1.5988                             0.3388  
                      factor3                             factor4                         factor5  
                          -0.7224                            -0.1061                            -1.1102  

library("performance")
performance::model_performance(my_model)

# Indices of model performance

AIC     |     BIC | R2 (cond.) | R2 (marg.) |  ICC | RMSE | Sigma
-----------------------------------------------------------------
6692.91 | 6741.94 |       0.46 |       0.18 | 0.34 | 1.42 |  1.51

回答1:


The problem is that one of your statistics is not available by default in glance or performance, which means that you will need to do a bit of legwork to customize the output.

First, we load the libraries and estimate the model:

library(modelsummary)
library(lmerTest) 
mod  <- lmer(mpg ~ hp + (1 | cyl), data = mtcars) 

Then, we check what goodness-of-fit statistics are available out-of-the-box using the get_gof function from the modelsummary package:

get_gof(mod)
#>        aic      bic r2.conditional r2.marginal       icc     rmse    sigma nobs
#> 1 181.8949 187.7578      0.6744743   0.1432201 0.6200592 2.957141 3.149127   32

You'll notice that there is no N (subject) statistic there, so we need to add it manually. One way to do this in a replicable way is to leverage the glance_custom mechanism described in the modelsummary documentation. To do this, we need to know what the class of our model is:

class(mod)[1]
#> [1] "lmerModLmerTest"

Then, we need to define a method for this class name. This method should be called glance_custom.CLASSNAME. In lmerModLmerTest models, the number of groups can be retrieved by getting the ngrps object in the summary. So we do this:

glance_custom.lmerModLmerTest <- function(x, ...) {
  s <- summary(x)
  out <- data.frame(ngrps = s$ngrps)
  out
}

Finally, we use the gof_map argument to format the result how you want it:

gm <- list(
  list(raw = "nobs", clean = "N", fmt = 0),
  list(raw = "ngrps", clean = "N (subjects)", fmt = 0),
  list(raw = "r2.conditional", clean = "R2 (conditional)", fmt = 0),
  list(raw = "r2.marginal", clean = "R2 (marginal)", fmt = 0),
  list(raw = "aic", clean = "AIC", fmt = 3)
)

modelsummary(mod, gof_map = gm)
Model 1
(Intercept) 24.708
(3.132)
hp -0.030
(0.015)
N 32
N (subjects) 3
R2 (conditional) 1
R2 (marginal) 0
AIC 181.895


来源:https://stackoverflow.com/questions/65723430/how-to-extract-the-goodness-of-fit-statistics-from-lmer-model-for-msummary-fro

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!