【问题标题】:Recursive regression in R (extract residuals)R中的递归回归(提取残差)
【发布时间】:2017-10-03 23:27:54
【问题描述】:

对于一个不同的问题,建议采用这种对 Y 进行递归回归的过程,从前 20 个观察值开始,将回归窗口一次增加一个观察值,直到覆盖整个样本:

X1 <- runif(50, 0, 1)

X2 <- runif(50, 0, 10) 

Y <- runif(50, 0, 1)

df <- data.frame(X1,X2,Y)


rolling_lms <- lapply( seq(20,nrow(df) ), function(x) lm( Y ~ X1+X2, data = df[1:x , ]) )

这很好用,但是有没有办法:

  1. 获取前 20 个观测值的残差。
  2. 为每个回归一个一个地添加残差。

那么 21. 残差是来自回归的一个,包括 21 个观察值,22. 残差是来自回归的一个,包括 22 个观察值等等?

【问题讨论】:

  • lapply(rolling_lms, function(x) coef(summary(x))[,"Std. Error"])
  • 一般来说,使用str() 查看对象会很有帮助。例如,大量信息存储在lm 对象中,附加信息由summary 计算。要查看存储的内容并了解如何访问它,我通常会查看 str(object)

标签: r recursion regression lm


【解决方案1】:

这里有一个解决您问题的可能方法。

set.seed(1)
X1 <- runif(50, 0, 1)
X2 <- runif(50, 0, 10) 
Y <- runif(50, 0, 1)
df <- data.frame(X1,X2,Y)
rolling_lms <- lapply(seq(20,nrow(df)), function(x) lm(Y ~ X1+X2, data = df[1:x , ]))

resk <- function(k) if(k==1) rolling_lms[[k]]$residuals else tail(rolling_lms[[k]]$residuals,1)
unlist(sapply(1:length(rolling_lms), resk))

############
           1            2            3            4            5            6 
 0.051243613 -0.284725835 -0.209235819  0.677747763  0.085196300 -0.077111032 
           7            8            9           10           11           12 
-0.185700617  0.016194254  0.422214060 -0.067994796  0.265315143  0.130531648 
          13           14           15           16           17           18 
-0.083662353 -0.098826853 -0.298235953 -0.459746026  0.282954796 -0.281752756 
          19           20           21           22           23           24 
-0.037180134  0.152774597  0.576060893 -0.121303797  0.001336554 -0.357956306 
          25           26           27           28           29           30 
 0.205847757 -0.111231524 -0.082662882 -0.291013740 -0.223480493  0.051223304 
          31           32           33           34           35           36 
 0.082970698 -0.393398739 -0.428164426  0.122919273  0.457861478  0.148282532 
          37           38           39           40           41           42 
 0.081855106  0.023024731  0.500627476  0.005097244  0.189354101  0.092481013 
          43           44           45           46           47           48 
-0.245542247 -0.217881519  0.234771342 -0.023343600 -0.328489644  0.242163946 
          49           50 
-0.358311100  0.373917319 

【讨论】:

  • 太棒了!这正是我一直在寻找的,非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多