congruence_test() now excludes interaction constructs, naming any it
drops in a message. An interaction term's measurement is fixed by the product
method rather than by theory, so its position in a nomological network is not
interpretable — and it was previously producing coefficients as low as -0.47
in a framework built around near-redundancy. It is removed from the construct
set entirely rather than only from the pair list, because Eq. 2 sums over the
whole set: coefficients for the remaining pairs change accordingly. This
brings congruence into line with assess_cta(), assess_pos(),
assess_pcm() and assess_cipma(), which already excluded them.
congruence_test() now refuses higher-order models with a warning rather
than returning a number. Two-stage estimation replaces the lower-order
constructs with a single higher-order composite, and it has not been
established what belongs on that composite's diagonal, nor whether a
congruence coefficient between a higher-order and a first-order construct is
interpretable. Previously such models ran and returned results.
congruence_test() gains a reliability argument selecting which estimate
sits on the diagonal of the construct-correlation matrix: "rhoA", "rhoC",
"cronbach" (Cronbach's alpha) or "one". "cronbach" is included chiefly for
comparison with covariance-based SEM, where rho_A is unavailable. Franke, Sarstedt & Danks (2021, Eq. 2) specify "the reliabilities"
without fixing an estimator, so all four are in specification.
The default is now "rhoA", changed from the previous "rhoC". This
aligns seminrExtras with SmartPLS: on the simple corporate reputation model
the "rhoA" diagonal reproduces SmartPLS's published coefficients to three
decimal places on all six construct pairs, and the estimator choice accounts
for the whole of the previous disagreement between the two programs. Pass
reliability = "rhoC" to reproduce results generated with 1.0.2 or earlier.
The estimators differ only where internal consistency is undefined. "rhoA",
"rhoC" and "cronbach" all return 1 for single-item constructs, so every
option coincides in a model built entirely from single indicators. They part
company on Mode B constructs: "rhoA" returns 1, while "rhoC" and
"cronbach" compute a value from the indicators. Note this only affects pairs
that involve a Mode B construct — each matrix column carries exactly one
reliability, its own construct's, so a coefficient between two reflective
constructs is invariant to every other construct's diagonal. In a model mixing Mode A and Mode B the "rhoA"
diagonal is therefore set by measurement mode rather than by the data, which
shifts coefficients systematically — on the extended corporate reputation
model, reflective-reflective pairs rise while formative-formative pairs fall,
and the ranking of most-congruent pairs changes. "one" removes the
distinction by treating every construct alike.
congruence_test() now attaches each congruence coefficient — and its
bootstrap SD, t-statistic, and confidence interval — to the correct
construct pair. Coefficients were generated in combn() (row-major) order
but written into the results matrix via upper.tri() (column-major) order;
the two orderings diverge for models with four or more constructs, which
mislabelled non-adjacent pairs (e.g. COMP <> CUSL and LIKE <> CUSA were
swapped in the simple corporate-reputation model, and 10 of 15 pairs were
mislabelled in the six-construct example). The coefficient values themselves
were correct; only their pair labels were wrong. Added a regression test
asserting pair-label correctness against an independent name-indexed
reference.test-cipma-comprehensive.R and test-fimix.R no longer reach
into seminr's non-exported internals via seminr:::items_of_construct()
and seminr:::all_endogenous(). They now use seminrExtras's own local
helpers of the same name. This avoids breakage against forthcoming
seminr 2.5.0, which refactors (and renames) those internal helpers.Composite Overfit Analysis (COA): assess_coa(), predictive_deviance(),
deviance_tree(), unstable_params(), group_rules(), competes() for
diagnosing why and for whom PLS models fail to generalise out-of-sample.
Necessary Condition Analysis (NCA): assess_nca() with fully internal
CE-FDH and CR-FDH algorithms (no external NCA package dependency).
NCA-ESSE: assess_nca_esse() implements the effect size sensitivity
extension (Becker et al., 2026).
Combined Importance-Performance Map Analysis (cIPMA): assess_cipma()
integrates IPMA with NCA to classify constructs into actionable priority
quadrants. assess_ipma() provides an IPMA-only convenience wrapper.
Supports HOC, mediation, and moderation models.
FIMIX-PLS: assess_fimix() and assess_fimix_compare() for EM-based
latent class segmentation with multi-start initialisation and information
criteria comparison.
PLS-POS: assess_pos(), assess_pos_compare(), and pos_segments()
for prediction-oriented segmentation that maximises the sum of R-squared
across segments (Becker et al., 2013).
CTA-PLS: assess_cta() for confirmatory tetrad analysis with automatic
indicator borrowing for constructs with fewer than 4 indicators (Gudergan
et al., 2008).
Predictive Contribution of the Mediator (PCM): assess_pcm() evaluates
whether a mediating construct improves out-of-sample prediction by comparing
DA and EA approaches on isolated sub-models (Danks, 2021).
assess_cvpat() and assess_cvpat_compare(): fixed bootstrap test
branches, loss function return types, and reference metadata.
congruence_test(): fixed division guard, upper-triangular masking, and
bootstrap robustness for nboot = 0.
All features include print(), summary(), and plot() S3 methods.
Comprehensive test suite (740+ tests).
Demo files for all features: demo("seminr-pls-<feature>").
Updated vignette with examples for all features.
seminr >= 2.4.0.rpart added to Imports (for COA deviance trees).MASS, paran, psych, learnr added to Suggests.