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
输出就是这个。
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认为AR模型的理想滞后为23,但在检查参数时只有18个参数。不应该是一样的吗?如果“select_order”的顺序数小于参数数组的长度,则可能有意义。我理解“select_order”在这种情况下使用AIC标准来决定理想的滞后顺序。
有人可以解释原因吗?假设23确实是理想的滞后顺序,我如何获得额外的5个参数,因为我在这里最多只能获得18个参数?
答案 0 :(得分:1)
并非所有的23个滞后都有助于合适 - 如果它们为零,则会掉线而且不会计数。
答案 1 :(得分:0)
重点是maxlag就是这样; statsmodels的select_order方法可以选择最大滞后数作为最佳滞后数。如果select_order选择的最佳滞后数大于你的maxlag,则不必选择maxlag。它可以选择可能低于maxlag的第二个最佳滞后数。假设如果maxlag无限大,select_order将选择15.如果你的maxlag为10,则不必选择10作为最佳滞后数,因为它最接近理想数量为15.相反,它将调查可能的10滞后并解决问题;根据该数字不能超过10的约束,选择最佳滞后数。如果信息标准的条件比数字为10,那么这个数字很可能会变成7。