import pandas as pd
import numpy as np
import statsmodels.tsa.api as smt
import pandas_datareader.data as web
start = '2007-01-01'
end = '2015-01-01'
get_px = lambda x: web.DataReader(x, 'yahoo', start=start, end=end)['Adj Close']
symbols = ['SPY','TLT','MSFT']
# raw adjusted close prices
data = pd.DataFrame({sym:get_px(sym) for sym in symbols})
# log returns
lrets = np.log(data/data.shift(1)).dropna()
# Select best lag order for MSFT returns
max_lag = 30
mdl = smt.AR(lrets.MSFT).fit(maxlag=max_lag, ic='aic', trend='nc')
est_order = smt.AR(lrets.MSFT).select_order(maxlag=max_lag, ic='aic', trend='nc')
print('best estimated lag order = {}'.format(est_order))
print mdl.params
出力はこれになります。statsmodels select_order関数がARモデルのparamsと異なるのはなぜですか?
best estimated lag order = 23
L1.MSFT -0.075405
L2.MSFT -0.067423
L3.MSFT 0.031371
L4.MSFT -0.063610
L5.MSFT -0.045080
L6.MSFT -0.001510
L7.MSFT -0.051875
L8.MSFT -0.015192
L9.MSFT -0.018665
L10.MSFT 0.044720
L11.MSFT 0.041655
L12.MSFT 0.034231
L13.MSFT -0.042473
L14.MSFT -0.008583
L15.MSFT 0.022171
L16.MSFT 0.009983
L17.MSFT 0.038606
L18.MSFT -0.073060
dtype: float64
ここでの問題はstatsmodelsあなたはパラメータをチェックするときにのみ18のパラメータがあり、ARモデルのための理想的な遅れが23であると判断したにもかかわらず、ということです。それは同じではありませんか? "select_order"からの注文の数がparameters配列の長さよりも小さい場合はおそらく意味があります。この場合、AIC基準を使用して、「select_order」が理想的な遅れ注文を決定することを理解します。
誰かが理由を説明できますか?実際には23が理想的な遅れ秩序であると仮定すると、ここでは最大18のパラメータしか得られないので、追加の5つのパラメータはどのようにして得られますか?
コードには、デフォルトの 'method'は' 'cmle''と' 'select_order''の' 'mle''と異なります。同じメソッド引数で試してください。 – user333700