【发布时间】:2023-04-05 01:54:01
【问题描述】:
到目前为止,当我有多个时间序列要预测时,我使用的是 Hyndman 教授的 this 方法。但是当我有大量 ts 时,它就相当慢了。
现在我正在尝试使用apply()函数如下
library(forecast)
fc_func <- function(y){
forecast(auto.arima(y),h=12)$mean
}
retail <- read.csv("https://robjhyndman.com/data/ausretail.csv",header=FALSE)
retail <- ts(retail[,-1],f=12,s=1982+3/12)
frc<- apply(retail,2 ,fc_func)
它似乎运行良好,但是当我使用for 循环时,如下所示:
ns <- ncol(retail)
h <- 12
fcast <- matrix(NA,nrow=h,ncol=ns)
for(i in 1:ns){
fcast[,i] <- forecast(auto.arima(retail[,i]),h=h)$mean
}
我得到不同的点预测。是什么原因?
编辑:我通过更改“fc_func”函数修复了它。现在它返回与for 循环相同的结果,但现在它也和for 循环一样慢
fc_func <- function(x){
ts(x,f=12,s=1982+3/12)->y
forecast(auto.arima(y),h=12)$mean
}
retail <- read.csv("https://robjhyndman.com/data/ausretail.csv",header=FALSE)
retail <- ts(retail[,-1],f=12,s=1982+3/12)
frc<- apply(retail,2 ,fc_func)
【问题讨论】:
-
我认为不应该是这种情况:D 我会尝试首先检查两个版本中的输入数据是否相同。也许通过在 for 循环中的 apply 和 retail[,i] 中打印 y 并比较它们。然后我会比较每个变量的两个版本的直接输出,再次打印它们。如果输入和输出没有差异,则必须与数据在最终对象中的存储方式有关。
-
代码是可重新应用的,我想任何人都会看到这两种方法返回不同的点预测,尽管它们使用相同的预测函数。
-
是的,只需添加一点 1 即可使其运行 :) 然而,这很奇怪,我将添加我的想法作为答案,所以我可以显示更吸引人的代码
-
我明白了:)。已更正
标签: r for-loop apply forecasting