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

如何用R语言plm包基于交易数据构建面板数据集并做回归?

问题解析与解决方案

1. 面板数据集构建的正确方式

你手动合并firm+destination+year生成identifier的做法冗余且有误——pdata.frame不需要提前合并索引列,直接通过index参数指定截面个体和时间维度即可。

你的数据本质是企业-目的地层面的面板:每个(firm, destination)组合是独立的截面个体,随year重复出现(同一企业-目的地对在不同年份有出口观测)。正确的面板转换代码如下:

# 假设原始数据框名为original_data
panel_data <- pdata.frame(original_data, index = c("firm", "destination"), time = "year")

如果部分(firm, destination)组合在部分年份无观测,属于非平衡面板,plm可直接处理,无需额外操作。

2. 固定效应回归的问题排查

你两次回归结果一致的核心原因是面板索引指定错误:

  • 指定index = "firm"时,plm将每个firm视为截面个体,但你的数据中同一firm同一年有多个destination观测,导致plm无法正确识别时间维度的重复观测,固定效应无法被正确估算。
  • 不指定index时,plm默认将每一行作为独立截面个体,此时within模型的固定效应等价于每行的哑变量,和错误指定index="firm"的结果巧合一致,但两种方式都没实现你想要的企业固定效应。

正确的回归写法

控制企业固定效应

# 方式1:用plm的fixed.effects参数指定
model_firm_fe <- plm(dependent ~ regressor, 
                     data = panel_data, 
                     model = "within",
                     index = c("firm", "destination"),
                     fixed.effects = "firm")

# 方式2:公式中直接加入企业固定效应(更直观)
model_firm_fe <- plm(dependent ~ regressor + factor(firm), 
                     data = original_data, 
                     model = "pooling")

控制企业+目的地双固定效应

# 方式1:用fixed.effects参数指定双固定效应
model_double_fe <- plm(dependent ~ regressor, 
                       data = panel_data, 
                       model = "within",
                       index = c("firm", "destination"),
                       fixed.effects = c("firm", "destination"))

# 方式2:公式中直接加入双固定效应
model_double_fe <- plm(dependent ~ regressor + factor(firm) + factor(destination), 
                       data = original_data, 
                       model = "pooling")

3. 验证固定效应是否生效

可以通过两种方式验证:

  • 查看固定效应数量:length(fixef(model_firm_fe)),结果应等于数据中独特企业的数量。
  • 对比加入固定效应前后的回归系数,固定效应会吸收不随时间变化的个体特征,系数通常会有明显变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:11:08