Jak wykonać test kpss w pythonie
Test KPSS można zastosować do ustalenia, czy szereg czasowy ma trend stacjonarny.
W teście tym wykorzystuje się następującą hipotezę zerową i alternatywną:
- H 0 : Szereg czasowy ma trend stacjonarny.
- H A : Szereg czasowy nie ma trendu stacjonarnego.
Jeżeli wartość p testu jest poniżej pewnego poziomu istotności (np. α = 0,05), wówczas odrzucamy hipotezę zerową i stwierdzamy, że szereg czasowy nie ma tendencji stacjonarnej.
W przeciwnym razie nie uda nam się odrzucić hipotezy zerowej.
Poniższe przykłady pokazują, jak wykonać test KPSS w Pythonie.
Przykład 1: Test KPSS w Pythonie (z danymi stacjonarnymi)
Najpierw utwórzmy fałszywe dane w Pythonie, z którymi będziemy mogli pracować:
import numpy as np
import matplotlib. pyplot as plt
#make this example reproducible
n.p. random . seed ( 1 )
#create time series data
data = np. random . normal (size= 100 )
#create line plot of time series data
plt. plot (data)
Możemy użyć funkcji kpss() z pakietu statsmodels , aby przeprowadzić test KPSS na danych szeregów czasowych:
import statsmodels. api as sm
#perform KPSS test
sm. tsa . stattools . kpss (data, regression=' ct ')
(0.0477617848370993,
0.1,
1,
{'10%': 0.119, '5%': 0.146, '2.5%': 0.176, '1%': 0.216})
InterpolationWarning: The test statistic is outside of the range of p-values available
in the look-up table. The actual p-value is greater than the p-value returned.
Oto jak zinterpretować wynik:
- Statystyka testu KPSS: 0,04776
- Wartość p: 0,1
- Parametr przesunięcia obcięcia: 1
- Wartości krytyczne przy 10% , 5% , 2,5% i 1%
Wartość p wynosi 0,1 . Ponieważ wartość ta jest nie mniejsza niż 0,05, nie można odrzucić hipotezy zerowej testu KPSS.
Oznacza to, że możemy założyć, że szereg czasowy ma trend stacjonarny.
Uwaga 1 : Wartość p jest w rzeczywistości nadal większa niż 0,1, ale najniższa wartość, jaką wygeneruje funkcja kpss() to 0,1.
Uwaga 2 : Należy użyć argumentu regression=’ct’ , aby określić, że hipoteza zerowa testu zakłada, że dane mają trend stacjonarny.
Przykład 2: Test KPSS w Pythonie (z danymi niestacjonarnymi)
Najpierw utwórzmy fałszywe dane w Pythonie, z którymi będziemy mogli pracować:
import numpy as np
import matplotlib. pyplot as plt
#make this example reproducible
n.p. random . seed ( 1 )
#create time series data
data =np. array ([0, 3, 4, 3, 6, 7, 5, 8, 15, 13, 19, 12, 29, 15, 45, 23, 67, 45])
#create line plot of time series data
plt. plot (data)
Ponownie możemy użyć funkcji kpss() z pakietu statsmodels , aby przeprowadzić test KPSS na danych szeregów czasowych:
import statsmodels. api as sm
#perform KPSS test
sm. tsa . stattools . kpss (data, regression=' ct ')
(0.15096358910843685,
0.04586367574296928,
3,
{'10%': 0.119, '5%': 0.146, '2.5%': 0.176, '1%': 0.216})
Oto jak zinterpretować wynik:
- Statystyka testu KPSS: 0,1509
- Wartość p: 0,0458
- Parametr przesunięcia obcięcia: 3
- Wartości krytyczne przy 10% , 5% , 2,5% i 1%
Wartość p wynosi 0,0458 . Wartość ta jest mniejsza niż 0,05, więc odrzucamy hipotezę zerową testu KPSS.
Oznacza to, że szereg czasowy nie jest stacjonarny.
Uwaga : Pełną dokumentację funkcji kpss() można znaleźć w pakiecie statsmodels tutaj .
Dodatkowe zasoby
Poniższe samouczki zawierają dodatkowe informacje na temat pracy z danymi szeregów czasowych w języku Python:
Jak wykonać rozszerzony test Dickeya-Fullera w Pythonie
Jak wykonać test trendu Manna-Kendalla w Pythonie
Jak wykreślić szereg czasowy w Matplotlib