Compute design-weighted precision curves for RSM fits
Source:R/api-advanced.R
compute_information.RdCalculates design-weighted score-variance curves across the latent
trait (theta) for a fitted RSM many-facet Rasch model. Returns both
an overall precision curve ($tif) and per-facet-level contribution
curves ($iif) based on the realized observation pattern.
Usage
compute_information(fit, theta_range = c(-6, 6), theta_points = 201L)Arguments
- fit
Output from
fit_mfrm().- theta_range
Numeric vector of length 2 giving the range of theta values. Default
c(-6, 6).- theta_points
Integer number of points at which to evaluate information. Default
201.
Value
An object of class mfrm_information (named list) with:
tif: tibble with columnsTheta,Information,SE. TheInformationcolumn stores the design-weighted precision value.iif: tibble with columnsTheta,Facet,Level,Information, andExposure. Here too,Informationstores a design-weighted contribution value retained under that column name for compatibility.theta_range: the evaluated theta range.
Details
For a polytomous Rasch model with K+1 categories, the score variance at
theta for one observed design cell is:
$$I(\theta) = \sum_{k=0}^{K} P_k(\theta) \left(k - E(\theta)\right)^2$$
where \(P_k\) is the category probability and \(E(\theta)\) is the
expected score at theta. In mfrmr, these cell-level variances are then
aggregated with weights taken from the realized observation counts in
fit$prep$data.
The resulting total curve is therefore a design-weighted precision screen rather than a pure textbook test-information function for an abstract fixed item set. The associated standard error summary is still \(SE(\theta) = 1 / \sqrt{I(\theta)}\) for positive information values.
What tif and iif mean here
In mfrmr, this helper currently supports only RSM fits. The total
curve ($tif) is the sum of design-weighted cell contributions across all
non-person facet levels in the fitted model. The facet-level contribution
curves ($iif) keep those weighted contributions separated, so you can see
which observed rater levels, criteria, or other facet levels are driving
precision at different parts of the scale.
What this quantity does not justify
It is not a textbook many-facet test-information function for an abstract fixed item set.
It should not be used as if it were design-free evidence about a form's precision independent of the realized observation pattern.
It does not currently extend to PCM fits; the helper stops for
model = "PCM".
When to use this
Use compute_information() when you want a design-weighted precision screen
for an RSM fit along the latent continuum. In practice:
start with the total precision curve for overall targeting across the realized observation pattern
inspect facet-level contribution curves when you want to see which raters, criteria, or other facet levels account for more of that design-weighted precision
widen
theta_rangeif you expect extreme measures and want to inspect the tails explicitly
Choosing the theta grid
The defaults (theta_range = c(-6, 6), theta_points = 201) work well for
routine inspection. Expand the range if person or facet measures extend into
the tails, and increase theta_points only when you need a smoother grid
for reporting or custom graphics.
Interpreting output
$tif: design-weighted precision curve data with theta, Information, and SE.$iif: design-weighted facet-level contribution curves for an RSM fit.Higher information implies more precise measurement at that theta.
SE is inversely related to information.
Peaks in the total curve show the trait region where the realized calibration is most informative.
Facet-level curves help explain which observed facet levels contribute to those peaks; they are not standalone item-information curves and should be read as design contributions.
How to read the main columns
Theta: point on the latent continuum where the curve is evaluated.Information: design-weighted precision value at that theta.SE: approximate1 / sqrt(Information)summary for positive values.Exposure: total realized observation weight contributing to a facet-level curve in$iif.
Recommended next step
Compare the precision peak with person/facet locations from a Wright map or
related diagnostics. If you need to decide how strongly SE/CI language can
be used in reporting, follow with precision_audit_report().
Typical workflow
Fit a model with
fit_mfrm().Run
compute_information(fit).Plot with
plot_information(info, type = "tif").If needed, inspect facet contributions with
plot_information(info, type = "iif", facet = "Rater").
Examples
toy <- load_mfrmr_data("example_core")
fit <- fit_mfrm(toy, "Person", c("Rater", "Criterion"), "Score",
method = "JML", model = "RSM", maxit = 25)
info <- compute_information(fit)
head(info$tif)
#> # A tibble: 6 × 3
#> Theta Information SE
#> <dbl> <dbl> <dbl>
#> 1 -6 7.60 0.363
#> 2 -5.94 8.07 0.352
#> 3 -5.88 8.56 0.342
#> 4 -5.82 9.09 0.332
#> 5 -5.76 9.64 0.322
#> 6 -5.7 10.2 0.313
info$tif$Theta[which.max(info$tif$Information)]
#> [1] -0.06