如何解决R 按组滚动回归
我想为每个公司做一个滚动回归窗口。由于我每年(从 2003 年开始)和每家公司都需要系数,因此我从 1998 年到 2018 年增加了数据框的年数。该窗口应为 5Years、1998-2002、1999-2003、2000-2004 等。我想将回归系数添加为新列。 我的方法基于这里的解决方案Rolling Regression by Group
我编辑了一些数据。我的真实数据大约有 3,000 个观察值。
n_firms <- 30
dt <- rep(1:n_firms,each = 21)
dt <- data.frame(firm = dt)
a <-c(1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018)
dt$time <- rep(a,n_firms)
dt <- dt %>% group_by(firm) %>% mutate(y=rnorm(21,10,5))
dt <- dt %>% group_by(firm) %>% mutate(x=rnorm(21,5,2))
dt <- as.data.table(dt)
我正在尝试以下代码:
library(rollRegres)
library(data.table)
library(dplyr)
dt[,coefsreg :=
roll_regres.fit(x = cbind(1,.SD[["x"]]),y = .SD[["y"]],width = 5L)$coefs[,2],by = firm]
我收到这个警告():
1: 在 evalq((function (...,call. = TRUE,immediate. = FALSE,... :
相对于参数数量而言,样本量较小
警告重要吗?我的方法错了吗?另外是否也可以将残差作为与系数相同的列添加?
谢谢。我是 R 的新手。 我的英文不是很好。我希望你能理解我的问题。
解决方法
警告来自以下事实:对于某些窗口,您没有足够的观察值来估计。例如,没有对 1998 年到 2001 年的估计值,因为这些观测值的数量将小于您的窗口宽度。
创建一个单独的函数,该函数返回 coef、pred、resid 或您想要的任何其他内容,并在列表中返回这些向量。然后在j中调用这个函数,byfirm,用你的原始数据cbind。
window_regre <- function(x,y,width=5L) {
coefs = roll_regres.fit(x = cbind(1,x),y=y,width=width)$coefs
pred = coefs[,2]*x + coefs[,1]
resid = y-pred
return(list("coef" = coefs[,2],"pred" = pred,"resid" = resid))
}
cbind(dt,dt[,window_regre(x,y),by=firm][,-"firm"])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。