在R中计算总体、组内或组间的R平方

5

我正在从Stata迁移到R(plm包),以进行面板模型计量经济学。在Stata中,面板模型(如随机效应)通常报告内部、外部和总体的R平方。

我发现plm随机效应模型中报告的R平方对应于内部R平方。那么,在R中使用plm包是否有办法获得总体和外部的R平方?

以下是使用R和Stata的相同示例:

library(plm)
library(foreign) # read Stata files
download.file('http://fmwww.bc.edu/ec-p/data/wooldridge/wagepan.dta','wagepan.dta',mode="wb")
wagepan <- read.dta('wagepan.dta')

# Random effects
plm.re <- plm(lwage ~ educ + black + hisp + exper + expersq + married + union + d81 + d82 + d83 + d84 + d85 + d86 + d87,
              data=wagepan,
              model='random',
              index=c('nr','year'))
summary(plm.re)

在Stata中:
use http://fmwww.bc.edu/ec-p/data/wooldridge/wagepan.dta
xtset nr year
xtreg lwage educ  black  hisp  exper  expersq  married  union  d81  d82  d83  d84  d85  d86  d87, re

在这种情况下,R报告的R平方值(0.18062)与Stata报告的R平方值(0.1799)类似。是否有办法在R中获得Stata报告的R平方值之间(0.1860)和总体(0.1830)的R平方值?

@atiretoo,请查看两种情况下的可重现示例。 - user3507584
拼写已经是“Stata”30年了。更重要的是,这个话题不属于简历范畴。我投票支持迁移。 - Nick Cox
2
这是一个好问题,但尼克是正确的,它不属于主题范围。也许在 Stack Overflow 上有更好的回答者。 - Kenji
请注意,您指定的来源是关于固定效应回归,而不是随机效应。 - Helix123
@Helix123 抱歉,我不理解你的评论。为了更清晰,这个例子对应于Wooldridge《入门计量经济学》中的例子14.4,其中他们估计了一个混合OLS模型、一个随机效应模型和一个固定效应模型。 - user3507584
1个回答

0

这个网站提供了完整的代码,可以复现Wooldridge 2013年第494-5页中的例子14.4,并报告所有模型的R-sq。

# install.packages(c("wooldridge"), dependencies = TRUE) 
# devtools::install_github("JustinMShea/wooldridge")
library(wooldridge) 
data(wagepan)

# install.packages(c("plm", "stargazer","lmtest"), dependencies = TRUE)
library(plm); library(lmtest); library(stargazer)

model <- as.formula("lwage ~ educ + black + hisp + exper+I(exper^2)+married + union+yr")
reg.ols <- plm(model, data = wagepan.p, model="pooling")

reg.re <- plm(lwage ~ educ + black + hisp + exper +
              I(exper^2) + married + union + yr, data = wagepan.p, model="random") 

reg.fe <- plm(lwage ~ I(exper^2) + married+union+yr, data=wagepan.p, model="within")

# Pretty table of selected results (not reporting year dummies)
stargazer(reg.ols,reg.re,reg.fe, type="text",
     column.labels=c("OLS","RE","FE"),
     keep.stat=c("n","rsq"),
     keep=c("ed","bl","hi","exp","mar","un"))

输出结果为:

#> ==========================================
#>                   Dependent variable:     
#>              -----------------------------
#>                          lwage            
#>                 OLS       RE        FE    
#>                 (1)       (2)       (3)   
#> ------------------------------------------
#> educ         0.091***  0.092***           
#>               (0.005)   (0.011)           
#>                                           
#> black        -0.139*** -0.139***          
#>               (0.024)   (0.048)           
#>                                           
#> hisp           0.016     0.022            
#>               (0.021)   (0.043)           
#>                                           
#> exper        0.067***  0.106***           
#>               (0.014)   (0.015)           
#>                                           
#> I(exper2)    -0.002*** -0.005*** -0.005***
#>               (0.001)   (0.001)   (0.001) 
#>                                           
#> married      0.108***  0.064***   0.047** 
#>               (0.016)   (0.017)   (0.018) 
#>                                           
#> union        0.182***  0.106***  0.080*** 
#>               (0.017)   (0.018)   (0.019) 
#>                                           
#> ------------------------------------------
#> Observations   4,360     4,360     4,360  
#> R2             0.189     0.181     0.181  
#> ==========================================
#> Note:          *p<0.1; **p<0.05; ***p<0.01

这不是 OP 所问的问题的答案。问题是如何为一个模型获取 3 个不同的 R^2 值,而不是针对三个模型的 R^2。 关键是查看 Stata 文档,了解这三个 R^2 的含义! - MEcon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接