Comment effectuer un test Ljung-Box en Python
Le test de Ljung-Box est un test statistique qui vérifie s’il existe une autocorrélation dans une série temporelle.
Il utilise les hypothèses suivantes :
H 0 : Les résidus sont distribués indépendamment.
H A : Les résidus ne sont pas distribués indépendamment ; ils présentent une corrélation en série.
Idéalement, nous aimerions ne pas rejeter l’hypothèse nulle. Autrement dit, nous aimerions que la valeur p du test soit supérieure à 0,05, car cela signifie que les résidus de notre modèle de série chronologique sont indépendants, ce qui est souvent une hypothèse que nous faisons lors de la création d’un modèle.
Ce tutoriel explique comment effectuer un test Ljung-Box en Python.
Exemple : test Ljung-Box en Python
Pour réaliser le test Ljung-Box sur une série de données en Python, on peut utiliser la fonction acorr_ljungbox() de la bibliothèque statsmodels qui utilise la syntaxe suivante :
acorr_ljungbox(x, décalages=Aucun)
où:
- x : la série de données
- lags : Nombre de décalages à tester
Cette fonction renvoie une statistique de test et une valeur p correspondante. Si la valeur p est inférieure à un certain seuil (par exemple α = 0,05), vous pouvez rejeter l’hypothèse nulle et conclure que les résidus ne sont pas distribués indépendamment.
Le code suivant montre comment utiliser cette fonction pour effectuer le test Ljung-Box sur l’ensemble de données statsmodels intégré appelé « 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
La statistique du test est de 107,86488 et la valeur p du test est de 1,157710e-21 , ce qui est bien inférieur à 0,05. Ainsi, nous rejetons l’hypothèse nulle du test et concluons que les résidus ne sont pas indépendants.
Notez que nous avons choisi d’utiliser une valeur de décalage de 5 dans cet exemple, mais vous pouvez choisir n’importe quelle valeur que vous souhaitez utiliser pour le décalage. Par exemple, nous pourrions plutôt utiliser une valeur de 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
La statistique de test du test est 343,634016 et la valeur p du test est 9,117477e-61 , ce qui est bien inférieur à 0,05. Ainsi, nous rejetons une nouvelle fois l’hypothèse nulle du test et concluons que les résidus ne sont pas indépendants.
En fonction de votre situation particulière, vous pouvez choisir une valeur inférieure ou supérieure à utiliser pour le décalage.