mfrmr 0.3.0 (development)
Migration from 0.2.4
-
fit_mfrm()groups advanced model choices inspecand numerical settings incontrol. Existing flat calls anddo.call(fit_mfrm, ...)remain supported when arguments use their complete names. Only the first four positional arguments (data,person,facets,score) retain their old positions; name later arguments. Abbreviations routed through..., such asquad_point, must becomequad_pointsorcontrol = list(quad_points = ...). See?mfrmr_api_migration_030. A namedspeccan be reused acrossdescribe_mfrm_data(),review_mfrm_anchors(),fit_mfrm()andexport_mfrm_model()within their respective supported scopes; a valid native specification need not be exportable. Detailed equations, identification rules and return-object provenance are in?fit_mfrm_technical_details.
Because this development series removes 28 overlapping public entry points in favor of arguments and standard S3 methods, the next release is versioned as 0.3.0. Update scripts using the former names before upgrading:
- Use
mfrm_cluster(x, k, method = "pam"), choosing"pam","hierarchical", or"kmeans"as the method. The default remains PAM; method-specific geometry, settings and result classes are unchanged. The three method-specific names are no longer exported. - Use
update(calibration, status = "validated"), choosing"validated","frozen","superseded", or"retired"as the target state. The four former transition functions are no longer exported. Validation requirements, permitted transitions and immutable frozen records are retained. - Use
normalize_conquest_overlap_tables(..., input = "files")for extracted table files;input = "tables"keeps the existing data-frame route. The formernormalize_conquest_overlap_files()is no longer exported. - Use
mml_quadrature_sensitivity()for supported MML families andread_facets_results()for FACETS Scorefiles and fit tables (pass the returnedmfrm_facets_resultsobject or file path directly tofacets_fit_review()). The formergpcm_mml_quadrature_sensitivity(),import_facets_fit_table(), andread_facets_fit_table()names are no longer exported. - Use
import_irt_fit(fit, model = ..., source = "auto")to import supportedmirt,TAM, andeRmfits;import_mirt_fit(),import_tam_fit(), andimport_erm_fit()are no longer exported separately. - Use
mfrmr_output_guide()withscope = "intervals","visual_templates","gpcm_capabilities", or"calibration_capabilities"for the static route and capability matrices formerly exported asmfrmr_interval_guide(),visual_reporting_template(),gpcm_capability_matrix(), andmfrm_calibration_capabilities(). - Read
fit$config$anchor_review(or callreview_mfrm_anchors()) anddiagnostics$precision_review(or callprecision_review_report()) directly; theanchor_review()andprecision_review()wrapper accessors are no longer exported. - Use
analyze_dff()for the formeranalyze_dif()alias, andreview_mfrm_imputations(..., impute_ids = ids)for the formermfrm_response_imputations(..., impute = ids)alias. These aliases are no longer exported; the latter reviews supplied completions and does not impute.
See help("mfrmr_api_migration_030") for exact replacements. Existing saved result classes (including legacy mfrm_design_evaluation_plot_data and mfrm_signal_detection_plot_data objects) retain their summary(), plot(), and as_ggplot() methods. These interface changes do not change the underlying statistical targets or inference eligibility.
New capabilities and fixes
Experimental two-family GPCM MML now accepts two slope facets among additional fixed additive facets. In
spec,slope_referencenames the geometric-mean-one family, independently ofstep_facetandnoncenter_facet. The original full-predictor response equation, fixed N(0,1) population and experimental inference limits remain unchanged. The supported path connects fitting, checked intervals, curves, response diagnostics, reports and conditional new-Person scoring. Extended portable calibrations use format 7; original two-facet format 6 artifacts and legacy fits retain their meaning. Stan export from an existing fit now preserves extended roles through posterior reload, contrasts, intervals, plots and reports. Log-slope priors remain tied to the source slope reference; changing that reference with fresh priors changes the Bayesian model. Two-family simulation, JML, direct data/spec export, brms and new-Person posterior scoring remain unsupported. This extension is included in the planned0.3.0release. Numerical convergence does not establish a unique finite optimum or adequate estimation precision for every rating design.Unanchored two-family Stan bundles omit per-rating
etaandeffective_slopesfrom saved output. These are deterministic work vectors; parameter draws,log_lik,y_rep, diagnostics and posterior replay remain available. Previously saved bundles retain their replay path.Reloaded two-family fits now load the sparse-matrix arithmetic methods before producing a rater report in a fresh R session. Location constraints in reports and experimental intervals follow
noncenter_facet, independently of which facet owns slopes or category steps.Estimated-normal-population RSM/PCM fits now record a conditional analytic identification check in
fit$data_review$estimability$normal_population_identification. It uses the constrained design of Persons with repeated ratings and states its assumptions and unsupported cases explicitly. This separates identification evidence from numerical audit limits without changing interval eligibility or formal-inference restrictions; see?fit_mfrm_technical_details.Plotting help and supplementary examples now describe the
ggplotreturn value consistently and useplot_data()to retrieve tables and notes.Threshold ladders now draw the stored step thresholds instead of an empty display. Missing steps remain unconnected, and
highlight_disorder = FALSEis preserved when saving and redrawing a plot.Information plots now draw only the requested information or conditional SEM series.
type = "both"uses separate panels and vertical scales; numerical values and the completeplot_data()payload are unchanged. The visual tour explains how these exposure-weighted curves differ from per-Person information, separation reliability, agreement and G/Phi.Five core tutorials remain available through
browseVignettes("mfrmr"): workflow, model choice, G theory, visual diagnostics and reporting. Specialized tutorials are provided on the documentation website for the corresponding version; their source and worked calculations are retained. Help pages and output guides link to these articles directly instead of suggesting unavailable localvignette()calls. The workflow help explains how to distinguish published website documentation from development help.recommend_mfrm_design()now accepts a saved paired D-study comparison with scenario-keyed costs, resource limits and G/Phi/SEM point targets.summary(result, planning = TRUE)separates feasibility, point attainment and paired interval direction, retaining every plan and unavailable value. Reports, plots and appendix exports keep the review and its assumptions. The observed-score two-crossed-facet scope is unchanged; no winner or selection-adjusted guarantee is supplied. Simulation recommendations retain their existing behavior and do not use these new planning arguments.Posterior scoring now checks predictive category probabilities and calibration variation in expected scores at both quadrature orders, including Persons with no observed ratings. Predictive rows carry their own
IntegrationMaxDiff,Status, andReason; inaccurate predictions are withheld while valid ability summaries remain available. Increasingquad_pointscan resolve a failed predictive check.The introductory RSM example explicitly estimates population mean and SD and reports the current inference restriction for that route. Help explains the substantive location/spread constraints in the unchanged fixed N(0,1) defaults, CML BIC’s sensitivity to extreme-score Person counts, and the distinction between numerical readiness and finite-sample validity.
Optional CmdStanR execution and test dependencies (
cmdstanr,jsonlite,posterior) are declared, including the CmdStanR repository. A required release verification command records actual live Stan execution and rejects skipped tests; seeCONTRIBUTING.md.export_mfrm_model(..., format = "stan")now accepts optionalrun_cmdstan = TRUEandcmdstan_args = list(...)whencmdstanrand a configured CmdStan toolchain are available, compiling and sampling viainst/model-export/run-stan.R, savingfit.rds,predictive-draws.rds,posterior-summary.rds, andposterior-draws.rds, and returning the validatedmfrm_posterior_summaryon$posterior(failing closed before writing files whencmdstanror CmdStan is absent). In addition,predict(object, newdata, ...)(predict.mfrm_posterior_summary()) scores out-of-sample Persons for calibrated ordinary RSM/PCM and one-family GPCM bundles (fixed standard-normal populations; also estimated intercept-only normal populations for one-family GPCM in Stan), separating calibrated-posterior marginalization (conditioning = "posterior", with law-of-total-varianceWithinSD,BetweenSD,SD, andCalibrationVarShare) from fixed posterior-mean plug-in scoring (conditioning = "plugin_mean"), latent ability intervals from future rating posterior predictive distributions (type = c("ability", "predictive", "both")), and optional cut-score classification probabilities (cut_scores), with downstreamsummary(),confint(),as.data.frame(),plot(),mfrm_report(),apa_table(), andexport_summary_appendix()support.Exported Bayesian summaries (
summarize.R) now save a checksum-bound chain-by-iteration draw array (posterior-draws.rds) alongsideposterior-summary.rdswithout requiring theposteriorpackage during replay.read_mfrm_posterior(path, draws = c("auto", "require", "none"))validates free-to-constrained affine/Helmert basis identities and connects saved joint draws to shared-calibration facet, step-transition, and slope contrasts, arbitrary equal-tailed credible levels, empirical draw views, and reports acrosssummary(x, contrasts = ..., level = ...),confint(),as.data.frame(),plot(..., quantity = "contrast", view = c("intervals", "draws")),mfrm_report(),apa_table(..., which = "contrasts"), andexport_summary_appendix(), while keeping lightweight summary-onlyposterior-summary.rdsworkflows unchanged. Operations requiring joint draws fail explicitly when those draws are absent.All
plot()S3 methods now render withggplot2(ggplot2 (>= 3.4.0)inImports) under a unified scientific theme (preset = "standard","publication","compact", or"monochrome") and invisibly return aggplotobject (draw = FALSEbuilds theggplotwithout opening a graphics device). Extract underlying tables, matrices, and figure cautions withplot_data(p)andplot_data_components(p)instead ofp$data$...;plot_data()andas_ggplot()preserve backward compatibility with saved0.2.xmfrm_plot_data,mfrm_design_evaluation_plot_data, andmfrm_signal_detection_plot_dataRDS objects. Two-continuous-variable scatterplots—including the newplot(dif, type = "scatter")route afteranalyze_dff(), paired and extended model comparisons, fit pathway, fair average, bias, PCA scores, displacement, person-fit, and recovery scatterplots—support aligned X/Y marginal histograms viamarginal = c("auto", "histogram", "none")computed strictly over the finite plotted pairs ("auto"enables histograms for single-panel views with at least eight finite pairs while keepingunavailable/ fixed-anchor exclusions explicit).export_mfrm_model()now accepts long-format ratingdataand a model specification listspecdirectly, without running native MML optimization, Hessian evaluation or EAP scoring first. Ordinary RSM/PCM require a fixed standard-normal ability population in both Stan and brms. One-family GPCM additionally supports an estimated intercept-only normal population in Stan; its fixed-standard-normal specification supports Stan and brms. Supported fixed non-Person anchors and group means are retained. Population regression and non-Person facet interactions remain outside the export scope. Existingmfrm_fitexport remains unchanged, andwrite_json = TRUE(format = "stan") adds CmdStanR-compatiblemodel-data.jsonalongsidemodel-data.rdsand CSV label/category maps without requiringcmdstanrorjsonlite.Compiled C++ (
cpp11) evaluation kernels now accelerate fixed-grid and adaptive Gauss-Hermite MML estimation and information/covariance routines, 2D Gauss-Hermite quadrature infit_mfrm_testlet(), conditional JML, CML elementary symmetric functions, and marginal fit expectations, while sparse co-rating aggregation removes table expansion indescribe_mfrm_data()anddiagnose_mfrm(). Estimands, quadrature rules, convergence criteria, CML existence checks, GPCM profile-likelihood curvature checks, and pure-R reference evaluation (options(mfrmr.use_cpp11_backend = FALSE)) are unchanged.FACETS terminology, coverage, visual and fit-df guides now use
facets_guide(topic = ...). Their explanations and return structures are retained. The legacymfrmRFacets()name is replaced byrun_mfrm_facets(); use the same arguments. See?mfrmr_api_migration_030for script migration.Reports now recognize the historical
JMLElabel as the same estimator asJMLwhen matching a saved fit to freshly computed diagnostics. Estimates are unchanged, and diagnostics from a different fitted analysis still fail.
mfrmr 0.2.4
CRAN release: 2026-10-30
Published on CRAN: 2026-10-30. 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.
What is easier now?
-
Turn an analysis into a report.
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. - Compare plans before collecting more ratings. Examine how specified rater/task counts affect the precision of a score, weighted composite or difference. G/D-study reports connect sources of variation to plan tables, figures and supported intervals. Simulation recommendations now show their target, criteria and candidate outcomes in summaries, plots and reports. See assessment planning.
- Find rating patterns that need attention. Check assignment links before fitting, examine observed agreement, and prepare supported rater feedback. Network and residual analyses connect to tables, plots and reports; their exploratory findings prompt investigation, not automatic rater exclusion. See agreement and networks and reporting.
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.
Source installation requires cpp11 0.5.4 or later for compatible C++ headers.
Complete worked examples remain in the help pages. Short primary workflows run normally; supplementary examples show how to execute them explicitly with example("topic", run.dontrun = TRUE), including their printed results. Related short summary and plot methods are documented with their generating function; their existing help aliases remain.
Model setup, residual PCA, Q3, residual plots, halo analyses and agreement summaries avoid calculations that their requested results do not use. The same input checks, numerical settings and interpretation limits apply. Simulation specifications and design reviews also avoid repeated calculations, with unchanged design tables, recommendation rules and numerical settings. Testlet fitting and scoring avoid redundant calculations. Scoring also avoids work for design patterns unused by the requested Persons. Quadrature, continuous posterior integration and accuracy checks are unchanged. RSM and PCM marginal maximum likelihood calculations reuse response probabilities for repeated rating conditions on a shared quadrature grid. Integration and convergence settings are unchanged. Model comparisons reject stale or nonstationary MML solutions before expensive uncertainty calculations, while retaining the existing eligibility criteria.
Before reusing an older analysis
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.
Simulation files also check the package implementation and numerical environment before loading or resuming a run. An implementation change can make an older file incompatible even when its stored numerical values remain readable. Retain the original package installation and environment to continue that run; use a new file path when recomputing after an update. The default file_refit = "never" rejects mismatches without replacing the saved file.
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
CRAN release: 2026-08-25
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.
- Corrected the compiled-header configuration used under link-time optimization so all C++ translation units use R’s configured
Rbooleandefinition. - Removed expired FACETS/Winsteps hyperlinks while retaining the substantive model distinctions and bibliographic references.
mfrmr 0.2.3
CRAN release: 2026-08-21
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.
Bounded GPCM
- Clarified the supported GPCM as an aligned, single-owner relative-slope model. A slope multiplies the complete adjacent-category predictor, including the ability, facet, interaction, and owned-step terms. This is distinct from loading-only GPCM variants and multiplicative generalized MFRM families.
- Corrected the default scale identification for GPCM marginal maximum likelihood fits. When no population formula is supplied, an intercept-only population model now provides the latent location and scale while relative slopes use their documented geometric-mean constraint.
- Added parameter-level status for free GPCM slopes. Standard errors and confidence intervals are reported as ordinary inferential results only when the fitted solution and the parameter both satisfy the relevant readiness checks. Optimizer- and Hessian-based quantities remain available as clearly labelled diagnostic evidence when formal inference is not supported.
- Improved handling of extreme response patterns. Free JML Person estimates remain infinite for all-minimum or all-maximum responses; finite optimizer values are computational traces. Optional adjusted-score tables and plot placements do not replace the fitted estimates. Prior-regularized marginal EAP estimates remain available but do not override a blocked source fit.
- Added
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 duringsummary()orprint(). Results supportsummary(),print(),as.data.frame(), andapa_table().
Estimation and readiness
- Added pre-fit checks for category and step support and strengthened constrained-estimability checks for sparse many-facet designs. Unsupported step contrasts and structurally unidentified comparisons now stop or fail closed before they can be presented as ordinary estimates.
- Strengthened numerical and boundary reporting for JML and GPCM fits. Optimizer convergence, terminal gradients, local rank, curvature, boundary evidence, and formal inference readiness are retained as separate concepts.
- Corrected the alignment of MML Person EAP estimates and posterior standard deviations when observations or Person rows are filtered during fitting.
- Fit-level readiness is propagated to Person results, plots, model-choice reviews, reports, and exported tables. A finite value from a blocked fit is no longer presented as an unrestricted inferential estimate.
Summaries, diagnostics, and plots
-
print()andsummary()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. - Formal-inference reporting now distinguishes satisfied fit-readiness requirements from the separate precision contract. A fit-only summary does not claim formal inference until matching diagnostics support the standard-error, confidence-interval, and reliability basis.
- GPCM uncertainty labels are consistent across fitted objects, summaries, and plots. Intervals calculated for observation-table Wright or facet displays are labelled
screening_onlyand are not described as confidence intervals. - PCM/GPCM model-choice reviews retain comparison warnings and keep information criteria, automatic preferences, and likelihood-ratio results unavailable when the compared fits do not share an eligible basis. Model-choice warnings can also be included in exported summary appendices.
- Differential-facet-functioning refits now replay the baseline response family, scoring range, estimator, weighting, and numerical settings. They fail closed for model structures that do not yet have a valid subgroup replay and linking contract.
min_obsremains a computability guard rather than a claim about power or adequate sample size. - Residual-PCA results now carry machine-readable exploratory-use guards. Returned components and warnings are descriptive diagnostics and do not automatically support dimensionality or subscore decisions.
- Corrected Person-involving bias-screen collection for explicitly requested facet pairs and expanded machine-readable FACETS feature-coverage guidance.
- FACETS table import retains the reported numeric text and displayed decimal precision so rounded output is not silently treated as hidden full-precision data.
- The Infit-versus-measure pathway now places Infit on the horizontal axis and the fitted measure on the vertical axis by default. GPCM category curves retain estimated step-facet slopes and now state explicitly that additive facet effects and interactions are fixed at zero. Multiple GPCM curve groups are shown in separate panels with category legends instead of as unlabelled overlaid traces.
- Native Wright maps label every retained facet level using displaced text and leader lines. Step thresholds are displayed as a vertical ladder with the score transition and fitted logit in each label.
Reporting and reproducibility
- Reproducibility manifests describe inputs through semantic summaries such as class, dimensions, fields, and missingness instead of environment-sensitive serialization hashes. The
digestpackage is no longer required by the distributed package. - Reporting, APA tables, model summaries, and plots use the same readiness and estimate-use vocabulary. Added fields may affect code that assumes an exact number of rows or columns in a summary component; selecting fields by name is recommended.
- APA output is described as an APA/JARS-informed drafting aid rather than a compliance certificate. The reporting guide now lists study-level fields that the fitted model cannot supply, and weighted-method prose distinguishes row-level likelihood weighting from replicated Person response patterns.
- External programs are not required to install or use mfrmr. Comparisons with FACETS, ConQuest, TAM, or immer remain model- and estimator-specific and are not general interchangeability claims.
mfrmr 0.2.2
CRAN release: 2026-07-27
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 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.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.
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.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 check 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. - Repeated likelihood calculations reuse work within each fit without enlarging saved fit objects or sharing cached values across parallel fits.
- 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. 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. - 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 check. 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. ## 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().The documented binary, item-only, one-covariate MML handoff was compared in a matched 31-node run with ConQuest 5.47.5 Demonstration Version. 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_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.
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.
