1
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つのパラメータはどのようにして得られますか?

+0

コードには、デフォルトの 'method'は' 'cmle''と' 'select_order''の' 'mle''と異なります。同じメソッド引数で試してください。 – user333700

答えて

1

23のラグのすべてが適合に寄与しているわけではありません。ゼロの場合、落ちてしまい、カウントされません。

0

ポイントは、maxlagはそれだけです。 statsモデルのselect_orderメソッドが最良のラグ数として選択できるラグの最大数。 select_orderが選択するラグの最大数がmaxlagより大きい場合は、maxlagを選択する必要はありません。それは、maxlagよりも低いかもしれない遅れの2番目に良い数を選ぶかもしれない。 maxlagが無限大の場合、select_orderは15を選択すると仮定します。maxlagが10の場合、理想的な15の数値に最も近いラグの数として、10を選択する必要はありません。代わりに、 10は遅れて問題を解決します。その数が10を超えることができないという制約を受けて、最良の数のラグを選択する。情報の基準が10の場合よりも情報基準が良い場合、その数は非常によくなる。

関連する問題