2017-05-05 84 views
1

對於不同的問題,這個過程用於X對Y的遞歸回歸,開始於前20個觀察值,並且一次增加一個觀察值的迴歸窗口,直到覆蓋滿樣品,建議:R中的遞歸回歸(提取殘差)

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 , ])) 

這工作得很好,但有一種方式來獲得的殘差前20層的意見,然後爲每個迴歸增加對殘差一個,使21殘差來自迴歸的那個包括21個觀測值,22個殘差是來自22個觀測值的迴歸等等?

+0

'lapply(rolling_lms,函數(X)COEF(摘要(X))[, 「標準誤」])' – coffeinjunky

+0

一般來說,它是有幫助的看物體與'STR()'。例如,很多信息存儲在一個'lm'對象中,其他信息由'summary'計算。要查看存儲的內容並瞭解如何訪問它,我通常會查看'str(object)'。 – coffeinjunky

回答

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 
+0

太棒了!這正是我所期待的,非常感謝您的幫助! – Julia