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

在R中转换公司月度收益数据为长面板以执行MacBeth回归的问题

宽格式转面板数据+MacBeth回归解决方案

1. 加载必备工具包

先加载处理数据和面板回归的核心包:

library(tidyr)
library(plm)
library(dplyr)

2. 宽格式转长格式(自动生成面板结构)

你的数据集是宽格式:每行对应一个时间点(共144个月度观测),每列对应一家公司的收益(共244家公司+日期列=245变量)。直接用pivot_longer一键转成长格式,无需手动复制粘贴:

# 把除日期列外的所有公司列转成"公司名称"和"月度收益"两列
panel_data <- xsr %>%
  pivot_longer(
    cols = -Dates,  # 排除日期列,其余列都是公司收益
    names_to = "Company_Name",  # 原列名作为公司名称
    values_to = "Monthly_Return"  # 原单元格值作为月度收益
  )

如果还有其他控制变量(比如市场收益、风险因子),把它们也加入排除项:

panel_data <- xsr %>%
  pivot_longer(
    cols = c(-Dates, -Market_Return, -SMB, -HML),  # 保留控制变量不转置
    names_to = "Company_Name",
    values_to = "Monthly_Return"
  )

3. 转换为plm可识别的面板数据格式

用plm包的pdata.frame指定个体(公司)和时间(日期)维度:

# 先确保日期是标准格式(如果原数据是字符型)
panel_data$Dates <- as.Date(panel_data$Dates, format = "%Y-%m-%d")  # 格式根据你的数据调整

# 生成plm专属面板数据对象
pdata <- pdata.frame(panel_data, index = c("Company_Name", "Dates"))

4. 执行MacBeth回归

用pgm函数运行MacBeth回归,公式根据你的研究需求调整:

# 示例:月度收益对市场收益的MacBeth回归
macbeth_result <- pgm(Monthly_Return ~ Market_Return, data = pdata, model = "mg")
# 查看回归结果
summary(macbeth_result)

额外提示

  • 如果公司列名有特殊符号,可用janitor包的clean_names()统一格式:
library(janitor)
panel_data <- panel_data %>% clean_names()
  • 若时间维度识别异常,可将日期转为年份-月份的数值格式(如202301)再传入pdata.frame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:54:26