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 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,
donttest examples, 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.
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. 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.
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. 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.reltol = 1e-9 for the
initial optimizer stage; bounded polishing is invoked only when
reltol <= 1e-9 and 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.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() 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".