
Facet-quality dashboard for facet-level screening
Source:R/api-dashboards.R
facet_quality_dashboard.RdBuild a compact dashboard for one facet at a time, combining facet severity, misfit, central-tendency screening, and optional bias counts.
Usage
facet_quality_dashboard(
fit,
diagnostics = NULL,
facet = NULL,
bias_results = NULL,
severity_warn = 1,
misfit_warn = NULL,
central_tendency_max = 0.25,
bias_count_warn = 1L,
bias_abs_t_warn = 2,
bias_abs_size_warn = 0.5,
bias_p_max = 0.05
)Arguments
- fit
Output from
fit_mfrm().- diagnostics
Optional output from
diagnose_mfrm().- facet
Optional facet name. When
NULL, the function tries to infer a rater-like facet and otherwise falls back to the first modeled facet.- bias_results
Optional output from
estimate_bias()or a named list of such outputs. Non-matching bundles are skipped quietly.- severity_warn
Absolute estimate cutoff used to flag severity outliers.
- misfit_warn
Mean-square cutoff used to flag misfit. Values above this cutoff or below its reciprocal are flagged.
- central_tendency_max
Absolute estimate cutoff used to flag central tendency. Levels near zero are marked.
- bias_count_warn
Minimum flagged-bias row count required to flag a level.
- bias_abs_t_warn
Absolute
tcutoff used when deriving bias-row flags from a raw bias bundle.- bias_abs_size_warn
Absolute bias-size cutoff used when deriving bias-row flags from a raw bias bundle.
- bias_p_max
Probability cutoff used when deriving bias-row flags from a raw bias bundle.
Value
An object of class mfrm_facet_dashboard (also inheriting from
mfrm_bundle and list). The object summarizes one target facet:
overview reports the facet-level screening totals, summary provides
aggregate estimates and flag counts, detail contains one row per facet
level with the computed screening indicators, ranked orders levels by
review priority, flagged keeps only levels requiring follow-up,
bias_sources records which bias-result bundles contributed to the
counts, settings stores the resolved thresholds, and notes gives short
interpretation messages about how to read the dashboard.
Details
The dashboard screens individual facet elements across four complementary criteria:
Severity: elements with \(|\mathrm{Estimate}| >\)
severity_warnlogits are flagged as unusually harsh or lenient.Misfit: elements with Infit or Outfit MnSq outside the configured heuristic review band are flagged. The band defaults to the package pair returned by
mfrm_misfit_thresholds()(Linacre 0.5-1.5); passmisfit_warn = 1.5to keep the older symmetric \([1/\)misfit_warn\(,\;\)misfit_warn\(]\) form (0.67-1.5).Central tendency: elements with \(|\mathrm{Estimate}| <\)
central_tendency_maxlogits are flagged. Near-zero estimates may indicate a rater who avoids extreme categories, producing artificially narrow score ranges.Bias: elements involved in \(\ge\)
bias_count_warnscreen-positive interaction cells (fromestimate_bias()) are flagged.
A flag density score counts how many of the four criteria each element triggers. Elements flagged on multiple criteria warrant priority review and may motivate training or a documented data-quality review; the dashboard does not justify automatic row, person, or rater exclusion.
Default thresholds are screening heuristics. Prespecify and justify any application-specific alternatives rather than treating them as universal validity or acceptance criteria.
Output
The returned object is a bundle-like list with class
mfrm_facet_dashboard and components:
facet: character scalar naming the dashboard's target facetfacet_source: character scalar describing whether the target facet was inferred from the fit configuration or supplied explicitlyoverview: one-row structural overviewsummary: one-row screening summarydetail: level-level detail tableranked: detail ordered by flag density / severityflagged: flagged levels onlybias_sources: per-bundle bias aggregation metadatasettings: resolved threshold settingsnotes: short interpretation notesdiagnostics: themfrm_diagnosticsbundle the dashboard was built from (echoed for downstream helpers that need to traverse the same diagnostics object)bias_results: themfrm_biasbundle (or list of bundles) whenbias_resultswas supplied;NULLotherwise
Examples
# \donttest{
toy <- load_mfrmr_data("example_core")
toy <- toy[toy$Person %in% unique(toy$Person)[1:8], ]
fit <- fit_mfrm(toy, "Person", c("Rater", "Criterion"), "Score", method = "JML", maxit = 30)
diag <- diagnose_mfrm(fit, residual_pca = "none")
dash <- facet_quality_dashboard(fit, diagnostics = diag)
summary(dash)
#> mfrmr Facet Quality Dashboard Summary
#>
#> Overview
#> Facet FacetSource Levels FlaggedLevels BiasSourceBundles
#> Rater inferred 4 2 0
#>
#> Summary
#> Facet Levels MeanEstimate SD MinEstimate MaxEstimate MeanInfit MeanOutfit
#> Rater 4 0 0.26 -0.322 0.315 0.997 0.978
#> SeverityFlagged MisfitFlagged CentralTendencyFlagged BiasFlagged AnyFlagged
#> 0 0 2 0 2
#> BiasRows
#> 0
#>
#> Flagged levels
#> Facet Level Estimate N.x SE ModelSE RealSE SE_Method
#> Rater R01 0.003 32 0.252 0.252 0.289 Observation-table information
#> Rater R02 0.003 32 0.252 0.252 0.252 Observation-table information
#> Converged InferenceReady ConvergenceSeverity PrecisionTier
#> TRUE TRUE pass exploratory
#> TRUE TRUE pass exploratory
#> SupportsFormalInference SEUse
#> FALSE screening_only
#> FALSE screening_only
#> CIBasis CIUse N.y Infit
#> Normal interval from exploratory observation-table SE screening_only 32 1.321
#> Normal interval from exploratory observation-table SE screening_only 32 0.943
#> Outfit InfitZSTD OutfitZSTD DF_Infit DF_Outfit N.x.x ObservedAverage
#> 1.277 0.937 1.101 15.765 32 32 2.75
#> 0.912 -0.046 -0.278 15.765 32 32 2.75
#> ExpectedAverage Bias MeanResidual MeanStdResidual MeanAbsStdResidual ChiSq
#> 2.75 0 0 -0.026 0.922 40.856
#> 2.75 0 0 0.011 0.779 29.192
#> ChiDf ChiP SE_Residual t_Residual p_Residual SE_StdResidual t_StdResidual
#> 31 0.111 0.124 0 1 0.177 -0.149
#> 31 0.559 0.124 0 1 0.177 0.063
#> p_StdResidual DF PTMEA N.y.y CI_Lower CI_Upper CI_Level CI_Method
#> 0.882 31 0.609 32 -0.49 0.497 0.95 Normal approximation
#> 0.950 31 0.667 32 -0.49 0.497 0.95 Normal approximation
#> CIEligible CILabel N AbsEstimate SeverityFlag
#> FALSE Approximate interval; screening only 32 0.003 FALSE
#> FALSE Approximate interval; screening only 32 0.003 FALSE
#> MisfitFlag CentralTendencyFlag BiasCount BiasSources BiasFlag FlagCount
#> FALSE TRUE 0 0 FALSE 1
#> FALSE TRUE 0 0 FALSE 1
#> AnyFlag FlagLabel .AbsEstimate
#> TRUE central 0.003
#> TRUE central 0.003
#>
#> Settings
#> Setting Value
#> facet Rater
#> facet_source inferred
#> severity_warn 1
#> misfit_warn 1.5
#> central_tendency_max 0.25
#> bias_count_warn 1
#> bias_abs_t_warn 2
#> bias_abs_size_warn 0.5
#> bias_p_max 0.05
#> bias_source_bundles 0
#>
#> Notes
#> - Dashboard constructed successfully.
# }