cast of non-full rank regression in the first-step regression of FamaMacBeth
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start in model.py at FamaMacBeth.fit.single, especially the full-rank check around lines 2755–2761. Reproduce the 1935 case with the supplied grunfeld data and compare the current result with the issue’s np.linalg.lstsq example. Done means the rank-deficient group produces the stated coefficients rather than all NaNs, with regression tests covering the behavior.
由索引模型根据 Issue 内容生成。
描述
I found that in the first-step regression of FamaMacBeth function (i.e. FamaMacBeth.fit.single function in line 2755-2761 of model.py), if the exog matrix is not full-rank, the coefficients of time-series regression for that group will be NaN. But when I use Stata/SE 15.1, the coefficients of that collinear variables will be 0, and the coefficients of remaining variables will be the same as for normal regression. So I think that the full rank command on line 2757 may need to be reconsidered......
For example, I use grunfeld data set and create a dummy variable. For those obs with year < 1945, I set dummy variable as 0, and for those obs with year >= 1945, I set dummy variable randomly from 0 to 1.
The subset of the data is:
invest mvalue kstock Dummy Dummy*mvalue Dummy*kstock const
company year
1 1935 317.600010 3078.500000 2.800000 0 0.0 0.0 1
2 1935 209.899990 1362.400000 53.799999 0 0.0 0.0 1
3 1935 33.099998 1170.600000 97.800003 0 0.0 0.0 1
4 1935 40.290001 417.500000 10.500000 0 0.0 0.0 1
5 1935 39.680000 157.700000 183.200000 0 0.0 0.0 1
6 1935 20.360001 197.000000 6.500000 0 0.0 0.0 1
7 1935 24.430000 138.000000 100.200000 0 0.0 0.0 1
8 1935 12.930000 191.500000 1.800000 0 0.0 0.0 1
9 1935 26.629999 290.600010 162.000000 0 0.0 0.0 1
10 1935 2.540000 70.910004 4.500000 0 0.0 0.0 1
In linearmodels package, we will get:
# est = FamaMacBeth(d['invest'], d[['const', 'mvalue', 'kstock', 'Dummy', 'Dummy*mvalue', 'Dummy*kstock']]).fit(cov_type='kernel', kernel='bartlett', bandwidth=5)
# print(est.all_params.iloc[[0], :])
const mvalue kstock Dummy Dummy*mvalue Dummy*kstock
year
1935 NaN NaN NaN NaN NaN NaN
But in Stata/SE 15.1, we will get:
# xtset company year
# asreg invest mvalue kstock dummy dummymvalue dummykstock , fmb newey(5) save(~/Downloads/coff_stata)
_b_mvalue _b_kstock _b_dummy _b_dummymvalue _b_dummykstock _Cons _R2 _adjR2 _TimeVar _obs
.10249786 -.00199479 0 0 0 .3560334 .865262 .7574716 1935 10
The result from Stata is the same as the result directly using np.linalg.lstsq:
const mvalue kstock Dummy Dummy*mvalue Dummy*kstock
year
1935 0.356033 0.102498 -0.001995 0.0 0.0 0.0
So I think the regression for those groups with non-full rank can still be estimated, instead of getting NaN.
The logic of the judgment in the Stata software seems to be to select a certain variable for regression among all collinear variables, and all coefficients of the others are set to 0. I find that the judgment priority may be as follows:
- Non-zero normal variable;
- Constant term;
- the coefficients of the variables wtih all 0 value are naturally set to 0.
Similar issue #176
The data set I use is available below.
grunfeld.csv.zip
- 主要语言
- Python
- 星标
- 1.1k
- 派生
- 203
- 平均合并
- 3 小时 26 分钟
- 30 天内合并 PR
- 115
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
bashtage/linearmodels 的其他 Issue
-
enhancement
难度 5/5 一周以上 新手友好度 15/100
bashtage/linearmodels#832 ·
维护者通常 1 天内回复
-
bug
难度 4/5 3-5 天 新手友好度 25/100
bashtage/linearmodels#831 · 1 条评论 ·
维护者通常 1 天内回复
-
IV: LIML kappa with an endogenous regressor spanned by the instruments, kappa's unit dependence, scale-dependent instrument rank check可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭bug
难度 4/5 3-5 天 新手友好度 25/100
bashtage/linearmodels#823 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 18/100
bashtage/linearmodels#817 ·
维护者通常 1 天内回复
-
bug
难度 4/5 3-5 天 新手友好度 48/100
bashtage/linearmodels#780 ·
维护者通常 1 天内回复
查看 bashtage/linearmodels 的全部 Issue
相似的 Issue
-
Support .aac audio uploads可能已有人在做 @julien731 今天认领。 未关闭feature
难度 2/5 1-3 小时 新手友好度 78/100
nimblehq/audio-transcriber#153 ·
-
help wanted
难度 2/5 1-3 小时 新手友好度 68/100
antonyrag/ragleap-core#1062 ·
-
needs-triage
难度 2/5 1-3 小时 新手友好度 76/100
gke-labs/kube-agents#4321 ·
维护者通常 1 天内回复
-
enhancement help wanted
难度 2/5 1-3 小时 新手友好度 76/100
Git-Hospital/githealthcheck#61 ·
维护者通常 1 天内回复
-
changelog investigate
难度 2/5 1-3 小时 新手友好度 67/100
ramnes/notion-sdk-py#433 ·