根据我的理解,面板固定效应模型相当于带有个体假人的OLS。但是,当我在 R 中运行这两个模型时,两个模型的结果完全不同:OLS 为 0.8,带有单个假人,0.06 为固定效应模型。
是不是在固定效应模型中,固定效应(个体假人)被排除在计算之外?
根据我的理解,面板固定效应模型相当于带有个体假人的OLS。但是,当我在 R 中运行这两个模型时,两个模型的结果完全不同:OLS 为 0.8,带有单个假人,0.06 为固定效应模型。
是不是在固定效应模型中,固定效应(个体假人)被排除在计算之外?
本质上,是的。这为固定效应回归给出的值通常称为“内"。如果你使用 stata,输出将给出整体、内部和之间. 如果您plm
在 R 中使用包,它只给出内部. 整体和内部的基本区别是内部找到贬值结果变量的总平方和。固定效应回归贬低每个固定实体的y。
对于固定效应模型,
EmplUK
使用来自的数据在 R 中演示plm
:
> library(plm)
> data("EmplUK")
> fixed <- plm(emp ~ wage + capital, data = EmplUK, index=
c("firm"), model = "within")
> fixed.dum <- lm(emp ~ wage + capital + factor(firm) - 1,
data = EmplUK)
> summary(fixed.dum)$r.squared[1]
summary(fixed)$r.squared[1]
[1] 0.9870826
rsq
0.1635585
>
> #"Within" R2
> SSR <- sum(fixed$residuals^2)
> demeaned_y <- EmplUK$emp -
tapply(EmplUK$emp, EmplUK$firm,mean)[EmplUK$firm]
> TSS_demeaned_y <- sum((demeaned_y-mean(demeaned_y))^2)
> within_R2 <- 1-(SSR/TSS_demeaned_y)
> c(summary(fixed)$r.squared[1], "rsq" = within_R2)
rsq rsq
0.1635585 0.1635585
我一直在寻找 R 中固定效应模型输出的三种类型的 R 平方。
感谢@paqmo 的帮助,我能够使用标准lm包中的模型拟合手动计算和重现lfe的完整和proj R 平方。也就是说,我很确定完整的R-sq 是直截了当的,这意味着所有预测值和原始值对的 R-sq。同时,它们的proj R-squared也和所谓的inside R-squared(定义来自STATA)相同,也就是plm包中默认报告的R- squared。
简要阅读 STATA手册第 10 页后,我认为lfe中的完整R-sq和STATA中的整体R-sq是相同的想法。我看到有人说整体 R-sq 是 R-sq内和R-sq之间的加权平均值,但我没有看到任何支持这一说法的证据。我只看到整体和完整的 R-sq 都是直接从预测的 y 和原始 y 对计算出来的。
以下是我自己对完整和proj R-sq 的计算。
fe_lm_mod <- lm(formula = "y ~ x1 + x2 + entity - 1",
data = dataframe)
## Calculate prediction
y_predict <- predict(fe_lm_mod, newdata = dataframe)
y_original <- dataframe$y
# Get the valid values indices
notmiss <- which((!is.na(y_predict)) & (!is.na(y_original)))
# Residiual sum of squares
SSres <- sum((y_original[notmiss] - y_predict[notmiss])**2)
# Calculate full R2
SStot_full <- sum((y_original[notmiss] -
mean(y_original[notmiss]))**2)
### get the demean. The within finds the total sum of
### squares on the demeaned outcome variable.
### References
# https://stats.stackexchange.com/questions/262246/difference-of-r2-between-ols-with-individual-dummies-to-panel-fixed-effect-mo
demeaned_y <- y_original[notmiss] -
tapply(y_original[notmiss], dataframe$entity[notmiss],
mean)[dataframe$entity][notmiss]
# Calculate within R2
SStot_within <- sum((demeaned_y-mean(demeaned_y))^2)
print(paste("calculated full R2", 1 - SSres/SStot_full))
print(paste("calculated within R2", 1 - SSres/SStot_within))
对于R-sq之间,我认为 model="between" 的plm包可能会在R-sq 之间产生,但我不太确定。可以尝试根据 STATA 手册来计算它,就像我为full和R-sq所做的那样。
到目前为止,我对 R-sq 输出做了一个总结(待续):