R语言Fama-MacBeth回归代码选择:两种实现结果差异解惑
Fama-MacBeth回归代码选择问题
我需要在R语言中运行Fama-MacBeth回归,数据集包含自变量、date(日期)和ticker(股票代码)变量。我编写了两段代码(如下),但输出结果不同,想请教应该选择哪一段?其中dummyDIV是dummy与DIV的乘积,dummy在月度t内对所有股票取值相同,随日期变化。
代码1
pmg1 <- pmg(nextreturn ~ DIV+marketreturn+value+bookmarket+dummyDIV, panel_data, index=c("ticker","date"))
代码2
fmb_model1 <- plm(nextreturn ~ DIV+marketreturn+value+bookmarket+bookmarket+dummyDIV, data = panel_data, model = "within", effect = "twoways")
我原本预期两者结果一致,但系数存在明显差异。数据集示例如下:
| ticker | date | nextreturn | DIV | marketreturn | value | bookmarket | dummy | dummyDIV |
|---|---|---|---|---|---|---|---|---|
| abc | 2002-01-31 | .3 | .3 | .3 | .31 | .05 | 0 | 0 |
| abc | 2002-03-31 | .4 | .5 | .5 | .33 | .03 | 0 | 0 |
| abc | 2002-05-31 | .3 | .6 | .6 | .34 | .02 | 0 | 0 |
| xyz | 2002-01-31 | .1 | .8 | .3 | .41 | .2 | 0 | 0 |
| xyz | 2002-03-31 | .05 | .1 | .5 | .42 | .1 | 0 | 0 |
| xyz | 2002-05-31 | .01 | .3 | .6 | .49 | .5 | 0 | 0 |
| xyz | 2005-05-31 | .01 | .4 | .5 | .55 | .7 | 1 | 0.1 |
核心差异与选择建议
模型本质完全不同
pmg()是plm包中专门实现Fama-MacBeth回归的函数,逻辑完全贴合Fama-MacBeth步骤:对每个时间截面(每个date)单独做横截面回归,再对各截面的系数取算术平均,这正是你需要的Fama-MacBeth估计结果。- 代码2的
plm(..., model="within", effect="twoways")是双向固定效应模型,通过对个体(ticker)和时间(date)维度去均值控制固定效应,估计的是面板组内效应,和Fama-MacBeth的截面平均逻辑完全无关,这是结果差异的核心原因。
代码2存在笔误
代码2的公式中重复写入了bookmarket变量,会导致该变量被重复纳入模型,进一步干扰估计结果。
结论
如果需要标准的Fama-MacBeth回归结果,选择代码1即可。同时可确认panel_data的面板结构是否正确,pmg()要求输入正确的面板数据对象,index=c("ticker","date")(个体在前、时间在后)的顺序符合要求。
内容的提问来源于stack exchange,提问作者ozgursafak
相关产品推荐
相关产品推荐

