如何计算含时间和行业固定效应的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
相关产品推荐
相关产品推荐

