我有一个包含两个系列的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的组合实现这一目标?
提前致谢!
答案 0 :(得分: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
中的选项。)