MincerZarnowitzTest#

class cultivars.forecast.comparison.MincerZarnowitzTest(*, statistic, pvalue, horizon, nobs, intercept, slope, r_squared)[source]#

Verdict 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 / 2 under F(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)

Attributes#

intercept

Estimated \(a\); zero under the null, otherwise the forecast's bias.

slope

Estimated \(b\); one under the null, below one for an overreacting forecast.

r_squared

Coefficient of determination of the regression, the forecast's share of the outcome.

horizon

nobs

pvalue

statistic

Methods#

reject(*[, alpha])

Whether the null is rejected at level alpha.

summary()

The test as a table, renderable as text, HTML, or a dataframe.