【问题标题】:time series regression by group with newey-West standard errors plus getting R2使用 newey-West 标准误差和 R2 分组的时间序列回归
【发布时间】:2018-11-17 20:48:30
【问题描述】:

我有一个数据表,其中包含 25 个不同股票投资组合的年回报率和 2 个解释变量。我想为标准误差经过 NeweyWest 校正的 25 个投资组合中的每一个估计相同的 lm 模型。到目前为止,我正在使用来自dplyrgroup_by 在每个投资组合上运行模型,然后使用来自lmtest 包的coeftest 以及来自sandwich 包的NeweyWest 更正标准错误,用@ 总结来自broom 包的987654328@:

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)))
      })

我的问题:

  1. 代码为我提供了系数加上 p 值,但是如何在 NeweyWest 调整后获得所有模型的所有其他汇总统计数据,如 r2、F 检验等?我喜欢broom 包中的tidyglanceaugment,但是当我运行regressions %&gt;% glance(fit) 时,我得到致命错误并且R 崩溃。

  2. 如何将所有 25 个模型的所有统计数据(如系数、p 值、R2)汇总到一个 data.tabledata.frame 中?

非常感谢!

【问题讨论】:

    标签: r time-series regression lm broom


    【解决方案1】:

    我认为您现在需要dplyrtidyrpurrr 即可实现,下面我使用了一个示例数据集:

    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 列中,拟合并存储结果,然后应用glancetidy

    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))))
    )
    

    您可以提取tidyglance 结果

    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>
    

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 2018-11-15
      • 1970-01-01
      • 2014-06-18
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2020-11-14
      相关资源
      最近更新 更多