Сравнение прогнозов
\[ \newcommand\cN{{\mathcal{N}}} \newcommand\P{{\mathbb{P}}} \newcommand\E{{\mathbb{E}}} \newcommand\Var{{\mathrm{Var}}} \newcommand\Cov{{\mathrm{Cov}}} \newcommand\Corr{{\mathrm{Corr}}} \]
Тест Диболда-Мариано
Предпосылки:
Два прогноза, \(\hat y_t^A\) и \(\hat y_t^B\). Разница произвольных метрик качества,
\[ d_t = (\hat y_t^A - y_t)^2 - (\hat y_t^B - y_t)^2. \]
Процесс \((d_t)\) стационарный. Другими словами \(\E(d_t) = \mu\), \(\Cov(d_t, d_{t-k}) = \gamma_k\), в частности, \(\Var(d_t) = \gamma_0\).
Гипотезы:
\(H_0\): \(\E(d_t) = 0\);
\(H_a\): \(\E(d_t) \neq 0\);
Тестовая статистика при верной \(H_0\):
\[ DM = \frac{\bar d - 0}{se(\bar d)} \to \cN(0;1) \]
Трудность возникает только в оценке \(se(\bar d)\), так как значения \(d_t\) коррелированы.
Как правило оценивают регрессию вектора \(d_t\) на константу и используют робастную стандартную ошибку \(se_{HAC}\).
\[ \hat d_t = \hat \beta_1, \quad DM = \frac{\hat\beta_1 - 0}{se_{HAC}(\hat\beta_1)}. \]
В качестве альтернативного подхода можно дополнительно предположить, что \((d_t)\) описывается стационарным \(ARMA(p, q)\) процессом с небольшими \(p\) и \(q\) и рассчитать \(se(\bar d)\) в рамках этого предположения.
RC и SPA тесты
RC (Reality Check) тест Уайта и SPA (Superior Predictive Ability) тест Хансена обобщают тест Диболда-Мариано на случай сравнения множества прогнозов против одного эталонного.
Для обоих тестов используется стационарный бутстрэп. Опишем стационарный бутстрэп на примере более простой задачи.
Кратко про стационарный бутстрэп
Представим себе, что у нас есть ряд \(y_1\), , \(y_T\), и мы хотим построить доверительный интервал для \(\rho = \Corr(y_t, y_{t-1})\) с помощью бутстрэпа.
Если использовать обычный бутстрэп, который из исходной выборки \((y_t)\) много раз делает случайную выборку с повторениями, то структура временного ряда будет разрушаться при создании бутстрэп-выборок, и оценка корреляции по бустрэп-выборкам будет каждый раз примерно нулевой.
Алгоритм стационарного бутстрэпа пытается решить эту проблему. На входе у нас временной ряд \(y_1\), , \(y_T\). На выходе мы хотим получить бустрэп копию этого ряда той же длины \(y_1^*\), , \(y_T^*\).
Выберем параметр вероятности \(p\). О правилах выбора чуть позже.
Выберем случайный момент времени \(s \in \{1, \ldots, T\}\) и запишем \(y_s\) очередным элементом в бутстрэп копию.
С вероятностью \(p\) вернемся к шагу \(2\), с вероятностью \(1-p\) пойдём дальше.
Увеличим \(s\) на 1, запишем \(y_s\) очередным элементом в бутстрэп копию и перейдем к подкидыванию монетки на шаге 3.
Алгоритм продолжается до тех пор, пока не наберем \(T\) наблюдений в бутстрэп-копию ряда.
Теперь мы можем построить бутстрэп-доверительный интервал для корреляции. Например, с помощью перцентильного бутстрэпа.
По исходному ряду создаем 10000 бутстрэп-копий ряда. По каждой бутстрэп-копии считаем оценку корелляции. Удаляем по 2.5% самых больших и самых маленьких оценок корреляции. Полученные края и будут границами доверительного интервала.
Про выбор \(p\).
Возвращаемся к тестам.