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.

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *