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

在R中复现Boons等研究:如何获取随企业-时间变化的β_{i,t}

问题:获取随企业-月度变动的β系数(复现Boons等人JFE 2020研究)

我试图在R中复现Boons等人(JFE, 2020)的研究。我拥有含企业-月度层面股票超额收益变动的面板数据集,以及仅含时间序列变动的通胀数据集。我将超额收益对通胀ARMA(1,1)的残差进行回归,模型为:
$R_{i,t}=a+β_{i,t}∗u_{t}+ε_{i,t}$
其中{i}代表企业,{t}代表月度。超额收益(R_{i,t})随企业和月度不同而变化,而u_t是通胀ARMA(1,1)的残差,仅存在时间序列变动。我希望β_{i,t}同时具备企业层面和时间序列层面的变动。
我运行了如下简单OLS回归:

ols<-lm(ret~res, data=data)

其中ret代表R_{i,t},res代表u_t。但得到的系数仅597个,仅显示时间序列变动,无企业层面变动。请问如何获取每个企业和月度均不同的β_{i,t}?

解决方案

你当前的lm()回归是全局回归,只能得到单一的整体β系数,无法生成随企业和时间变动的β_{i,t}。以下两种方法可以实现需求:

1. 构造企业-月度交互项回归(直接生成对应系数)

通过给每个企业-月度组合创建唯一标识,并与通胀残差项构造交互项,让模型为每个组合单独估计系数:

  • 第一步:确保数据集中有明确的企业标识(如firm_id)和月度标识(如month_id)
  • 第二步:生成企业-月度交互变量:
    data$firm_month <- interaction(data$firm_id, data$month_id)
    
  • 第三步:运行不带全局截距的交互项回归:
    model <- lm(ret ~ 0 + res:firm_month, data = data)
    
    回归结果中的系数即为每个企业-月度对应的β_{i,t},系数命名格式为res:firm_month[企业ID.月度ID],可提取后匹配回原数据集。

2. 使用面板时变系数模型(计量规范方案)

如果需要更严谨的时变系数估计(比如平滑性处理),可以用tvReg包的面板时变系数回归功能:

  • 先安装并加载包:
    install.packages("tvReg")
    library(tvReg)
    
  • 运行时变面板回归:
    tv_model <- tvplm(ret ~ res, data = data, index = c("firm_id", "month_id"), method = "tvOLS")
    
  • 提取时变系数:
    beta_it <- coef(tv_model)
    
    输出的beta_it是一个矩阵,每行对应企业,每列对应月度,直接包含所有β_{i,t}值。

注意事项

  • 提前清理数据,确保firm_id和month_id无缺失、无重复标识
  • 若部分企业-月度组合无观测值,两种方法都会自动跳过这些组合,需提前处理缺失样本
  • 第一种方法在企业和月度数量极大时会生成大量系数,可能占用较多内存,此时优先选择第二种方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:25:20