【问题标题】:variable size rolling window regression可变大小滚动窗口回归
【发布时间】:2013-07-01 06:53:36
【问题描述】:

在 Pandas OLS 中,窗口大小是固定长度。如何实现基于索引而不是行数设置窗口大小?

我有一个系列,其中每天有可变数量的观察,我有 10 年的数据历史,所以我想在 1 年的滚动窗口上运行滚动 OLS。循环遍历每个日期有点太慢了,无论如何让它更快?这是数据的示例。

  Date     x      y
2008-1-2  10.0    2
2008-1-2  5.0     1
2008-1-3  7.0   1.5
2008-1-5  9.0   3.0
...
2013-5-30 11.0  2.5

我想要像pandas.ols(df.y, df.x, window='1y') 这样简单的东西,而不是循环每一行,因为循环会很慢。

【问题讨论】:

    标签: pandas


    【解决方案1】:

    在 pandas 中有执行此操作的方法,请参阅文档 http://pandas.pydata.org/pandas-docs/dev/computation.html#computing-rolling-pairwise-correlations

    model = pandas.ols(y=df.y, x=df.x, window=250)
    

    您只需提供您的周期是帧上的间隔数而不是“1y”。还有许多其他选项可能对您的数据有用。

    所有滚动 ols 统计信息都在 model

    model.beta.plot()
    

    显示滚动测试版

    【讨论】:

    • 这不是正确的答案。我知道这个函数,但这个函数不能像我描述的那样工作,因为在我的例子中,滚动窗口的大小可能每天都不同(一天中的观察点比另一天多)。
    • 理解...虽然这在数学上是否有意义.. 我猜想在某些时候有更多的样本点(在时间上紧密分组)并不会使那个时期比只有 1 个样本的时期更重要?
    • 根据您的数据对先前评论的适用性,您可以使用重新采样到固定周期...如果您将其提供给 ols,则绝对不会填充空白
    • 是的,这就是我所做的(确保每天都有相同数量的观察)。唯一的问题是为了保证准确性,重新采样的数据必须等于滚动窗口均值的均值,这是一个缓慢的过程。这就是为什么我认为如果有办法按索引指定窗口,那将是可取的。
    • 从 pandas 文档看来,没有手动切片/迭代的方法可以做到这一点,我使用生成器来做类似的事情(mith 矩阵 alegra),但显然会影响性能。让我们看看是否有人有办法强制使用 pandas 方法。
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2017-11-29
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多