首页 > 解决方案 > 时间序列数据的for循环

问题描述

假设我有以下简单的公式

y[t] = alpha * y[t-1] + beta * y[t-2]

其中 y[t-1] 和 y[t-2] 是已知的观测值。现在在时间 t+1 的下一个观察可以写成

y[t+1] = alpha * y[t] + beta * y[t-1]

使用 y[t] 的先前信息产生

y[t+1] = alpha * (alpha * y[t-1] + beta * y[t-2]) + beta * y[t-1]

简化

y[t+1] = alpha^2 * y[t-1] + alpha * beta * y[t-2] + beta * y[t-1]

下一个观察

y[t+2] = alpha^2 * y[t] + alpha * beta * y[t-1] + beta * y[t]

又可以在哪里插入 y[t]。

现在我的问题是如何编写一个 for 循环,以便我可以在时间 t+h 构造 y,其中 h 是一个整数值。

标签: rfor-looptime-series

解决方案


像这样的东西?

y = c(1, 2, rep(0, 49)) 
alpha <- .4
beta <- .9

for (t in 3:length(y)) {
    y[t] <-  alpha * y[t-1] + beta * y[t-2]
}

nms <- paste0('y[', as.character(seq(-2, 48, 1)), ']') 

`names<-`(y, nms)
#>       y[-2]       y[-1]        y[0]        y[1]        y[2]        y[3] 
#>    1.000000    2.000000    1.700000    2.480000    2.522000    3.240800 
#>        y[4]        y[5]        y[6]        y[7]        y[8]        y[9] 
#>    3.566120    4.343168    4.946775    5.887561    6.807122    8.021654 
#>       y[10]       y[11]       y[12]       y[13]       y[14]       y[15] 
#>    9.335072   10.953517   12.782971   14.971354   17.493216   20.471505 
#>       y[16]       y[17]       y[18]       y[19]       y[20]       y[21] 
#>   23.932496   27.997353   32.738188   38.292893   44.781526   52.376214 
#>       y[22]       y[23]       y[24]       y[25]       y[26]       y[27] 
#>   61.253859   71.640136   83.784528   97.989934  114.602048  134.031760 
#>       y[28]       y[29]       y[30]       y[31]       y[32]       y[33] 
#>  156.754547  183.330403  214.411254  250.761864  293.274874  342.995627 
#>       y[34]       y[35]       y[36]       y[37]       y[38]       y[39] 
#>  401.145637  469.154319  548.692801  641.716008  750.509925  877.748377 
#>       y[40]       y[41]       y[42]       y[43]       y[44]       y[45] 
#> 1026.558283 1200.596853 1404.141196 1642.193646 1920.604534 2246.216095 
#>       y[46]       y[47]       y[48] 
#> 2627.030519 3072.406693 3593.290144

reprex 包于 2021-06-12 创建 (v2.0.0 )


推荐阅读