| build_equating_chain | R Documentation |
Links a series of calibration waves by computing mean offsets between adjacent pairs of fits. Common linking elements (e.g., raters or items that appear in consecutive administrations) are used to estimate the scale shift. Cumulative offsets place all waves on a common metric anchored to the first wave. The procedure is intended as a practical screened linking aid, not as a full general-purpose equating framework.
build_equating_chain(
fits,
anchor_facets = NULL,
include_person = FALSE,
drift_threshold = 0.5
)
## S3 method for class 'mfrm_equating_chain'
print(x, ...)
## S3 method for class 'mfrm_equating_chain'
summary(object, ...)
## S3 method for class 'summary.mfrm_equating_chain'
print(x, ...)
fits |
Named list of |
anchor_facets |
Character vector of facets to use as linking elements. |
include_person |
Include person estimates in linking. |
drift_threshold |
Threshold for flagging large residuals in links. |
x |
An |
... |
Ignored. |
object |
An |
The screened linking chain uses a screened link-offset method. For each pair of
adjacent waves (A, B), the function:
Identifies common linking elements (facet levels present in both fits).
Computes per-element differences:
d_e = \hat{\delta}_{e,B} - \hat{\delta}_{e,A}
Computes a preliminary link offset using the inverse-variance weighted mean of these differences when standard errors are available (otherwise an unweighted mean).
Screens out elements whose residual from that preliminary offset exceeds
drift_threshold, then recomputes the final offset on the retained set.
Records Offset_SD (standard deviation of retained residuals) and
Max_Residual (maximum absolute deviation from the mean) as
indicators of link quality.
Flags links with fewer than 5 retained common elements in any linking facet as having thin support.
Cumulative offsets are computed by chaining link offsets from Wave 1 forward, placing all waves onto the metric of the first wave.
Elements whose per-link residual exceeds drift_threshold are flagged
in $element_detail$Flag. A high Offset_SD, many flagged elements, or a
thin retained anchor set signals an unstable link that may compromise the
resulting scale placement.
Object of class mfrm_equating_chain with components:
Tibble of link-level statistics (offset, SD, etc.).
Tibble of cumulative offsets per wave.
Tibble of element-level linking details.
Tibble of retained common-element counts by facet.
List of analysis configuration.
Use anchor_to_baseline() for a single new wave anchored to a known
baseline.
Use detect_anchor_drift() when you want direct comparison against one
reference wave.
Use build_equating_chain() when no single wave should dominate and you
want ordered, adjacent links across the series.
$links: one row per adjacent pair with From, To, N_Common,
N_Retained, Offset_Prelim, Offset, Offset_SD, and
Max_Residual. Small Offset_SD
relative to the offset indicates a consistent shift across elements.
LinkSupportAdequate = FALSE means at least one linking facet retained
fewer than 5 common elements after screening.
$cumulative: one row per wave with its cumulative offset from Wave 1.
Wave 1 always has offset 0.
$element_detail: per-element linking statistics (estimate in each
wave, difference, residual from mean offset, and flag status).
Flagged elements may indicate DIF or rater re-training effects.
$common_by_facet: retained common-element counts by linking facet for
each adjacent link.
$config: records wave names and analysis parameters.
Read links before cumulative: weak adjacent links can make later
cumulative offsets less trustworthy.
Fit each administration wave separately: fit_a <- fit_mfrm(...).
Combine into an ordered named list:
fits <- list(Spring23 = fit_s, Fall23 = fit_f, Spring24 = fit_s2).
Call chain <- build_equating_chain(fits).
Review summary(chain) for link quality.
Visualize with plot_anchor_drift(chain, type = "chain").
For problematic links, investigate flagged elements in
chain$element_detail and consider removing them from the anchor set.
detect_anchor_drift(), anchor_to_baseline(),
make_anchor_table(), plot_anchor_drift()
toy <- load_mfrmr_data("example_core")
people <- unique(toy$Person)
d1 <- toy[toy$Person %in% people[1:12], , drop = FALSE]
d2 <- toy[toy$Person %in% people[13:24], , drop = FALSE]
fit1 <- fit_mfrm(d1, "Person", c("Rater", "Criterion"), "Score",
method = "JML", maxit = 10)
fit2 <- fit_mfrm(d2, "Person", c("Rater", "Criterion"), "Score",
method = "JML", maxit = 10)
chain <- build_equating_chain(list(Form1 = fit1, Form2 = fit2))
summary(chain)
chain$cumulative
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.