Skip to contents

Extract random parameters of each individual group in the context of mixed models, commonly referred to as BLUPs (Best Linear Unbiased Predictors). Can be reshaped to be of the same dimensions as the original data, which can be useful to add the random effects to the original data.

Usage

estimate_grouplevel(model, ...)

# Default S3 method
estimate_grouplevel(model, type = "random", ...)

# S3 method for class 'brmsfit'
estimate_grouplevel(
  model,
  type = "random",
  dispersion = TRUE,
  test = NULL,
  diagnostic = NULL,
  ...
)

reshape_grouplevel(x, indices = "all", group = "all", ...)

Arguments

model

A mixed model with random effects.

...

Other arguments passed to parameters::model_parameters().

type

"random" or "total". If "random" (default), the coefficients correspond to the conditional estimates of the random effects (as they are returned by lme4::ranef()). They typically correspond to the deviation of each individual group from their fixed effect (assuming the random effect is also included as a fixed effect). As such, a coefficient close to 0 means that the participants' effect is the same as the population-level effect (in other words, it is "in the norm"). If "total", it will return the sum of the random effect and its corresponding fixed effects, which internally relies on the coef() method (see ?coef.merMod). Note that type = "total" yet does not return uncertainty indices (such as SE and CI) for models from lme4 or glmmTMB, as the necessary information to compute them is not yet available. However, for Bayesian models, it is possible to compute them.

dispersion, test, diagnostic

Arguments passed to parameters::model_parameters() for Bayesian models. By default, it won't return significance or diagnostic indices (as it is not typically very useful).

x

The output of estimate_grouplevel().

indices

A list containing the indices (i.e., which columns) to extract (e.g., "Coefficient").

group

A list containing the random factors to select.

Details

Unlike raw group means, BLUPs apply shrinkage: they are a compromise between the group estimate and the population estimate. This improves generalizability and prevents overfitting.

Examples

# lme4 model
data(mtcars)
model <- lme4::lmer(mpg ~ hp + (1 | carb), data = mtcars)
random <- estimate_grouplevel(model)

# Show group-specific effects
random
#> Group | Level | Parameter   | Coefficient |   SE |        95% CI
#> ----------------------------------------------------------------
#> carb  | 1     | (Intercept) |        0.41 | 0.84 | [-1.24, 2.05]
#> carb  | 2     | (Intercept) |        0.11 | 0.78 | [-1.42, 1.65]
#> carb  | 3     | (Intercept) |       -0.32 | 0.94 | [-2.16, 1.51]
#> carb  | 4     | (Intercept) |       -0.78 | 0.78 | [-2.31, 0.75]
#> carb  | 6     | (Intercept) |        0.09 | 1.00 | [-1.87, 2.05]
#> carb  | 8     | (Intercept) |        0.50 | 1.00 | [-1.47, 2.46]

# Visualize random effects
plot(random)


# Reshape to wide data so that it matches the original dataframe...
reshaped <- reshape_grouplevel(random, indices = c("Coefficient", "SE"))

# ...and can be easily combined with the original data
alldata <- cbind(mtcars, reshaped)

# Use summary() to remove duplicated rows
summary(reshaped)
#>   carb carb_Coefficient_Intercept carb_SE_Intercept
#> 1    4                -0.77955416         0.7829275
#> 2    1                 0.40506064         0.8390523
#> 3    2                 0.11088289         0.7829275
#> 4    3                -0.32486359         0.9369268
#> 5    6                 0.09296535         1.0007322
#> 6    8                 0.49550886         1.0007322

# overall coefficients
estimate_grouplevel(model, type = "total")
#> Group | Level | Parameter   | Coefficient
#> -----------------------------------------
#> carb  | 1     | (Intercept) |       30.18
#> carb  | 2     | (Intercept) |       29.88
#> carb  | 3     | (Intercept) |       29.45
#> carb  | 4     | (Intercept) |       28.99
#> carb  | 6     | (Intercept) |       29.87
#> carb  | 8     | (Intercept) |       30.27