微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 按组滚动回归

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?