nomologR is written for three audiences:
The package coordinates established engines — psych,
EFAtools, lavaan, and semTools —
and adds a teaching layer: diagnostics framed as evidence, explanations
tied to the methodological literature, and a record of every
consequential researcher decision.
At each step, nomologR tries to help answer one
question:
What does this result tell me about the claim that these observations measure the construct I say they measure, and what should I investigate next?
The package flags, explains, and documents. It never silently deletes items, respecifies models, or declares a scale “valid.”
| Stage | Question it answers | Functions | Walkthrough |
|---|---|---|---|
| 1. Item and data audit | What do the items and responses look like? | nomo_screen() |
From item audit to exploratory structure |
| 2. Dimensionality | How many latent dimensions deserve investigation? | nomo_factors() |
From item audit to exploratory structure |
| 3. Exploratory structure | What does a requested factor solution look like? | nomo_efa() |
From item audit to exploratory structure |
| 4. Confirmatory measurement model | Does a prespecified model reproduce the data, and where is there strain? | nomo_model(), nomo_split(),
nomo_cfa() |
From CFA to a defensible measurement model |
| 5. Reliability and construct-validity evidence | How precise are scores, and are constructs distinguishable? | nomo_reliability(), nomo_validity() |
From CFA to a defensible measurement model |
| 6. Generalizability | Is the construct measured comparably across groups? | nomo_invariance(), nomo_partial() |
Measurement invariance |
| 7. Nomological network | Does the construct relate to others as theory predicted? | nomo_hypotheses(), nomo_network() |
Theory-specified nomological networks |
| Guided workflow | How do the stages fit together with explicit decisions? | nomo_run() |
Guided workflow |
| Starting from content review | What does empirical evidence add to an expert review of the items? | nomo_screen() and nomo_run() with a
contentvalidR handoff |
From content review to empirical screening |
| Reporting | How do I archive the evidence and decisions? | nomo_report(), nomo_table() |
Archiving a workflow |
The examples and walkthroughs use simulated datasets whose population models are documented. Because the truth is known, you can check what the package reports against what actually generated the data — something real data never allow.
| Dataset | Design | What it teaches |
|---|---|---|
nomo_demo_continuous |
Two correlated factors, five candidate items each, 500 cases | A cross-loading item (a5), a weak item
(b5), and a small amount of missing data |
nomo_demo_ordinal |
The same latent responses cut into five ordered categories | Polychoric correlations, WLSMV estimation, and ordinal reliability |
nomo_demo_network |
Three constructs, an observed outcome, two administration groups, 800 cases | Theory-specified predictions, equivalence regions, replication, and a known source of scalar non-invariance |
nomo_demo_walkthrough |
Twelve items an expert panel reviewed in contentvalidR,
two facets, two cohorts, 400 cases |
Items that pass content review and fail empirically, and the reverse; reverse-worded items; a cohort difference |
See ?nomo_demo_continuous,
?nomo_demo_ordinal, ?nomo_demo_network, and
?nomo_demo_walkthrough for the full population models.
An item audit describes the data without changing it:
scr <- nomo_screen(nomo_demo_continuous)
scr
#> <nomo_screen> Item and data audit
#> Cases: 500 | Candidate items: 10
#> Items with missing responses: 2 | Constant: 0 | All missing: 0
#> Relationship diagnostics: 10 eligible items | 10 item-rest estimates
#> Response concentration flags: 0 | Near-zero variance: 0
#> Decision log: 3 info, 1 review, 0 concern
#> No rows or items were removed or modified.Factor-retention evidence triangulates several criteria rather than trusting a single rule:
fac <- nomo_factors(nomo_demo_continuous, seed = 2026)
fac
#> <nomo_factors> Factor-retention evidence
#> Cases: 500 | Items: 10 | Correlation: pearson
#> Criterion set: core | Available methods: 3 | Families: 2 | Skipped: 1
#> Parallel analysis (percentile): 2 | MAP TR2/TR4: 2/2 | KMO: 0.874
#> All 2 available criterion families (3 methods) point to 2 factors. Related
#> methods within a family are grouped before concordance is summarized; this is
#> strong converging evidence for investigating that solution, not proof of
#> dimensionality. 1 requested method was not evaluated; see criterion status for
#> the documented reason.The population model for these data has two factors, and the retention evidence points to investigating two. Notice the wording: the evidence supports investigating a two-factor solution; it does not prove that the scale “has” two factors.
KEEP, REVIEW, or
STRONG REVIEW, never DELETE. The references
live in nomo_defaults(), and changing them is a visible
researcher choice.KEEP,
REVIEW, and STRONG REVIEW for loadings;
info, review, and concern for
evidence), so code that filters on them is unaffected.psych or lavaan object (usually
in $fit) for direct inspection.nomo_run() records the researcher’s
decisions and rationales across stages.contentvalidR review carried
forward, screened, including where the two stages disagree.Throughout, the research basis
article explains where each method came from, what the contemporary
literature recommends, and what nomologR implements. Every
function’s help page lists its references.
The next release, v1.0.0, is planned together with contentvalidR,
which covers the content-review stage before this package’s. At 1.0.0
both packages’ interfaces become stable, and the handoff between them
becomes a supported contract. Larger extensions, such as ESEM, IRT, and
longitudinal invariance, are candidates for later 1.x releases. See the
roadmap
and the v1.0.0
milestone.
citation("nomologR")
#> To cite nomologR in publications, please use:
#>
#> Uhalt J (2026). _nomologR: Guided Scale Development and Construct
#> Validation_. R package version 0.9.0,
#> <https://github.com/JUhalt/nomologR>.
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Manual{,
#> title = {nomologR: Guided Scale Development and Construct Validation},
#> author = {Joshua Uhalt},
#> year = {2026},
#> note = {R package version 0.9.0},
#> url = {https://github.com/JUhalt/nomologR},
#> }