时间序列回归分组与newey-West标准误差加上得到R2

时间:2018-06-07 20:24:43

标签: r time-series regression lm standard-error

我有一个带有年度回报的data.table和25个不同股票投资组合的2个解释变量。我想为25个投资组合中的每一个估计相同的lm模型,其中标准误差是NeweyWest校正的。到目前为止,我正在使用group_by中的dplyr在每个投资组合上运行该模型,然后使用coeftest包中的lmtestNeweyWest更正标准错误来自sandwich包,使用tidy包中的broom进行汇总:

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-avlues,但是如何在NeweyWest调整之后获得所有其他模型的所有其他摘要统计数据,如r2,F-test等?我喜欢来自tidy软件包的glanceaugmentbroom但是当我运行regressions %>% glance(fit)时,我得到致命错误和R崩溃。 2.如何在一个data.tabledata.frame中汇总所有25个模型的所有统计数据(如系数,p值,R2)?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为使用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>