Rozszerzony test dickey-fuller w pythonie (z przykładem)
Szereg czasowy nazywa się „stacjonarnym”, jeśli nie ma trendu, wykazuje stałą wariancję w czasie i ma stałą strukturę autokorelacji w czasie.
Jednym ze sposobów sprawdzenia, czy szereg czasowy jest stacjonarny, jest wykonanie rozszerzonego testu Dickeya – Fullera , w którym wykorzystuje się następujące hipotezy zerowe i alternatywne:
H 0 : Szereg czasowy jest niestacjonarny. Innymi słowy, jego struktura zależy od czasu, a jego zmienność nie jest stała w czasie.
H A : Szereg czasowy jest stacjonarny.
Jeśli wartość p testu jest poniżej pewnego poziomu istotności (np. α = 0,05), wówczas możemy odrzucić hipotezę zerową i stwierdzić, że szereg czasowy jest stacjonarny.
Poniższy przykład pokazuje krok po kroku, jak wykonać rozszerzony test Dickeya-Fullera w Pythonie dla danego szeregu czasowego.
Przykład: rozszerzony test Dickeya-Fullera w Pythonie
Załóżmy, że mamy w Pythonie następujące dane szeregów czasowych:
data = [3, 4, 4, 5, 6, 7, 6, 6, 7, 8, 9, 12, 10]
Przed wykonaniem rozszerzonego testu Dickeya-Fullera na danych możemy stworzyć szybki wykres w celu wizualizacji danych:
import matplotlib. pyplot as plt plt. plot (data)
Aby wykonać rozszerzony test Dickeya-Fullera, możemy użyć funkcji adfuller() z biblioteki statsmodels . Najpierw musimy zainstalować statsmodels:
pip install statsmodels
Następnie możemy użyć następującego kodu, aby wykonać rozszerzony test Dickeya-Fullera:
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)
Oto jak interpretować najważniejsze wartości wyniku:
- Statystyka testowa: -0,97538
- Wartość P: 0,7621
Ponieważ wartość p jest nie mniejsza niż 0,05, nie możemy odrzucić hipotezy zerowej.
Oznacza to, że szereg czasowy nie jest stacjonarny. Innymi słowy, jego struktura jest zależna od czasu i jej zmienność nie jest stała w czasie.
Dodatkowe zasoby
Jak wykreślić szereg czasowy w Matplotlib
Jak wykreślić wiele serii z ramki danych Pandas
Jak wykonać test trendu Manna-Kendalla w Pythonie