Reporting checklist
Use this as a copy/paste checklist for assignments, papers, and thesis chapters.
Always report (any SEM/CFA)
- Software + version (R, lavaan, semTools, etc.)
- Sample size (N) and any exclusions
- Variables (which indicators for each factor; scales; whether ordinal)
- Estimator (ML / MLR / WLSMV etc.) + justification
- Missing data handling (FIML / MI / listwise) + justification
- Model syntax (append or supplement)
- Model identification choices (marker vs
std.lv=TRUE, constraints, etc.) - Global fit: χ²(df), CFI/TLI, RMSEA (+ CI), SRMR
- Key parameters: estimates + SE/CI + standardized solution (when meaningful)
- Interpretation tied to the research question
- Diagnostics: what you checked (residuals, MI/EPC) and what you changed (if anything)
- Reproducibility: session info (and seed if simulation)
CFA-specific
- Factor loadings (unstd + std), indicator residual variances
- Factor variances/covariances
- Reliability: ω (omega) and/or other chosen indices (with method stated)
- Handling of cross-loadings / correlated residuals:
- were any added?
- what was the substantive rationale?
- was this preregistered / cross-validated / replicated?
SEM (structural) specific
- Structural paths (standardized + CI)
- R² for endogenous variables
- Indirect effects:
- method (bootstrap recommended when appropriate)
- effect + CI + interpretation (avoid “p-value only” reporting)
- Clarify causal language:
- observational vs experimental
- identification assumptions (temporal ordering, confounding, etc.)
Multi-group / invariance
- Groups (definition, Ns per group)
- Invariance steps tested:
- configural, metric, scalar (and strict if used)
- What constraints were imposed at each step
- Decision rules used (e.g., ΔCFI / ΔRMSEA thresholds) and references for your rule
- If partial invariance:
- which parameters freed
- rationale (substantive + statistical)
- what comparisons remain interpretable (e.g., latent means only after (partial) scalar)
Ordinal indicators
- Which variables treated as ordered
- Estimator and link (e.g., WLSMV / probit-type default framework)
- Thresholds vs intercepts (make clear what was constrained in invariance)
- Fit interpretation caveat: note if thresholds or residual structures drive misfit
- Sensitivity check (optional but strong): treat as continuous vs ordered and compare conclusions
Longitudinal SEM
- Time points and spacing
- Whether you tested longitudinal measurement invariance
- How you handled correlated uniqueness (same items across time)
- For growth models:
- coding of slope loadings (0,1,2… or actual time)
- random effects included (intercept/slope variance)
- For cross-lagged models:
- clarify whether you used CLPM vs alternatives (if relevant)
- interpret cross-lagged paths cautiously
Clustered / multilevel
- Clustering variable (e.g., class, clinic, therapist) and cluster sizes
- Strategy used:
- cluster-robust SE (and why sufficient), or
- explicit multilevel model (within/between)
- If multilevel:
- which parameters vary within vs between
- ICC motivation (optional but helpful)
A short “results paragraph” template
“We fit a [CFA/SEM] using lavaan (version …) with estimator … . Missing data were handled using … . Model fit was [acceptable/problematic] (χ²(df)=…, CFI=…, RMSEA=… [CI], SRMR=…). The key effect of interest was … (β=…, 95% CI […, …]). Diagnostics indicated … ; we [did/did not] respecify the model. Results suggest …, with limitations including … .”
Important
Rule of thumb
If you changed the model after looking at the data, state exactly what you changed and why. “Transparency beats perfection.”