Description

This vignette demonstrates Hierarchical Linear Regression (HLR) using the report_hlr function from the rwf package. HLR builds regression models in sequential steps (blocks), adding predictors at each step. This lets you assess how much additional variance each new set of predictors explains beyond what earlier predictors already account for — measured as the change in R² (ΔR²).

Installation instructions for rwf can be found on the rwf GitHub repository

Report HLR

report_hlr fits a series of hierarchical regression models and returns a structured report with model fit statistics (R², adjusted R², F-change, ΔR²), standardized and unstandardized regression coefficients, and significance tests at each step.

The example uses the built-in infert dataset, which records infertility after induced and spontaneous abortions. The arguments specify:

  • df = infert: the dataset.
  • corlist = 8: column index of the continuous predictor(s) to include.
  • factorlist = 1: column index of categorical predictor(s) treated as factors.
  • predictor = "case": the outcome variable (case/control status).
  • random_effect = "case": the variable used as a random effect in the mixed model comparison.

The ΔR² column in the output tells you whether each block of predictors significantly improved model fit — a key quantity when building theoretically motivated regression models step by step.

result<-report_hlr(df=infert,corlist=8,factorlist=1,predictor="case",random_effect="case")
result
##               dv                      model                 fixed       random                                                                                                call Model df      AIC      BIC    logLik   Test      L.Ratio   p.value
## 1 pooled.stratum                       base    pooled.stratum ~ 1                                            nlme::gls(model = formula(fbaseline), data = temp, method = "ML")     1  2 2119.941 2126.968 -1057.971                  NA        NA
## 2 pooled.stratum           random_intercept    pooled.stratum ~ 1    ~1 | case lme.formula(fixed = formula(fbaseline), data = temp, random = frandom_intercept,     method = "ML")     2  3 2121.941 2132.482 -1057.971 1 vs 2 3.060691e-07 0.9995586
## 3 pooled.stratum random_intercept_predictor pooled.stratum ~ case    ~1 | case         lme.formula(fixed = fpredictor, data = temp, random = frandom_intercept,     method = "ML")     3  4 2123.936 2137.989 -1057.968 2 vs 3 5.861154e-03 0.9389750
## 4 pooled.stratum     random_intercept_slope pooled.stratum ~ case ~case | case             lme.formula(fixed = fpredictor, data = temp, random = frandom_slope,     method = "ML")     4  6 2127.936 2149.016 -1057.968 3 vs 4 4.047206e-08 1.0000000