inst/validation/release-evidence-map-0.2.1.md

mfrmr 0.2.1 evidence map

This note tracks the 0.2.1 development focus after the 0.2.0 release: bounded GPCM refinement, slope-aware recovery review, and uncertainty interpretation.

Literature basis checked

Zotero was checked locally for these sources. The local library contains Muraki (1992), Muraki (1993), and Morris et al. (2019). Muraki (1993) cites Samejima (1974), but the current 0.2.1 bounded-GPCM changes do not add a Samejima normal-ogive or graded-response-model implementation.

Fit and separation reporting boundary

Fit and separation are source-grounded reporting diagnostics, but they are not single-number validation gates.

0.2.1 therefore adds precision_review_report()$fit_separation_basis, a compact table that states each topic's source basis, package surface, interpretation, validation use, and availability in the current run.

Peer-review simulation boundary

Peer-review or peer-assessment simulations have a stronger design constraint than ordinary sparse rater-mediated designs: the submission pool and reviewer pool can be the same people. The 0.2.1 helper therefore uses a fixed person-by-reviewer-by-criterion skeleton with shared IDs and optional structural self-review exclusion.

Implementation boundary

The slope_regime field (unit_slopes, near_flat, moderate, high_dispersion) is not a psychometric adequacy threshold from the cited literature. It is a package validation label that summarizes centered log-slope spread so recovery simulations can be read against the intended generator stress level.

The current operational cut points are intentionally conservative engineering bins:

These labels should be reported as generator-condition metadata, not as model-choice evidence and not as release-level recovery success or failure by themselves.

mfrm_results() is also an implementation-layer UX wrapper, not a new estimator, diagnostic standard, or validation argument. Its purpose is to make the existing fit_mfrm() -> diagnose_mfrm() -> table/review/report/plot surfaces easier to inspect for users who expect a comprehensive first screen. Section-level failures are reported as not_available so unsupported routes remain visible without being confused with psychometric evidence. Direct data.frame input is intentionally conservative and should be replaced by an explicit fit_mfrm() call in reproducible analysis scripts whenever column roles, model settings, anchors, or missing-data rules require documentation. mfrm_results_interactive() is opt-in only; it exists for guided column selection and code generation in interactive sessions, not for package checks, batch scripts, or manuscript replay. mfrmr_output_guide("entry") is the companion public-API map for this route; it documents where to start and where to branch next, but it does not add a new analysis method. Its lifecycle, user-level, and recommended-entry labels are navigation metadata, not validation grades. The related mfrmr_output_guide("viewer") maps optional local-viewer workflows back to the mfrm_results(include = ...) object that must be created first. It is a navigation table for inspection tasks, not a new reporting standard or interactive analysis record. Likewise, mfrm_results(include = "publication"|"validation"|"facets"|"network"| "gpcm_review") expands to existing sections; the presets do not add new estimators, diagnostics, or acceptance thresholds. include = "bias" and include = "misfit_review" follow the same pattern: they expose existing bias-screen, unexpected-response, displacement, and pathway-map review surfaces without selecting fairness contrasts or turning case-review prompts into validity decisions. include = "linking" follows the same wrapper rule. It exposes the fitted object's stored anchor-review evidence and the existing build_linking_review() operational surface when available. It does not infer drift from one fit and does not replace the explicit multi-fit detect_anchor_drift() or build_equating_chain() workflows needed for wave/form comparison. Bounded GPCM linking synthesis remains caveated by the existing capability matrix. The summary(mfrm_results(...))$triage table is likewise a reading-order surface over existing diagnostics, status, plot, table, precision, reporting, model-scope, and network-review availability. Its Severity labels route attention; they are not new psychometric cut points or validation decisions. launch_mfrmr_viewer() follows the same boundary. It is an optional Shiny reader for an already-created mfrm_results object, not a fitting wizard, external-web-app bridge, or new validation layer. The viewer's Replay tab is intended to keep GUI inspection subordinate to the explicit fit_mfrm() -> mfrm_results() workflow. The QC, report, bias, and pathway/misfit tabs remain display surfaces over existing components. In particular, bias-interaction review still requires an explicit facet-pair choice; the viewer does not select contrasts or promote screening signals into fairness conclusions. Tab-local section-status tables are navigation aids over summary(res)$status, plot_map, and collected tables; they make unavailable and not-requested sections visible, but they are not additional diagnostics. export_mfrm_results() follows the same object-first boundary. It writes the already-created mfrm_results summary tables, collected tables, HTML, RDS, replay scaffold, and manifest to disk. When include = "report" is requested, it also writes mfrm_report() CSV, Markdown, and HTML artifacts from the same stored result object. It does not recompute diagnostics, change section availability, or create a new validation layer. Optional plot export is a graphics handoff over existing plot(res, type = ...) routes. mfrm_report() follows the same boundary for report drafting. It converts an existing mfrm_results object into QC, APA, validation, reviewer, or technical section plans with claim-readiness, report-gap, evidence-boundary, and next-action tables. Its report_index table is the compact entry point that lists each major evidence area, evidence status, readiness label, review-signal count, and the primary/template tables to inspect next. Its fit-specific fit_criteria, zstd_conventions, and fit_decision_policy tables expose multiple MnSq threshold profiles and the engine-vs-FACETS-style df/ZSTD convention boundary before report wording. Its stored-result evidence tables (fit_evidence_summary, fit_threshold_sensitivity, fit_df_sensitivity_summary, and fit_df_sensitive_rows) summarize observed fit-status counts and df-sensitive ZSTD prompts from res$components$fit_measures. fit_reporting_templates then converts those stored counts into cautious APA/QC/validation/reviewer wording scaffolds while preserving separate sentences for MnSq status, ZSTD standardization, df sensitivity, and separation/reliability. precision_evidence_summary, precision_basis, and precision_reporting_templates extend the same boundary to separation, reliability, and strata, using the Wright/Masters G/R/H convention and the stored precision review. These rows explicitly prevent Rasch/FACETS-style separation reliability from being reported as inter-rater agreement, model fit, or standalone validity evidence. bias_evidence_summary and bias_reporting_templates extend the same boundary to bias, DFF, and fairness wording when the result was explicitly built with include = "bias". They keep facet-level screens, interaction-bias contrasts, group-by-facet DFF claims, and fairness conclusions separate. misfit_evidence_summary and misfit_reporting_templates extend the same boundary to local misfit review when the result was explicitly built with include = "misfit_review". They keep unexpected-response rows, displacement review, pathway-map evidence, and case-review wording separate. linking_evidence_summary and linking_reporting_templates extend the same boundary to anchor readiness, drift review, and screened equating-chain review when the result was explicitly built with include = "linking". They keep single-fit anchor-readiness support separate from multi-fit drift/equating claims. It does not refit the model, recompute diagnostics, select fairness contrasts, infer drift, or turn fit, separation, bias-screen, pathway, local misfit, or anchor evidence into automatic acceptance or exclusion decisions.

Binary person-item data remain inside the same ordered-response contract. When person names the person column, facets = "Item" names the single non-person item facet, and the observed score support has exactly two ordered integer categories, model = "RSM" is the ordinary dichotomous Rasch route. The package does not need a separate exported rasch() front end for this case; instead, mfrmr_output_guide("binary") documents the first-screen route and checks. PCM is still computationally available for two-category data, but for ordinary person-item binary tests the RSM route is the cleaner default unless item-specific step structure is part of the intended design.

The bounded-GPCM capability matrix is now also the runtime guard contract. gpcm_runtime_guard_coverage() records how each blocked or deferred capability row is enforced: public helpers either stop with mfrmr_gpcm_scope_error or remain explicitly marked as roadmap-only when no public runtime surface exists yet. The structured error carries the matrix area, status, recommended route, and next validation step, so wrappers can route unsupported paths without parsing prose. The release-readiness protocol checks that this coverage table stays synchronized with gpcm_capability_matrix() and that every outstanding row is represented. mfrmr_output_guide("gpcm") is the short user-facing route map to both helpers; it is navigation metadata and does not broaden the bounded-GPCM support contract.

0.2.1 checks added



Try the mfrmr package in your browser

Any scripts or data that you put into this service are public.

mfrmr documentation built on June 13, 2026, 1:07 a.m.