有没有办法使用Broom捕获Coefficient和R-squared?

时间:2017-07-27 14:42:05

标签: r plm broom

我正在通过几个回归循环,并且旨在得到具有不同模型,它们各自的系数和统计数据以及一些一般结果的最终结果,如调整的r平方,AIC等。这个循环是在考虑到的一些子组中完成的。数据库。

当我使用plm估计结果时,扫帚包产生了一些很好的结果,可以将所有内容打包到一个整洁的数据库中。但是,他们的选择是有限的。或者你得到系数及其统计数据(使用整洁 - 提供p值,t统计等),或者你得到了大量的模型统计数据(使用一瞥 - 提供R平方,调整后的R平方,AIC等)。 / p>

- 有没有办法让两个数据都不重新计算回归?

我知道我可以合并最终结果,但这将涉及每次回归的双重计算,这在计算上是昂贵的。我知道最终结果会重复每行系数的汇总统计数据,但我不介意。

- 也看到我的代码重复每个回归的估计以提供可靠的估计,有没有人知道这个的解决方法?

MWE如下:

library(dplyr)
library(broom)
library(plm)
library(lmtest)
library(magrittr)


data("Grunfeld")

#To generate coefficients by model
reg<- mutate(Grunfeld,
             group = ifelse(firm<6,1,2)) %>%
      group_by(., group) %>%
  do(
     tidy(
          coeftest(plm(as.formula(inv ~ value + capital)
                       ,data= .
                       ,model = "pooling"
                       )
                   ,vcov.= vcovHC(plm(as.formula(inv ~ value + capital)
                                      ,data= .
                                      ,model = "pooling"
                                      )
                                  ,method= "arellano"
                                  )
                  )
       )
  )

#To generate r-squared by model
reg<- mutate(Grunfeld,
             group = ifelse(firm<6,1,2)) %>%
  group_by(., group) %>%
  do(
    glance(
      plm(as.formula(inv ~ value + capital)
          ,data= .
          ,model = "pooling"
      )
    )
  )

1 个答案:

答案 0 :(得分:1)

使用来自@Gregor的输入我可以为我的问题创建一个满意的答案。

这是MWE:

library(dplyr)
library(broom)
library(plm)
library(lmtest)
library(magrittr)


data("Grunfeld")

plm_reg<- mutate(Grunfeld,
             group = ifelse(firm<6,1,2)) %>%
  group_by(., group) %>%
  do(reg=
      plm(as.formula(inv ~ value + capital)
          ,data= .
          ,model = "pooling"
      )
    )

robust_est <- function(x){
  return(tidy(coeftest(x, vcov.= vcovHC(x, method= "arellano"))))
}

robust_coef <- bind_rows(lapply(plm_reg[[2]], robust_est), .id = "group")
r_squared <-   bind_rows(lapply(plm_reg[[2]], glance), .id = "group")