Расширенный тест Дики-Фуллера в Python (с примером)


Временной ряд называется «стационарным», если он не имеет тренда, демонстрирует постоянную дисперсию во времени и имеет постоянную структуру автокорреляции во времени.

Один из способов проверить, является ли временной ряд стационарным, — это выполнить расширенный тест Дики-Фуллера , в котором используются следующие нулевая и альтернативная гипотезы:

H 0 : Временной ряд является нестационарным. Другими словами, он имеет некоторую структуру, зависящую от времени, и не имеет постоянной дисперсии во времени.

H A : временной ряд является стационарным.

Если p-значение из теста меньше некоторого уровня значимости (например, α = 0,05), то мы можем отвергнуть нулевую гипотезу и сделать вывод, что временной ряд является стационарным.

В следующем пошаговом примере показано, как выполнить расширенный тест Дики-Фуллера в Python для заданного временного ряда.

Пример: расширенный тест Дики-Фуллера в Python

Предположим, у нас есть следующие данные временного ряда в Python:

data = [3, 4, 4, 5, 6, 7, 6, 6, 7, 8, 9, 12, 10]

Прежде чем мы выполним расширенный тест Дики-Фуллера для данных, мы можем создать быстрый график для визуализации данных:

import matplotlib.pyplot as plt

plt.plot (data) 

Чтобы выполнить расширенный тест Дики-Фуллера, мы можем использовать функцию adfuller() из библиотеки statsmodels.Во-первых, нам нужно установить statsmodels:

pip install statsmodels

Затем мы можем использовать следующий код для выполнения расширенного теста Дики-Фуллера:

from statsmodels. tsa.stattools import adfuller

#perform augmented Dickey-Fuller test
adfuller(data)

(-0.9753836234744063,
 0.7621363564361013,
 0,
 12,
 {'1%': -4.137829282407408,
 '5%': -3.1549724074074077,
 '10%': -2.7144769444444443},
 31.2466098872313)

Вот как интерпретировать наиболее важные значения в выводе:

  • Статистика теста: -0,97538
  • P-значение: 0,7621

Поскольку p-значение не меньше 0,05, мы не можем отвергнуть нулевую гипотезу.

Это означает, что временной ряд является нестационарным. Другими словами, он имеет некоторую структуру, зависящую от времени, и не имеет постоянной дисперсии во времени.

Дополнительные ресурсы

Как построить временной ряд в Matplotlib
Как построить несколько рядов из фрейма данных Pandas
Как выполнить тест тренда Манна-Кендалла в Python