我正在尝试在Python中复制以下R代码
set.seed(1)
x<-w<-rnorm(100)
for (t in 2:100) x[t] = 0.6 * x[t-1] + w[t]
x.ar = ar(x, method="mle")
x.ar$ar
[1] 0.5231187
在python中我有以下代码。
import scipy.stats as stats
import matplotlib.pylab as plt
import statsmodels.tsa.ar_model as ar_model
x = w = stats.norm.rvs(loc=0, scale=1, size=100)
for i in range(1,100):
x[i] = 0.6* x[i-1] + w[i]
ar = ar_model.AR(x)
model_ar = ar.fit(method='mle')
print(model_ar.params)
[ 9.26969930e-04 8.58915676e-01 2.74538400e+00 -1.49505968e+00
-3.47150385e+00 9.64130378e-02 2.68088493e+00 1.64061441e+00
-1.38189445e+00 -1.65265872e+00 6.33895141e-01 5.68494490e-01
-2.23487269e-01]
在python中它似乎适合13阶模型。如何使其适合最简单的模型?
答案 0 :(得分:2)
请参阅docs:对于statsmodels.tsa.ar_model.AR.fit()
,您可以选择信息标准(参数ic
)来确定滞后数量:
用于选择最佳滞后长度的标准。 aic - Akaike 信息准则bic - Bayes信息准则t-stat - 基于 最后滞后hqic - Hannan-Quinn信息准则如果有的话 选择信息标准,导致滞后长度 选择最低值。如果是t-stat,则模型以maxlag和 降低延迟,直到最高滞后具有显着的t-stat 95%的水平。
或提供maxlag
值。如果缺少后者,statsmodels
会使用默认round(12*(nobs/100.)**(1/4.))
来确定要使用的延迟数。