Skip to content

Inference calibration and limitations

This page records empirical null-size measurements, deliberate departures from textbook estimators, and regimes where factrix p-values are not calibrated. It is evidence for the contracts in Statistical methods, not a promise that one simulation design covers every user dataset.

Sizes below are rejection rates at a nominal 5% unless stated otherwise. Characterisation tests rerun selected cells at lower replication counts to detect material drift; the larger research sweeps remain documented here.

Coverage contract

Every registered metric that can publish a non-null p_value must appear on this page with either a measured size result or an explicit gap. A source-based test enforces names, not a claim that every path is calibrated.

Family Covered p-value metrics
Series means and spreads ic, quantile_spread, quantile_spread_vw, k_spread, fm_beta
Predictive and panel regressions predictive_beta, spanning_alpha, common_asymmetry, common_quantile_spread, pooled_beta, common_beta
Event inference caar, bmp_z, corrado_rank, event_hit_rate, event_ic
Direction, order, and trend directional_hit_rate, monotonicity, positive_rate, ic_trend

HAC family calibration

The same overlapping input reaches different references depending on the rank of the restriction. The ranges are intentionally kept beside the path rather than repeated throughout the method guide.

Path Measured null size Interpretation
Scalar series mean with NEWEY_WEST 3.9–7.3% over T ∈ {60,120,240,500}, h ∈ {1,5,21}; 5.4–8.1% on AR(0.6) at h=1 Calibrated to mildly liberal on the measured grid; conservative when h is declared on a non-overlapping series
NON_OVERLAPPING mean, including ic, caar, and spread metrics 4.5–5.4% on measured overlap nulls Removes mechanical overlap; does not remove persistence beyond the stride
predictive_beta, h=1 4.3–5.5% at regressor persistence ρ=0; 6.2–8.3% in the strongest measured Stambaugh cells Amihud-Hurvich path is characterised at one-period horizons
predictive_beta, h>1 7.5–14.5% Known oversized overlapping-regression HAC regime
Rank-one common_* contrasts 3.3–8.0% on non-persistent common-factor nulls; 10.5–19.5% in the re-measured persistent N=50, T=60, h=5, φ=0.9 cell (600 draws) Scalar reference fixes the ordinary overlap case; persistence remains an oversized, incompletely detected warning regime
spanning_alpha rank-one contrast 5.7–11.7% on the measured overlapping-sum spread null Uses the scalar reference, but the upper measured cells remain mildly oversized
Date-disjoint joint period slice tests 8–9% analytic and 10–15% bootstrap for K=5 on 50–90 periods per slice Known short-slice over-rejection; prefer pairwise contrasts
Date-disjoint pairwise period bootstrap 4.0–7.0% on the MA(h-1) grid; 5.5–6.5% family-wise rejection on iid K=3,5 panels Uses overlap-floored blocks and a genuine two-sample bootstrap-t root
pooled_beta Driscoll-Kraay 2.6–8.7% on its persistent-regressor, cross-sectionally correlated, overlapping-return panel grid The scalar HAR reference reduced the former path's 6.3–22.5% range; the low-overlap-dependence cells can be conservative

The scalar recipe combines three factrix-specific choices: a 3(h - 1) overlap floor, variance scale T/(T-L-1), and effective degrees of freedom bounded by T/h - 1. These move together. Applying only the wider lag floor while keeping an ordinary reference made rank-one regressions worse in the measured cells.

Producing tests include tests/stats/test_hac_overlap_size.py, test_overlap_floor_size.py, test_scalar_wald_overlap_size.py, test_driscoll_kraay_size.py, and tests/test_stambaugh_bias.py. Run python tests/stats/test_driscoll_kraay_size.py from the repository root to regenerate the complete 1,000-replication Driscoll-Kraay grid.

Single-restriction Wald contrasts

common_asymmetry, common_quantile_spread, and spanning_alpha each test one linear restriction. Treating them like a multi-restriction Wald matrix left the two common-factor metrics 10–34% oversized at h > 1. Moving the bandwidth, finite-sample scale, and reference together to the scalar recipe put every non-persistent common-factor cell at or below 8.0%.

The correction is not a persistence cure. The persistent cell was re-measured at a nominal 5% with one AR(0.9) factor broadcast to 50 assets and forward returns formed as independent overlapping h=5 sums of iid shocks. Over 600 replications (seed = 20260907 + rep), at T=60 the rejection rates were 10.5% ± 1.3 percentage points for common_asymmetry and 19.5% ± 1.6 percentage points for common_quantile_spread. This is a measured cell, not a ceiling for other persistent null constructions.

serial_correlation_detected is a partial diagnostic rather than a complete classifier for that regime. On the same N=50, h=5, φ=0.9 construction it fired on 57.8% of draws at T=60 and 79.2% at T=120; absence of the warning therefore does not establish calibrated inference. Increasing a raw lag override does not repair the reference.

Shanken correction on fm_beta

On a true-null panel, the measured uncorrected versus Shanken rejection rates were 7.3/7.3%, 3.3/3.3%, 4.3/4.0%, and 6.0/6.0% over (T,h)={(120,1),(120,5),(240,1),(240,5)}. Under the null the estimated premium approaches zero and the multiplicative correction approaches one, so near-equality is expected. This table characterises size; it does not measure power or the omitted additive term in the simplified single-factor variance.

Persistence beyond the overlap horizon

The persistence screen reads lag-1 autocorrelation on the series after the overlap_periods stride. Reading the raw series would flag the MA(h - 1) structure that the stride or kernel was designed to handle.

On a directly constructed persistent per-period signal, the measured ranges were:

Lag-1 persistence Plain t NEWEY_WEST STATIONARY_BOOTSTRAP
0 7–9% 7–9% 7–9%
0.6 32–34% 13–17% 12–19%
0.85 55–61% 32–34% 20–32%

No member is calibrated in the strongest rows. Switching from analytic to bootstrap inference changes the number but does not resolve the model failure. Use a raised hurdle, redesign the sample, or fit a model that explicitly handles the persistence. A screen estimated close to the 10-period floor is itself noisy; always read n_obs.

Andrews-Monahan AR(1) prewhitening is measured behind a private flag. It substantially reduces moderate-persistence excess on univariate mean paths but does not rescue near-unit-root input and is not implemented for every vector or regression kernel. Keeping it private avoids implying a library-wide correction that has not been calibrated.

Spread and rank-based paths

Metric or path Measured result Main limit
Spread-series STATIONARY_BOOTSTRAP 4.8–9.0% on the iid-factor grid; 3.7–10.0% on the persistent-factor overlap grid Long-horizon cells can be mildly liberal while NW becomes conservative
monotonicity stationary-bootstrap MR test 2.0–7.3% over T ∈ {120,240}, h ∈ {1,5}, factor persistence φ ∈ {0,0.9} Calibrated to conservative on the measured grid
positive_rate exact binomial 2.3–4.7% in most iid cells; one IC-pipeline cell measured 8.0% at n=240. On AR null series at T=200, size was 5.2% (phi=0), 11.5% (phi=0.3), 14.8% (phi=0.4), 20.2% (phi=0.5), 25.2% (phi=0.6) and 54.8% (phi=0.9) over 400 draws. With the hit-series threshold, the screen fired on 0.5% / 44.8% / 78.5% / 96.8% / 99.8% / 100% of draws at phi=0 / 0.3 / 0.4 / 0.5 / 0.6 / 0.9. Exact-binomial discreteness is conservative under independent trials but does not protect against serially dependent hit indicators. serial_correlation_detected identifies persistence left after the overlap stride; the p-value is returned under the project-wide advisory contract but is not calibrated in that regime. The screen reads the dichotomised hit sequence, whose lag-1 autocorrelation is (2/pi) arcsin(phi) for a zero-mean Gaussian AR(phi) input — measured 0.194 at phi=0.3 and 0.263 at phi=0.4 against a predicted 0.194 / 0.262. POSITIVE_RATE_HIT_AUTOCORR = (2/pi) arcsin(PERSISTENT_SERIES_AUTOCORR) ≈ 0.194 restores the population warning boundary to phi=0.3 on that calibration grid. It is a metric-specific warning threshold, not a claim that arbitrary non-Gaussian factor series have a recoverable latent Gaussian correlation. The exact-binomial estimator and p-value are unchanged.
directional_hit_rate Pesaran-Timmermann with period deflation 3.0–7.7% on the measured panel grid Same-period dependence must remain visible in the event-period metadata
ic_trend strided Hamed-Rao Mann-Kendall 1.7–5.3% over T ∈ {60,120,240}, h ∈ {1,5} Strong residual persistence and unit-root input remain warning regimes
common_beta calendar-time cross-asset t 2.0–7.3% on the measured common-factor panel grid A hand-built beta table uses a flagged iid reference; a failed producer estimate withholds inference instead of substituting iid

The positive_rate threshold uses the Gaussian sign-correlation identity from Hurt (1973). Its measured trigger rates, rather than that identity alone, define the supported calibration boundary.

Producing tests include test_spread_bootstrap_size.py, test_monotonicity_size.py, test_positive_rate_size.py, test_directional_hit_rate_size.py, test_ic_trend_size.py, and test_common_beta_size.py under tests/stats/.

Event-study paths

caar and corrado_rank infer on event periods; bmp_z infers on valid events and uses distinct event periods to assess clustering and sample reliability. Their n_obs values are therefore not interchangeable.

Path Characterisation Limit
caar non-overlapping event-period t Falls in the 4.5–5.4% non-overlap band on the measured null Event-induced variance motivates the standardised read
bmp_z with design-effect deflation About 7% on the sign-aligned shared-shock null; around 10% at 8 effective event periods, around 7% at 15, clearing near 30 Residual size follows distinct event periods, not raw events; heavy skew at long horizons can bias standardised abnormal returns
corrado_rank 6% on the same sign-aligned null Rank robustness does not create power from few event periods
event_hit_rate 7% on the sign-aligned null Uses the same-period dependence adjustment; still thin with few event periods
event_ic Covered by the shared clustering characterisation and dedicated clustered-inference tests A pooled event correlation remains sensitive to the effective event-period count

event_skewness has no calibrated test

The withdrawn D'Agostino path failed on both non-normal signed returns and sign-aligned same-period shocks. On two panel nulls with only about 1.5 events per event period, it rejected 19.0% and 23.3%; on a sign-aligned clustered null it rejected 30.3%. Applying the event design-effect deflator barely moved the first failure and drove the last to 0.0%, so no single adjustment calibrated both. event_skewness is descriptive and publishes no p-value.

Joint period test on short slices: known over-rejection

For date-disjoint slices, slice_period_joint_test with K ≥ 3 and fewer than roughly 150 periods per slice is not a reliably sized omnibus test. At K=5, measured size is 8–9% for the analytic path and 10–15% for the bootstrap path at the short end. The bootstrap inherits noisy per-slice variance estimates; it is not automatically safer because the sample is short.

The pairwise bootstrap uses a genuine two-sample bootstrap-t root: observed and resampled contrasts each use their own block-based SE, and the same joint studentized draws feed raw p-values and Romano-Wolf. On iid per-period IC at T=60, B=499, 200 replications, family-wise rejection measured 5.5% at K=3 and 6.5% at K=5 (raw-pair rejection 6.2% and 6.5%).

The overlap floor matters separately. On two independent MA(h-1) null series with T=240, B=499, 200 replications, rejection measured 4.0%, 4.5%, and 7.0% for h=1, 5, 21; the pre-fix h=21 route measured 15% because its Politis-White block could be shorter than the known horizon. The analytic Welch-HAC path was not changed by this bootstrap fix: its narrow bandwidth remains uncalibrated on that MA(h-1) regime (16.7% at h=21 in the review grid), so it is not a substitute for the corrected default there.

Uneven evaluation grids

The main size tables use a constant stride. Scalar series-mean paths were also checked on one uneven (20, 20, 40)-spaced grid: NON_OVERLAPPING measured 5.8% and NEWEY_WEST 5.5%. Regression HAC, multi-restriction Wald, ADF, rolling, event-window, and adjacent-period paths have not been comprehensively recalibrated on uneven grids. uneven_evaluation_grid is therefore a design warning, not a claim that every method is invalid or valid there.