EssayAI
Блог
Блог
Математика и алгоритмы

Тест Грейнджера на причинность: как проверить связь рядов

19 июня 2026Время чтения: 7 минут
#тест Грейнджера#причинность по Грейнджеру#временные ряды#F-статистика#лаги
Тест Грейнджера на причинность: как проверить связь рядов

Когда в данных два ряда движутся вместе - продажи и реклама, инфляция и денежная масса, температура и заболеваемость - хочется сказать «одно вызывает другое». Но корреляция этого не доказывает. Тест Грейнджера предлагает операциональный, проверяемый ответ на более скромный вопрос: помогает ли прошлое одного ряда предсказывать будущее другого лучше, чем только собственное прошлое второго ряда. Это не философская причинность, а причинность в смысле предсказуемости. Разберём, как тест устроен, как читать его F-статистику и p-value и где он обманывает. Ниже соберите свой ряд и гипотезу - и получите готовый разбор.

Что значит причинность по Грейнджеру

Клайв Грейнджер (нобелевский лауреат 2003 года) предложил формализовать причинность через предсказание. Говорят, что ряд XX причиняет по Грейнджеру ряд YY, если прошлые значения XX содержат информацию, которая помогает предсказывать YY точнее, чем предсказание по одному только прошлому YY.

Ключевые слова здесь - «прошлые значения» и «точнее предсказывать». Это сразу задаёт два ограничения. Во-первых, причина должна предшествовать следствию во времени: будущее не влияет на прошлое. Во-вторых, речь идёт именно о приросте качества прогноза, а не о физическом механизме воздействия. Поэтому корректнее говорить не «XX вызывает YY», а «XX улучшает прогноз YY».

Такое определение операционально: его можно проверить статистически на данных, не зная природы связи. Цена компромисса в том, что вывод теста - это утверждение о предсказуемости, а не о настоящей механической причине.

Как устроен тест: две регрессии

Технически тест Грейнджера сравнивает две регрессии для ряда YY. Ограниченная (restricted) модель объясняет YY только его собственными лагами:

Yt=α0+i=1pαiYti+εtY_t = \alpha_0 + \sum_{i=1}^{p} \alpha_i Y_{t-i} + \varepsilon_t

Полная (unrestricted) модель добавляет лаги ряда XX:

Yt=α0+i=1pαiYti+j=1pβjXtj+utY_t = \alpha_0 + \sum_{i=1}^{p} \alpha_i Y_{t-i} + \sum_{j=1}^{p} \beta_j X_{t-j} + u_t

Здесь pp - выбранное число лагов. Если коэффициенты βj\beta_j при лагах XX совместно значимо отличаются от нуля, значит, добавление прошлого XX улучшило объяснение YY - то есть XX причиняет YY по Грейнджеру.

Формально проверяется нулевая гипотеза о совместном равенстве нулю:

H0:β1=β2==βp=0H_0: \beta_1 = \beta_2 = \dots = \beta_p = 0

Отвергаем H0H_0 - есть причинность по Грейнджеру; не отвергаем - нет оснований её утверждать. Логика та же, что в любом тесте на совместную значимость группы предикторов: мы спрашиваем, нужен ли вообще блок лагов XX, или модель ничего без него не теряет.

Ограниченная модель только с собственными лагами против полной модели с добавленными лагами X: F-тест взвешивает, какая лучше
Ограниченная модель только с собственными лагами против полной модели с добавленными лагами X: F-тест взвешивает, какая лучше

F-статистика и p-value

Сравнение двух моделей делает F-тест. Он смотрит, насколько сильно упала сумма квадратов остатков при переходе от ограниченной модели к полной:

F=(RSSrRSSu)/pRSSu/(n2p1)F = \frac{(RSS_r - RSS_u) / p}{RSS_u / (n - 2p - 1)}

где RSSrRSS_r и RSSuRSS_u - суммы квадратов остатков ограниченной и полной моделей, pp - число добавленных лагов XX, nn - число наблюдений. Чем больше прирост объяснённой вариации на один добавленный лаг, тем больше FF и тем убедительнее, что лаги XX работают.

По FF и числам степеней свободы (p,  n2p1)(p,\; n-2p-1) считается p-value. Правило стандартное: если p-value<αp\text{-value} < \alpha (обычно α=0,05\alpha = 0{,}05), нулевую гипотезу отвергаем и заключаем, что XX причиняет YY по Грейнджеру. Многие пакеты выдают эквивалентный результат через критерий χ2\chi^2 - в больших выборках выводы совпадают.

Стационарность и выбор числа лагов

У теста есть жёсткое предусловие: ряды должны быть стационарны. Применять его к рядам с трендом нельзя - получится ложная причинность из-за общего тренда, а не из-за реальной связи. Поэтому сначала ряды проверяют на единичный корень - например расширенным тестом Дики - Фуллера - и при необходимости берут разности. Если ряды нестационарны, но коинтегрированы, тест строят уже на модели коррекции ошибок (VECM), а не на простых разностях: иначе разности уничтожат долгосрочную связь между уровнями рядов.

Второй чувствительный параметр - число лагов pp. Слишком мало лагов - рискуете не уловить связь с большим запаздыванием. Слишком много - теряете степени свободы и ловите шум. Выбор делают по информационным критериям: AIC, BIC (он же SC) или HQ подбирают pp, минимизирующий критерий на сетке значений. Результат теста может заметно зависеть от выбранного pp, поэтому глубину лага всегда указывают в выводах.

Двусторонняя проверка и обратная связь

Причинность по Грейнджеру не симметрична. То, что XX причиняет YY, ничего не говорит о том, причиняет ли YY ряд XX. Поэтому тест почти всегда прогоняют в обе стороны и получают одну из четырёх картин:

  • XYX \to Y - однонаправленная причинность от XX к YY;
  • YXY \to X - однонаправленная в обратную сторону;
  • XYX \leftrightarrow Y - двунаправленная (обратная связь, feedback);
  • связи нет - ни в одну сторону H0H_0 не отвергается.

Двусторонняя картина - частый и важный результат: например, цены и объёмы торгов нередко причиняют друг друга. Когда переменных больше двух, причинность проверяют внутри векторной авторегрессии (VAR), где тест Грейнджера становится проверкой блока коэффициентов в системе уравнений. В многомерном случае важно помнить: значимость XYX \to Y при контроле прочих переменных модели и без контроля может различаться, поэтому состав VAR влияет на вывод так же, как и число лагов.

Где тест обманывает

Главная ловушка - общая скрытая причина. Если третий фактор ZZ влияет и на XX, и на YY с разными задержками, тест может показать «причинность» XYX \to Y, которой на деле нет: оба ряда просто отражают ZZ. Грейнджер-причинность не отличает прямую связь от опосредованной общим драйвером, если этот драйвер не включён в модель.

Два ряда растут синхронно из-за скрытого третьего фактора над ними: корреляция не означает причину
Два ряда растут синхронно из-за скрытого третьего фактора над ними: корреляция не означает причину

Вторая проблема - частота данных. Если истинное воздействие происходит быстрее, чем шаг измерения (внутри одного периода), тест его не увидит или перепутает направление. Третья - нестационарность, замаскированная под слабый тренд: она раздувает F и даёт ложные срабатывания. Поэтому вывод теста корректно формулировать осторожно: «по Грейнджеру», «в смысле предсказуемости», с указанием числа лагов и проверки стационарности.

Частые ошибки

  • Путают с настоящей причинностью. Грейнджер-причинность - про улучшение прогноза, а не про механизм. Формулируйте вывод как «помогает предсказывать», а не «вызывает».
  • Применяют к нестационарным рядам. Без проверки на единичный корень и приведения к стационарности тест даёт ложную причинность из-за общего тренда.
  • Берут произвольное число лагов. pp должно подбираться по AIC или BIC, а не «на глаз»; результат зависит от него и его обязательно указывают.
  • Проверяют только одну сторону. Без обратного теста легко пропустить обратную связь XYX \leftrightarrow Y и сделать однобокий вывод.
  • Игнорируют скрытую общую причину. Значимый тест между двумя рядами может объясняться третьим фактором, не включённым в модель.

FAQ

Чем причинность по Грейнджеру отличается от обычной причинности? Обычная причинность - про механизм воздействия. Грейнджер-причинность - про предсказуемость: прошлое XX статистически улучшает прогноз YY. Это необходимое, но не достаточное условие настоящей причины: тест может сработать и при общей скрытой причине, и наоборот - пропустить мгновенное воздействие.

Какие данные нужны для теста? Два стационарных временных ряда одинаковой длины с регулярным шагом и достаточным числом наблюдений (на практике хотя бы несколько десятков, чтобы хватило степеней свободы при выбранных лагах). Нестационарные ряды предварительно приводят к стационарности разностями или строят VECM при коинтеграции.

Что делать, если ряды нестационарны? Сначала тест Дики - Фуллера на единичный корень. Если ряды интегрированы одного порядка и коинтегрированы - тест на причинность строят на модели коррекции ошибок (VECM). Если просто нестационарны без коинтеграции - берут первые разности и работают с ними.

Коротко

Тест Грейнджера проверяет не настоящую причину, а улучшает ли прошлое одного ряда прогноз другого. Технически это F-тест между регрессией YY на собственные лаги и регрессией YY на собственные лаги плюс лаги XX: значимая совместная значимость лагов XX (p-value<αp\text{-value} < \alpha) означает причинность по Грейнджеру. Обязательны стационарность рядов, обоснованный выбор числа лагов и проверка в обе стороны, а вывод формулируют осторожно - в смысле предсказуемости, помня про риск общей скрытой причины.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также