Як виконати тест причинності грейнджера в python
Тест причинності Грейнджера використовується для визначення того, чи корисний один часовий ряд для прогнозування іншого.
Цей тест використовує такі нульові та альтернативні гіпотези:
Нульова гіпотеза (H 0 ): часовий ряд x не викликає часовий ряд y до Грейнджера
Альтернативна гіпотеза ( HA ): часовий ряд x часовий ряд Ґрейнджера викликає y
Термін «причини Грейнджера» означає, що знання значення часового ряду x з певним лагом є корисним для прогнозування значення часового ряду y на пізніший період.
Цей тест створює статистику F-критерію з відповідним p-значенням . Якщо p-значення нижче певного рівня значущості (тобто α = 0,05), тоді ми можемо відхилити нульову гіпотезу та зробити висновок, що у нас є достатньо доказів, щоб стверджувати, що часовий ряд x Грейнджер викликає часовий ряд y.
Ми можемо використати функцію grangercausalitytests() із пакету statsmodels для виконання тесту Granger-Causality у 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/Statology/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