但是我的数据是包括了所有股票的数据,并非只有一只股票的数据,整个数据框有几十万行,这样怎么做Fama-MacBeth回归呢?给出python代码
时间: 2024-03-21 21:40:39 浏览: 127
如果数据框中包含了多只股票的数据,则需要对每只股票分别进行回归,并将回归系数平均作为该因子的系数。可以使用循环来实现这个过程,以下是一份可能的Python代码:
```python
# 创建一个空的DataFrame,用于存储回归结果
factor_results = pd.DataFrame(columns=['股票代码', '因子', '系数', 't值', 'p值'])
# 提取股票代码列表
stock_codes = df['股票代码'].unique()
# 循环进行回归
for code in stock_codes:
# 选取当前股票的数据
stock_df = df[df['股票代码']==code]
# 提取因子数据
X = stock_df.iloc[:, 3:]
# 添加截距项
X = sm.add_constant(X)
# 使用Fama-MacBeth回归
mod = sm.FamaMacBeth(stock_df['月收益率'], X)
res = mod.fit()
# 提取回归系数
coefs = res.params[1:]
# 计算平均系数
avg_coef = coefs.mean()
# 提取t值和p值
tvalues = res.tvalues[1:]
pvalues = res.pvalues[1:]
# 创建一行数据,存储回归结果
row = {'股票代码': code, '因子': coefs.index, '系数': avg_coef, 't值': tvalues, 'p值': pvalues}
factor_results = factor_results.append(row, ignore_index=True)
```
以上代码中,首先提取股票代码列表,然后循环对每只股票进行回归,使用mean函数计算回归系数的平均值,并将回归结果存储到一个新的DataFrame中。最终,factor_results中存储了每只股票的回归结果。
阅读全文