Panel Data Analysis for Limited Outcomes in Social Science
2026-07-29
The Methodological Gap
Social science research frequently analyzes longitudinal panel data with limited dependent variables (binary choices, counts, ordinal Likert scales, bounded fractions).
When the dependent variable Y_{it} is limited (non-continuous), standard linear panel models (e.g., Within-Estimator / FE OLS) fail due to non-linearity, boundary constraints, and heteroskedasticity.
Understanding the core distinction between modeling approaches is key:
Tip
For linear models, \beta_{\text{cond}} = \beta_{\text{marg}}. For non-linear models (e.g., Logistic),| \beta_{\text{cond}}| > | \beta_{\text{marg}}| due to attenuation from integrating over the random effect distribution.
GEE extends Generalized Linear Models (GLM) to correlated/clustered data without specifying the full joint likelihood.
For panel unit i \in \{1, \dots, N\} observed at waves t \in \{1, \dots, T_i\}: g(\mu_{it}) = X_{it} \beta \implies \mu_{it} = g^{-1}(X_{it} \beta)
The variance of individual observation Y_{it} is defined as: \text{Var}(Y_{it}) = \phi \, v(\mu_{it})
where \phi is a dispersion parameter and v(\mu_{it}) is a variance function (e.g., \mu(1-\mu) for binary).
The covariance matrix for subject i is modeled as: V_i = \phi \, A_i^{1/2} \, R_i(\alpha) \, A_i^{1/2}
where A_i is a diagonal matrix of variance functions v(\mu_{it}) and R_i(\alpha) is the working correlation matrix.
The parameter vector \beta is solved via: \sum_{i=1}^N D_i^T V_i^{-1} \left( Y_i - \mu_i \right) = 0
where D_i = \frac{\partial \mu_i}{\partial \beta} is the matrix of partial derivatives.
Even if R(\alpha) is incorrectly specified, the asymptotic variance of \hat{\beta} is consistently estimated by the sandwich estimator: \text{Var}(\hat{\beta}) = M_0^{-1} M_1 M_0^{-1} \text{where } M_0 = \sum_{i=1}^N D_i^T V_i^{-1} D_i, \quad M_1 = \sum_{i=1}^N D_i^T V_i^{-1} (Y_i - \mu_i)(Y_i - \mu_i)^T V_i^{-1} D_i
Important
Key Property: As N \rightarrow \infty, \hat{\beta} remains consistent and standard errors are asymptotically correct, even with misspecified working correlation!
| Outcome Type | Link Function g(\mu) | Variance Function v(\mu) | Social Science Application |
|---|---|---|---|
| Binary | Logit: \ln\left(\frac{\mu}{1-\mu}\right) | \mu(1-\mu) | Voter turnout, reform adoption, employment status |
| Count | Log: \ln(\mu) | \mu (Poisson) or \mu + k\mu^2 (NegBin) | Protest frequency, legislative bills passed, conflict fatalities |
| Ordinal | Cumulative Logit: \ln\left(\frac{P(Y \le k)}{P(Y > k)}\right) | \mu(1-\mu) | Policy support levels, institutional trust (1-5 Likert) |
| Bounded/Proportion | Logit or Beta Link | \mu(1-\mu) | Vote shares, municipal budget allocation proportions |
| Feature | Fixed Effects (FE) GLM | Random Effects (GLMM) | GEE (Marginal) |
|---|---|---|---|
| Target Parameter | Conditional (\beta_i) | Conditional (\beta_{\text{cond}}) | **Marginal / Population Avg ($ _{}$)** |
| Distributional Assumptions | Parametric | Full Parametric (Random effect distribution) | Semi-parametric (Mean & Variance only) |
| Incidental Parameter Problem | Severe (drops constant units / biased) | N/A (Assumes u_i \sim \mathcal{N}(0, \sigma^2)) | None |
| Time-Invariant Covariates | Cannot estimate | Can estimate | Can estimate |
| Correlation Robustness | N/A | Sensitive to distributional misspecification | Highly Robust (Sandwich SEs) |
| Primary Use Case | Within-unit causal identification | Individual heterogeneity / prediction | Population policy effects & trends |
Can GEE address time-invariant unobserved heterogeneity like Fixed Effects? Yes, via Hybrid / Mundlak Modeling!
Include subject-level means of time-varying predictors (\overline{X}_i): g(\mu_{it}) = X_{it} \beta_{\text{within}} + \overline{X}_i \beta_{\text{between}} + Z_i \gamma
Benefits of Hybrid GEE:
geepack & multgee)library(geepack)
# Binary Outcome Panel Model
gee_bin <- geeglm(vote_turnout ~ policy_reform + income + age,
id = subject_id, data = panel_df,
family = binomial(link = "logit"),
corstr = "ar1")
summary(gee_bin)
# Ordinal Outcome Panel Model
library(multgee)
gee_ord <- ord_gee(trust_govt ~ reform + party_id,
id = subject_id, data = panel_df,
model = "cumulative")xtgee)statsmodels)ESSSSDA26-2J: Panel GEE