【发布时间】:2015-05-08 16:48:22
【问题描述】:
几天前我问了this 问题,但没有得到任何答复。所以我自己动手做滚动窗口。我对回归预测的有限掌握阻碍了我的进步。
但我想做的是根据截至时间 t-255(周期开始)的可用信息对未来 n 天进行预测,然后根据来自t - 255 + n(直到周期结束),例如如果 n = 5,则窗口应产生 255 到 250 的预测,下一个窗口在 250 到 245 等。
from harrv import mdl, df
import scipy as sp
import pandas as pd
import numpy as np
b0, b1, b2, b3 = mdl.params[0], mdl.params[1], mdl.params[2], mdl.params[3]
rv1, rv5, rv22, mu = df.RV1, df.RV5, df.RV22, b0
walk = sp.stats.invgauss.rvs(mu, size = len(rv1))
pre, p = [], []
def window(seq, n):
"""
seq -> the sequence over which prediction should be performed
a rolling window function to calculate n-step ahead prediction"""
for i in reversed(xrange(0, len(seq))):
for j in range(1, n):
pre = b0 + rv1[i] * b1**j + rv5[i] * b2**j + rv22[i] * b3**j + walk[i]
p.append(pre)
i = i + n
return p
其中 mdl 是我的 HAC-OLS 估计的 HAR-RV 模型,参数为 params,我不希望随机噪声有太大的影响,所以我将它的 MU 设置为截距,它非常小。 我不确定我现在是否也这样做,而且更紧迫的是,我不能选择大于 2 的 n 值,因为当我这样做时,这表明:
predi = window(rv1, 4)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-480-bbee880e0682> in <module>()
----> 1 predi = window(rv1, 4)
/Users/NiklasLindeke/Python/window_analysis.py in window(seq, n)
17 for i in reversed(xrange(0, len(seq))):
18 for j in range(1, n):
---> 19 pre = b0 + rv1[i] * b1**j + rv5[i] * b2**j + rv22[i] * b3**j + walk[i]
20 p.append(pre)
21 i = i + n
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/series.pyc in __getitem__(self, key)
512 def __getitem__(self, key):
513 try:
--> 514 result = self.index.get_value(self, key)
515
516 if not np.isscalar(result):
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/core/index.pyc in get_value(self, series, key)
1458
1459 try:
-> 1460 return self._engine.get_value(s, k)
1461 except KeyError as e1:
1462 if len(self) > 0 and self.inferred_type in ['integer','boolean']:
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:3113)()
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2844)()
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)()
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/hashtable.so in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:7255)()
/Users/NiklasLindeke/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas/hashtable.so in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:7193)()
KeyError: 259
然而,当我在第一个 for 循环的末尾使用 i = i + n 时,错误消失了,但是当我这样做时,p 中附加了更多内容。
我现在对如何做到这一点没有任何想法。
【问题讨论】:
-
你到底想在这里做什么?如果您想计算每天、每周等的预测,您应该在外循环中将 I 加一(这似乎是您尝试做的)。当你每天计算对未来的所有预测时,你自然会得到很多 P。现在在内部循环中使用 I+N,您最终会指向变量 RVx 或 walk 的大小。
-
请参阅编辑,对我的目标进行更具体的描述。
-
您是否尝试使用“pre = ...”行创建一个数组?我不知道您拥有的数据类型,但在我看来您创建了一个整数。这看起来很奇怪,因为您从定义 pre = [] 开始,但基本上稍后重新定义它。此外,您的索引已关闭您的内部循环为 I 添加了不同的值,并且这些值在外部循环中持续存在,可能导致索引出错(太高)。
-
第一个预测是 b0,第二个预测是 rv1[i]*b1**j 等等?我不熟悉您所指的 HAC-xx 方法,但对我来说对所有预测使用相同的 I 值似乎很奇怪(为什么不 i+j?)。
-
第一个预测是方程加上一个噪声项,因为 j 从 1 开始。我不能让它假设任何附加信息。当它在 i 的某个级别开始预测时,它需要根据直到时间 i 的可用信息提前生成 n 个预测,并沿着序列移动直到下一个适当的步进点,即 i + n。跨度>
标签: python regression forecasting