Python で ljung-box テストを実行する方法
Ljung-Box 検定は、時系列に自己相関があるかどうかを確認する統計検定です。
以下の仮定を使用します。
H 0 :残差は独立して分布されます。
H A :残差は独立して分配されません。それらは連続相関を示します。
理想的には、帰無仮説を棄却しないことが望ましいです。つまり、検定の p 値を 0.05 より大きくする必要があります。これは、時系列モデルの残差が独立していることを意味するためです。これは、モデルを作成するときによく想定されることです。
このチュートリアルでは、Python で Ljung-Box テストを実行する方法を説明します。
例: Python での Ljung-Box テスト
Python でデータ系列に対して Ljung-Box テストを実行するには、次の構文を使用するstatsmodelsライブラリのacorr_ljungbox()関数を使用できます。
acorr_ljungbox(x, オフセット=なし)
金:
- x:データ系列
- lags:テストするラグの数
この関数は検定統計量と対応する p 値を返します。 p 値が特定のしきい値 (例: α = 0.05) を下回る場合、帰無仮説を棄却し、残差が独立して分布していないと結論付けることができます。
次のコードは、この関数を使用して、「SUNACTIVITY」という組み込みの statsmodels データセットに対して Ljung-Box テストを実行する方法を示しています。
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
検定統計量は107.86488 、検定 p 値は1.157710e-21で、0.05 よりもはるかに小さくなります。したがって、検定の帰無仮説は棄却され、残差は独立していないと結論付けられます。
この例ではオフセット値 5 を使用することを選択していますが、オフセットに使用する任意の値を選択できることに注意してください。たとえば、代わりに値 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
検定の検定統計量は343.634016で、検定の p 値は9.117477e-61で、0.05 よりもはるかに小さくなります。したがって、検定の帰無仮説を再度棄却し、残差は独立していないと結論付けます。
特定の状況に応じて、オフセットに使用する低い値または高い値を選択できます。