
Create and use a portable fixed calibration
Source:R/api-calibration.R
mfrm_calibration_workflow.RdThese functions implement a strict lifecycle for a saved, versioned
calibration. extract_mfrm_calibration() creates a draft from an eligible
RSM or PCM MML fit under the fixed standard-normal scoring basis, or
a one-family GPCM MML fit with an estimated intercept-only normal population that passes
the conditional source checks in predict_mfrm_units(). Experimental
two-family GPCM MML retains a fixed N(0,1) prior and its own source checks.
RSM/PCM and shared-owner GPCM JML support portable post-hoc EAP with a
standard-normal reference prior; explicit corrected GPCM JML preserves its
correction order and uses adjusted-equation checks, as described below.
update(calibration, status = "validated") and
update(calibration, status = "frozen") are separate, fail-closed transitions.
They return a new object without overwriting the input or a saved file.
Only a frozen artifact can be passed to
score_mfrm_calibration().
Usage
extract_mfrm_calibration(
fit,
calibration_id = NULL,
source_fit_id = NULL,
created_at_utc = NULL,
scoring_quad_points = 31L,
quadrature_review = NULL
)
review_mfrm_calibration(calibration)
# S3 method for class 'mfrm_calibration'
update(object, status, record_id = NULL, at_utc = NULL, ...)
save_mfrm_calibration(calibration, file, overwrite = FALSE)
load_mfrm_calibration(file)
score_mfrm_calibration(
calibration,
new_data,
person = NULL,
facets = NULL,
score = NULL,
weight = NULL,
interval_level = 0.95,
missing_response = "error",
event_id = NULL,
adaptive_quad_points = NULL,
scoring_prior = NULL,
cut_scores = NULL
)Arguments
- fit
An eligible
mfrm_fitproduced byfit_mfrm().- calibration_id
Optional nonempty calibration identifier.
- source_fit_id
Optional nonempty source-fit identifier.
- created_at_utc
Optional RFC3339 UTC timestamp. Omit it to use the current time.
- scoring_quad_points
Integer quadrature order of at least 2 used for later artifact scoring. It is independent of the fit-time quadrature and defaults to 31. The fixed or adaptive integration mode is inherited from the source fit and stored in the artifact's scoring algorithm identity. With adaptive scoring, stored nodes and weights define the base Hermite rule; their person-specific locations are recomputed for each new batch.
- quadrature_review
Required for RSM/PCM MML, optional for GPCM MML (which checks the fitted calibration directly); not used when checking JML fits. An
mfrm_quadrature_sensitivityfrommml_quadrature_sensitivity()for the same data and model.fitmust be the exact highest-grid fit stored in this object. The package checks this procedural evidence but leaves acceptable numerical movement to the user.- calibration
An
mfrm_calibrationobject.- object
An
mfrm_calibrationobject forupdate().- status
Required target state for
update():"validated","frozen","superseded", or"retired". Only documented lifecycle transitions are allowed; changing the entry point does not allow thawing or editing a frozen calibration.- record_id
A nonempty identifier for a terminal superseded or retired record. It must differ from the frozen parent identifier.
- at_utc
Optional RFC3339 UTC timestamp for the requested transition. Omit it to use the current time.
- ...
Additional arguments to
update()are rejected.- file
A path ending in
.rds.- overwrite
Whether an existing persistence target may be replaced.
- new_data
A data frame of response rows for new Persons.
- person, score, weight, event_id
Optional input-column names. Stored source-column names are used when applicable.
event_iddistinguishes otherwise duplicate response events.- facets
Optional named character vector mapping stored facet names to input columns.
- interval_level
Central posterior interval level, strictly between 0 and 1.
- missing_response
Either
"error"or"omit".- adaptive_quad_points
Optional vector of at least two distinct integer orders >= 3, for example
c(31, 61), used only byscore_mfrm_calibration(). Adds an unroundedquadrature_reviewcomparing stored-grid results with mode/curvature-adapted integration for each Person. Inspect both fixed/adaptive differences and changes between adaptive orders. This does not change the artifact or replace the reported scores/intervals; adaptive results condition on the same point calibration. For GPCM or an explicitly supplied scoring prior, reference orders are added automatically and the comparison governs numerical score acceptance. Only Persons with scored responses have numerical review rows.Status = "computed"means the calculation finished, not that accuracy is certified; an unavailable row retains the reason inDetail.- scoring_prior
Optional
list(mean = ..., sd = ...)forscore_mfrm_calibration().NULLretains the artifact's normal prior. Values use the unchanged calibration scale and must be finite with positive SD and representable positive variance. A supplied prior automatically receives numerical scoring checks and does not modify the frozen artifact. Legacy artifacts with discrete grid-endpoint intervals require re-extraction before using this option. The prior is common to all scored persons; covariate-dependent overrides are not supported. Two-family GPCM formats 6 and 7 requirescoring_prior = NULLand retains the fixed N(0,1) prior.- cut_scores
Optional named, strictly increasing finite ability cuts for
score_mfrm_calibration(). Ordinary RSM/PCM with unit weights and continuous posterior intervals only. Returns adecisionstable of probabilities above cuts and in successive bands on the calibration scale. Calibration, prior and cuts are held fixed; this excludes their estimation uncertainty. Unscored Persons remain unavailable. Cut names do not establish CEFR alignment. Seepredict_mfrm_units()for interpretation and reporting.
Value
extract_mfrm_calibration(), update(), and
load_mfrm_calibration() return an
mfrm_calibration. review_mfrm_calibration() returns a data frame of
structured refusals, with zero rows for an acceptable object.
save_mfrm_calibration() invisibly returns the normalized path.
score_mfrm_calibration() returns an mfrm_calibration_score containing
estimates plus row and Person dispositions and scoring identities.
With cut_scores, it also retains decisions: conditional event
probabilities with boundaries, labels, actual priors and availability.
When requested and scored rows exist, quadrature_review contains the
fixed/adaptive comparison; summary() preserves it and adds a compact
quadrature_overview.
Details
The portable workflow supports one observed score scale, one latent
dimension and known non-Person facet levels. RSM/PCM MML retain stored anchors
and two-way facet interactions in file format 1. One-family GPCM MML uses file format 2,
retaining both step and slope owners, positive geometric-mean-one relative
slopes and the estimated population mean and SD. The slope multiplies the
entire adjacent-category predictor. Portable GPCM requires unit weights
and no anchors or interactions. One-family MML uses an estimated intercept-only
normal population. Shared-owner GPCM JML uses file format 4 and a post-hoc
N(0,1) reference prior; its distinct checks are described below.
Experimental two-family GPCM MML uses file format 6, with two ordered slope
owners, second-owner steps and the fixed N(0,1) prior. The first owner's
locations and log slopes are centered; the second owner's locations and
slopes remain free. Both fitting engines retain their fixed or adaptive
scoring algorithm. Source identity/convergence and finer-integration checks
must pass; review-only sources cannot be exported for frozen scoring.
Extended additive/step/location roles use format 7, with explicit named
slope reference and noncentered location facet; format 6 keeps its original
meaning. All other location facets and each declared step set are centered.
No separate quadrature_review is accepted for this route. The file contains
component slopes and observed facet combinations, without training responses,
Person estimates or an executable fit. Known levels may form new combinations;
row_dispositions$ObservedContext identifies whether each full facet context occurred in
calibration. New combinations are model-based, not empirically validated.
Prior overrides and event_id extensions are unsupported; repeated Person-
facet cells are rejected. Facet names must not collide with scoring/disposition
columns (Person, Score, Weight, InputRow, EventId, Disposition,
ReasonCode, CalibrationId, ObservedContext).
For formats 6 and 7, use the same extract, validate, freeze, save, load and score
functions as below. Each new batch must pass its own integration checks;
validation and freezing do not establish sampling coverage, global
identification, boundary absence or population transport. Posterior
intervals exclude calibration uncertainty. Readers without format 7 support
refuse it explicitly; existing formats 1–6 keep their original interpretation.
RSM/PCM JML uses file format 3, with unit weights, no anchors or interactions,
a finite identified source and a post-hoc N(0,1) reference prior. This prior
is not estimated by JML. Estimated-population RSM/PCM and latent regression
use fitted-object routes; other structures follow their documented capabilities.
See mfrmr_output_guide("calibration_capabilities").
One-family GPCM MML extraction freshly evaluates the native fit's local likelihood,
gradient, unregularized information and source-integration stability using
the same conditional source checks as predict_mfrm_units(). A failed or
unresolved source cannot be frozen by selecting a review policy. The
artifact retains the passing extraction decision, numerical comparison,
and original global boundary/identification states. Reading it validates
these records against its stored identity; it does not refit the source or
claim a global maximum, valid population transport or calibration intervals.
Every GPCM scoring call also checks EAP/SD against two adaptive reference
orders under the actual scoring prior. Failed score integration stops with
SCORING_INTEGRATION_FAILED; extract with more scoring_quad_points before
retrying. Endpoint and sparse-pattern review labels remain separate from
numerical accuracy. File format 1 retains its original default semantics.
For RSM/PCM MML extraction, run mml_quadrature_sensitivity() on user-selected grids
and inspect its continuous differences. Pass the exact highest-grid fit in
that object together with quadrature_review. The retained fits must use
their recorded grid sizes and the same data, score map and fitting settings,
including anchors and integration mode, and must all have converged.
This procedural requirement
does not declare the fit numerically stable: the package does not choose the
application-specific tolerance or decide whether more grids are needed.
Archive the review separately when it is part of the audit trail, because
response-linked fits are deliberately not embedded in the portable artifact.
GPCM uses the fresh source checks above and does not require an additional
refitting study. If supplied, quadrature_review is still validated.
RSM/PCM JML extraction requires current passing input, identification, category,
boundary and numerical checks from the fitted-object scoring policy. It
freshly evaluates the joint likelihood and gradient: the stored objective
must agree within 1e-6 and the maximum absolute gradient must be <= 1e-4.
These are numerical source criteria, not interval-coverage or bias guarantees.
Boundary or unresolved sources are refused; there is no review override.
No MML quadrature review is used because JML does not integrate over Persons
during calibration. Every new JML score batch receives adaptive-reference
EAP/SD checks under the actual scoring prior. Increase scoring_quad_points
on extraction if the scoring grid is inadequate. Source checks and the prior
origin persist through saving, loading and score summaries; replay checks
the stored evidence without re-estimating the training model.
Experimental corrected GPCM JML uses file format 5 and its own source
checks. Extraction reconstructs the adjusted equation from the observed
ratings and checks the saved root, full equation Jacobian and parameter
tables. The maximum mean-equation residual must be <= 1e-7 and the
remaining Newton step <= 1e-5. These are numerical checks, not a global
uniqueness or bias guarantee. An unavailable covariance does not erase a
valid calibration. The artifact records correction order, assignment-sampling
assumption, local-root status and numerical checks without training responses
or Person estimates. It is never labelled an ordinary JML likelihood maximum.
Its EAP and continuous posterior intervals use a separate normal scoring
prior; they exclude calibration uncertainty and do not supply corrected
Person ML/WLE or structural confidence intervals. Older file formats retain
their original checks. See fit_mfrm() for corrected estimation limits.
For shared-owner uncorrected GPCM JML, extraction checks the joint likelihood and gradient, and positive-definite, unregularized curvature over all free Person and structural parameters (reciprocal condition number > 1e-10). Recorded Person, additive or slope boundary certificates prevent automatic scoring; finite optimizer traces cannot override them. Detected identification failure, inadequate categories, failed numerical checks and unsupported structures also prevent extraction. Otherwise, global identification/boundary audits labelled as incomplete stay incomplete in the artifact. This qualifies conditional EAP only, not global optimality or formal JML slope inference. Source curvature currently uses a dense joint matrix, so its memory cost grows quadratically with the number of free parameters, including Persons. Frozen-artifact scoring does not repeat that calculation or use training data. The objective, gradient and condition-number cutoffs are package numerical criteria, not statistical thresholds established by the scoring literature. A refused source does not imply that all its structural parameters are inestimable: portable scoring does not currently qualify boundary-profile calibrations with infinite training-Person estimates.
Posterior EAP estimates, posterior standard deviations, and intervals are
conditional on the frozen point calibration and the scoring prior.
For GPCM MML, the prior mean and SD estimated during calibration are frozen;
a new cohort does not reestimate or replace them. Use scoring_prior to
examine another shared normal prior without changing the artifact. The
original and scoring prior identities remain separate in estimates and
settings, including summaries, plot data and exports. A supplied prior is
an analyst assumption, not a population estimate. Intervals exclude both
population-parameter and calibration-parameter
uncertainty. Loading validates structure and semantic consistency, but does
not authenticate an artifact from an untrusted source.
New v2 scoring algorithms invert the continuous posterior CDF for equal-tail
intervals. EAP and SD retain the stored quadrature rule. Saved v1 artifacts
preserve their discrete grid interval endpoints and carry a note that the
continuous posterior mass can differ from the requested interval level.
Anchors, centering and score uncertainty
New exports distinguish whole-facet centering, legacy remainder centering
and uncentered facets in constraints$identification. Direct values and
group means are retained in constraints$anchors; validation checks the
explicit facet maps against the stored coordinates and free dimensions.
For example, if four raters are centered as a whole and the first three
have mean 0.10, the fourth is fixed at -0.30. Freezing retains all four
calibrated values, including the estimates of the free group members.
Scoring uses those expanded values without centering or estimating them
again. A returned SD is a Person posterior SD conditional on the entire
frozen calibration and scoring prior. It is not a rater SE and excludes
uncertainty in both the estimated calibration and supplied anchors.
Use mfrm_facet_intervals() for supported conditional facet intervals.
With an anchored fitted model, predict_mfrm_units() accepts supplied
response rows; the narrower score_mfrm_persons() entry excludes anchors.
Loading an older artifact preserves its values and original constraint labels. Older generic labels do not fully identify the centering convention; consult the source fit or re-extract it to obtain explicit labels. Changing a label cannot convert a calibration to another scale.
Statistical basis and external comparisons
Bock and Mislevy (1982, pp. 432-433) describe posterior-mean and posterior-SD scoring from fixed response functions and a specified prior, including multiple-category responses. This supports the scoring layer; it does not validate JML calibration bias, the default reference prior for a new cohort, or the numerical tolerances used to check a fitted calibration. Their adaptive testing simulations do not establish coverage for sparse many-facet designs. Muraki (1992) supplies the GPCM model basis and an EM estimation method, not evidence that many-facet JML intervals have accurate coverage.
External checks of fixed probabilities, likelihoods and EAP/SD must align
the response functions and prior. They do not compare free JML estimation.
ConQuest documents that JML cannot estimate item scores (the free scores
used for GPCM discrimination). TAM's tam.jml() uses a supplied loading
array and defaults to extreme-score adjustment and item-bias correction;
its default output is not the same estimator as unadjusted JML. Do not
infer agreement of estimators from agreement of fixed-calibration scores.
Choose what to save
Save a fitted analysis or mfrm_results() with saveRDS() when you need
to revisit its diagnostics and reports. A portable mfrm_calibration has a
different purpose: scoring new response rows without the training fit or
training responses. Use save_mfrm_calibration() and
load_mfrm_calibration() for that artifact. Save an already computed
mfrm_calibration_score with saveRDS() to reproduce its tables and figures
without scoring the responses again. A CSV is a table, not a replacement
for any of these complete objects.
Validation checks the saved parameters, scoring settings and model checks;
freezing marks that calibration as ready for scoring without changing it.
These steps do not establish model fit, lack of bias or suitability for another
population. New Persons may use known calibrated facet levels. An unknown
rater, task or score category requires an appropriate calibration workflow;
assigning an existing level's name is not a way to extend the calibration.
Missing responses are not zero scores. With missing_response = "omit",
inspect row dispositions and Persons who could not be scored.
Older saved objects are checked against their recorded format and evidence.
Inspect review_mfrm_calibration() if a file has missing or inconsistent
records. Do not change saved check results to force acceptance. If checks
of the original fitted model are missing, re-extract from that saved model
if it passes the current checks; when only the
score records are incomplete, score again from a valid frozen artifact.
Neither action means that model refitting is automatically necessary.
Conditional ability decisions
Supply cut_scores on the calibration's ability scale to obtain
decisions, with one row per Person and requested event. Type = "above_cut"
gives \(P(\theta > c \mid y, \widehat\psi)\); Type = "ability_band"
gives the probability between successive cuts, including the two outer
bands. Lower < ability <= Upper defines every row. Label uses the
supplied cut names (or Cut1, ...) and Band1, ... in increasing order.
These events overlap: only the ability-band probabilities sum to one.
PriorMean and PriorSD record the actual Person-specific normal prior;
Status and Reason retain scoring availability. available_conditional
means the applicable numerical checks passed, not that the model or the
cut's substantive meaning has been validated. review_only requires
inspection before interpretation. Source-roster scoring may return
prior_only for missing-only Persons; portable scoring instead retains
them as unavailable with NA probabilities. Fitted-object scoring omits
Persons with no retained rows; inspect its row and population reviews.
A Person absent from the input is never invented.
Probabilities integrate the continuous posterior, rather than counting
sample_mfrm_plausible_values() draws or applying a normal approximation
to EAP/SD. They condition on point calibration, population/prior parameters
and supplied cuts, as recorded in Uncertainty. They do not propagate
estimation error, compare two Persons or predict passing a future test.
CEFR labels require externally justified cuts on this same scale.
Very small tails have absolute, not relative, numerical accuracy; a
returned zero or one is not a claim of impossibility or certainty.
Review the scoring population as well as the calibration. An estimated normal prior is treated as known during scoring; its sampling uncertainty can matter especially with a small calibration cohort. A larger calibration cohort can improve parameter precision without correcting a prior that mismatches a new population's mean, spread or shape. Passing numerical checks does not establish that probabilities are accurate for that new population. A fixed reference prior is not a universal remedy: justify it for the target population on the calibration scale. If a prior override is supported, comparing externally justified alternatives is a sensitivity analysis, not evidence that the alternative giving the preferred classification is valid. Population-averaged accuracy also does not guarantee accuracy near each cut, within every subgroup or for each individual Person.
Use score_mfrm_persons() for eligible ordinary RSM MML source Persons,
predict_mfrm_units() for ordinary RSM/PCM MML or JML fitted-object scoring, and
score_mfrm_calibration() for eligible continuous-posterior RSM/PCM
artifacts. Each route retains its existing source and population
restrictions. Unit weights are required; GPCM, shared-rater and testlet
cut probabilities are not supported. JML uses a separate scoring prior,
not a population estimated by JML. NULL leaves the existing output unchanged.
summary(x)$decisions and apa_table() with which = "decisions" reuse
saved probabilities without rounding them. Fitted-object and portable
score batches also support build_summary_table_bundle() and
export_summary_appendix(). Save the complete result with saveRDS()
to retain cuts, priors and review states for later reporting. Existing
score plots display EAPs and intervals, not these event probabilities.
References
Bock, R. D., & Mislevy, R. J. (1982). Adaptive EAP estimation of ability in a microcomputer environment. Applied Psychological Measurement, 6(4), 431-444. doi:10.1177/014662168200600405 .
Muraki, E. (1992). A generalized partial credit model: Application of an EM algorithm. Applied Psychological Measurement, 16(2), 159-176. doi:10.1177/014662169201600206 .
TAM joint maximum likelihood documentation and ACER ConQuest command reference.
See also
mml_quadrature_sensitivity(), mfrm_calibration_score_methods
for an executable scoring example, concise review and visualization of
returned score batches; predict_mfrm_units(), score_mfrm_persons(),
apa_table() and export_summary_appendix() for saved-score tables.