8

R (3.3.1) の予測パッケージ (7.3) と Python (3.5.2) の統計モデル (0.8) の間で SARIMAX フィッティング結果を比較しています。

Rコードは次のとおりです。

    library(forecast)
    data("AirPassengers")
    Arima(AirPassengers, order=c(2,1,1), seasonal=list(order=c(0,1,0), 
    period=12))$aic
    [1] 1017.848

Python コードは次のとおりです。

    from statsmodels.tsa.statespace import sarimax
    import pandas as pd
    AirlinePassengers = 
    pd.Series([112,118,132,129,121,135,148,148,136,119,104,118,115,126,
              141,135,125,149,170,170,158,133,114,140,145,150,178,163,                       
              172,178,199,199,184,162,146,166,171,180,193,181,183,218,
              230,242,209,191,172,194,196,196,236,235,229,243,264,272,
              237,211,180,201,204,188,235,227,234,264,302,293,259,229,
              203,229,242,233,267,269,270,315,364,347,312,274,237,278,
              284,277,317,313,318,374,413,405,355,306,271,306,315,301,
              356,348,355,422,465,467,404,347,305,336,340,318,362,348,
              363,435,491,505,404,359,310,337,360,342,406,396,420,472,
              548,559,463,407,362,405,417,391,419,461,472,535,622,606,
              508,461,390,432])
    AirlinePassengers.index = pd.DatetimeIndex(end='1960-12-31', 
                              periods=len(AirlinePassengers), freq='1M')
    print(sarimax.SARIMAX(AirlinePassengers,order=(2,1,1),
          seasonal_order=(0,1,0,12)).fit().aic)

次のエラーがスローされます: ValueError: Non-stationary starting autoregressive parameters found with enforce_stationarityset to True.

enforce_stationarity (およびこれも必要な enforce_invertibility) を False に設定すると、モデルの適合は機能しますが、AIC は非常に貧弱です (>1400)。

ARIMA(0,1,1)(0,0,1)[12] など、同じデータに他のモデル パラメーターを使用すると、Python で定常性と可逆性のチェックを有効にして、R と Python から同じ結果を得ることができます。

私の主な質問は次のとおりです: 一部のモデル パラメーターの動作の違いは何によって説明されますか? statsmodels の可逆性チェックは、予測の Arima とは異なり、他の方法は「より正確」ですか?

また、statsmodels の可逆性計算バグの修正に関連するプル リクエストを見つけました: https://github.com/statsmodels/statsmodels/pull/3506

Github の最新のソース コードを使用して statsmodels を再インストールした後も、上記のコードで同じエラーが発生しますが、enforce_stationarity=False および enforce_invertibility=False を設定すると、R の場合よりも低い約 1010 の aic が得られます。しかし、モデルのパラメーターも大きく異なります。

4

0 に答える 0