Thursday, January 20, 2011

Курицы, яйца, причинный тест Грейнджера или кто был первым?

Что было раньше, яйцо или курица?

Несмотря на продолжающиеся и по сей день дебаты, ответ на этот вопрос был дан математиками Вальтером Турманом и Марком Фишером в 1988 году. В своей работе "Chickens, Eggs, and Causality, or Which Came First?" используя аппарат математической статистики, они доказали, что яйца были раньше. Однако с тех пор прошло больше 20 лет, курицы и яйца могли измениться...

На самом деле, эта статья конечно же не о курицах и яйцах, а о причинно-следственном тесте Грейнджера. В статистике и эконометрике этот тест используется для проверки причинно-следственных гипотез. Особенно часто этот тест применяется с временными данными, такими как котировки акций на бирже. В прошлом году я писал о том как предсказываются котировки на бирже с помощью твиттера, в своей работе авторы использовали именно вероятностный тест Грейнджера, для обоснования и подтверждения своей гипотезы. Именно поэтому, я решил вернуться и разобрать эту тему в деталях.



Итак, идея теста Грейнджера проста, предположим, что у нас есть две изменяющиеся во времени величины X и Y. Мы говорим, что величина X является Грейнджер-причиной для Y если значения X в прошлом помогают предсказать будущие значения Y. Это проверяется через линейную регрессию значений Y на прошлых значениях X и Y.
Иными словами, мы представляем значения Y в виде:

Yi = μi + ∑αkYi-k + ∑βkXi-k + εi

где, Yi - значение переменной Y в момент времени i
Xi - значение переменной X в момент времени i
k - временная задержка. Она определяет, влияние какой давности мы хотим проверить.

Если в полученной регрессии, коэффициентами βk можно пренебречь, то считается, что прошлые значения X не помогают предсказывать Y и, стало быть, X не является причиной по-Грейнджеру для Y. И наоборот, если в данном выражении коэффициенты βk статистически значимы и ими пренебречь нельзя, то мы считаем что X является причиной по-Грейнджеру для Y.

Здесь я не буду вдаваться в математику, она детально описана в любой книге по статистике или эконометрике. Сразу перейду к практическому применению: на практике регрессия проводится методом наименьших квадратов, после чего, для коэффициентов βk оценивается F-статистика. Если соответствующее P-значение меньше выбранного уровня значимости, то коэффициентами βk пренебречь нельзя и мы считаем, что Y зависит от X.

Аналогичный тест можно проделать в обратную сторону, чтобы проверить, не существует ли причинно-следственная связь между прошлыми значениями Y и будущими значениями X.

А теперь, вернемся, собственно к яйцам и курицам. В своей работе Турман и Фишер использовали данные о производстве яиц и количестве куриц-несушек в США с 1930 по 1986 годы. Логично, что если резко растет количество яиц то вскоре должно вырасти количество несушек, если резко растет количество куриц, то скоро должно вырасти и количество производимых ими яиц и, соответственно, наоборот если количество тех или других сокращается. На основании этих данных, проведя вероятностный тест Грейнджера, Турман и Фишер и сделали выводы о том, что яйца предшествуют курицам.

В моем распоряжении оказались данные с 1930 по 2006 год и я решил проверить, что же изменилось с тех пор. Для этого было проведено два теста, один на основе данных до 80-года, а второй на основе данных с 1980 до 2006 года.

Результаты для первого периода времени (1930-1980):
Сначала проверим, были ли первыми курицы? Для этого строится линейная регрессия выражения:
Яйцаi = μi + ΣαlЯйцаi-l + ΣβlКурицыi-l + εi

Лаг lF-statisticsP-valueR2
1 0.10066 0.75244 0.96374
2 1.80463 0.17650 0.97185
3 1.11190 0.35531 0.97167
4 0.83738 0.51006 0.96915

Из результатов видно, что P-значения достаточно велики, стало быть гипотезу о том, что количество куриц в прошлом может быть использовано для предсказания количества яиц в будущем следует отвергнуть.
Проверим теперь обратную версию. Были ли первыми яйца? Снова строим регрессию но уже другого выражения:
Курицыi = μi + ΣαlКурицыi-l + ΣβlЯйцаi-l + εi

Лаг F-statisticsP-valueR2
1 0.84340 0.36311 0.71301
2 9.64019 0.00033 0.79859
3 5.50405 0.002850.80759
4 4.64016 0.00378 0.81962

Здесь ситуация обратная, P-значения малы, стало быть мы принимаем гипотезу о том, что яйца являются причиной по-Грейнджеру для куриц.

Эти результаты очень хорошо согласуются с работой Турмана и Фишера и если сформулировать вывод кратко, то получается, что яйца были раньше курицы. Теперь посмотрим, что изменилось с тех пор.

Результаты аналогичного теста с 1980 по 2006 годы.

Были ли первыми курицы?
Лаг F-statisticsP-valueR2
1 0.13160 0.72008 0.97621
2 12.11797 0.00035 0.99118
3 10.98387 0.00030 0.99430
4 5.62075 0.00651 0.99473

Были ли первыми яйца?
Лаг F-statisticsP-valueR2
1 4.55260 0.04375 0.94914
2 2.29759 0.12641 0.95418
3 1.85629 0.17534 0.96130
4 0.57575 0.68488 0.95997

Мы видим, что результаты зеркально противоположны! То есть мы можем утверждать, что курицы нынче появляются раньше яиц. Как и Турман, я не берусь интерпретировать результат и особенно произошедшее изменения, этим пусть занимаются ученые биологи. Но на вопрос кто появился раньше, курица или яйцо, теперь буду давать однозначный ответ: "с 1980 года раньше по-Грейнджеру являются курицы" :)

В этой заметке я нарочно умолчал о том, как провести этот тест и что значат цифры в таблицах. В следующий раз я в деталях расскажу о его реализации на Java, самые же нетерпеливые могут заглянуть в исходный код теста Грейнджера и посмотреть пример работы для куриц и яиц
Данные о курицах-несушках и производстве яиц в США можно взять тут.

4 comments:

  1. Спасибо, достаточно просто, но не примитивно. (Экономисту уловить смысл удалось :-D)

    ReplyDelete
  2. Спасибо за статью! Интересно, а почему используется именно регрессия на старые значения. А если, например, считать корреляцию со старыми значениями, то это что-то даст? Просто разбираюсь с темой причинно-следственных связей.

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. > grangertest(chic~egg, order=2, data=mydata)
    Granger causality test

    Model 1: chic ~ Lags(chic, 1:2) + Lags(egg, 1:2)
    Model 2: chic ~ Lags(chic, 1:2)
    Res.Df Df F Pr(>F)
    1 70
    2 72 -2 9.9825 0.0001534 ***
    ---
    Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    У вас где-то ошибка, P-value < 5% следовательно яйца являются Грейнджер причиной куриц.)) Турман и Фишер не ошибались

    ReplyDelete