如何在Pandas中使用滚动OLS模型接口?

3 投票
1 回答
4732 浏览
提问于 2025-04-18 02:56

我想要校准一个叫做 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 的使用方法。我希望如果我理解了 Movingrolling 的部分,就能得到两个 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 时,我也会遇到索引超出范围的错误。

撰写回答