我有一个面板数据集,可以通过以下方式很好地复制:
library(zoo)
library(tidyverse)
library(data.table)
set.seed(100000)
df <- data.table(
##Date
Date = rep(seq(as.Date("2000/01/01"), by = "day", length.out = 1000), times=5),
##Cross-Section of Stocks
Symbol = sample(letters, 5000, replace=TRUE),
##Return (dep var)
EXR = sample(1:100, 5000, replace=TRUE),
##Factors (indep var)
MKT = sample(1:100, 5000, replace=TRUE),
SMB = sample(1:100, 5000, replace=TRUE),
HML = sample(1:100, 5000, replace=TRUE))
我想使用EXR
作为因变量,MKT
,SMB
,HML
做为自变量进行滚动回归。为此,我使用以下代码:
library(rollRegres)
setkey(df, Symbol, Date)
func <- function(SD){
x <- roll_regres.fit(
x = cbind(1, SD$MKT, SD$SMB, SD$HML), y = SD$EXR,
width = 20L, do_compute = "sigmas")$coefs
split(x, rep(1:ncol(x), each = nrow(x)))
}
df[, c("alpha", "b.Mkt", "b.SMB", "b.HML") := func(.SD), by = Symbol]
tail(df)
但是,我还想将每个回归的残差计算,提取并存储在单独的data.table或list中。
这种方法是否有可能进行这种残差提取?
此外,我一直想知道是否有可能以“滞后回归”的方式执行此操作,即对于width=list(c(0:-20))
而不违反width
是single integerish value
的约束。
谢谢!