【问题标题】:Pandas rolling.corr returns only erroneous valuesPandas rolling.corr 仅返回错误值
【发布时间】:2020-11-24 09:20:08
【问题描述】:

希望这里有人可以帮助我,因为我似乎无法解决问题所在。

我有两个系列的数据,我正在尝试使用pandas [滚动相关]https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.window.rolling.Rolling.corr.html 功能计算与两行窗口的滚动相关性,如下r_corr=series1.rolling(2).corr(series2)

数据示例:

2010-01-08         NaN
2010-01-15    0.070039
2010-01-22   -0.047273
2010-01-29    0.013359
2010-02-05    0.109228
                ...   
2017-11-17    0.034265
2017-11-24    0.024689
2017-12-01    0.009061
2017-12-08    0.041224
2017-12-15    0.000784

作为回报,我收到一个充满错误结果的 Series 对象:

2010-01-08    NaN
2010-01-15    NaN
2010-01-22    1.0
2010-01-29    1.0
2010-02-05    1.0
             ... 
2017-11-17    1.0
2017-11-24    1.0
2017-12-01    1.0
2017-12-08    1.0
2017-12-15    1.0

虽然由于窗口的大小,NaN 是可以预料的,但这两个系列之间的相关性几乎在任何时候都不会是 1 或 -1,更不用说全部了。

当然,这可以通过使用标准关联功能correlation=series1.corr(series2) 来确认。

我检查了代码,我检查了环境,但没有发现任何可以解释函数中这种无根据的行为的东西。

我正在运行这个: 视窗 10 Jupyter 笔记本 从 Conda 安装的 Python 3.8 从 Conda 安装的 Pandas 1.0.5

【问题讨论】:

  • 您正在计算两个二元素序列之间的相关性,始终为 1。您确定这是您想要的吗?
  • 将其更改为 r_corr=series1.rolling(20).corr(series2) 并手动交叉检查列表中最后一项的数据。 (记住 rho= cov(x,y)/(sigma x * sigma y) 两个项目为 1...)
  • @piterbarg,好地方!
  • @PaulBrennan 你也是。谢谢,两者都如此专注,而不是他的图书馆,以至于完全忘记了检查我到底要做什么。

标签: python pandas dataframe correlation


【解决方案1】:

根据@PaulBrenan 和@piterbag 的建议,问题的解决方案归结为没有为r_corr=series1.rolling(20).corr(series2) 选择正确的窗口。

一旦窗口被纠正,问题也随之而来。

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 2022-07-02
    • 2017-12-14
    • 2021-09-25
    • 2019-02-03
    • 1970-01-01
    • 2018-10-05
    • 2015-06-19
    • 2014-01-16
    相关资源
    最近更新 更多