下面有一个循环,循环了tsCV
中的4种时间序列预测方法(滚动预测原点)。列表y中的第三个方法不会中断循环。但是,结果表z的目的是存储此用户定义函数的MAE(平均绝对错误)记录NaN
。
此预测功能是用户定义的,因为我需要指定damped=T
library(forecast)
x <- 8 # t +
y <- list(ses, holt, function(j, k){forecast(holt(j, h=k, damped=T))}, hw)
z <- list()
for (i in seq_along(y))
{
a <- data.frame(tsCV(AirPassengers, y[[i]], h=x))
a[1:12, ] <- NA # 1st 12 months' forecast likely to be meaningless
b <- colMeans(abs(a), na.rm=T)
c <- data.frame(model = i
,h = 1:x
,mae = b
)
z[[i]] <- c
}
z <- do.call(rbind, z)
z$model <- as.factor(z$model)
我对这里的用户定义函数有自己的想法: http://pkg.robjhyndman.com/forecast/reference/tsCV.html#see-also
谢谢。
答案 0 :(得分:3)
根据tsCV
的文档,提供的函数需要有一个实际名为“ h”的参数。因此,只需将功能更改为
y <- list(ses, holt, function(j, h){forecast(holt(j, h=h, damped=T))}, hw)
执行此操作时,不会返回NaN值。