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

如何计算含时间和行业固定效应的plm回归的组内R平方值

plm包多固定效应场景下组内R平方的计算方法

组内R平方的本质是扣除所有控制的固定效应带来的变异后,核心解释变量能够解释的剩余变异的比例。对于你需要同时控制时间、行业两个非默认索引维度固定效应的场景,最直接的解决方案是手动对所有变量做固定效应维度的去中心化,再计算回归R平方。

plm默认的within模型仅支持基于索引设定的个体、时间两个维度的固定效应去均值,行业不属于你设定的索引维度,因此无法直接通过effect参数指定实现,手动去中心化是兼容性最好的实现方式。

方法1:使用plm自带的demean函数实现

plm内置的demean函数支持指定多个分组维度做去均值处理,代码示例如下:

library(plm)
# 1. 对被解释变量和核心解释变量,按时间、行业两个维度去均值
data$return_adj <- demean(data$return, group = list(data$t, data$industry))
data$x_adj <- demean(data$x, group = list(data$t, data$industry))
# 2. 用去中心化后的变量做无截距回归,得到的R平方就是目标组内R平方
reg_adj <- lm(return_adj ~ x_adj - 1, data = data)
# 输出组内R平方
summary(reg_adj)$r.squared

方法2:手动分组去中心化

如果习惯用dplyr做分组处理,也可以手动实现去均值逻辑,结果和方法1完全一致:

library(dplyr)
data_adj <- data %>%
  # 先扣除时间维度的均值
  group_by(t) %>%
  mutate(
    return_t_adj = return - mean(return),
    x_t_adj = x - mean(x)
  ) %>%
  ungroup() %>%
  # 再扣除行业维度的均值
  group_by(industry) %>%
  mutate(
    return_final_adj = return_t_adj - mean(return_t_adj),
    x_final_adj = x_t_adj - mean(x_t_adj)
  ) %>%
  ungroup()
# 回归计算组内R平方
reg_adj <- lm(return_final_adj ~ x_final_adj - 1, data = data_adj)
summary(reg_adj)$r.squared

上述两种方法得到的核心解释变量x的系数,和你之前用reg3(pooling模型加虚拟变量)得到的系数完全一致,输出的R平方就是对应控制时间、行业固定效应的组内R平方,和你之前reg2输出的组内R平方逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:05