
Pointwise intervals for fixed facet estimates and contrasts
Source:R/api-facet-intervals.R, R/api-plotting-facet-intervals.R
mfrm_facet_intervals.RdDescribe uncertainty about a fixed facet estimate, such as rater severity, or a specified difference between two raters. Start from a supported fitted model; the point estimates stay the same when you change the interval method.
Usage
mfrm_facet_intervals(
fit,
facet = NULL,
contrasts = NULL,
method = c("model", "sandwich"),
clusters = NULL,
adjust = FALSE,
level = 0.95,
scale = c("native", "standardized"),
comparison_review = NULL,
anchor_covariance = NULL,
independent_anchors = FALSE,
interaction = NULL
)
# S3 method for class 'mfrm_facet_intervals'
print(x, ...)
# S3 method for class 'mfrm_facet_intervals'
summary(object, ...)
# S3 method for class 'mfrm_facet_intervals'
confint(object, parm = NULL, level = object$settings$level, ...)
# S3 method for class 'mfrm_facet_intervals'
vcov(object, ...)
# S3 method for class 'mfrm_facet_intervals'
plot(
x,
comparison = TRUE,
draw = TRUE,
preset = "standard",
title = paste(x$settings$facet, "estimates and contrasts"),
subtitle = paste0(format(100 * x$settings$level, trim = TRUE),
"% pointwise normal intervals | ", if (x$settings$method == "sandwich")
paste0("Sandwich | ", x$settings$clusters, " independent clusters assumed") else if
(identical(x$settings$procedure, "cml_conditional_information"))
"Conditional information" else if (identical(x$settings$uncertainty,
"independent_anchor_delta")) "Information + anchor source" else
"Observed information"),
caption = if (any(!is.finite(x$table$Estimate)))
paste0("Not estimated: no point or interval | ",
"Crosses: estimated points with unavailable intervals") else if (any(x$table$Status
!= "available"))
"Open diamonds: fixed targets | Crosses: unavailable selected intervals" else NULL,
reference = 0,
show_legend = TRUE,
...
)Arguments
- fit
An inference-ready RSM/PCM MML fit from
fit_mfrm(), using a fixed standard-normal person distribution, fixed quadrature and unit observation weights. A fit whose category review concerns singleton counts can additionally usemethod = "model"after the separate checks described under "Small samples and singleton categories". Experimental two-family GPCM MML also supportsmethod = "model"with fixed-grid EM or direct adaptive integration; see "Two-family location targets" below. Direct MML native locations additionally support estimated normal RSM/PCM populations, including conditional-normal latent regression, and one-family GPCM with fixed N(0,1) or an estimated intercept-only normal population, using fixed or adaptive integration; see "Native locations" below for their scope and separate numerical checks. Native RSM/PCM CML results additionally supportmethod = "model", scale = "native", including the saved targets fromfit_scope = "comparisons". Matching full RSM/PCM MML interaction fits use thecomparison_reviewextension below; their explicit model and source checks remain separate.- facet
A non-person facet, for example
"Rater". May be omitted whencomparison_reviewsupplies a facet-by-origin interaction target, or for a CML comparison-only fit, which already retains its targets.- contrasts
Optional numeric matrix with distinct target row names and columns named by every level of
facet. Columns are aligned by name. A row with coefficientsc(1, -1, 0)estimates the first level minus the second. By default, each level is reported.- method
"model"(default) uses ordinary observed information;"sandwich"uses independent-cluster marginal-likelihood scores. The native-location and experimental two-family extensions support only"model"; sandwich support remains limited to the ordinary fixed-population RSM/PCM route.- clusters
For sandwich inference, an optional data frame with exactly one row per fitted person and complete
PersonandClusteridentifiers. Without it, persons are the independent units. A larger cluster could be a school or clinic if different schools or clinics are independent. A person cannot be split across clusters. Supply original person labels, even when the input person column has another name.- adjust
Logical; with
method = "sandwich", optionally multiply the covariance byG/(G-1), whereGis the cluster count. DefaultFALSE. This scaling does not guarantee small-sample coverage.- level
Pointwise confidence level, strictly between zero and one.
- scale
"native"(default) retains the fitted ability units."standardized"divides an explicit within-facet zero-sum contrast, or the interaction contrasts declared bycomparison_review, by the population SD, using full joint delta-method uncertainty. Requiresmethod = "model"and a fixed N(0,1) or estimated intercept-only normal population; individual locations and latent regression are not supported.- comparison_review
Optional
describe_mfrm_data()review or its$comparison_reviewfor a matching full native RSM/PCM MML interaction fit. Uses its declared facet-by-origin contrasts instead of facet locations; omitcontrastsand optionallyfacet. Requiresmethod = "model". See "MML interaction contrasts" for scope and assumptions. Omit this argument for a CML comparison-only fit; its saved review is reused.- anchor_covariance
Optional full sampling covariance of the supplied anchor estimates, including their correlations, in native ability units squared. Row and column names must match every directly anchored level on the one noncentered facet. Requires the fixed-grid direct RSM/PCM anchor-origin route with an intercept-only population and fixed SD.
NULLretains the existing conditional-on-anchors calculation.- independent_anchors
Logical, default
FALSE. SetTRUEwithanchor_covarianceonly when source calibration and receiving responses are independent. Shared respondents or dependent clusters require cross-sample covariance and are unsupported. This is an explicit assumption, not a check inferred from different Person identifiers.- interaction
Optional exact name of one fitted two-facet interaction, for example
"Rater:Criterion". Omitfacetandcomparison_review. This selects jointly fitted cell effects rather than fixed-baseline bias screens. Requiresmethod = "model",scale = "native", full fixed-grid RSM/PCM MML (direct, EM or hybrid) with fixed N(0,1), one interaction, no anchors, groups, dummy facets or shrinkage. Every engine must pass the common numerical and full-joint information checks; EM stopping alone does not qualify intervals. See the joint-cell section below.- x
Output from
mfrm_facet_intervals().Also for
print(): An object returned bymfrm_facet_intervals().- ...
For
print.mfrm_facet_intervals(): Unused by print and summary methods.For
plot(): Unused.- object
An object returned by
mfrm_facet_intervals().- parm
For
confint(), optional distinct target names fromobject$table$Target. Extracts the stored limits without recalculation;levelmust match the saved level. Usemfrm_facet_intervals()to calculate a different level. Unavailable limits remainNA; inspectsummary(object)for their eligibility and reasons.- comparison
Logical. With a sandwich result, also show its ordinary model-based interval. With source-propagated anchors, show the separate conditional-on-anchors interval. Both use the same point estimate.
- draw
Logical;
FALSEreturns exact plotted data without opening a device.- preset
A package plot preset, for example
"standard"or"monochrome".- title, subtitle, caption
Optional returned text;
NULLomits it. Defaults describe the facet, exact confidence level, method and fixed/unavailable symbols. This text is not drawn; useplot_data(p, "notes")andplot_data(p, "title")to retrieve it.- reference
Optional finite vertical reference; default zero. Use
NULLto omit it. This is not a rater-quality threshold.- show_legend
Logical; show the method legend (default
TRUE).
Value
An mfrm_facet_intervals object with table, selected target
covariance, model_covariance, free-parameter parameter_covariance,
model_parameter_covariance, person_scores, cluster_scores, the
clusters mapping, exact contrasts, settings, and source fit.
The model-based SE and interval remain alongside the selected method.
If ordinary MML joint information is unavailable, free-parameter
covariances are NULL and target covariances contain NA (zero for
constraint-fixed rows/columns); unavailable_reason and checks explain
the failure. Sandwich scores and their rank are then uncomputed, not zero.
Score rows are derivatives of a person's marginal log likelihood, not
observed category scores or ability estimates. Scores are absent for
method = "model".
When weak information passes numerical refinement, cautions and
information_review retain the warning and checks. InferenceCaution
also accompanies the interval table when applicable.
Each row retains Status, CIEligible and a plain-language
InferenceReview. CIEligible concerns the selected interval, not the
validity of the point estimate or a guarantee of coverage. fixed means
the target is fixed by constraints, with no inferential interval.
insufficient_cluster_rank withholds sandwich bounds because independent
cluster scores do not span all free parameters. The point and separate
ModelSE/ModelLower/ModelUpper are retained; those model bounds are
not a replacement robust interval. Review the independent sampling units
and model dimension; do not split dependent clusters to obtain an interval.
nonpositive_variance or nonfinite_bounds denotes an unusable
target-specific calculation. Missing bounds are not zero uncertainty.
Two-family results additionally retain checks, numerical_checks,
score_rank, source identity, scale references and interval refusal reasons.
Their table includes CIEligible; failed numerical checks leave bounds
and SEs missing while preserving the fitted point estimates.
Native-location results retain checks, numerical comparisons, full and
target covariance, target Jacobian and source identity, without an
empirical Person-score rank requirement.
Standardized results also retain NativeEstimate, the population SD,
whether it was estimated, and the full transformation Jacobian.
CIEligible describes numerical availability; CoverageQualified = FALSE
does not claim finite-sample coverage for the transformed interval.
For plot(): Invisibly, a ggplot object; plot_data() retains the
table, contrast coefficients, settings and labels, and as_ggplot()
remains idempotent on the returned object.
Details
Compare ordinary observed-information intervals with a sandwich covariance that treats a person's complete response vector, or an explicitly declared larger cluster, as the independent sampling unit. Estimates are not refitted.
For cluster score s_g and observed negative-log-likelihood
Hessian H, the unadjusted sandwich is
solve(H) %*% sum_g(s_g %*% t(s_g)) %*% solve(H).
Scores aggregate all responses of a person before forming the outer
products; grouping individual rating rows would be a different and
incorrect calculation for this marginal likelihood. The full covariance
is transformed through the fitted constraints and requested contrasts.
Both methods use normal critical values. No automatic method selection,
multiplicity adjustment or significance flag is supplied.
The sandwich requires many independent sampling units and appropriate
regularity. It permits dependence within the declared unit but does not
establish independence between units. A small number of units can give
poor intervals even with nonsingular covariance. If their scores do not
span the free-parameter space, sandwich intervals are unavailable; point
estimates and the reason remain. For ordinary fixed-population RSM/PCM,
an ineligible source fit still causes an error. If the source is eligible
but joint information is unavailable, nonpositive or regularized, finite
points remain with Status = "information_unavailable",
CIEligible = FALSE, missing model and sandwich uncertainty, and the
explanation in InferenceReview. This includes information-workspace
limits. A sandwich also needs the inverse information; switching methods
cannot repair its absence. Failed information can limit confidence in
point accuracy along weak directions. No inverse is regularized for this
output. Invalid arguments and cluster mappings remain errors.
Targets fixed by constraints
have no inferential interval. Known anchors exclude anchor uncertainty.
An ill-conditioned but numerically verified unregularized inverse can be
used with a warning. Successful inversion does not establish reliable
normal intervals. Review interval width, boundary proximity and quadrature
sensitivity; changing to sandwich covariance does not remove this concern.
plot() method: Plot fixed-facet interval methods
For plot(): Fixed targets use open diamonds without inferential intervals.
A conditionally fixed anchor can have a source-propagated interval; the
comparison displays its conditional fixed value separately. Method labels
distinguish source propagation from conditional observed information.
Unavailable intervals in either displayed method use crosses; an ordinary comparison interval
does not substitute for a missing sandwich interval. The zero line is a
reference, not a threshold of practical importance or a rater-quality rule.
No fit or covariance is recalculated. Target order is preserved.
Weak-information cautions remain in the returned data and appear in the
default subtitle. Custom or omitted subtitles change display only.
For experimental two-family GPCM locations, the axis uses fixed-N(0,1)
ability units and the default subtitle states the location reference and
unqualified coverage, with a deficient Person-score rank caution when
applicable. These are not uniform expected-rating differences.
Standardized contrast axes use population SD units; returned notes identify
whether SD uncertainty is estimated or the known SD is one. Reviewed
interaction contrasts retain group direction, panel weights and scale in
their source result; returned labels distinguish them from facet locations.
Native CML intervals are labeled conditional information. Their returned
notes describe asymptotic validity without implying weak information or
an estimated ability population SD.
When a comparison has no estimate, its row is labeled "not estimated"
and has no point or interval. An empty display range is only an axis
placeholder; it does not assign a value to unavailable targets.
Joint interaction-cell results retain cell identities, counts and sparse
flags in plot_data(p, "interaction_cells"). Their axis uses additive
predictor shifts; row labels show the two level names in fitted facet order.
Units follow the fixed N(0,1) ability scale. Positive effects raise
expected coded scores relative to the jointly fitted main effects. These
pointwise intervals are not fixed-baseline bias screens or fairness labels.
Jointly fitted interaction cells and contrasts
Fit a prespecified two-facet interaction with fit_mfrm(facet_interactions = "Rater:Criterion"), then use mfrm_facet_intervals(fit, interaction = "Rater:Criterion"). The default returns all fitted cells,
including the dependent last row and column. Cell labels, counts, sparse
flags and identification constraints are retained in interaction_cells.
This bounded route uses a fixed standard-normal ability population; latent
regression, estimated population variance, adaptive integration, JML, CML,
GPCM and multiple fitted interaction terms are outside this extension.
An interaction effect is an additive predictor shift after jointly fitting
the main effects. Positive values increase expected coded ratings; they do
not automatically imply favorable performance or unfairness. Effects have
zero row sums and zero column sums across the declared levels, without
weighting those constraints by cell counts. Their values depend on that
definition and the included main effects. This differs from estimate_bias(),
which holds the fitted calibration and person measures fixed while estimating
an additional residual shift. Neither result proves substantive rater bias.
Write free interaction coordinates as gamma and their expansion to all cells
as G gamma. Cell covariance is G V_gamma G', where V_gamma is the interaction
block of the inverse full marginal information, including main effects and
thresholds. It is not the inverse of only the interaction information block.
Dependent cells consequently have correlated estimates and a singular joint
cell covariance; this alone does not invalidate individual pointwise intervals.
For a prespecified cell contrast C, the covariance is C G V_gamma G' C'.
Supply every cell Target as a named column of contrasts, including zeros.
A contrast fixed at zero by the row/column constraints has Status = "fixed"
and no inferential interval; it is not evidence for a null interaction.
Source consistency, identification/boundary records, full information,
stationarity and finer-quadrature checks must pass. Unavailable intervals
retain finite point estimates and reasons. Sparse-cell flags are descriptive,
not a sample-size guarantee. Full-design identification and numerical success
do not establish nominal coverage. These are pointwise Wald intervals, not
simultaneous bounds or multiplicity-adjusted cell decisions. Saved tables,
plots, apa_table() and mfrm_results() retain the same values and cautions.
A bundled-data example uses the existing estimation and interval APIs:
ratings <- load_mfrmr_data("example_core")
fit <- fit_mfrm(ratings, "Person", c("Rater", "Criterion"), "Score",
model = "PCM", step_facet = "Criterion", noncenter_facet = "Criterion",
facet_interactions = "Rater:Criterion", quad_points = 61)
cells <- mfrm_facet_intervals(fit, interaction = "Rater:Criterion")
summary(cells)[, c("Target", "Estimate", "SE", "Lower", "Upper", "Status")]
plot(cells)
# Compare the first two displayed cells; choose the scientific contrast first.
C <- matrix(0, 1, nrow(cells$table),
dimnames = list("First minus second", cells$table$Target))
C[1, 1:2] <- c(1, -1)
difference <- mfrm_facet_intervals(fit, interaction = "Rater:Criterion",
contrasts = C)
vcov(difference) # Uses covariance between both cellsUncertainty from independently estimated anchors
The default intervals condition on the exact anchor values. Supplying
anchor_covariance and independent_anchors = TRUE adds source-calibration
uncertainty without changing any point estimates. Use the full covariance,
not only a vector of SEs or a diagonal replacement for correlated anchors.
Its numerical validity is checked; its statistical validity, units and
correspondence to the supplied anchor values remain the analyst's responsibility.
Write the free receiving parameters as u, supplied anchors as a, and the negative log likelihood Hessian blocks as H_uu and H_ua. Implicit differentiation gives S = -inverse(H_uu) H_ua. For a reported target t(u,a), its source derivative is D = t_u S + t_a. The selected target covariance is t_u V_conditional t_u' + D V_anchor D'. The direct derivative t_a matters for targets containing anchored elements; adding variance only to the free parameters would omit that contribution and their cross-covariance. This is a first-order approximation for independent samples, not joint recalibration, a bootstrap or a correction for anchor drift or biased anchors.
Source derivatives use central differences of the analytic marginal score,
checked by halving the difference step and refining the quadrature. Failed
source-derivative checks preserve point estimates and the conditional
results, with unavailable selected uncertainty. ConditionalSE,
ConditionalLower, ConditionalUpper and ConditionalStatus retain that
separate calculation; facet Model* columns also retain it. AnchorSourceSE
is the square root of the added variance contribution, not a separate
confidence interval. The selected SE, bounds and vcov() include both
components. A conditionally fixed anchor may therefore have a selected
interval for its source-estimated value. A zero covariance contribution does
not create an interval for a target fixed under both specifications.
anchor_uncertainty retains the supplied and numerically symmetrized/PSD
covariance, any floating-point adjustment, anchor values, sensitivity,
independent-sample assumption and derivative checks. Singular PSD matrices
are allowed. The free-parameter covariance includes source propagation;
it does not include anchored values as extra optimizer coordinates.
Saved population intervals can reuse this sensitivity and the conditional
information: mfrm_population_intervals(rater_ci) propagates it once, without
refitting or differentiating again. Reports and exported tables retain the
supplied covariance and source-derivative checks; RDS retains the full result.
Only fixed-grid direct RSM/PCM MML with unit weights, no interactions, shrinkage or groups, an intercept-only population, fixed SD and all anchors on its noncentered facet is supported. Adaptive integration, free population variance, GPCM, dependent calibration samples and uncertainty in the supplied SD are outside this extension. No nominal coverage guarantee follows from numerical agreement or positive covariance. Other facets retain their centering; changing an item pool still requires a defensible scale link.
A complete interface example starts from bundled ratings. This split is illustrative: independent Persons and stable anchors must be justified for the actual sampling design, and different IDs alone do not establish them.
ratings <- load_mfrmr_data("example_core")
ids <- unique(ratings$Person)
source <- ratings[ratings$Person %in% ids[1:20], ]
receiving <- ratings[!ratings$Person %in% ids[1:20], ]
baseline <- fit_mfrm(source, "Person", c("Rater", "Criterion"), "Score",
model = "RSM", noncenter_facet = "Rater", quad_points = 61)
baseline_ci <- mfrm_facet_intervals(baseline, "Rater")
common <- c("R01", "R02")
anchors <- data.frame(Facet = "Rater", Level = common,
Anchor = baseline_ci$table$Estimate[match(common, baseline_ci$table$Target)])
cohort <- fit_mfrm(receiving, "Person", c("Rater", "Criterion"), "Score",
model = "RSM", anchors = anchors, noncenter_facet = "Rater",
population_formula = ~1, person_data = unique(receiving["Person"]),
population_sd = 1, quad_points = 61)
rater_ci <- mfrm_facet_intervals(cohort, "Rater",
anchor_covariance = vcov(baseline_ci)[common, common], independent_anchors = TRUE)
summary(rater_ci) # Selected and conditional intervals side by side
population_ci <- mfrm_population_intervals(rater_ci)Small samples and singleton categories
A small sample or a wide interval is not, by itself, a reason to suppress an estimate or an otherwise available asymptotic interval. RSM/PCM model intervals can retain singleton categories (one observed response in a fitted or local category cell) when all declared categories are represented in the fitted and local scopes. They require fresh category review, source and convergence checks, positive unregularized joint information and a finer-quadrature score/covariance comparison. Empty categories, unsupported coordinates, known identification failures and failed numerical checks are not excused by this route. Failed interval checks retain the point with unavailable uncertainty and a reason.
The fit keeps its category-review state and can still have
InferenceReady = FALSE. Inspect this interval object's CIEligible,
checks, numerical_checks and InferenceCaution for the specific calculation.
This does not qualify other analyses or guarantee small-sample coverage.
The same model covariance is used by vcov(fit) and default confint(fit).
Singleton counts do not gain a sandwich or GPCM Wald extension here.
For supported one-Person RSM/PCM calibration, model-information intervals
may be available after the same numerical checks. Returned cautions and
InferenceCaution state that calibration relies on one response vector and
its assumed conditional independence; CoverageQualified is FALSE.
A finite point or information matrix does not establish small-sample
coverage or between-Person variation. One Person cannot provide sandwich
uncertainty; its ratings must not be relabeled as independent Persons.
MML assumptions and numerical approximation
MML integrates each Person's joint response probability under the declared ability distribution. Model-information intervals require the response and population models to hold for the actual rating assignments and covariates, including local independence given ability. An overall normal ability distribution does not by itself justify using the same distribution within rosters selected according to ability. Response-dependent assignment, stopping or missingness requires a separate justification of the likelihood.
The regular asymptotic interpretation requires independent Persons, an identifiable fixed-dimensional marginal model, a consistent interior solution, smooth likelihood derivatives and information growing in every free direction. With bounded ratings per Person and stable design proportions, a positive-definite limiting information per Person is a sufficient information-growth condition. Correctly specified MML can then support inference with fixed exposure per Person; increasing Person count alone cannot repair misspecification or an unidentified design. A positive observed Hessian at one fitted vector does not prove global identification.
The continuous-normal likelihood is evaluated numerically. A fixed finite quadrature order can retain approximation error as Person count grows. Optimizer and integration error must be negligible relative to sampling uncertainty for the continuous-model Wald interpretation. Agreement at two quadrature orders is a sensitivity diagnostic, not an error bound or a proof of asymptotic equivalence. Standardization does not remove either numerical approximation error or bias from a misspecified population model. The ordinary sandwich route can estimate variation around a working-model target under its own regularity conditions; that target need not be the true structural parameter.
Conditional likelihood
Native fit_mfrm(method = "CML") results use the inverse full conditional
information, transformed through the fitted facet constraints and requested
contrasts. Other facets and steps remain estimated. Only method = "model",
clusters = NULL, adjust = FALSE and scale = "native" are supported.
CML estimates no ability population SD: scale = "standardized" cannot be
computed from that fit. For MML with an estimated intercept-only normal
population, that option divides by the same fit's estimated SD and includes
its covariance with the contrast; see "Population-SD-standardized contrasts".
A full CML fit can retain finite numerical point estimates when its
identification, finite-MLE and stationarity checks pass but conditional
information fails. Its non-fixed targets have Status = "information_unavailable",
missing SE/bounds, CIEligible = FALSE and the reason in InferenceReview.
The fit's checks$information_status and checks$information_reason record
the information decision. Constraint-fixed targets retain zero SE and no
inferential interval. An information warning also limits confidence in the
numerical accuracy of points along weak directions; retaining a point does
not qualify it for inference.
CML intervals are asymptotic, requiring the correct conditional response law,
independent Persons and information growing in every free direction of a
fixed-dimensional identified model. More Persons alone is insufficient;
extreme totals add no information. Response-dependent assignment, stopping
or missingness requires justification that the conditional law is preserved.
See the sufficient regular regime in fit_mfrm(). Neither numerical
acceptance nor a distribution-free ability treatment ensures small-sample
coverage. plot(ci), summary(ci) and RDS reuse apply to CML interval objects;
attaching them to ordinary mfrm_results() is not supported.
Non-fixed CML targets require finite, strictly positive representable variance.
Rescale contrast coefficients if their units cause variance underflow or
overflow; numerical zero variance is not a constraint-fixed target.
For fit_scope = "comparisons", call mfrm_facet_intervals(fit) without
new contrasts or comparison_review. The saved estimates, joint target
covariance and qualifications are reused without optimization or information
recalculation. level changes only the pointwise normal critical value.
Unidentified, boundary or unqualified-stationarity comparisons keep missing
estimates and intervals. If only information failed, identified numerical
points remain, with missing uncertainty, their reasons and
CIEligible = FALSE; no unavailable value is zero-filled.
parameter_covariance is the covariance of the fit's identified subspace,
not of separately identified cell effects. Use summary(ci), plot(ci),
apa_table(ci) and saveRDS(ci); the saved review retains group order,
contrast weights and observed/empty cells. JML/MML comparison-only fits
remain descriptive and are not covered by this interval route.
Anchors and group means
The ordinary fixed-population RSM/PCM route supports location anchors and group means. Write the fitted facet locations as \(b=b_0+J\eta\) and a requested comparison as \(Cb\). Its covariance is \(CJ V_\eta J^{\mathsf T}C^{\mathsf T}\), where \(V_\eta\) is extracted after computing the full joint covariance. Other facets and thresholds remain estimated; inverting only the selected facet's information would omit their estimation uncertainty. The affine offset \(b_0\) affects estimates, but has no variance when its supplied values are treated as exact.
A comparison with \(CJ=0\) is fixed: its Status is "fixed", SE
is zero, and interval bounds are missing. This includes values implied by
centering, not only rows in an anchor table. For example, with four raters,
whole-facet centering and a fixed mean of 0.10 for the first three, the
fourth rater is fixed at -0.30. The three group members can still differ
unless other constraints fix them; their mean has no inferential interval.
A difference between a free rater and an anchored rater can remain uncertain.
These are conditional statements, not evidence that the source calibration
or group-mean assumption is error-free. Native-location anchors use only
the fixed-SD RSM/PCM extension below; groups remain excluded there.
Native locations
For estimated normal RSM/PCM and intercept-only normal one-family GPCM MML,
method = "model" supplies pointwise Wald intervals for
locations or contrasts on the model's native ability scale. One-family
GPCM also admits the explicit fixed-N(0,1) restriction
(gpcm_mml_identification = "fixed_standard_normal"). Shared or separate
slope/step owners are supported, with geometric-mean-one relative slopes.
Use direct MML, fixed or adaptive integration, unit weights, additive
centered facets and centered steps. RSM/PCM also accepts a fitted full-rank
conditional-normal regression, retaining its coefficient and residual-variance
cross-information when computing structural uncertainty. The saved population
table identifies coefficients and residual variance; it does not label
regression coefficients as marginal population means. GPCM latent
regression and sandwich covariance remain unavailable here. The native
location procedure performs its own qualification even when the source
fit has InferenceReady = FALSE. Read CIEligible, Status, checks,
numerical_checks and cautions on this result; interval availability does
not change the source fit's overall readiness or qualify other procedures.
Interactions use the separate comparison_review route below.
Population-coefficient and variance intervals are separate targets and are
not returned by this helper.
RSM/PCM populations may fix residual SD with population_sd. For an
intercept-only population (population_formula = ~1), a direct anchor on
the selected non-Person noncenter_facet identifies the origin while free
levels on that facet remain uncentered. These anchored intervals require
no groups or dummy facets and condition on the supplied anchors and SD;
their source-calibration uncertainty is not propagated. Other facets keep
their declared centered constraints. Fixed SD has no variance coordinate
in the joint information.
The covariance transforms the inverse full joint marginal information, including all estimated population, slope and step coordinates. A location-only inverse or independent printed SEs cannot replace it. The source, category support, local solution and unregularized information must pass checks; covariance and score changes are also checked at a finer integration order at the same fitted parameter vector. This model-information procedure has no empirical Person-score rank requirement. For RSM/PCM populations with estimated variance, a zero-residual-variance candidate at the retained nuisance estimates is compared with the fitted likelihood. A higher boundary likelihood beyond the numerical allowance prevents intervals. This check does not optimize or exclude the entire boundary. A numerical refusal preserves the native point and its reason with unavailable SE/bounds. Constraint-fixed targets have no inferential interval.
The asymptotic justification requires independent Persons, a correctly
specified response and population model, an identified interior true
parameter, a fixed number of structural parameters, nonsingular limiting
information and sufficiently accurate integration and optimization.
Information must grow in all target directions as Persons are added;
connected facet labels alone do not establish this condition.
These numerical checks do not establish finite-sample coverage, global
identification or robustness to misspecification. Native locations are
not divided by the estimated population SD unless scale = "standardized"
is requested for a zero-sum contrast (see below). A location
difference need not produce a uniform rating difference with unequal slopes
or steps. The calculation does not refit or change the saved fit/readiness.
Save and attach ci with mfrm_results(fit, intervals = list(locations = ci), compute = "never"); select plot(res, type = "facet_locations") for
RSM/PCM or "gpcm_locations" for one-family GPCM. Reports and exports retain
the native scale, inferential qualifications and unavailable outputs.
Population-SD-standardized contrasts
Set scale = "standardized" and supply explicit contrast rows whose
coefficients sum to zero. For native contrast \(d\), population SD
\(\sigma\) and free log-variance \(\lambda = \log(\sigma^2)\), the
target is \(t = d/\sigma\). Its Jacobian has location entries
\(J_d/\sigma\) and log-variance entry \(-t/2\). The covariance is
transformed from the inverse full joint observed information, including
the covariance between the contrast and log-variance. Dividing native
interval endpoints by the fitted SD omits this uncertainty. In scalar form,
$$\widehat{\mathrm{Var}}(\widehat t) =
\frac{\widehat{\mathrm{Var}}(\widehat d)
+ \widehat d^2\widehat{\mathrm{Var}}(\widehat\lambda)/4
- \widehat d\widehat{\mathrm{Cov}}(\widehat d,\widehat\lambda)}
{\widehat\sigma^2}.$$
The covariance term can increase or decrease the SE relative to dividing
the native SE by the fitted SD. A zero estimated contrast can still have
positive variance. With fixed
N(0,1), the result equals the native contrast because the known SD is one.
With an explicit fixed population_sd, divide the native contrast and SE
by that SD; no estimated-SD derivative or uncertainty is introduced.
Conditional-normal regression is excluded: its residual SD is not a
marginal population SD. Standardization does not equate expected ratings
across models with different slopes or category steps.
The existing source and numerical checks still apply. These are pointwise normal delta-method intervals, not profile intervals or finite-sample coverage guarantees. The regular delta method assumes a fixed true population SD strictly above zero and an identifiable, interior joint solution under the stated marginal model. A positive fitted SD alone does not establish these conditions. At zero SD the target is undefined; near zero the ratio and normal approximation can be unstable. No universal SD cutoff certifies validity. Standardization does not resolve weak identification or boundary problems; see the MML assumptions above.
MML interaction contrasts
Supply comparison_review to obtain native or population-SD-standardized
intervals for its explicitly weighted facet-by-origin interaction contrasts.
The review must match the fitted responses, group identities, constraints,
model, PCM step owner, signs and population design. Its model has one
interaction, zero origin main facet and centered remaining facets and
interaction margins. This extension requires a full, unadjusted RSM/PCM
direct MML fit, unit weights and preserved categories, without shrinkage or
additional anchors. Comparison-only MML fits, JML and GPCM are not admitted.
CML comparison intervals remain available through fit_mfrm() but cannot
estimate a population SD.
Full conditional-map identification is necessary here. Source tables,
categories, local solution, unregularized full information and finer-grid
stability must pass the native-location checks above. A failed numerical
check retains the point estimate with missing SE/bounds and a reason.
Positive conditional rank and local information do not establish global
marginal identification or finite-sample interval coverage; the output
retains MarginalIdentificationState and CoverageQualified = FALSE.
These are model-based asymptotic intervals, not a calibrated DFF classification.
For scale = "standardized", the denominator is the SD estimated in the
same intercept-only normal MML fit (population_formula = ~1). Such a
fit assumes one common ability distribution across the declared origin
groups. It is a different model from ~Group, which allows group means.
For ~Group, native interaction intervals are supported, but its residual
SD is not substituted for a marginal population SD. A fixed N(0,1) fit has
known SD one; no estimated-SD uncertainty is introduced in that case.
The joint delta method uses interaction derivatives divided by the fitted
SD and derivative -Estimate/2 for log population variance. All population,
step and structural nuisance coordinates remain in the full information
inverse. It includes the covariance between the numerator and denominator;
dividing the native endpoints or SE by the fitted SD is insufficient.
Read table with comparison_review: group subtraction order, panel weights,
observed/empty cells and assumptions are retained. Use plot(ci), saveRDS(ci)
to retain IdentificationBasis and its explanation with the intervals.
A free-Person response-map basis does not establish distribution-free MML
inference; population-dependent conditional identification does not establish
global marginal identification. Display the result directly
or attach it as mfrm_results(fit, intervals = list(school = ci), compute = "never").
Plotting and reports reuse the saved uncertainty; they do not refit or
recalculate information. These results do not extend the separate
mfrm_population_intervals() consumer to models with fitted interactions.
Two-family location targets
For native two-family GPCM MML, select a modeled non-Person facet.
Locations sum to zero except in the declared noncenter_facet, whose
locations are uncentered on the fixed N(0,1) ability scale. These locations are measured
before multiplication by both slope components. Increasing a location
lowers expected ratings when ability, slopes and other effects stay fixed.
A contrast between actual raters need not imply a uniform difference in
expected ratings: their slopes and category-step offsets may also differ.
Neither zero nor a location difference defines rater quality or accuracy.
Let J expand the free location coordinates under their fitted constraints
and C be the requested contrast matrix. The target covariance is
C J V J' C', where V is the location block extracted after inverting
the full joint marginal information. Slopes, steps and the other facet
remain estimated nuisance parameters. Inverting a location-only Hessian,
adding independent printed SEs, or using the EM conditional-objective
Hessian would omit their joint estimation uncertainty.
The source fit must pass the same identity, category support, score
derivative, stationarity, full-information and finer-quadrature checks used for
experimental two-family slope intervals in confint.mfrm_fit(). The full
covariance is checked; deficient empirical Person-score rank is a retained
diagnostic and warning, not a veto on the inverse-observed-information
method. Passing these numerical checks does not establish
repeated-sample coverage for locations or contrasts. Evidence for component
slope intervals does not qualify these different targets. These are
reported separately as CIEligible (numerical interval availability) and
CoverageQualified = FALSE in table. The latter means that nominal
sampling coverage has not been established for the target and design;
it is neither a coverage estimate of zero nor a numerical-failure flag.
Saving, reporting or exporting the result retains both fields. These are
experimental pointwise normal approximations, with no sandwich, profile,
multiplicity or automatic significance decision. A failed check retains
estimates and reasons with unavailable intervals, even if the coarse-grid
information could be inverted. Constraint-fixed targets have no interval.
The calculation does not refit or change quadrature in the saved fit.
For example, use ci <- mfrm_facet_intervals(fit, "Rater"), or supply a
named zero-sum row of contrasts for a difference. Plot and save ci
directly, or attach it with
mfrm_results(fit, intervals = list(locations = ci)) and select
plot(res, type = "gpcm_locations"). The model must actually contain the
specified facet. Location intervals do not add category-step/curve bands,
Person uncertainty, Wright maps or tests of rater competence. Individual
two-family rater sheets currently display component-slope intervals only;
use the analyst report for these location and contrast results.
What robustness means here
Under model misspecification, the sandwich describes sampling variation around the working model's limiting parameter (its pseudo-true target). That target need not equal the generating rater severity or criterion difficulty. Changing the SE does not correct a biased estimate, informative assignment, unmodeled population differences or MNAR nonresponse. Check the model and assignment before interpreting a severity contrast.
These intervals condition on the observed fixed facet levels. They do not generalize to replacement raters sampled from a rater population. They are not multiway crossed-cluster, G/D-study, variance-boundary, EAP or multiple-imputation intervals. Shared random rater/task effects spanning the declared clusters violate this one-way independence assumption. Numerical success is not a general coverage or rater-diagnosis guarantee. Review quadrature sensitivity separately; the helper reuses the fitted grid.
Bounded evaluation
Availability is not a coverage guarantee: sandwich intervals can describe a working-model target accurately while missing the generating contrast. The online simulation comparison gives the evaluated designs, results and Monte Carlo uncertainty. For a worked rater comparison, start at the beginning of that guide. The assumptions, small-sample cautions and unavailable states are retained in the sections above for offline use.
Save, display and report the selected intervals
Use plot(), as_ggplot() and plot_data() to display or extract the
saved result, and apa_table() for tables. Set title = NULL,
subtitle = NULL or caption = NULL in the plot to omit that text.
For supported RSM/PCM MML fits, attach one result or a named list to
mfrm_results(), for example
mfrm_results(fit, intervals = list(raters = intervals), include = c("fit", "plots"), compute = "never").
The route plot(res, type = "facet_raters") shows the selected intervals.
For two-family GPCM, the corresponding plot type is "gpcm_raters".
mfrm_report() and export_mfrm_results() retain the method, level,
contrast coefficients, cluster mapping and unavailable outcomes.
The source fit must match; replay reloads the saved results without
refitting or recomputing covariance. These intervals do not replace
uncertainty in ordinary Wright maps, fit diagnostics or Person scores.
For CML, keep the interval object itself: use summary(intervals),
plot(intervals), apa_table(intervals) and saveRDS(intervals, file).
Reopen it with readRDS(file). Ordinary mfrm_results(), mfrm_report()
and export_mfrm_results() do not accept CML fits or their intervals.
Session plot defaults
See mfrmr_visual_diagnostics for options(mfrmr.plot_preset), argument
precedence, and appearance when saving or reusing a plot.
References
White, H. (1982). Maximum likelihood estimation of misspecified models. Econometrica, 50(1), 1–25. Zeileis, A. (2006). Object-oriented computation of sandwich estimators. Journal of Statistical Software, 16(9), 1–16. doi:10.18637/jss.v016.i09 . Zeileis, A., Koell, S. and Graham, N. (2020). Various versatile variances: An object-oriented implementation of clustered covariances in R. Journal of Statistical Software, 95(1), 1–36. doi:10.18637/jss.v095.i01 .
See also
analyze_facet_equivalence(), pool_mfrm_imputed(),
plot.mfrm_facet_intervals(), mfrm_population_intervals()
Examples
# Long-running workflow; run explicitly when needed.
# example("mfrm_facet_intervals", run.dontrun = TRUE)
if (FALSE) { # \dontrun{
ratings <- load_mfrmr_data("example_core")
fit <- fit_mfrm(ratings, "Person", c("Rater", "Criterion"), "Score",
model = "RSM", method = "MML", rating_min = 1, rating_max = 4,
category_policy = "preserve")
intervals <- mfrm_facet_intervals(fit, "Rater", method = "sandwich")
summary(intervals)
plot(intervals)
# Compare two selected raters, rather than each rater against the origin.
# Here choose the first two example labels; prespecify your own comparison.
raters <- unique(as.character(ratings$Rater))
contrast <- matrix(0, 1, length(raters), dimnames = list(
paste(raters[1], "minus", raters[2]), raters))
contrast[1, 1:2] <- c(1, -1)
difference <- mfrm_facet_intervals(fit, "Rater", contrasts = contrast)
summary(difference)[, c("Target", "Estimate", "SE", "Lower", "Upper", "Status")]
# With the default negative rater sign, a positive contrast means the first
# rater is more severe. Units are native logits. An interval containing zero
# leaves the direction uncertain; it does not establish equivalence.
# Estimate the population SD in this same model before standardizing.
# Even an intercept-only population model needs one row per person.
persons <- unique(ratings["Person"])
population_fit <- fit_mfrm(ratings, "Person", c("Rater", "Criterion"),
"Score", model = "RSM", method = "MML", population_formula = ~ 1,
person_data = persons, person_id = "Person",
rating_min = 1, rating_max = 4, category_policy = "preserve", quad_points = 61)
standardized <- mfrm_facet_intervals(population_fit, "Rater",
contrasts = contrast, scale = "standardized")
summary(standardized)
# Estimate is now in fitted ability-population SD units; its delta-method
# interval includes uncertainty in that SD. It is not a Wald z statistic.
# CML estimates the native contrast without an ability distribution.
if (requireNamespace("lpSolve", quietly = TRUE)) {
cml_fit <- fit_mfrm(ratings, "Person", c("Rater", "Criterion"), "Score",
model = "RSM", method = "CML", rating_min = 1, rating_max = 4,
category_policy = "preserve")
cml_ci <- mfrm_facet_intervals(cml_fit, "Rater", contrasts = contrast)
summary(cml_ci)
apa_table(cml_ci)
file <- tempfile(fileext = ".rds") # Choose a lasting path for your analysis
saveRDS(cml_ci, file)
saved <- readRDS(file)
summary(saved) # Same conditional-information result, without refitting
# Use plot(saved) for a figure; ordinary mfrm_results() does not accept CML.
}
} # }