使用熊猫滚动statsmodels协整

问题描述 投票:0回答:1

我有一个包含两个系列的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的组合来实现这一目标?

提前致谢!

python pandas statsmodels rolling-computation
1个回答
2
投票

你可以通过首先创建一个数据帧,分配一个整数位置系列,然后使用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中的选项)。

© www.soinside.com 2019 - 2024. All rights reserved.