Jak wykonać test ljung-box w pythonie
Test Ljunga-Boxa jest testem statystycznym sprawdzającym, czy w szeregu czasowym występuje autokorelacja.
Wykorzystuje następujące założenia:
H 0 : Reszty rozkładają się niezależnie.
H A : Reszty nie są dystrybuowane niezależnie; wykazują korelację szeregową.
Idealnie byłoby, gdybyśmy nie odrzucali hipotezy zerowej. Oznacza to, że chcielibyśmy, aby wartość p testu była większa niż 0,05, ponieważ oznacza to, że reszty naszego modelu szeregów czasowych są niezależne, co często przyjmujemy przy tworzeniu modelu.
W tym samouczku wyjaśniono, jak wykonać test Ljung-Box w Pythonie.
Przykład: test Ljung-Boxa w Pythonie
Aby wykonać test Ljung-Box na serii danych w Pythonie, możesz użyć funkcji acorr_ljungbox() z biblioteki statsmodels , która używa następującej składni:
acorr_ljungbox(x, przesunięcia=Brak)
Złoto:
- x: seria danych
- opóźnienia: liczba opóźnień do przetestowania
Ta funkcja zwraca statystykę testową i odpowiadającą jej wartość p. Jeżeli wartość p jest poniżej pewnego progu (np. α = 0,05), można odrzucić hipotezę zerową i stwierdzić, że reszty nie mają rozkładu niezależnego.
Poniższy kod pokazuje, jak używać tej funkcji do wykonania testu Ljung-Boxa na wbudowanym zestawie danych modeli statystycznych o nazwie „SUNACTIVITY”:
import statsmodels.api as sm #load data series data = sm.datasets.sunspots.load_pandas().data #view first ten rows of data series data[:5] YEAR SUNACTIVITY 0 1700.0 5.0 1 1701.0 11.0 2 1702.0 16.0 3 1703.0 23.0 4 1704.0 36.0 #fit ARMA model to dataset res = sm. tsa . ARMA (data[" SUNACTIVITY "],(1,1)). fit (disp=-1) #perform Ljung-Box test on residuals with lag=5 sm. stats . acorr_ljungbox (res. resid , lags=[5], return_df= True ) lb_stat lb_pvalue 5 107.86488 1.157710e-21
Statystyka testowa wynosi 107,86488 , a wartość p testu wynosi 1,157710e-21 , czyli znacznie mniej niż 0,05. Zatem odrzucamy hipotezę zerową testu i stwierdzamy, że reszty nie są niezależne.
Pamiętaj, że w tym przykładzie zdecydowaliśmy się użyć wartości przesunięcia wynoszącej 5, ale możesz wybrać dowolną wartość, której chcesz użyć dla przesunięcia. Na przykład moglibyśmy zamiast tego użyć wartości 20:
#perform Ljung-Box test on residuals with lag=20 sm. stats . acorr_ljungbox (res. resid , lags=[20], return_df= True ) lb_stat lb_pvalue 20 343.634016 9.117477e-61
Statystyka testowa testu wynosi 343,634016 , a wartość p testu wynosi 9,117477e-61 , czyli znacznie mniej niż 0,05. Zatem po raz kolejny odrzucamy hipotezę zerową testu i stwierdzamy, że reszty nie są niezależne.
W zależności od konkretnej sytuacji możesz wybrać niższą lub wyższą wartość przesunięcia.