R - 从 window 内的回归中提取 beta 和 alpha

R - extracting beta and alpha from regression within a window

我有这个数据框:

structure(list(X_ = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Y_ = c(0.00485082338451504, 
-0.0168046606213001, 0.0271922543834244, 0.00553894528785559, 
0.0459064669618974, 0.0735144938632293, 0.0368605806880207, 0.0597490764776278, 
0.0244300474780141, 0.00904348896641594), Window_5 = c(-4, -3, 
-2, -1, 0, 1, 2, 3, 4, 5), Window_2 = c(-1, 0, 1, 2, 3, 4, 5, 
6, 7, 8)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", 
"data.frame"), na.action = structure(c(`1` = 1L), class = "exclude"))
  X_     Y_      Window_5 Window_2
  <dbl>    <dbl>    <dbl>    <dbl>
1     1  0.00485       -4       -1
2     2 -0.0168        -3        0
3     3  0.0272        -2        1
4     4  0.00554       -1        2
5     5  0.0459         0        3
6     6  0.0735         1        4
7     7  0.0369         2        5
9     9  0.0244         4        7
10    10  0.00904        5        8

其中 Window_5 = X_-5Window_2 = X_-2。我正在寻找简单回归线的 beta 和 alpha,其中 alpha 和 beta:

然而,挑战是我需要为每一行提供这些参数,给定 X_ 的 window。例如,对于 X_=7,回归线应仅考虑 X_Window_5 开始并在 Window_2 结束的行,在本例中 X_=7 window 将从 X_=2X_=5.

所以,预期的输出是:(我在 excel 中做了这个并仔细检查了它,所以值应该是正确的)

PS:如果能加上错误就好了,但严格来说不需要。

我的代码看起来应该可以满足您的要求。虽然它不是“整洁的”......(它应该使用 purrr::pmap + broom::tidy + ...)

wfun <- function(i, data) {
  start <- data$Window_5[i]
  end <- data$Window_2[i]
  if (start<=0) return(data.frame(Alpha=NA,Alpha_SE=NA,
                                  Beta=NA, Beta_SE=NA))
  cc <- coef(summary(lm(Y_ ~ X_, data=data[start:end,])))
  data.frame(Alpha=cc["(Intercept)","Estimate"],
             Alpha_SE=cc["(Intercept)","Std. Error"],
             Beta=cc["X_","Estimate"],
             Beta_SE=cc["(Intercept)","Std. Error"])

}

res <- lapply(seq(nrow(dd)),wfun, data=dd)
do.call(rbind,res)

如果您只需要固定宽度的滑动 window 回归(在您的情况下为 4,但与示例的格式不完全相同),也许看看 rollRegres 包?

library(rollRegres)
roll_regres(Y_ ~ X_, data = dd, width=4)