MincerZarnowitzTest#
- class cultivars.forecast.comparison.MincerZarnowitzTest(*, statistic, pvalue, horizon, nobs, intercept, slope, r_squared)[source]
Bases:
_ForecastComparisonTestVerdict of the Mincer-Zarnowitz efficiency regression
y = a + b f.An unbiased, efficient point forecast has intercept zero and slope one in
\[y_t = a + b\, f_t + u_t, \qquad H_0 : (a, b) = (0, 1),\]because a forecast that is the conditional mean cannot be improved by any linear transformation of itself. A slope below one says the forecast overreacts – shrinking it toward its mean would help – and above one that it underreacts; an intercept away from zero is bias. The joint restriction is tested with a Wald statistic on a HAC covariance, since multi-step errors overlap, and \(W / 2\) is referred to \(F(2, T - 2)\) for the small-sample reading.
- Variables:
intercept – Estimated
a.slope – Estimated
b.statistic – Wald statistic for
(a, b) = (0, 1), chi-squared scale.pvalue – Upper-tail p-value of
statistic / 2underF(2, T - 2).r_squared – Fit of the regression, the forecast’s explanatory share of the outcome.
horizon – Forecast horizon behind the series.
nobs – Evaluation origins.
Note
The regression is a test of the forecast against itself, not against a rival: it can reject for a forecast that beats every alternative and fail to reject for a useless one whose errors happen to be uncorrelated with it. Read it beside a comparison. At multi-step horizons the truncated Bartlett kernel understates the long-run variance and the test over-rejects, roughly 13% at nominal 5% for a four-step horizon on 100 origins; the summary says so whenever
horizon > 1.See also
mincer_zarnowitz()– the producer.Calibration– the density-forecast analogue: are the outcomes where the forecasts said?EncompassingTest– the combination weight a rival would earn, the other reading of “could be improved”.
References
Mincer, J. A., & Zarnowitz, V. (1969). The evaluation of economic forecasts. In J. A. Mincer (Ed.), Economic Forecasts and Expectations (pp. 3-46). NBER.
Example
A forecast that is the conditional mean passes; the same forecast scaled by three overreacts and fails on its slope:
>>> import numpy as np >>> rng = np.random.default_rng(0) >>> x = rng.standard_normal(200) >>> y = 0.5 * x + rng.standard_normal(200) >>> efficient = mincer_zarnowitz(y, 0.5 * x) >>> round(efficient.slope, 2), bool(efficient.reject()) (0.86, False) >>> overreacting = mincer_zarnowitz(y, 1.5 * x) >>> round(overreacting.slope, 2), bool(overreacting.reject()) (0.29, True)
Private methods#
Render as a table. |