R:理解R中的时间序列函数

zd287kbt  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(151)

假设我有以下数据:

library(forecast)
library(lubridate)

set.seed(123)

weeks <- rep(seq(as.Date("2010-01-01"), as.Date("2023-01-01"), by = "week"), each = 1)
counts <- rpois(length(weeks), lambda = 50)
df <- data.frame(Week = as.character(weeks), Count = counts)

# Convert Week column to Date format
df$Week <- as.Date(df$Week)

# Create a time series object
ts_data <- ts(df$Count, frequency = 52, start = c(year(min(df$Week)), 1))

我正在学习如何在R中使用时间序列模型(例如ARIMA)的“滚动交叉验证”。

据我所知,这涉及(按时间顺序排列数据):

  • 将一个模型拟合到前60个数据点,预测接下来的5个并记录误差
  • 接下来,将一个模型模型拟合到前65个点,预测接下来的5个点并记录误差
  • 等等

以前,我曾尝试自己编写R代码来实现这个过程(Correctly understanding loop iterations)-然而,这似乎很困难,现在我有兴趣看看是否有这样一个过程的现成实现。
在互联网上查找时,我发现了以下功能,我认为可能能够完成所需的任务:https://search.r-project.org/CRAN/refmans/forecast/html/tsCV.html
我试着在我的数据上运行这个函数:

# note: I am specifically interested in using the auto.arima() function
far2 <- function(x, h){forecast(auto.arima(x), h=h)}
e <- tsCV(ts_data, far2, h=5)

代码似乎正在运行-但我不确定我是否正确地这样做。
例如:

  • 此代码是否在前5个点拟合时间序列模型,预测下一个5,记录错误-然后在前10个点拟合模型,预测下一个5,记录错误等?
  • 从这里开始,当代码完成运行时-我需要自己手动计算MAE和RMSE错误吗?
    有人可以评论一下吗?

谢谢!

**注意:**是否使用类似https://business-science.github.io/modeltime.resample/articles/getting-started.html的东西更好?

smtd7mpg

smtd7mpg1#

首先,你关于提前5步交叉验证的说法是有缺陷的。正如你发布的图片所显示的那样,你参考了Rob Hyndman的漂亮教科书:
https://otexts.com/fpp3/tscv.html
但你在这里提到的:
接下来,将一个模型模型拟合到前65个点,预测接下来的5个点并记录误差
与同一本教科书中的多步预测相矛盾:

根据上图,无论预测范围如何,您的训练集每次都会向前移动1个观测值!您可以将训练窗口向前移动5个(或一些k)步,但你不会有预测值之间!因此,扩大你的训练窗口,每次1步是更相关的。如果你坚持跳跃5期提前每次训练你的模型,您可以通过以下方式实现:

# Time series cross-validation accuracy
    data_tbl |>
      stretch_tsibble(.init = 3, .step = 5) |>
      relocate(Date, Symbol, .id)

上述代码的详细解释再次在:https://otexts.com/fpp3/tscv.html。基本上,.step参数控制每次训练模型时要跳过的步长,而.init是初始训练样本的大小。
关于代码的问题:
实际上,您编写代码的方式确保了您所做的扩展窗口预测与我发布的图片相对应。您可以通过提供以下内容将其转换为滚动窗口预测(window = window_length)到tsCV函数,但是没有通过将训练窗口移动5步来执行交叉验证的方法,或者通过tsCV中的k〉1个步骤(只能跳转1个步骤)。我从tsCV包的文档中发布了一个快照:

检查:https://www.rdocumentation.org/packages/forecast/versions/8.21/topics/tsCV
最后但并非最不重要的是,您收到的错误是通过扩展窗口方案预测获得的交叉验证错误(完全如我发布的图片所示)。
编辑:有3种类型的预测:递归(扩展窗口),滚动和固定预测在[5]中解释得很好。
在时间序列交叉验证中,可以使用递归(扩展)窗口或滚动窗口。Hyndman通常将交叉验证中的两种方案称为“对滚动预测原点的评估”。但是,您必须了解,可以通过两种方式执行“对滚动预测原点的评估”:

1) keeping the training window size fixed (say equal to T=100) - referred to as "rolling forecast" in the above reference;
2) expanding the training window size by 1 observation each time - expanding (recursive) window forecasting.

有时,作者使用术语“向前走”交叉验证来指代这两种方案(例如12,最初是由于[3])。
参考文献:

[1] Hastie, Trevor, Robert Tibshirani, and Jerome H. Friedman. 2001. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. Springer Science & Business Media.

[2] Miller, Alan. 2002. Subset Selection in Regression. 2nd ed. New York: Chapman and Hall/CRC. https://doi.org/10.1201/9781420035933.

[3] Hjorth, Urban, and U. Hjort. 1982. “Model Selection and Forward Validation.” Scandinavian Journal of Statistics 9 (2): 95–105.

[4] https://otexts.com/fpp3/tscv.html

[5] Elliott, Graham, and Allan Timmermann. 2008. “Economic Forecasting.” Journal of Economic Literature 46 (1): 3–56. https://doi.org/10.1257/jel.46.1.3.

相关问题