python - 使用 pandas 进行滚动统计模型协整

标签 python pandas statsmodels rolling-computation

我有一个包含两个系列的 DataFrame,我知道如何使用所有数据点来获得它们的协整...

import pandas as pd
import numpy as np
import statsmodels.tsa.stattools as ts

A = pd.Series(np.cumsum(np.random.normal(size=100)) + 50)
B = pd.Series(A + 5 + np.random.normal(size=100))

ts.coint(A, B)

但是,我想通过使用滚动窗口(假设 60 天)探索这种协整随着时间的推移如何变化。如何结合使用 statsmodels 和 pandas 来实现这一目标?

提前致谢!

最佳答案

您可以通过首先创建一个数据框,分配一个整数位置系列,然后使用 pandas rolling 来实现此目的带有 lambda 函数的函数,该函数提取 ts.coint 的第一个元素的回归。

因此修改您的代码我们得到:

import pandas as pd
import numpy as np
import statsmodels.tsa.stattools as ts

A = pd.Series(np.cumsum(np.random.normal(size=1000)) + 50, name='A')
B = pd.Series(A + 5 + np.random.normal(size=1000), name='B')

df = pd.concat([A, B], axis=1)
df['ii'] = range(len(df))

df['ii'].rolling(100).apply(lambda ii: ts.coint(df.loc[ii, 'A'], df.loc[ii, 'B'])[0])

为了说明这一点,我将系列的大小增加到 1000,并将滚动窗口设置为 100(但您可以使用 rolling 中的选项)。

关于python - 使用 pandas 进行滚动统计模型协整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50919517/

相关文章:

python - 线性同余发生器 - 弱测试结果

python - 将集合转换为卡住集作为字典的值

python - 从实例方法更改日期时间字段的值

python - statsmodels 缺少 .api、.regression 等

python - Statsmodels - 广播形状不同?

python - OpenCV:cv2.videoCapture成功,但是isOpen在紧接之后失败

python - 从一个 DataFrame 中的另一个 DataFrame 中搜索值

python - 匹配 Pandas Dataframe 中删除的行

python - 如何通过加入 Pandas 中的现有列来创建新列

python - statsmodels.api.sm.OLS 和 statsmodels.formula.api.ols 有什么区别