【发布时间】:2017-07-01 14:19:47
【问题描述】:
我正在对几个(约 500 个)时间序列执行 ADF 测试以测试平稳性。所以我需要一种定量的方法来为每个人选择正确的滞后数。一种可能的方法是使用我的样本的 80% 进行测试并获取其中的回归参数并计算 ssr(回归平方和)并搜索最小值。但是,这可能会导致过度拟合,为了避免这种情况,可以将此回归应用于剩余的 20% 并计算此子样本的 ssr。导致第二个 ssr 最小值的滞后数应该是正确的。
问题在于 statsmodels 文档并不完整(至少对于像我这样的新手来说!)。例如,给定行
res = ts.adfuller(dUs, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True)
回归系数存储在 res[3].resols.params 但顺序未知。我不得不请某人对我在 R 中的一个时间序列进行测试(它为您提供了使用的公式和相应的系数,例如
R-output)。
参数的 Python 顺序似乎是(对于“ct”回归)滞后 1、滞后差异 1、滞后差异 2、...滞后差异 N、截距、时间趋势。然后,我使用以下代码重新构建拟合序列:
xFit[0:max_lag_ + 1] = dUs[0:max_lag_ + 1]
for i in range (max_lag_ + 1,xFit.size):
xFit[i] = xFit[i-1] + res[3].resols.params[0] * xFit[i-1] + res[3].resols.params[res[3].resols.params.size - 2] + res[3].resols.params[res[3].resols.params.size - 1] * t[i]
for j in range(1,max_lag_ +1):
xFit[i] = xFit[i] + res[3].resols.params[j] * lag[i-1-j]
请注意,滞后变量是由我的 dUs 变量构造的,如下所示
lag = dUs[1:]-dUs[:-1]
问题是 xFit 系列和 res[3].resols.fittedvalues 是不同的!我认为这可能与我对第一个 max_lag_ 数据点的初始化有关(实际上,请注意 res[3].resols.fittedvalues 比原始系列短 max_lag_ + 1):我选择它们是相等的到原系列。但我无法弄清楚到底发生了什么。 xFit 和 res[3].resols.params 之间的区别是巨大的: time-series-comparison。另请注意,增加滞后数会使我的拟合更好地达到某个值,然后系列爆炸。拟合值不会发生这种情况!
作为最终测试,我在 xFit 上运行了 ADF 测试;我知道这应该导致我已经得到的 res[3].resols.params 。
鉴于行
res2 = ts.adfuller(xFit, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True)
res2[3].resols.params 的输出是
[ -1.60231256e+00 4.23814175e-02 -4.15837300e-02 4.99642618e-02 -6.92483339e+02 3.89141878e+00]
而 res[3].resols.params 是
[ -1.29269094e+00 2.11857016e-02 -5.82679110e-02 -2.09614163e-02 -5.44413351e+02 2.69502722e+00]
我知道你们中的许多人会建议迁移到 R,但是,a)我从未使用过它(虽然我可以学习)并且 b)在工作中安装软件并不容易,它可能会花费我很多宝贵的时间时间。
有什么想法吗?我遗漏了什么错误?
提前致谢,
C
【问题讨论】:
标签: python statsmodels