按顺序/时间序列进行监督学习的滞后值

时间:2017-05-10 12:29:53

标签: r dataframe time-series forecasting

我试图弄清楚如何在R中解决这个问题。我想在时间序列数据上使用不同的机器学习回归模型,这是在监督学习领域。在这种情况下,我需要一个函数/包,允许我向前迈步n步,向后退步,就像滑动窗口函数一样。该表显示了输入(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研究过一些有用的方法,比如lag()或shift()方法,但在这些例子中,问题是会产生缺失值。

    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
}

shift()函数的结果:

    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

那么是否存在任何包或实现的函数,它们允许接收数据帧并为每个变量计算指示t-n或t + n的数量?

如果有人可以帮助我会很好。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用rollapply(zoo):

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

您可以指定是否要计算值(取决于是否存在后续值(https://rdrr.io/cran/rowr/man/rollApply.html