Unreleased candidate. This release connects rating analysis, assessment planning and reporting. You can move from a fitted model or rating plan to figures, tables and an editable report while keeping its assumptions visible.
mfrm_report() now brings generalizability
and decision studies (G/D studies),
anchor/linking reviews, individual or batch bias screens and model-choice reviews into
the shared reporting workflow. Editable templates help you write the Methods
and Results, and exports keep the underlying tables and analysis. You can
record what high scores mean alongside the results.
See reporting examples.Continue a default single-family GPCM analysis in Stan while retaining its
estimated normal population and supported fixed anchors. export_mfrm_model()
writes the code, data and parameter maps with explicit priors.
RSM/PCM and fixed-population single-family GPCM also support brms;
two-family GPCM supports Stan. read_mfrm_posterior() brings saved summaries,
including population mean/SD, back to figures and reports with credible
intervals and sampling review. Population regression remains unsupported.
See model export.
Supported MML models can show fitting progress and automatically increase numerical integration accuracy up to a user-set maximum. Two-family GPCM retains experimental inference limits. The GPCM guide and detailed changes explain these features, calibration reuse, external-software comparisons and numerical improvements.
The visual gallery adds ggplot2 examples with interactive Plotly views, static figures and the underlying values for rater feedback, assessment planning and score probabilities.
Installing 0.2.4 does not update saved calculations. Corrections affect
some fit statistics, bias/fair-score calculations, uncertainty and comparisons.
Keep your original inputs, fitted objects and settings, then use the
updating guide to identify
which results need rebuilding. help("mfrmr_workflow_methods") explains the
applicable checks; not every correction requires refitting.
Use plot() on result objects instead of retired standalone drawing helpers;
help("mfrmr_plot_migration") lists replacements. Model comparisons now reject
likelihood-ratio tests when the larger model omits terms from the smaller one;
recreate affected comparisons from the existing fits.
The detailed change record is also installed at
system.file("NEWS-0.2.4-details.md", package = "mfrmr").
mfrmr 0.2.3.1 was a focused CRAN maintenance release. It did not change the public R API or fitted-model contracts introduced in 0.2.3.
Rboolean
definition.mfrmr 0.2.3 improves the reliability and interpretation of the existing many-facet workflows, with particular emphasis on the bounded GPCM introduced before this release. No existing exported function has been removed.
gpcm_mml_quadrature_sensitivity() for explicit same-data comparison of
a fitted GPCM-MML result across quadrature grids. It reports changes in the
marginal likelihood, relative slopes, raw observed-information quantities,
population scale, and fitted probabilities without silently refitting during
summary() or print(). Results support summary(), print(),
as.data.frame(), and apa_table().print() and summary() for fitted models now begin with a plain-language
interpretation status, the availability of formal inference, the main reason
for any hold, and a suggested next action.screening_only and are not described as confidence intervals.min_obs remains a computability guard rather than a
claim about power or adequate sample size.digest package is no longer required by the
distributed package.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 maxit is 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 criteria are satisfied.
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. This makes most examples executable
while keeping workflows that require separately generated files clearly
marked.
Corrected bounded-GPCM score-side delta-method uncertainty to use the
expected-score derivative ScoreSlope * Var. ScoreSideLogitSE remains the
logit-side component SE, while ScoreSideSE and its interval columns now
apply ScoreSlope * Var * ScoreSideLogitSE on 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 ScreenPositive as
the primary label and expose explicit screening-only eligibility metadata.
Historical Significant names remain as compatibility aliases.
import_erm_fit() now reads the current eRm Person Parameter /
Std.Error schema 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. Legacy
YenFlag names 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.png location, 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: ExpectedExact
is computed from fitted category-probability vectors, not marginal-frequency
chance agreement.
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.
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.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 portable reltol setting is mapped to L-BFGS-B factr and
pgtol; actual stage controls are recorded alongside the requested and
selected-stage settings.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.summary(fit) now supports profile = "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.mfrm_diagnostics
object. The returned summary records provenance and section availability,
and compute = "never" prevents automatic diagnostic computation.detail = "brief" gives a selective console view without person
identifiers. Full structured results remain available through the returned
object.example_operational adds 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_core remains an explicitly idealized complete-crossing
example, and example_bias remains the planted-effect diagnostic example.mfrmr_example_operational_design declares the 288 planned assignment cells
separately from the 282 observed scores. describe_mfrm_data() can compare
an explicit expected_design with 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. The compact examples can be regenerated
with fixed seeds. Combined-study
objects now explain that relabeling prevents identifier collisions but does
not establish a common scale without an explicit anchor/linking design.reltol = 1e-9 for the initial optimizer stage;
bounded polishing is invoked only when reltol <= 1e-9 and code zero
precedes the terminal-gradient check. The fitted object records requested and
selected-stage controls for replay. Model specification, design,
identification, and inferential assumptions remain separate review
questions.maxit or quad_points values 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 = TRUE now 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.1e-9 tolerance.
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.step_facet
explicitly. Rating-scale fits report that step_facet and slope_facet are
not used.mfrm_results() is limited to data with
recognizable measurement roles. Ambiguous columns now lead to an explicit
fit_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.facets_feature_coverage() and gpcm_capability_matrix() now present concise
user-facing capability, limitation, and recommended-route information.
Only documented user-facing columns are returned.normalize_conquest_overlap_exports() reads those files, reconstructs the
sum-constrained item location, trims fixed-width person identifiers, and
prepares them for review_conquest_overlap().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-level export_mfrm_bundle() archives follow the
same warning and metadata contract, and the lower-level export_mfrm_tables() 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.fit_mfrm() -> fit summary ->
required Wright map -> focused diagnostics -> mfrm_report() or
export_mfrm_results().summary(mfrm_results(...), view = "brief") and
summary(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.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.top_n display 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.type = "pathway" is unchanged.facets_term_crosswalk() and facets_visual_contract() document the
correspondence between FACETS terminology and mfrmr outputs while keeping
visual compatibility separate from numerical equivalence.plot_data(), plot_data_components(), and as_ggplot() make plot
coordinates, annotations, reference lines, and guidance available for
custom R graphics.preset = "monochrome" for
print-friendly figures.export_mfrm_bundle(..., include = "html") provides a fit-level
HTML/CSV/replay bundle without first creating an mfrm_results object.build_model_choice_review() and build_summary_table_bundle(), with
explicit guidance for equal-weighting RSM/PCM models, bounded GPCM
sensitivity analyses, and latent-regression reporting.mfrm_results() adds a comprehensive first-screen object for an existing
fit, a run_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 an mfrm_results object 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 existing
mfrm_results object. 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.method = "JML" and
aligned settings.precision_review_report(), fit_measures_table(), and
facets_fit_review() expose the fit, ZSTD, df, separation, and uncertainty
bases needed before drafting technical conclusions.reading_order, condition_review, and
fit/separation operating characteristics. Bounded-GPCM slope_regime
labels and extended sensitivity evidence remain separate from recovery
metrics, convergence, and uncertainty availability; they are not automatic
adequacy decisions.*_audit* helper names, compatibility
classes, and duplicate output fields were removed in favor of the canonical
*_review* names. Stable accessors include anchor_review() and
precision_review().facets_positioning_guide(), facets_feature_coverage(), and
facets_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"), and
mfrmr_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() and write_mfrm_subset_file() add standalone
residual and connected-subset files for external review.compare_mfrm() records the BIC sample-size basis,
including weighted fits, and withholds unsupported likelihood-ratio tests
with an explicit reason.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() and read_facets_fit_table() support row-aligned
comparison with existing FACETS tables without treating convention
differences as estimation errors.compute_person_fit_indices() computes polytomous lz from observed
category probabilities. Snijders-corrected lz_star is reported for
compatible JML/fixed-effect person estimates and remains unavailable for
MML/EAP scores. The incorrectly named ECI4 output was removed; use
OutfitZSTD for the corresponding standardized chi-square quantity.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() and plot_data_components() expose long-form data,
annotations, styles, and settings from supported draw = FALSE plots;
monochrome and interval guides support print-oriented reporting.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.evaluate_mfrm_recovery() and assess_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() and export_summary_appendix() accept a
broader set of fit, recovery, person-fit, precision, and comparison objects
for report and appendix handoff.gpcm_capability_matrix() is the authoritative support map. Supported,
caveated, and unavailable routes include a recommended alternative and the
evidence needed for broader use.mfrmr_gpcm_scope_error conditions identify the unsupported
area and recommended route instead of returning a partial result.quad_points = 31, diagnostic_mode = "both",
plot(fit) showing the Wright map, and keep_original = FALSE.options(mfrmr.use_cpp11_backend = FALSE) selects the pure-R reference
path. Unsupported kernels fall back automatically.plot(fit) output. The former overview
remains available with type = "bundle".