【问题标题】:R xts time series extend recursivelyR xts 时间序列递归扩展
【发布时间】:2018-07-24 12:33:05
【问题描述】:

我有一个XTS 时间序列,我想根据之前的值x[t]=x[t-1]*1.01 计算未来值(2018-04-01 起)。 是否可以不做循环?

            FRA.GDPV.Q

2017-01-01 2.217110e+12
2017-04-01 2.232964e+12
2017-07-01 2.247932e+12
2017-10-01 2.263204e+12
2018-01-01 2.272640e+12
2018-04-01           NA
2018-07-01           NA
2018-10-01           NA
2019-01-01           NA

【问题讨论】:

标签: r date time-series


【解决方案1】:

在这种情况下,这是可能的,因为您基本上是将相同的值 (last_value) 乘以 1.01^1, 1.01^2, ...

mydata <- rnorm(10)  # sample data
last_value <- mydata[length(mydata)]  # last value

N=4  # will add 4 more values
fv_factors <- 1.01^(1:N)

new_values <- last_value*fv_factors  # computes new values
mydata <- c(mydata,extended_values)  # adds new values to mydata

# Comparing with loop
new_values2 <- c(last_value,numeric(4))  # Same as above
for (i in 2:(N+1)) {
  new_values2[i] <- new_values2[i-1]*1.01
}

round(new_values,4)==round(new_values2[-1],4)  # Same result

四舍五入不是必需的,这两种方法确实得到相同的值。

> round(new_values,4)==round(new_values2[-1],4)
[1] TRUE TRUE TRUE TRUE

【讨论】:

  • 谢谢你这个作品,但很抱歉我在现实生活中过度简化了我的问题我有像 x[t]=x[t-1]*1.01+0.1*y[t] 这样的方程,其中 y是另一个具有整个时期值的时间序列
  • 你可能无法摆脱 for 循环,如果你担心速度,可能值得看看 Rcpp 包:你可以用 C++ 编写循环并从 R 中调用它。