2017-05-10 45 views
1

我試圖找出如何在R中解決這個問題。我想在時間序列數據上使用不同的機器學習迴歸模型,這是在監督學習領域。在那種情況下,我需要一個函數/程序包,讓我可以前進一步,後退一步,就像滑動窗口函數一樣。該表顯示了輸入(t-n)和輸出(t + n)變量,當前觀測值(t)被視爲輸出值。序列/時間序列監督學習的滯後值

 var1(t-1) var2(t-1) var1(t) var2(t) var1(t+1) var2(t+1) 
1  4   69  5  70   6  71 
2  5   70  6  71   7  72 
3  6   71  7  72   8  73 
4  7   72  8  73   9  74 
5  8   73  9  74  10  75 
6  9   74  10  75  11  76 
7  10   75  11  76  12  77 
8  11   76  12  77  13  78 

我已經研究了關於一些有用的方法如滯後()或在r-blogger.com換檔()的方法,但在這些實施例中的問題是,缺少的值將產生。

shift<-function(x,shift_by){ 
    stopifnot(is.numeric(shift_by)) 
    stopifnot(is.numeric(x)) 

    if (length(shift_by)>1) 
     return(sapply(shift_by,shift, x=x)) 

    out<-NULL 
    abs_shift_by=abs(shift_by) 
    if (shift_by > 0) 
     out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by)) 
    else if (shift_by < 0) 
     out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by)) 
    else 
     out<-x 
    out 
} 

結果移位()函數:

x df_lead2 df_lag2 
1 5  4  NA 
2 6  5  NA 
3 7  6  5 
4 8  7  6 
5 9  8  7 
6 10  9  8 
7 11  10  9 
8 12  11  10 
9 13  NA  11 
10 14  NA  12 

那麼,有沒有任何包或實現的功能,允許接收數據幀,並計算每個變量的量表示TN或T + N +

如果有人能幫助我,那會很好。謝謝!

回答

1

您可能能夠rollapply使用(動物園):

rollapply(iris$Sepal.Length, width = 3, by = 2, FUN = mean, align = "left") 

您可以指定是否要計算依據值(或沒有),如果有後續的值(https://rdrr.io/cran/rowr/man/rollApply.html

+0

根據此評論:https://stats.stackexchange.com/questions/3051/mean-of-a-sliding-window-in-r – timfaber

+0

我不確定,如果這種方法是正確的。通過rollApply方法,可以將窗口滑動到左側或右側,但只能通過計算平均值。我的意思是,對於由數據組成的數據集,如A [201,0.1,10,100],我將使用均值函數,第二條記錄的滾動值將會非常高,對吧? – Daniel

+0

我不確定你想要的結果是什麼,只是超前/滯後值或任何應用於超前/滯後值的函數?計算平均值總是依賴於異常值/極值,但如果需要,您可以通過多種方式處理這個問題 – timfaber