You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对多只股票季度收益数据批量执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:18:50