如何在Pandas中使用滚动OLS模型接口?
我想要校准一个叫做 MovingOLS 的模型,但总是收到错误信息。
IndexError: index -1 is out of bounds for axis 0 with size 0
我用来训练 MovingOLS 的数据框架如下:
x1 y x2
0 1 1 1
1 2 2 2
2 3 3 3
带有代码
model = pandas.stats.ols.MovingOLS(y = df['y'], x=df[['x1', 'x2']], window_type='rolling', window=2, min_periods=2)
这个模型非常简单,因为我只是想熟悉一下 MovingOLS
的使用方法。我希望如果我理解了 Moving
和 rolling
的部分,就能得到两个 OLS 模型。
我想知道有没有好的资料可以参考,因为我在网上找不到关于 Rolling OLS/MovingOLS
API 的详细文档或教程。
顺便提一下,库的版本是 0.11.0。
谢谢!
1 个回答
3
我认为这个问题是因为参数 K 的数量大于观察值 N 的数量。pandas 中的 movingOLS 会添加一个截距项。你现在是用 2 个观察值来估计 3 个参数。
如果你增加一些数据行,让你的滚动窗口变大,这样就应该可以正常工作了。例如,设置窗口为 4:
df=pd.DataFrame({'y': [1,2,3,4,5,6],
'x1' : [3,4,6,7,10,12],
'x2' : [2,7,4,9,3,15]})
print df
x1 x2 y
0 3 2 1
1 4 7 2
2 6 4 3
3 7 9 4
4 10 3 5
5 12 15 6
print pd.stats.ols.MovingOLS(y = df['y'], x=df[['x1', 'x2']],
window_type='rolling',
window=4, min_periods=4)
-------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <x1> + <x2> + <intercept>
Number of Observations: 4
Number of Degrees of Freedom: 3
R-squared: 0.9777
Adj R-squared: 0.9331
Rmse: 0.3339
F-stat (2, 1): 21.9240, p-value: 0.1493
Degrees of Freedom: model 2, resid 1
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
x1 0.4319 0.0850 5.08 0.1237 0.2653 0.5984
x2 0.0262 0.0425 0.62 0.6483 -0.0572 0.1096
intercept 0.5180 0.6415 0.81 0.5675 -0.7392 1.7753
---------------------------------End of Summary---------------------------------
当我把窗口设置为 2 时,我也会遇到索引超出范围的错误。