Quick reference for end-to-end mfrmr analysis and for checking which
output objects support summary() and plot().
Canonical reporting route
For the clearest default route in RSM / PCM, use
describe_mfrm_data() ->
fit_mfrm() with method = "MML" ->
summary(fit, profile = "fit") ->
review <- summary(fit, profile = "facets") ->
the required native plot(fit, type = "wright", show_ci = TRUE) ->
reuse review$results$diagnostics; call diagnose_mfrm() again only when
residual PCA or other custom settings are needed ->
reporting_checklist() ->
plot_qc_dashboard() and, when flagged, plot_marginal_fit() /
plot_marginal_pairwise() ->
build_apa_outputs() ->
build_summary_table_bundle() -> apa_table() or
export_summary_appendix().
Use JML only when its fixed-person-parameter estimand is methodologically
intended, for example for a JMLE-oriented external comparison, descriptive
or exploratory work, or a design with substantial information per person.
Do not select it merely as a faster substitute for MML: a later MML run
targets a different estimand rather than serving as stricter follow-up to
the same analysis.
Canonical operational review route
When the main question is scale maintenance rather than manuscript reporting,
branch from review$results$diagnostics into:
review_mfrm_anchors() and/or detect_anchor_drift() ->
build_equating_chain() when adjacent-link review is needed ->
build_linking_review() ->
inspect review$group_view_index for stable wave / link / facet rollups and
summary(review)$plot_routes for the next plot helper ->
plot_anchor_drift() or plot(anchor_review, ...) for the specific flagged
evidence family.
For bounded GPCM, use build_linking_review() as a caveated exploratory
synthesis over direct anchor, drift, and chain evidence. It is not an
operational GPCM linking decision or evidence that anchor drift is absent.
Canonical misfit case-review route
When the main question is which observations, facet levels, or pairwise
structures deserve follow-up, branch from review$results$diagnostics into:
build_misfit_casebook() ->
inspect casebook$group_view_index, casebook$group_views, and
summary(casebook)$plot_routes for stable person / facet / wave rollups and
the next plot helper ->
plot_unexpected(), plot_displacement(), plot_marginal_fit(), or
plot_marginal_pairwise() according to casebook$plot_map ->
build_summary_table_bundle() / export_summary_appendix() when the
flagged cases need appendix-style reporting support.
build_misfit_casebook() can still be used for bounded GPCM, but it
should be read as an operational exploratory screen rather than as a strict
Rasch-style invariance report.
Latent-regression route
When the fit uses population_formula = ..., keep the distinction between
the estimator and the forecast helpers explicit:
fit_mfrm()estimates the current narrow latent-regressionMMLbranch. In the returned fit object,fit$population$person_tableis the complete-case estimation table, whilefit$population$person_table_replayretains the observed-person-aligned pre-omit background-data table for replay/export provenance.predict_mfrm_units()andsample_mfrm_plausible_values()can then score under the fitted population model when scored units also supply one-row-per-person background data. That scoring-timeperson_datacontract remains separate from the fit object's stored replay table.predict_mfrm_population()remains a scenario-level simulation/refit helper rather than the latent-regression estimator itself.
Score-category support
If the intended rating scale includes categories not observed in the current
data, make that support explicit. For example, use
rating_min = 1, rating_max = 5 for a 1-5 scale with only 2-5 observed.
If an intermediate category is unobserved (for example 1, 2, 4, 5 with no
3), also set keep_original = TRUE if the zero-count category should remain
in the fitted support. summary(describe_mfrm_data(...)) reports retained
zero-count categories in Notes, printed Caveats, and $caveats;
summary(fit) carries full structured rows into printed Caveats and
$caveats, with Key warnings as a short triage subset. Summary-table
exports route those rows through score_category_caveats or
analysis_caveats. Adjacent threshold estimates should still be treated as
weakly identified when an intermediate category is unobserved.
Planned assignment and structural missingness
A long-format table alone does not reveal whether an absent Person x facet
cell was expected or never assigned. When a score-free assignment roster is
available, pass it as expected_design to describe_mfrm_data(). The
summary then separates expected-but-unobserved cells from unexpected
observations and reports observed versus declared Person-facet graph
components. Without a roster, structural missingness is explicitly marked
as not assessed; mfrmr does not assume a complete crossing.
Typical workflow
Review the long-format data and intended score support with
describe_mfrm_data().Fit a model with
fit_mfrm(). ChooseMMLorJMLfrom the prespecified estimand and assumptions; do not selectJMLmerely to shorten runtime.Read
summary(fit, profile = "fit"), then requestsummary(fit, profile = "facets")and draw the required native Wright map withplot(fit, type = "wright", show_ci = TRUE).(Optional) Use
run_mfrm_facets()ormfrmRFacets()for a legacy-compatible one-shot workflow wrapper.For
RSM/PCM, build diagnostics withdiagnose_mfrm(). For final reporting, preferdiagnostic_mode = "both"so the legacy residual path and the strict marginal screen remain visible side by side. For boundedGPCM, diagnostics are now available throughdiagnose_mfrm()together withanalyze_residual_pca(),interrater_agreement_table(),unexpected_response_table(),displacement_table(),measurable_summary_table(),rating_scale_table(),facet_quality_dashboard(),reporting_checklist(), andplot_qc_dashboard()– the fair-average panel of the dashboard reports an explicit unavailability indicator under GPCM. Usefair_average_table()directly when you need the supported slope-aware element-conditional fair averages. Treat those residual-based summaries as exploratory screens because the discrimination parameter is free. Full FACETS-style score-side contract review remains blocked for boundedGPCM; package-native scorefile export, fit-based reporting bundles, direct fair-average tables, and bias-screening tables carry their own caveats. Posterior scoring withpredict_mfrm_units()/sample_mfrm_plausible_values(), design-weighted information viacompute_information()/plot_information(), Wright/pathway/CCC plots viaplot.mfrm_fit(), direct category reports viacategory_structure_report()/category_curves_report(), and direct data generation throughbuild_mfrm_sim_spec(),extract_mfrm_sim_spec(), andsimulate_mfrm_data()are also available when the simulation specification stores both thresholds and slopes. Useevaluate_mfrm_recovery()andassess_mfrm_recovery()for direct recovery checks plus caveated role-based design evaluation, population forecasting, diagnostic-screening, and signal-detection helpers. Caveated APA/QC/export bundles are available for sensitivity reporting, while score-side FACETS helpers remain outside the documentedGPCMboundary. Usegpcm_capability_matrix()as the formal capability map before branching into less common helpers.(Optional,
RSM/PCM; boundedGPCMwith caveat) Estimate interaction bias withestimate_bias().Choose a downstream branch:
reporting_checklist()for direct report preparation, orbuild_weighting_review()for Rasch-versus-bounded-GPCMweighting review, orbuild_misfit_casebook()/build_linking_review()for operational case review. For boundedGPCM, usebuild_linking_review()only as an exploratory index over direct anchor/drift/chain evidence.Generate reporting bundles:
build_summary_table_bundle(),apa_table(),export_summary_appendix(),build_fixed_reports(),build_visual_summaries(). For boundedGPCM, use the APA, visual, QC, and fit-based export bundles as caveated sensitivity-reporting surfaces; full score-side FACETS review stays blocked, while diagnostic/signal-detection design screening has its own caveated operating-characteristic route.(Optional,
RSM/PCM) Review report completeness withreference_case_review(). Usefacets_output_contract_review()only when you explicitly need the compatibility layer.(Optional,
RSM/PCM) For operational linking follow-up, combinereview_mfrm_anchors(),detect_anchor_drift(), andbuild_equating_chain()insidebuild_linking_review()before exporting appendix-style tables.(Optional) Check packaged reference cases with
reference_case_benchmark()when you want package-side reference checks.(Optional) For design planning or future scoring, move to the simulation/prediction layer:
build_mfrm_sim_spec()/extract_mfrm_sim_spec()->evaluate_mfrm_recovery()->assess_mfrm_recovery()/evaluate_mfrm_design()/predict_mfrm_population()->predict_mfrm_units()/sample_mfrm_plausible_values(). Current fit-derived simulation specs include directGPCMdata generation and recovery checks. Design-evaluation, population-forecasting, diagnostic- screening, and signal-detection helpers also support boundedGPCMas caveated role-based simulation/refit evidence; inspectgpcm_boundarybefore using those results in design claims. Unit scoring can use an ordinaryMMLfit directly, a latent-regressionMMLfit when you also supply one-row-per-person background data for the scored units, or aJMLfit when a post hoc reference-prior EAP layer is acceptable. Intercept-only latent-regression fits (population_formula = ~ 1) can reconstruct that minimal person table from the scored person IDs. Keeppredict_mfrm_population()conceptually separate from that scoring layer: it is a simulation-based scenario forecast helper, not the latent-regression estimator itself. Prediction export still requires actual prediction objects in addition toinclude = "predictions".Use
summary()for compact text checks andplot()(or dedicated plot helpers) for base-R visual diagnostics.
Three practical routes
Quick first pass:
RSM/PCM:fit_mfrm()->diagnose_mfrm()->plot_qc_dashboard()->reporting_checklist()when you want the package to route the next figures. boundedGPCM:fit_mfrm()->diagnose_mfrm()->plot_qc_dashboard()/unexpected_response_table()->rating_scale_table()->compute_information()->plot_information()->plot.mfrm_fit()/category_curves_report()->fair_average_table()/estimate_bias()when those screening tables answer the question. For boundedGPCM, the fit-based export family (build_mfrm_manifest(),build_mfrm_replay_script(),export_mfrm_bundle()) is available as caveated sensitivity-reporting output with explicitgpcm_boundaryrows.Linking and coverage review:
subset_connectivity_report()->plot(..., type = "design_matrix")->plot_wright_unified().Manuscript prep:
RSM/PCM:reporting_checklist()-> inspect the"Visual Displays"and"Method Section"rows ->build_apa_outputs()->build_summary_table_bundle()->apa_table()orexport_summary_appendix(). boundedGPCM:reporting_checklist()-> direct table/plot helpers ->build_apa_outputs()/build_visual_summaries()->export_mfrm_bundle()withgpcm_boundarycaveats.Weighting-policy review:
compare_mfrm()->build_weighting_review()->compute_information()/plot_information()when you want to inspect whether boundedGPCMis introducing substantively acceptable discrimination-based reweighting relative to the Rasch-family reference.Design planning and forecasting:
build_mfrm_sim_spec()orextract_mfrm_sim_spec()->evaluate_mfrm_recovery()->assess_mfrm_recovery()for parameter-recovery checks, thenevaluate_mfrm_design()->predict_mfrm_population()->predict_mfrm_units()orsample_mfrm_plausible_values()under the fitted scoring basis (ordinaryMML, latent-regressionMMLwith person-level background data, orJMLwith the documented post hoc EAP approximation). Here again,predict_mfrm_population()is the scenario-level forecast helper, whereaspredict_mfrm_units()/sample_mfrm_plausible_values()are the scoring layer. Prediction export requires actual prediction objects. BoundedGPCMsupports direct data generation viabuild_mfrm_sim_spec(),extract_mfrm_sim_spec(), andsimulate_mfrm_data(),evaluate_mfrm_recovery(),assess_mfrm_recovery(), caveated role-based design evaluation and population forecasting, diagnostic/signal-detection design screening, residual diagnostics, and direct curve/report helpers. The current planning layer remains role-based for two non-person facets even though estimation itself supports arbitrary facet counts. Additional arbitrary-facet fields are structural design metadata, not Monte Carlo performance results.
Interpreting output
This help page is a map, not an estimator:
use it to decide function order,
identify when dedicated helper functions are needed,
and treat
reporting_checklist()as the package's readiness router for plot and report follow-up.
Objects with default summary() and plot() routes
mfrm_fit:summary(fit)andplot(fit, ...).mfrm_diagnostics:summary(diag); plotting via dedicated helpers such asplot_unexpected(),plot_displacement(),plot_qc_dashboard().mfrm_bias:summary(bias)andplot_bias_interaction().mfrm_data_description:summary(ds)andplot(ds, ...).mfrm_anchor_review:summary(review)andplot(review, ...).mfrm_misfit_casebook:summary(casebook)andprint(casebook), with grouping views available throughcasebook$group_view_indexandcasebook$group_views, source-specific plotting routed throughsummary(casebook)$plot_routesandcasebook$plot_map, and appendix/report handoff available throughbuild_summary_table_bundle()andexport_summary_appendix().mfrm_weighting_review:summary(review)andprint(review), with information follow-up routed throughcompute_information()andplot_information()according toreview$plot_map, and appendix/report handoff available throughbuild_summary_table_bundle()andexport_summary_appendix().mfrm_linking_review:summary(review)andprint(review), with grouping views available throughreview$group_view_indexandreview$group_views, and plotting routed throughsummary(review)$plot_routes,plot_anchor_drift(), andplot(anchor_review, ...)according toreview$plot_map.mfrm_facets_run:summary(run)andplot(run, type = c("fit", "qc"), ...).apa_table:summary(tbl)andplot(tbl, ...).mfrm_apa_outputs:summary(apa)for compact diagnostics of report text.mfrm_summary_table_bundle:print(bundle)for manuscript-oriented table index plus named tables from supportedsummary()outputs,summary(bundle)for table-role/numeric coverage, andplot(bundle, ...)for table-size or numeric-column QC.mfrm_threshold_profiles:summary(profiles)for preset threshold grids.mfrm_population_prediction:summary(pred)for design-level forecast tables.mfrm_unit_prediction:summary(pred)for unit-level posterior summaries under the fitted scoring basis.mfrm_plausible_values:summary(pv)for draw-level uncertainty summaries.mfrm_bundlefamilies:summary()and class-awareplot(bundle, ...). Key bundle classes now also use class-awaresummary(bundle):mfrm_unexpected,mfrm_fair_average,mfrm_displacement,mfrm_interrater,mfrm_facets_chisq,mfrm_bias_interaction,mfrm_rating_scale,mfrm_category_structure,mfrm_category_curves,mfrm_measurable,mfrm_unexpected_after_bias,mfrm_output_bundle,mfrm_residual_pca,mfrm_specifications,mfrm_data_quality,mfrm_iteration_report,mfrm_subset_connectivity,mfrm_facet_statistics,mfrm_facets_contract_review,mfrm_reference_review,mfrm_reference_benchmark.
plot.mfrm_bundle() coverage
Default dispatch now covers:
mfrm_unexpected,mfrm_fair_average,mfrm_displacementmfrm_interrater,mfrm_facets_chisq,mfrm_bias_interactionmfrm_bias_count,mfrm_fixed_reports,mfrm_visual_summariesmfrm_category_structure,mfrm_category_curves,mfrm_rating_scalemfrm_measurable,mfrm_unexpected_after_bias,mfrm_output_bundlemfrm_residual_pca,mfrm_specifications,mfrm_data_qualitymfrm_iteration_report,mfrm_subset_connectivity,mfrm_facet_statisticsmfrm_facets_contract_review,mfrm_reference_review,mfrm_reference_benchmark
For unknown bundle classes, use dedicated plotting helpers or custom base-R plots from component tables.
See also
fit_mfrm(), run_mfrm_facets(), mfrmRFacets(),
diagnose_mfrm(), estimate_bias(), mfrmr_visual_diagnostics,
mfrmr_reports_and_tables, mfrmr_reporting_and_apa,
gpcm_capability_matrix, mfrmr_linking_and_dff,
mfrmr_compatibility_layer,
summary.mfrm_fit(), summary(diag),
summary(), plot.mfrm_fit(), plot()
Examples
# \donttest{
toy_full <- load_mfrmr_data("example_core")
keep_people <- unique(toy_full$Person)[1:12]
toy <- toy_full[toy_full$Person %in% keep_people, , drop = FALSE]
fit <- fit_mfrm(
toy,
person = "Person",
facets = c("Rater", "Criterion"),
score = "Score",
method = "MML",
quad_points = 7,
maxit = 30
)
summary(fit)$next_actions
#> [1] "After reviewing convergence, run `review <- summary(fit, profile = \"facets\", detail = \"brief\")` for the comprehensive FACETS-organized result surface."
#> [2] "Then draw the complete native Wright map with `plot(fit, type = \"wright\", show_ci = TRUE, top_n = Inf, preset = \"publication\")`."
#> [3] "Reuse `review$results$diagnostics`; call `diagnose_mfrm()` again only for residual PCA or other custom settings."
#> [4] "Use `reporting_checklist(fit, diagnostics = review$results$diagnostics)` for reporting readiness."
diag <- diagnose_mfrm(fit, residual_pca = "none", diagnostic_mode = "both")
summary(diag)$next_actions
#> [1] "Inspect `diagnostic_basis` before comparing legacy residual evidence with strict marginal evidence."
#> [2] "Review `top_marginal_cells` and `rating_scale_table(..., diagnostics = diag)` for first-order strict marginal follow-up."
#> [3] "Review `top_marginal_pairs` for pairwise local-dependence follow-up."
#> [4] "Use `unexpected_response_table()` / `plot_unexpected()` and `displacement_table()` / `plot_displacement()` for case-level follow-up."
chk <- reporting_checklist(fit, diagnostics = diag)
subset(
chk$checklist,
Section == "Visual Displays",
c("Item", "DraftReady", "NextAction")
)
#> Item DraftReady
#> 25 Wright map TRUE
#> 26 QC / facet dashboard TRUE
#> 27 Residual PCA visuals FALSE
#> 28 Connectivity / design-matrix visual TRUE
#> 29 Inter-rater / displacement visuals TRUE
#> 30 Strict marginal visuals FALSE
#> 31 Bias / DIF visuals FALSE
#> 32 Precision / information curves TRUE
#> 33 Fit/category visuals TRUE
#> NextAction
#> 25 Include a Wright map when the manuscript benefits from a shared-scale targeting display.
#> 26 Use the dashboard as a first-pass triage view, then move to the specific follow-up plot behind each flag.
#> 27 Run residual PCA if you want scree/loadings visuals for residual-structure follow-up.
#> 28 Use the design-matrix view to support linkage and comparability claims.
#> 29 Use displacement and inter-rater views to localize QC issues after dashboard screening.
#> 30 Treat strict marginal plots as exploratory corroboration screens, then corroborate with design review and legacy diagnostics.
#> 31 Run bias or DIF screening before discussing interaction-level visuals.
#> 32 Use information curves to describe precision across theta when that is the reporting question.
#> 33 Use category curves and fit visuals as local descriptive follow-up after QC screening.
qc <- plot_qc_dashboard(fit, diagnostics = diag, draw = FALSE, preset = "publication")
qc$data$preset
#> [1] "publication"
p_marg <- plot_marginal_fit(diag, draw = FALSE, preset = "publication")
p_marg$data$preset
#> [1] "publication"
sc <- subset_connectivity_report(fit, diagnostics = diag)
p_design <- plot(sc, type = "design_matrix", draw = FALSE, preset = "publication")
p_design$data$plot
#> [1] "coverage_matrix"
bundle <- build_summary_table_bundle(chk, appendix_preset = "recommended")
summary(bundle)$role_summary
#> Role Tables TotalRows TotalCols
#> 4 section_coverage 1 7 8
#> 3 priority_distribution 1 4 3
#> 2 facets_relationship_wording 1 6 4
#> 1 checklist_overview 1 1 6
plot(bundle, type = "appendix_presets", draw = FALSE)$data$plot
#> [1] "appendix_presets"
# }
