We can write the interaction part in two ways because the interaction term is actually a new variable given by the multiplication of the two predictors.
Observed interaction is not “wrong”, but…
Observed moderation can be fine when:
variables are measured with high reliability
you’re comfortable treating totals as error-free
your goal is prediction, not latent construct inference
Product indicators (PI): build observed products (e.g., \((x_i z_j)\)) and model them as indicators of a latent interaction factor.
LMS/QML (distribution-analytic): estimate the interaction directly in the likelihood (no product indicators), but standard global fit indices typically disappear (we move away from covariance estimation).
Tip
modsem has multiple approaches available https://modsem.org/articles/methods.html
The main technical issues
Nonlinearity: interaction makes the model nonlinear
Non-normality: product of normals is not normal
Fit logic changes: especially with LMS (no classical \((\chi^2)\), CFI, RMSEA for the interaction model)
Everything else is a consequence: identification, centering confusion, computational burden, interpretation…but also better estimates, correct modelling…
Difficulty 1 — The product is latent (not observed)
In regression: compute \((XZ)\).
In SEM:
X and Z are latent
you only have indicators
product indicators contain extra error cross-terms
Tip
Product indicator means that we are multiplying each item of a scale with all other items, thus creating many other ‘observed’ variables, which will form a ‘new’ latent interaction measure.
Difficulty 2 — Non-normality of the product
Even if \((X)\) and \((Z)\) are normal, \((XZ)\) is not.
par(mfrow =c(1, 2))hist(X, main ="Latent X (normal)")hist(XZ, main ="Latent X*Z (non-normal)")
par(mfrow =c(1, 1))
Implication: classical normal-theory SEs / tests can misbehave, especially in small N.
If \(X\) has \((p)\) indicators and Z has \((q)\) indicators:
“all-pairs” product indicators: \((pq)\)
many shared components → correlated residuals are plausible
too many free covariances can break identification
Warning
PI is transparent but can become a big model fast.
Difficulty 4 — Fit indices disappear (LMS)
With LMS/QML you typically cannot report classical SEM global fit indices for the interaction model.
So evaluation becomes:
Fit baseline model (no interaction): report CFI/TLI/RMSEA/SRMR there
Add interaction: compare baseline vs interaction using log-likelihood difference test (or AIC/BIC)
This is a conceptual shift: fit ≠ truth, and sometimes fit ≠ available.
Warning
With PI fit indices remain, but non-normality issues too. Consider using robust fit indices.
Tip
LMS/QML are estimated with distribution-analytic likelihood methods (integration / EM-type routines) and the interaction model is not evaluated using the standard “fit covariance matrix \(𝑆\) with \(Σ(θ)\)” machinery.
Difficulty 5 — Interpretation is conditional (probing)
The simple slope of \(X\) depends on \(Z\):
\[
\frac{\partial Y}{\partial X} = \beta_X + \beta_{XZ} Z
\]
So there is no single “main effect” of X.
You must probe:
simple slopes (e.g., Z = -1, 0, +1 SD)
Johnson–Neyman region
surface plots
Difficulty 6 — Centering: interpretation vs estimation
Interpretation:\((\beta_X)\) is the effect of X when \((Z=0)\). Centering makes “0” meaningful (often the mean).
Estimation (PI): centering indicators/products helps separate lower-order and interaction variance and stabilizes the model.
Rule of thumb:
PI methods: use double-mean centering (e.g., dblcent)
LMS/QML: focus on interpretability (what does Z=0 mean?) and probe slopes
Difficulty 7 — Computation & power
interaction effects are typically smaller than main effects
larger N needed for stable detection
PI: bigger model → more convergence problems
LMS/QML: numerical integration / iterative routines → slower, sometimes fragile
Evaluate: always report convergence, warnings, and sensitivity checks.
Solutions?
Option 0 — “Observed proxies” (baseline)
totals / sum scores
factor-score regression
Pros:
simple and familiar
Cons:
treats measurement error as absent or “handled” by factor scores
interaction often attenuates
Option 1 — Latent interaction via product indicators (PI)
Idea: create product indicators and treat them as indicators of a latent interaction factor.
Common centering tricks:
mean-centering indicators
double-mean centering (default)
residual centering (advanced; changes meaning)
Pros:
classic SEM machinery applies (often fit indices available)
Check LRT compared to baseline + convergence, sign/magnitude of interaction path, whether estimates are stable (SEs not exploding)
Latent interaction with LMS (and QML)
fit_lms <-modsem(model_int, data = dat, method ="lms")fit_qml <-modsem(model_int, data = dat, method ="qml")# summary(fit_lms)# summary(fit_qml)
Evaluate (LMS/QML):
baseline model: classical fit indices
interaction model: compare log-likelihood vs baseline (LRT) and check AIC/BIC
Plots
p <-plot_interaction(x ="intelligence", z ="anxiety", y ="achievement", vals_z =c(-1, 1), model = fit_lms)p
LMS evaluation: baseline fit + LRT
# pseudo-code: exact methods depend on the object class and available methodsfit_lms <-modsem(model_int, data = dat, method ="lms")fit_base <-estimate_h0(fit_lms, calc.se =FALSE)compare_fit(est_h1 = fit_lms, est_h0 = fit_base)
Probing the interaction (simple slopes, JN, surface)
# Probing works directly on modsem fits# simple_slopes(model = fit_lms, x = "intelligence", z = "anxiety", y = "achievement")# plot_surface(model = fit_lms, x = "intelligence", z = "anxiety", y = "achievement")plot_jn(model = fit_lms, x ="intelligence", z ="anxiety", y ="achievement")
“Under the hood”: product indicators with semTools + lavaan
Latent interactions are hard because the product term introduces nonlinearity + non-normality.
PI dblcent is transparent (and often provides classic fit machinery) but can be heavy/fragile.
LMS/QML are elegant for estimation, but they force a new evaluation mindset: baseline fit + LRT, plus probing for interpretation.
Further reading / self-study links
modsem documentation and vignettes (https://modsem.org/articles/modsem.html)
modsem R package documentation (product indicator methods; LMS/QML; probing functions)
semTools documentation for indProd()
Aiken, L. S., & West, S. G. (1991). Multiple regression: Testing and interpreting interactions.
References
Jorgensen, T. D., Pornprasertmanit, S., Schoemann, A. M., & Rosseel, Y. (2022). semTools: Useful tools for structural equation modeling. https://CRAN.R-project.org/package=semTools
Rosseel, Y. (2012). lavaan: an R package for structural equation modeling and more Version 0.5-12 (BETA). 37.
Slupphaug, K. S., Mehmetoglu, M., & Mittner, M. (2025). Modsem: An r package for estimating latent interactions and quadratic effects. Structural Equation Modeling: A Multidisciplinary Journal, 32(4), 717–729. https://doi.org/10.1080/10705511.2024.2417409