按组进行的时间序列回归,newey-West标准误差加上R2

按组进行的时间序列回归,newey-West标准误差加上R2,r,time-series,regression,lm,broom,R,Time Series,Regression,Lm,Broom,我有一个data.table,其中包含25种不同股票投资组合的年度回报和2个解释变量。我想为25个标准错误得到最新修正的投资组合中的每一个估算相同的lm模型。到目前为止,我正在使用dplyr中的groupby在每个投资组合上运行模型,然后使用lmtest包中的coeftest和三明治包中的NeweyWest纠正标准错误,总结为扫帚包中的tidy: library(dplyr) library(broom) library(lmtest) library(sandwich) regressio

我有一个data.table,其中包含25种不同股票投资组合的年度回报和2个解释变量。我想为25个标准错误得到最新修正的投资组合中的每一个估算相同的
lm
模型。到目前为止,我正在使用
dplyr
中的
groupby
在每个投资组合上运行模型,然后使用
lmtest
包中的
coeftest
三明治
包中的
NeweyWest
纠正标准错误,总结为
扫帚
包中的
tidy

library(dplyr) 
library(broom)
library(lmtest)
library(sandwich)

regressions <- data %>%
      group_by(Portfolio) %>%
      do({fit = lm(Portfolio_return ~ x1 + x2, data = .)
      tidy(coeftest(fit, vcov. = NeweyWest(fit, prewhite = FALSE)))
      })
库(dplyr)
图书馆(扫帚)
图书馆(lmtest)
图书馆(三明治)
回归%
集团(投资组合)%>%
do({fit=lm(投资组合收益率~x1+x2,数据=)
整洁(系数(fit,vcov.=NeweyWest(fit,prewhite=FALSE)))
})
我的问题是:

  • 代码给了我系数加上p值,但是在NeweyWest调整之后,我如何获得所有模型的所有其他汇总统计数据,如r2、F-test等?我喜欢
    tridy
    glance
    augment
    来自
    broom
    包,但是当我运行
    regressions%>%glance(fit)
    时,我得到了致命错误和R崩溃

  • 如何在一个
    data.table
    data.frame
    中汇总所有25个模型的所有统计数据(如系数、p值、R2)


  • 非常感谢

    我认为您现在可以使用
    dplyr
    tidyr
    purrr
    ,下面我使用了一个示例数据集:

    library(dplyr) 
    library(broom)
    library(lmtest)
    library(sandwich)
    library(tidyr)
    library(purrr)
    
    data(Investment)
    
    set.seed(999)
    data = rbind(
           data.frame(Investment + matrix(rnorm(140),20,7),set="A"),
           data.frame(Investment + matrix(rnorm(140),20,7),set="B")
           )
    
    我们在dplyr中执行类似于
    do()
    的操作,只需将数据嵌套到
    data
    列中,拟合并存储结果,然后应用
    glance
    tidy

    regressions <-data %>% 
    nest(data=c("GNP","Investment","Price","Interest","RealGNP","RealInv","RealInt")) %>% 
    mutate(fit=map(data,~lm(RealInv ~ RealGNP + RealInt, data = .))) %>%
    mutate(
    glance = map(fit,glance),
    tidy = map(fit,~tidy(coeftest(., vcov. = NeweyWest(., prewhite = FALSE))))
    )
    
    regressions %>% unnest(tidy)
    # A tibble: 6 x 9
      set   data      fit    glance     term   estimate std.error statistic  p.value
      <fct> <list>    <list> <list>     <chr>     <dbl>     <dbl>     <dbl>    <dbl>
    1 A     <tibble … <lm>   <tibble [… (Inte…  -15.8     18.1       -0.871  3.97e-1
    2 A     <tibble … <lm>   <tibble [… RealG…    0.172    0.0174     9.88   3.24e-8
    3 A     <tibble … <lm>   <tibble [… RealI…   -2.55     3.25      -0.785  4.44e-1
    4 B     <tibble … <lm>   <tibble [… (Inte…   -5.03    19.7       -0.256  8.01e-1
    5 B     <tibble … <lm>   <tibble [… RealG…    0.161    0.0185     8.71   1.80e-7
    6 B     <tibble … <lm>   <tibble [… RealI…    0.662    2.40       0.275  7.86e-1
    
    regressions %>% unnest(glance)
    # A tibble: 2 x 15
      set   data  fit   tidy  r.squared adj.r.squared sigma statistic p.value    df
      <fct> <lis> <lis> <lis>     <dbl>         <dbl> <dbl>     <dbl>   <dbl> <int>
    1 A     <tib… <lm>  <tib…     0.830         0.809  16.5      39.0 7.02e-7     3
    2 B     <tib… <lm>  <tib…     0.801         0.776  17.6      32.2 2.47e-6     3
    # … with 5 more variables: logLik <dbl>, AIC <dbl>, BIC <dbl>, deviance <dbl>,
    #   df.residual <int>