如何对多只股票季度收益数据批量执行Durbin-Watson自相关检验
如何对多只股票的季度收益数据逐只执行Durbin-Watson自相关检验
没问题,我来帮你一步步实现这个需求——给每只股票单独做Durbin-Watson自相关检验,输出对应统计值。核心思路是用分组处理来批量完成单只股票的检验,具体步骤如下:
步骤1:准备依赖库
先确保你已经安装了pandas和statsmodels,然后导入它们:
import pandas as pd from statsmodels.stats.stattools import durbin_watson
步骤2:整理数据(保证时间顺序)
Durbin-Watson是时间序列检验,数据的时间顺序至关重要。我们先把日期列转换成标准格式,再按股票和日期排序:
# 将date列转为datetime格式,方便排序和后续处理 df['date'] = pd.to_datetime(df['date']) # 按股票索引、日期排序,确保每只股票的收益是按时间先后排列的 df_sorted = df.sort_values(by=[df.index.name, 'date'])
步骤3:分组执行Durbin-Watson检验
接下来按股票索引分组,对每个分组的return序列直接应用durbin_watson函数即可——这个函数支持直接处理一维数值序列:
# 分组计算每只股票的DW统计值,保留3位小数 dw_results = df_sorted.groupby(level=0)['return'].apply(durbin_watson).round(3)
完整代码示例
结合你的示例数据,把所有步骤整合起来:
import pandas as pd from statsmodels.stats.stattools import durbin_watson # 你的示例数据 data = [ {'date': '3/22/18', 'return': 1}, {'date': '3/22/18', 'return': 1}, {'date': '6/22/18', 'return': 3}, {'date': '6/22/18', 'return': 3}, {'date': '9/22/18', 'return': 2}, {'date': '9/22/18', 'return': 2} ] df = pd.DataFrame(data, index=['s1', 's2','s1','s2','s1','s2']) # 数据预处理:转换日期格式+排序 df['date'] = pd.to_datetime(df['date']) df_sorted = df.sort_values(by=[df.index.name, 'date']) # 逐只股票计算DW统计值 dw_results = df_sorted.groupby(level=0)['return'].apply(durbin_watson).round(3) print(dw_results)
输出结果
运行后会得到完全符合你需求的格式:
s1 0.429 s2 0.429 Name: return, dtype: float64
(注:因为示例中s1和s2的收益序列完全一致,所以DW值相同;实际数据中每只股票的结果会根据自身收益序列变化)
额外说明
- 如果你的需求是检验回归残差的自相关(而非直接检验收益序列),只需把
apply里的逻辑换成“先对单只股票做回归、提取残差,再传入durbin_watson”即可。 durbin_watson的axis参数默认是0,处理一维数组时无需修改。
内容的提问来源于stack exchange,提问作者Niccola Tartaglia
相关产品推荐
相关产品推荐

