mfrmr 0.2.2
Standardized the package’s canonical joint-maximum-likelihood label as
"JML"across fitted objects, engine state, manifests, and replay scripts.method = "JMLE"remains accepted only as a backward-compatible input alias and now resolves immediately to"JML".Revised first-contact guides and result guidance to use reader-facing wording while retaining documented API and status vocabulary.
Clarified that
maxitis a prespecified computational ceiling rather than a result-selection control. Iteration-limited fits now direct users to keep the specification fixed, follow a prespecified ceiling sequence, and withhold interpretation until the numerical-readiness gate passes.Replaced blanket
\dontrun{}and@examplesIf interactive()guards with checkable examples or\donttest{}blocks. Only the two workflows that need separately generated ConQuest files remain\dontrun{}, and only the local Shiny viewer remains interactive-only. The release-readiness review now enforces that allowlist and flags CRAN-side package workload above ten minutes, based on ordinary examples,donttestexamples, tests, and vignette rebuilding. Other top-level check components remain visible as diagnostics but do not inflate that package-controlled threshold.Added one authoritative repository roadmap and aligned release metadata and validation notes with the accepted 0.2.2 boundary. External numerical comparison and calibrated MML joint-stationarity gates are explicitly 0.2.3 work rather than retroactive 0.2.2 requirements.
Corrected bounded-GPCM score-side delta-method uncertainty to use the expected-score derivative
ScoreSlope * Var.ScoreSideLogitSEremains the logit-side component SE, whileScoreSideSEand its interval columns now applyScoreSlope * Var * ScoreSideLogitSEon the expected-score scale.Refit DFF/DIF contrasts are now explicitly exploratory: separate-subgroup plug-in standard errors are labeled as conditional on baseline anchors and as omitting baseline-anchor uncertainty and cross-refit covariance. Refit rows no longer receive ETS A/B/C, formal-inference, or primary-reporting eligibility.
Bias summaries and multi-pair bias collections now use
ScreenPositiveas the primary label and expose explicit screening-only eligibility metadata. HistoricalSignificantnames remain as compatibility aliases.import_erm_fit()now reads the currenteRmPerson Parameter/Std.Errorschema as well as historical estimate labels, preserves usable person IDs, and rejects ambiguous or misaligned schemas instead of silently returning empty or recycled person rows.q3_statistic()and its print method now identify the result as mfrmr’s standardized, Person-by-level aggregated-residual Q3-style screen. LegacyYenFlagnames remain for compatibility, while fixed 0.20/0.30 rules are explicitly described as uncalibrated heuristics rather than raw-residual Yen Q3 critical values.as_kable.apa_table(format = "pipe")now appends an APA note once after the complete Markdown table. Previously the vectorized append could repeat the same note after every rendered table line.Added the package hex sticker to the README and pkgdown-standard
man/figures/logo.pnglocation, while retaining the editable SVG source.Tightened the FACETS positioning contract against the current 64-bit 4.5.1 software target: coverage rows describe package-native surfaces, not external numerical equivalence, and mixed models, multiple scales, threshold anchoring, and fixed-calibration scoring remain outside 0.2.2.
Corrected the
interrater_agreement_table()documentation:ExpectedExactis computed from fitted category-probability vectors, not marginal-frequency chance agreement. A focused regression test now guards that definition.Clarified that exact Person-by-facet duplicate rows are retained but place Data readiness under review; legitimate repeated ratings should carry a distinguishing event or occasion facet.
Design, signal-detection, and population-prediction summaries now expose a deterministic named-facet review as
structural_design_review. The review reports design balance, coverage, connectivity, and readiness without implying Monte Carlo performance or arbitrary-facet simulation support.
Estimation performance
- A code-zero solution whose terminal gradient still requires review now triggers a bounded warm-started polish ladder when the portable tolerance setting is at least as strict as the public default. Each stage records its optimizer, portable setting, native L-BFGS-B controls when applicable, objective, terminal gradient, maximum parameter change, evaluations, and elapsed time; the best non-worsening stage is retained rather than assuming that stricter controls improve every fit monotonically.
- Direct, hybrid, and EM MML engines now apply the same terminal-gradient gate to
InferenceReady. EM relative log-likelihood convergence remains visible as an engine-specific stopping condition but no longer overrides the common numerical-readiness contract. -
fit_mfrm()now shares likelihood and analytical-gradient work at an identical parameter vector. MML direct and EM paths reuse quadrature probabilities and posterior quantities, while JML reuses category probabilities and stable observed log probabilities. - The compiled cpp11 probability kernels are now the default for supported RSM/PCM MML work, with automatic pure-R fallback. Set
options(mfrmr.use_cpp11_backend = FALSE)for an explicit reference-path comparison; GPCM continues to use its validated R kernel. -
optimizer = "auto"selects limited-memory L-BFGS-B for MML and for large JML parameter vectors;"BFGS"and"L-BFGS-B"remain explicit choices. The requested and actual methods are recorded for summaries, exports, and replay. The portablereltolsetting is mapped to L-BFGS-Bfactrandpgtol; actual stage controls are recorded alongside the requested and selected-stage settings. - Per-fit workspaces are local to one optimization and are discarded with the fit evaluator. They are not global, are not shared across parallel fits, and are not stored as large probability arrays in the returned fit object.
- Measurement-graph component detection now avoids repeated row-wise lookups while preserving the established subset labels and ordering. This reduces first-fit overhead for larger long-format rating designs.
Summary workflow
- Fit summaries now separate Numerical, Data, Design, Stability, Diagnostics, and Reporting readiness. Disconnected measurement graphs and boundary-constant or single-level facet support remain explicit reporting holds even when numerical optimization succeeds.
- Wright, FACETS-style Wright, pathway, and related fit plots carry additive fit-readiness metadata. Review-only displays remain available for diagnosis but warn, mark their returned subtitle and drawn title, and do not silently promote availability to interpretability.
-
plot_apa_figure_one()now emits one consolidated readiness warning per call, retains the readiness table and interpretation note on the composite, and visibly labels a non-ready result as a manuscript-oriented draft for review rather than a finished publication figure. - Native and FACETS-style Wright maps now share a robust automatic range when boundary-separated facet levels are diagnosed. Exact estimates and CI bounds remain in the returned tables; ruler-end triangles, clipping metadata, and plot footers prevent truncated intervals from being read as complete, while the native returned legend uses the same keys as the rendered legend.
-
summary(fit)now supportsprofile = "fit","facets", and"reporting". The default fit profile remains fast and does not compute diagnostics. The opt-in FACETS profile organizes fitted measures, fit, precision, categories, steps, and plot routes in a familiar reading order; it does not imply that FACETS was run or that its estimates are numerically equivalent. - FACETS and reporting profiles can reuse a matching
mfrm_diagnosticsobject. The returned summary records provenance and section availability, andcompute = "never"prevents automatic diagnostic computation. - Bias/DIF, residual PCA, and anchor-drift or linking analyses remain explicit follow-up decisions because their interpretation depends on the study design.
-
detail = "brief"gives a selective console view without person identifiers. Full structured results remain available through the returned object. - The concise summary presents the visual workflow in order: the required native Wright map with facet uncertainty and labelled step locations, the optional FACETS-style Wright ruler, and the optional Infit pathway. Person rows in the pathway remain opt-in.
Examples and teaching data
-
example_operationaladds a reproducible 48-person teaching dataset with a connected two-rater assignment, moderate workload imbalance, and six planned omissions. It is the primary applied tutorial dataset;example_coreremains an explicitly idealized complete-crossing example, andexample_biasremains the planted-effect diagnostic example. -
mfrmr_example_operational_designdeclares the 288 planned assignment cells separately from the 282 observed scores.describe_mfrm_data()can compare an explicitexpected_designwith observed cells, report planned omissions and unexpected observations, review Person-facet graph components, summarize sparse links and duplicate cells, and keep person labels out of its default compact output. Without a roster, structural missingness is reported as not assessed rather than inferred from a hypothetical complete crossing. -
list_mfrmr_data(details = TRUE)now explains the design and intended role of every bundled synthetic dataset. Fixed-seed generators for the compact examples are tracked in the public source repository. Combined-study objects now explain that relabeling prevents identifier collisions but does not establish a common scale without an explicit anchor/linking design. - Precomputed vignette tables now follow the same successful operational MML route as the displayed workflow and record their source dataset, schema, MD5 checksum, and package version.
Safer first analyses
- The public default remains
reltol = 1e-9for the initial optimizer stage; bounded polishing is invoked only whenreltol <= 1e-9and code zero precedes the terminal-gradient gate. The fitted object records requested and selected-stage controls for replay. Model specification, design, identification, and inferential assumptions remain separate review questions. - Non-finite scores or weights, blank person/facet identifiers, and fractional
maxitorquad_pointsvalues now fail before expensive optimization with a focused correction. Duplicate Person-by-facet cells warn once per fit, report both affected rows and duplicate cells, and propagate a Data review state downstream. -
missing_codes = TRUEnow applies the conventional sentinel set to scores while preserving person and facet IDs. An explicit character vector remains an explicit request to apply those codes across all selected model columns; the review records the scope used for each column. - On-the-fly ConQuest overlap examples now use the same
1e-9tolerance. Their bundle summaries, settings, written README files, and compact console summaries report the actual mfrmr fit controls, MML engine, terminal gradient, convergence state, and inference readiness. A fit requiring convergence review is clearly withheld from the external comparison step. -
fit_mfrm()now gives focused guidance for common undeclared missing-value codes and records score-category recoding in the fitted object. It also distinguishes an explicitly silent anchor policy from policies that report anchor review information. - Partial-credit fits infer the step facet only when a familiar item-like role is unambiguous. Otherwise, the warning shows how to set
step_facetexplicitly. Rating-scale fits report thatstep_facetandslope_facetare not used. - Direct data-frame input to
mfrm_results()is limited to data with recognizable measurement roles. Ambiguous columns now lead to an explicitfit_mfrm(..., method = "MML")instruction instead of a guessed analysis. -
describe_mfrm_data()computes agreement automatically only when a rater-like facet is present. Agreement output names the facet actually used and avoids presenting a generic facet as a rater. - Latent regression rejects a non-person-centered parameterization that would confound the population intercept with the measurement scale.
- CRAN checks now exercise the complete introductory workflow once and use the exact README/default MML controls rather than a reduced quadrature setting. They retain lightweight compatibility/backend/artifact contracts. Repeated estimation, detailed plotting, simulation, and broad regression coverage remain in the complete local and GitHub Actions suite.
- A repository-level first-use workflow stress protocol covers linked, sparse, disconnected, shared-link, PCM, bounded-GPCM, extreme-score, separation, missing-code, and weighted scenarios across deterministic seeds. It keeps expectation matching separate from actual report readiness and is excluded from routine CRAN checks.
Interpretation and compatibility boundaries
- Optimizer code zero is no longer treated as sufficient evidence of a clean solution when the terminal gradient remains large. Summaries label this state as requiring review and explain the diagnostic basis.
-
facets_feature_coverage()andgpcm_capability_matrix()now present concise user-facing capability, limitation, and recommended-route information. Only documented user-facing columns are returned. - FACETS-style plots reproduce a reading convention, not FACETS numerical estimation. ConQuest comparison helpers cover documented unidimensional MML overlap and do not automate ConQuest or claim general numerical equivalence.
- The generated ConQuest overlap command now states quadrature MML explicitly and requests four machine-readable CSV outputs.
normalize_conquest_overlap_exports()reads those files, reconstructs the sum-constrained item location, trims fixed-width person identifiers, and prepares them forreview_conquest_overlap(). - A matched 31-node run with ConQuest 5.47.5 Demonstration Version is recorded in the public source repository’s validation record (excluded from the installed CRAN package) for the documented binary, item-only, one-covariate MML overlap case. The result supports that narrow handoff and is not a claim of general numerical equivalence.
-
export_mfrm_results()now labels every preset as a potentially identifying analysis archive, warns before writing unless the risk is explicitly acknowledged, and records privacy status in its summary, HTML index, and written-files manifest. Fit-levelexport_mfrm_bundle()archives follow the same warning and metadata contract, and the lower-levelexport_mfrm()CSV writer now records per-file handling metadata. ConQuest overlap bundles likewise warn on file export and include an artifact-level privacy inventory for response, covariate, and case-EAP files.
First-use workflow
- The recommended workflow is now data ->
fit_mfrm()-> fit summary -> required Wright map -> focused diagnostics ->mfrm_report()orexport_mfrm_results(). -
summary(mfrm_results(...), view = "brief")andsummary(mfrm_report(...), view = "reader")provide stable, concise views over the corresponding structured objects. -
export_mfrm_results(preset = "starter")writes a reader-first result folder with an index, required Wright-map image, selected tables, report files, replay code, and a reproducibility manifest. - The README, workflow vignette, and help pages now begin with the same compact analysis route and direct specialist questions to focused follow-up helpers.
Wright maps and fit pathways
- Wright maps retain the native renderer as the default. Native maps can show facet SE or confidence-interval whiskers alongside fitted step locations with
show_ci = TRUE, while fitted coordinates remain unchanged. -
renderer = "facets"adds an opt-in FACETS Table 6-style visual grammar: a shared logit ruler, person-frequency asterisks, signed facet columns, all fitted facet levels, horizontal score-transition lines, and optional rubric labels. The renderer reproduces a display convention, not FACETS estimation or numerical output. - Both Wright renderers return tidy draw-free data for custom graphics. The native
top_ndisplay remains compact; the FACETS-style data retain every fitted location. -
plot(..., type = "fit_pathway")adds a separate fit-oriented display with Infit or Outfit on the x-axis and measure logits on the y-axis. Screening bands, measure intervals, and optional ZSTD companions are explicit. - Person rows can be added to the fit pathway with bounded selection and independent person/facet label controls. The existing expected-score
type = "pathway"is unchanged.
Reporting and migration support
-
facets_term_crosswalk()andfacets_visual_contract()document the correspondence between FACETS terminology and mfrmr outputs while keeping visual compatibility separate from numerical equivalence. -
plot_data(),plot_data_components(), andas_ggplot()make plot coordinates, annotations, reference lines, and guidance available for custom R graphics. - Plot helpers consistently support
preset = "monochrome"for print-friendly figures. -
export_mfrm_bundle(..., include = "html")provides a fit-level HTML/CSV/replay bundle without first creating anmfrm_resultsobject. - Model-comparison output can be routed through
build_model_choice_review()andbuild_summary_table_bundle(), with explicit guidance for equal-weighting RSM/PCM models, bounded GPCM sensitivity analyses, and latent-regression reporting.
mfrmr 0.2.1
CRAN release: 2026-06-12
Results, reports, and export
-
mfrm_results()adds a comprehensive first-screen object for an existing fit, arun_mfrm_facets()result, or a long-format data frame. It gathers diagnostics, available tables, plot routes, status information, next actions, and reproducible code without replacing the lower-level helpers. -
mfrm_results(include = ...)supports purpose presets for publication, FACETS migration, validation, bias, local misfit, linking, network review, and bounded GPCM review. -
mfrm_report()converts anmfrm_resultsobject into a navigable reporting plan. Its first screen, report index, template index, evidence boundaries, cautious wording, and next actions keep detailed tables available without turning diagnostics into pass/fail decisions. -
export_mfrm_results()writes selected result tables, report files, draw-free plot data, images, replay code, RDS output, and a written-files manifest.export_mfrm_bundle()remains the broader fit-centered archive. -
launch_mfrmr_viewer()provides an optional Shiny reader over an existingmfrm_resultsobject. It displays stored results and does not refit the model or change diagnostics. -
mfrmr_output_guide("public")maps the shortest fit, results, report, viewer, export, and specialist routes. Additional guides cover FACETS, ConQuest, binary data, simulation, linking, response time, and R-first visualization.
Interpretation and reporting accuracy
- APA output now describes mean-square fit relative to the selected screening band instead of labeling overall fit “acceptable” or “elevated.” Band position is presented as a review signal, not a validity decision.
- MML reports state that person measures are EAP estimates and that residual-based fit statistics are evaluated at those measures. Comparisons intended to match JMLE-based FACETS output should use
method = "JML"and aligned settings. - Small-df ZSTD values are withheld when the transformation is unstable. FACETS/Winsteps output may still show a value under different sparse-cell conventions; such pairs are labeled as availability or standardization differences rather than automatically as fit differences.
- MML person separation and reliability are based on EAP measures and posterior SDs. They are kept distinct from JMLE-based FACETS reliability and from observed inter-rater agreement.
- APA tables and narratives report the measure-CI basis and fitted sign convention when available. Separation reliability, agreement, fit, and validity remain separate reporting claims.
-
precision_review_report(),fit_measures_table(), andfacets_fit_review()expose the fit, ZSTD, df, separation, and uncertainty bases needed before drafting technical conclusions.
Focused review and planning
- Result and report objects can carry explicit bias, local-misfit/pathway, linking/anchor, precision, network, and response-time sections. Missing or unrequested sections remain visible as such.
- Recovery summaries expose
reading_order,condition_review, and fit/separation operating characteristics. Bounded-GPCMslope_regimelabels and extended sensitivity evidence remain separate from recovery metrics, convergence, and uncertainty availability; they are not automatic adequacy decisions. - Resampling and simulation tools add person-clustered subsampling/bootstrap, sparse linked rating designs, connectedness summaries, and peer-assessment assignment checks. These are stability, design, or operating-characteristic diagnostics rather than calibrated tests or automatic decisions.
mfrmr 0.2.0
CRAN release: 2026-05-16
Scope and compatibility
- This version strengthens mathematical identification, uncertainty reporting, diagnostic tables, recovery tools, and draw-free visual output for RSM, PCM, and the documented bounded GPCM implementation.
- Breaking change: former exported
*_audit*helper names, compatibility classes, and duplicate output fields were removed in favor of the canonical*_review*names. Stable accessors includeanchor_review()andprecision_review(). -
facets_positioning_guide(),facets_feature_coverage(), andfacets_output_contract_review()describe supported FACETS-style tables, migration routes, and known differences. mfrmr estimates remain package-native unless external FACETS output is supplied for comparison. -
mfrmr_output_guide("facets"),mfrmr_output_guide("conquest"), andmfrmr_output_guide("r")provide focused entry points for users moving from FACETS or ConQuest and for users who want reusable R plot data. -
write_mfrm_residual_file()andwrite_mfrm_subset_file()add standalone residual and connected-subset files for external review.
Estimation and fit statistics
- RSM, PCM, and bounded GPCM step profiles now use the correct sum-to-zero parameter count. MML structural covariance output provides uncertainty for non-person facets, steps, and bounded-GPCM slopes when the observed information is available.
- Measure tables record confidence level, interval method, eligibility, and interpretation basis.
compare_mfrm()records the BIC sample-size basis, including weighted fits, and withholds unsupported likelihood-ratio tests with an explicit reason. - Bounded-GPCM simulation and fitting use the same geometric-mean-one relative-slope identification. Expected scores, information, category curves, fair averages, and bias screening use slope-aware probabilities.
-
fair_average_table(fair_se = TRUE)adds structural delta-method uncertainty where supported.estimate_bias()uses slope-aware information and can report conditional profile-likelihood screening quantities. -
diagnose_mfrm(fit_df_method = "engine" | "facets" | "both")exposes the package and FACETS-style df/ZSTD conventions separately.facets_fit_review()andread_facets_fit_table()support row-aligned comparison with existing FACETS tables without treating convention differences as estimation errors. -
compute_person_fit_indices()computes polytomouslzfrom observed category probabilities. Snijders-correctedlz_staris reported for compatible JML/fixed-effect person estimates and remains unavailable for MML/EAP scores. The incorrectly namedECI4output was removed; useOutfitZSTDfor the corresponding standardized chi-square quantity.
Diagnostics and visualization
-
fit_measures_table()adds FACETS-style element fit tables, configurable threshold profiles, measure intervals, df-sensitivity summaries, and draw-free fit plots. -
data_quality_report()reports row retention, score-support gaps, zero/sparse category use by facet level, restricted response patterns, quality flags, original-to-internal score mapping, and dashboard plot data. -
analyze_residual_pca(parallel = TRUE)adds residual-permutation parallel analysis and dedicated plots. It remains exploratory dimensionality evidence. -
category_curves_report()adds category probabilities, cumulative probabilities, total information, category-specific information, boundary summaries, and overview/focused plots. -
plot_data()andplot_data_components()expose long-form data, annotations, styles, and settings from supporteddraw = FALSEplots; monochrome and interval guides support print-oriented reporting. - Response-time QC, design connectedness, rater-effect networks, and halo screening receive dedicated summaries and plots. They remain descriptive evidence, not speed parameters, logit estimates, or automatic exclusions.
-
mfrm_d_study()extends observed-score generalizability output to planned rater/facet-count comparisons. Its residual-scaling assumptions are reported explicitly; it is not a substitute for an unidentified interaction decomposition.
Recovery, model choice, and reporting
-
evaluate_mfrm_recovery()andassess_mfrm_recovery()report parameter recovery, convergence, coverage, Monte Carlo precision, uncertainty availability, score support, and user-specified practical thresholds in separate summaries and plots. -
build_model_choice_review()combines fitted-model comparisons, model-role guidance, downstream support, cautious wording, and optional weighting review for RSM, PCM, and bounded GPCM candidates. -
build_summary_table_bundle()andexport_summary_appendix()accept a broader set of fit, recovery, person-fit, precision, and comparison objects for report and appendix handoff. - DIF plots add comparable scales, value labels, flag thresholds, confidence intervals, and interpretation metadata. Input validation for DFF/DIF helpers now fails earlier with clearer messages.
- Citation and interpretation corrections clarify mean-square screening ranges, Q3 residual conventions, sample-size guidance, ICC bands, shrinkage uncertainty, and the limits of pairwise bias SE approximations.
Bounded GPCM boundary
-
gpcm_capability_matrix()is the authoritative support map. Supported, caveated, and unavailable routes include a recommended alternative and the evidence needed for broader use. - Direct fitting, posterior scoring, information, category plots, recovery, fair averages, conditional bias screening, and selected reporting/planning helpers are available where marked.
- Full unrestricted discrimination structures, full FACETS score-side equivalence, posterior-predictive checks, and heavy Bayesian backends are outside this version’s supported scope.
- Structured
mfrmr_gpcm_scope_errorconditions identify the unsupported area and recommended route instead of returning a partial result.
Defaults and performance
- No defaults changed from 0.1.6:
quad_points = 31,diagnostic_mode = "both",plot(fit)showing the Wright map, andkeep_original = FALSE. - Users upgrading directly from 0.1.5 should note that these defaults were introduced in 0.1.6.
- The cpp11 MML backend is used by default for supported RSM and PCM work;
options(mfrmr.use_cpp11_backend = FALSE)selects the pure-R reference path. Unsupported kernels fall back automatically.
0.1.6
- Changed the default diagnostic mode from legacy-only to both legacy and strict-marginal diagnostics, increased MML quadrature points from 15 to 31, and made the Wright map the default
plot(fit)output. The former overview remains available withtype = "bundle". - Added estimated facet interactions, empirical-Bayes shrinkage, hierarchical/sample-adequacy review, missing-code preprocessing, APA output adapters, confidence intervals across major plots, Q3 diagnostics, expanded person-fit indices, observed-score generalizability helpers, import adapters for mirt/TAM/eRm, resumable MML fits, and additional diagnostic plots.
- Improved fit summaries, replay scripts, input validation, examples, large-design diagnostics, and the printable cheatsheet.
0.1.5
- Simplified the first-use fit, diagnostic, and reporting workflow.
- Added MML latent regression with EAP scoring, the first bounded-GPCM fitting route, binary and non-consecutive score support, strict-marginal follow-up plots, report/appendix helpers, and clearer uncertainty and support boundaries.
- Added focused overlap and handoff guidance for FACETS, ConQuest, mirt, TAM, and eRm.
