Anchored eligibility
The gate every subject passes before the rule runs
The anchored estimate publishes a number only for a subject whose inputs can be trusted. Every other subject stays in the result with the reason it was refused. The rules shared by both method families are on Choose a method.
Where the gate sits
publish_anchored reads the panel strictly before as_of, measures the revision, then calls assess_eligibility before the rule runs. Only a subject that passes reaches \(\hat s = a + b_\Delta\,\Delta + b_r\,r\). Symbols follow the notation page.
The checks, in order
The first check that matches names the reason, so the reason is always the most basic problem. The codes are the values of EligibilityReason.
missing_input: The model is absent, zero or not finite; the consensus is absent or not positive; or either input’s age is unknown or negative.stale_prediction: The model is older than the set’s maximum prediction age.stale_consensus: The consensus is older than the set’s maximum consensus age.gap_too_wide: The absolute gap \(\lvert\Delta\rvert\) meets or exceeds the set’s maximum. A model that far from consensus is treated as a data break, not as information.
After the rule, a subject whose expected surprise or level is not finite is refused as missing_input too, so a published row always carries finite numbers.
Limits each coefficient set sets
The age and gap limits belong to the coefficient set, not to the caller, so a published row’s parameters_version also records which limits it passed.
| Set | Maximum prediction age | Maximum consensus age | Maximum absolute gap |
|---|---|---|---|
| anchoring-2025-01 | 21 days | 60 days | 25% |
| core-2025-01 | 21 days | 60 days | 25% |
The revision has its own reading limits: the earlier consensus is read 30 days back and may be at most 60 days old at its read. A missing earlier consensus does not refuse the subject; it drops the revision term, so \(r\) contributes nothing.
What a refused row looks like
- Kept: The subject keys,
eligibleset to false andeligibility_reason. - Missing: Every requested numeric output:
expected_surprise,anchored_leveland thecontribution_*columns. - Never substituted: Consensus or zero never stands in for a refused number.
- Lower-level call:
AnchoredEstimatealso keeps its prepared input columns; their values say nothing about eligibility.
What raises instead
Some problems are not a property of one subject, so they raise PanelError and return nothing.
- Malformed panel: A missing column, a wrong type or a repeated subject key.
- Training window: A reading date on or before the set’s
fitted_through, which would read the data the set was fitted on.
Further reading
- The anchored family: The rule the gate protects.
- Inspect refusals: Reading the verdict in a publication.
- Bayesian eligibility: The other family’s checks, which differ.