我正在尝试使用forecastHybrid包中的cvts函数进行交叉验证,使用带有外部回归变量的" an“模型(ARIMA + NNETAR)。
我有两个变量,有100个观察值:Y和X
请注意:
length(Y) == length(X)
TRUE 我这样做了:
crossv =cvts(Y,
FUN=hybridModel, models="an", a.args=list(xreg=X,n.args=list(xreg=X),
rolling = TRUE, windowSize = 84, maxHorizon = 1, horizonAverage = FALSE)并得到了这个错误
Error in { :
task 1 failed - "variable lengths differ (found for 'xregg')"如果我试着把它作为一个函数传递。
CUSTOM=function(x){hybridModel(x, models="an", a.args=list(xreg=X),n.args=list(xreg=X))}
crossv2 = cvts(Y,
FUN=CUSTOM,
rolling = TRUE,
windowSize = 84,
maxHorizon = 1,
horizonAverage = FALSE)我得到了:
Error in { : task 1 failed - "object 'X' not found"当然,我可以分别对nnetar和arima进行交叉验证,然后对交叉验证预测进行平均,但是您知道为什么它不能通过cvts + hybrid model工作吗?
非常感谢。
发布于 2020-09-25 01:07:20
我终于找到了答案。我们应该在FUN函数中添加另一个xreg参数。然后,应该在函数外部写入第二个xreg参数(来自cvts函数)。然后将第二个xreg的值传递给第一个xreg。
y = ts(rnorm(100), start = c(1999,1), frequency = 12)
x = ts(rnorm(100), start = c(1999,1), frequency = 12)
cv = cvts(y, FUN = function(z, xreg = xreg),
forecastHybrid::hybridModel(z,models = "an")},
xreg=as.matrix(x),rolling = TRUE, windowSize = 84,
maxHorizon = 1, horizonAverage = FALSE)啊,真灵!
accuracy(cv)
ME RMSE MAE
Forecast Horizon 1 -0.2173456 0.9328878 0.7368945https://stackoverflow.com/questions/62734633
复制相似问题