Как выполнить тест на причинность грейнджера в python
Тест причинности Грейнджера используется, чтобы определить, полезен ли один временной ряд для прогнозирования другого.
В этом тесте используются следующие нулевые и альтернативные гипотезы:
Нулевая гипотеза (H 0 ): временной ряд x не приводит к временному ряду y Грейнджеру.
Альтернативная гипотеза ( HA ): Временной ряд x Временной ряд причин Грейнджер y
Термин «причины Грейнджера» означает, что знание значения временного ряда x с определенной задержкой полезно для прогнозирования значения временного ряда y в более поздний период.
Этот тест дает статистику F-теста с соответствующим значением p . Если значение p ниже определенного уровня значимости (т. е. α = 0,05), то мы можем отвергнуть нулевую гипотезу и заключить, что у нас есть достаточно доказательств, чтобы утверждать, что временной ряд x Грейнджер вызывает временной ряд y.
Мы можем использовать функцию grangercausalitytests() из пакета statsmodels для выполнения теста Грейнджера-причинности в Python:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])
Обратите внимание, что maxlag указывает количество лагов, которые будут использоваться в первом временном ряду.
Следующий пошаговый пример показывает, как использовать эту функцию на практике.
Шаг 1. Загрузите данные
В этом примере мы будем использовать набор данных, содержащий значения количества произведенных яиц, а также количества кур в США с 1930 по 1983 год:
import pandas as pd #define URL where dataset is located url = "https://raw.githubusercontent.com/Statorials/Miscellaneous/main/chicken_egg.txt" #read in dataset as pandas DataFrame df = pd. read_csv (url, sep=" ") #view first five rows of DataFrame df. head () year chicken egg 0 1930 468491 3581 1 1931 449743 3532 2 1932 436815 3327 3 1933 444523 3255 4 1934 433937 3156
Связанный: Как читать файлы CSV с помощью Pandas
Шаг 2. Проведите тест причинно-следственной связи Грейнджера.
Далее мы воспользуемся функцией grangercausalitytests () , чтобы выполнить тест причинности Грейнджера, чтобы увидеть, является ли количество сделанных яиц прогнозирующим количеством будущего количества кур. Мы запустим тест, используя три смещения:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' chicken ', ' egg ']], maxlag=[ 3 ]) Granger Causality number of lags (no zero) 3 ssr based F test: F=5.4050, p=0.0030, df_denom=44, df_num=3 ssr based chi2 test: chi2=18.7946, p=0.0003, df=3 likelihood ratio test: chi2=16.0003, p=0.0011, df=3 parameter F test: F=5.4050, p=0.0030, df_denom=44, df_num=3
Статистика F-теста оказывается равной 5,405 , а соответствующее значение p — 0,0030 .
Поскольку значение p меньше 0,05, мы можем отвергнуть нулевую гипотезу теста и сделать вывод, что знание количества яиц полезно для прогнозирования будущего количества кур.
Шаг 3. Проведите тест на причинно-следственную связь Грейнджера в обратном порядке.
Хотя мы отвергли нулевую гипотезу теста, на самом деле возможно, что может возникнуть случай обратной причинно-следственной связи. Другими словами, возможно, что количество кур вызывает изменение количества яиц.
Чтобы исключить эту возможность, нам нужно выполнить обратный тест Грейнджера-причинности, используя кур в качестве предикторной переменной и яйца в качестве переменной ответа :
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' egg ', ' chicken ']], maxlag=[ 3 ]) Granger Causality number of lags (no zero) 3 ssr based F test: F=0.5916, p=0.6238, df_denom=44, df_num=3 ssr based chi2 test: chi2=2.0572, p=0.5606, df=3 likelihood ratio test: chi2=2.0168, p=0.5689, df=3 parameter F test: F=0.5916, p=0.6238, df_denom=44, df_num=3
Статистика F-теста оказывается равной 0,5916 , а соответствующее значение p — 0,6238 .
Поскольку значение p не меньше 0,05, мы не можем отвергнуть нулевую гипотезу. Другими словами, количество кур не предсказывает будущее количество яиц.
Таким образом, мы можем заключить, что знание количества яиц полезно для прогнозирования будущего количества кур.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи с временными рядами в Python:
Как создать график временных рядов в Seaborn
Как создать график временных рядов в Matplotlib