嗨,我有一个面板数据集。我想为每个公司做一个滚动窗口回归并提取独立变量的系数。y 是依赖变量,x 是独立变量。滚动窗口为 12。即第一次回归使用第 1 行到第 12 行数据,第二次回归使用第 2 行到第 13 行数据,等等。使用 Rollapply。
这是一个与我遇到的错误完全相同的问题: Rolling by group in data.table R 该问题的幸运之处在于它只需要一列,但我的需要两列进行回归,所以我无法进行更改根据该帖子中推荐的答案。这是另一个使用 for 循环的帖子。我的真实数据有超过 200 万个观察值,所以太慢了: 使用 dplyr 滚动回归 有人 可以帮忙吗?
我的假数据集如下:
dt<-rep(c("AAA","BBB","CCC"),each=24)
dt<-as.data.frame(dt)
names(dt)[names(dt)=="dt"] <- "firm"
a<-c(20100131,20100228,20100331,20100430,20100531,20100630,20100731,20100831,20100930,20101031,20101130,20101231,20110131,20110228,20110331,20110430,20110531,20110630,20110731,20110831,20110930,20111031,20111130,20111231)
dt$time<-rep(a,3)
dt<-dt%>% group_by(firm)%>%
mutate(y=rnorm(24,10,5))
dt<-dt%>% group_by(firm)%>%
mutate(x=rnorm(24,5,2))
dt<-as.data.table(dt)
我试过这段代码:
# create rolling regression function
roll <- function(Z)
{
t = lm(formula=y~x, data = as.data.frame(Z), na.rm=T);
return(t$coef[2])
}
dt[,beta := rollapply(dt, width=12, roll, fill=NA, by.column=FALSE, align="right") , by=firm]
我正在尝试创建一个名为“beta”的列,用于显示 var x 的系数。因此,对于每家公司,第一个数据应该从第 12 次观察开始。
看起来回归从不同组的第一行获取 x 和 y,与我从 EXCEL 得到的结果相比,系数似乎有点偏离。
我尝试的第二种方法是 dplyr 版本:
dt %>%
group_by(firm) %>%
mutate(dt,beta = rollapply(dt,12,function(x) coef(lm(y~x,data=as.data.frame(x)))[2],by.column= FALSE, fill = NA, align = "right"))
它给了我同样的问题。每个组都有相同的编号。看起来对于每个公司,回归从第一行获取 y 和 x。
有什么想法吗?太感谢了。