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

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")

我原本预期两者结果一致,但系数存在明显差异。数据集示例如下:

tickerdatenextreturnDIVmarketreturnvaluebookmarketdummydummyDIV
abc2002-01-31.3.3.3.31.0500
abc2002-03-31.4.5.5.33.0300
abc2002-05-31.3.6.6.34.0200
xyz2002-01-31.1.8.3.41.200
xyz2002-03-31.05.1.5.42.100
xyz2002-05-31.01.3.6.49.500
xyz2005-05-31.01.4.5.55.710.1

核心差异与选择建议

  1. 模型本质完全不同

    • pmg()是plm包中专门实现Fama-MacBeth回归的函数,逻辑完全贴合Fama-MacBeth步骤:对每个时间截面(每个date)单独做横截面回归,再对各截面的系数取算术平均,这正是你需要的Fama-MacBeth估计结果。
    • 代码2的plm(..., model="within", effect="twoways")是双向固定效应模型,通过对个体(ticker)和时间(date)维度去均值控制固定效应,估计的是面板组内效应,和Fama-MacBeth的截面平均逻辑完全无关,这是结果差异的核心原因。
  2. 代码2存在笔误
    代码2的公式中重复写入了bookmarket变量,会导致该变量被重复纳入模型,进一步干扰估计结果。

结论

如果需要标准的Fama-MacBeth回归结果,选择代码1即可。同时可确认panel_data的面板结构是否正确,pmg()要求输入正确的面板数据对象,index=c("ticker","date")(个体在前、时间在后)的顺序符合要求。

内容的提问来源于stack exchange,提问作者ozgursafak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:25:02