22  Within, Between, and Contextual Effects

Author

Josh Gilbert

Many find it hard to keep track of within, between, and contextual effects in MLMs. This short walkthrough shows how to fit and interpret each model using the HSB data.

# load libraries
library(tidyverse)
library(lme4)
library(sjPlot)
library(ggeffects)
library(haven)

# clear memory
rm(list = ls())

select <- dplyr::select

# load HSB data
hsb <- read_dta("data/hsb.dta") |> 
  select(mathach, ses, schoolid) |> 
  group_by(schoolid) |> 
  mutate(grp_mean_ses = mean(ses)) |> 
  ungroup() |> 
  mutate(grp_center_ses = ses - grp_mean_ses)

22.1 Fitting the Models

ols <- lm(mathach ~ ses, hsb)
fe <- lm(mathach ~ ses + factor(schoolid), hsb)
ri <- lmer(mathach ~ ses + (1|schoolid), hsb)
ri_within <- lmer(mathach ~ grp_center_ses + (1|schoolid), hsb)
ri_between <- lmer(mathach ~ grp_mean_ses + (1|schoolid), hsb)
re_wb <- lmer(mathach ~ grp_center_ses + grp_mean_ses + (1|schoolid), hsb)
contextual <- lmer(mathach ~ ses + grp_mean_ses + (1|schoolid), hsb)

tab_model(ols, fe, ri, ri_within, ri_between, re_wb, contextual,
          p.style = "stars",
          show.ci = FALSE,
          show.se = TRUE,
          keep = "ses",
          show.dev = TRUE,
          dv.labels = c("OLS",
                        "Fixed Effects",
                        "Rand. Int.",
                        "RI Within",
                        "RI Between",
                        "REWB",
                        "Mundlak"))
  OLS Fixed Effects Rand. Int. RI Within RI Between REWB Mundlak
Predictors Estimates std. Error Estimates std. Error Estimates std. Error Estimates std. Error Estimates std. Error Estimates std. Error Estimates std. Error
ses 3.18 *** 0.10 2.19 *** 0.11 2.39 *** 0.11 2.19 *** 0.11
grp center ses 2.19 *** 0.11 2.19 *** 0.11
grp mean ses 5.86 *** 0.36 5.87 *** 0.36 3.68 *** 0.38
Random Effects
σ2     37.03 37.01 39.16 37.02 37.02
τ00     4.77 schoolid 8.67 schoolid 2.64 schoolid 2.69 schoolid 2.69 schoolid
ICC     0.11 0.19 0.06 0.07 0.07
N     160 schoolid 160 schoolid 160 schoolid 160 schoolid 160 schoolid
Observations 7185 7185 7185 7185 7185 7185 7185
R2 / R2 adjusted 0.130 / 0.130 0.235 / 0.218 0.077 / 0.182 0.044 / 0.225 0.123 / 0.179 0.167 / 0.224 0.167 / 0.224
Deviance 295643.779 259918.446 46641.008 46720.415 46959.128 46563.821 46563.821
* p<0.05   ** p<0.01   *** p<0.001

22.2 Interpretation

22.2.1 OLS

lm(formula = mathach ~ ses, data = hsb)

Ignoring school membership, students who are 1-unit higher in SES are predicted to score 3.18 points higher in math. This is generally not a preferred model.

22.2.2 Fixed Effects

lm(formula = mathach ~ ses + factor(schoolid), data = hsb)

Holding constant school, students who are 1-unit higher in SES are predicted to score 2.19 points higher in math. Fixed effects models focus on within-school comparisons: we are looking at how students within schools relate to each other, and then averaging this relationship across all our schools to get our final estimate.

22.2.3 Random Intercepts

lmer(formula = mathach ~ ses + (1 | schoolid), data = hsb)

Students who are 1-unit higher in SES are predicted to score 2.39 points higher in math; schools that are 1-unit higher in mean SES are predicted to have mean math scores 2.39 points higher.

The random intercept model gives a precision-weighted average of the within and between effects. Looking at the other models, note that our within effect is 2.19 and our between effect is 5.86. If the RE assumption holds, these are the same in the population, so we get more precision by averaging them together. However, in social science, they are rarely the same, making this model provide a weird blend of two kinds of mechanism.

22.2.4 Random Intercepts, Within Effect

lmer(formula = mathach ~ grp_center_ses + (1 | schoolid), data = hsb)

Holding constant school, students who are 1-unit higher in SES are predicted to score 2.19 points higher in math. This is the same coefficient as the FE model, but in an RI framework. We have “controlled for school” manually by demeaning the SES variable.

22.2.5 Random Intercepts, Between

lmer(formula = mathach ~ grp_mean_ses + (1 | schoolid), data = hsb)

Schools that are 1-unit higher in mean SES are predicted to have mean math scores 5.86 points higher.

22.2.6 Random Effects within and Between

lmer(formula = mathach ~ grp_center_ses + grp_mean_ses + (1 | 
    schoolid), data = hsb)

Holding constant school, students who are 1-unit higher in SES are predicted to score 2.19 points higher in math; schools that are 1-unit higher in mean SES are predicted to have mean math scores 5.86 points higher. We get the within and between effects in a single model!

22.2.7 Contextual/Mundlak

lmer(formula = mathach ~ ses + grp_mean_ses + (1 | schoolid), 
    data = hsb)

Holding constant school, students who are 1-unit higher in SES are predicted to score 2.19 points higher in math; holding constant student SES, a student that attends a school with 1-unit higher in mean SES are predicted to have mean math scores 3.68 points higher. The contextual effect is the difference in the within and between effects (note that 5.86 - 2.19 = 3.68, up to rounding), and, in principle, its significance test allows us to determine if having both is necessary. Mathematically, the Mundlak model and REWB are identical, as you can see from the deviance statistics. You would choose one over the other depending on your preferred interpretation.

22.3 Further Reading

(Antonakis, Bastardoz, and Rönkkö 2019)