提问人:Mostafa Bouzari 提问时间:9/2/2023 更新时间:9/2/2023 访问量:41
如何在 python 中横断面获取 Fama-Macbeth 回归
How to get Fama-Macbeth Regression Cross-sectionally in python
问:
我对这个话题很陌生,我对理解它的回归和定量方面感到困惑,尽管我发现了惊人的帖子,例如 rationale-of-fama-macbeth-procedure、fama-macbeth-cross-sectional-regression、what-are-the-assumptions-in-the-first-stage-of-fama-macbeth。
这是一个示例数据(存储在 DataFrame 中),如下所示(我的实际数据是每月一次)。为了让您更清楚列:RIe Pct Return 是每只股票的回报率。:
| year | date_x | month | Mcap | TotalAssets | NItoCommon | NIbefEIPrefDiv | PrefDiv | NIbefPrefDiv | Sales | GainLossAssetSale | PPT | LTDebt | CommonEquity | PrefStock | OtherIncome | TotalLiabilities | PreTaxIncome | IncomeTaxes | OtherTA | OtherLiabilities | CashSTInv | OtherCA | OtherCL | TotalDiv | Country | Industry | IsSingleCountry | SME | Mcap_w | NItoCommon_w | NIbefEIPrefDiv_w | PrefDiv_w | NIbefPrefDiv_w | Sales_w | GainLossAssetSale_w | PPT_w | LTDebt_w | CommonEquity_w | PrefStock_w | OtherIncome_w | TotalLiabilities_w | PreTaxIncome_w | IncomeTaxes_w | OtherTA_w | OtherLiabilities_w | CashSTInv_w | OtherCA_w | OtherCL_w | TotalDiv_w | fair_value | date_y | RIe | RIus | RIus Pct Return | RIe Pct Return | Total Return Index |
|------|------------|-------|------|-------------|------------|----------------|---------|--------------|-------|-------------------|-----|--------|--------------|------------|-------------|------------------|--------------|-------------|---------|------------------|------------|---------|---------|----------|---------|------------|-----------------|-----|--------|-------------|-------------|----------------|------------|---------------------|-------|---------|----------------|-------------------|-------------|-------------------|--------------|-------------|------------|-------------------|------------|----------|---------|-----------|------------|------------|-------|------|-----------------|-----------------|--------------------|
| 2011 | 2011-02-01 | 2 | 63240 | 410876 | 7227 | 7227 | 0 | 7227 | 149809 | 0 | 204034 | 183595 | 150758 | 0 | 296 | 260875 | 10394 | 3015 | 93101 | 507 | 41407 | 4677 | 29141 | 0 | BD | Manufacturing | NaN | Large enterprise | 63240.000 | 7227 | 7227 | 0 | 7227 | 149809 | 0 | 204034 | 183595 | 150758 | 0 | 296 | 260875 | 10394 | 3015 | 93101 | 507 | 41407 | 4677 | 29141 | 0 | 5.959437 | 2011-02-26 | 48.12 | 54.92 | 0.134042 | 0.077564 | 0.78 |
| 2013 | 2013-08-01 | 8 | 57030 | 370658 | 6525 | 6525 | 0 | 6525 | 134985 | 0 | 183668 | 165522 | 135862 | 0 | 267 | 235191 | 9378 | 2713 | 83949 | 457 | 37780 | 4263 | 26573 | 0 | BD | Technology | NaN | Large enterprise | 57030.000 | 6525 | 6525 | 0 | 6525 | 134985 | 0 | 183668 | 165522 | 135862 | 0 | 267 | 235191 | 9378 | 2713 | 83949 | 457 | 37780 | 4263 | 26573 | 0 | 5.565474 | 2013-08-28 | 39.27 | 45.62 | 0.103655 | 0.051828 | 0.78 |
| 2014 | 2014-11-01 | 11 | 74220 | 482008 | 8496 | 8496 | 0 | 8496 | 175824 | 0 | 238183 | 214365 | 176017 | 0 | 344 | 299626 | 11984 | 3472 | 107054 | 584 | 48195 | 5455 | 33935 | 0 | BD | Finance | NaN | Large enterprise | 74220.000 | 8496 | 8496 | 0 | 8496 | 175824 | 0 | 238183 | 214365 | 176017 | 0 | 344 | 299626 | 11984 | 3472 | 107054 | 584 | 48195 | 5455 | 33935 | 0 | 6.485548 | 2014-11-30 | 53.77 | 61.49 | 0.148460 | 0.073689 | 0.78 |
| 2015 | 2015-05-01 | 5 | 80150 | 521068 | 9184 | 9184 | 0 | 9184 | 190966 | 0 | 259146 | 233231 | 191151 | 0 | 377 | 323830 | 12953 | 3755 | 116013 | 635 | 52268 | 5923 | 36948 | 0 | BD | Retail | NaN | Large enterprise | 80150.000 | 9184 | 9184 | 0 | 9184 | 190966 | 0 | 259146 | 233231 | 191151 | 0 | 377 | 323830 | 12953 | 3755 | 116013 | 635 | 52268 | 5923 | 36948 | 0 | 7.057782 | 2015-05-30 | 56.59 | 62.13 | 0.111052 | 0.070297 | 0.78 |
| 2017 | 2017-09-01 | 9 | 69320 | 450400 | 7936 | 7936 | 0 | 7936 | 164384 | 0 | 223164 | 200848 | 164858
在第一步中,我知道我必须将股票回报与指数回报进行回归,以找到β。在第二步中,我应该在每个时间点 t 应用横截面回归。
现在我们在同一页面上(如果我错过了什么,请告诉我),我想用 Python 编写一个代码来执行第一步和第二步。我可以在 R 中找到实现,但在 Python 中找不到。我宁愿你的答案是一种方法,所以如果将来有人想按月或按年进行回归,更改代码会更容易。如果我能以某种方式在 DataFrame 中获取结果,那就太好了。
我尝试使用这个库 Finance-BYU,但我遇到了各种错误,并且无法在互联网上找到一个基本且易于理解的示例。
from finance_byu.fama_macbeth import fama_macbeth, fm_summary
merged_df['date_x']=pd.to_datetime(merged_df['date_x'],format='mixed')
result=fama_macbeth(merged_df,pd.to_datetime(merged_df['date_x'],format='mixed'),'Total return index','RIe Pct Return')
print(fm_summary(result))
在这种情况下我得到的错误:
50 def _assertions(data,t,yvar,xvar,intercept,n_jobs=-999,backend=-999,memmap=-999,parallel=-999): 52 assert isinstance(data,pd.core.frame.DataFrame), 'Invalid input for `data`.'
---> 53 assert isinstance(t,str), '无效的输入。 54 assert isinstance(xvar,list), '无效的输入。 55 assert isinstance(intercept,bool), '无效的输入。
t
xvar
intercept
AssertionError:的输入无效。
t
任何帮助将不胜感激。
答: 暂无答案
评论