首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在带有XREG的hybridModel上使用cvts?

如何在带有XREG的hybridModel上使用cvts?
EN

Stack Overflow用户
提问于 2020-07-05 05:25:20
回答 1查看 99关注 0票数 0

我正在尝试使用forecastHybrid包中的cvts函数进行交叉验证,使用带有外部回归变量的" an“模型(ARIMA + NNETAR)。

我有两个变量,有100个观察值:Y和X

请注意:

代码语言:javascript
运行
复制
length(Y) == length(X)

TRUE 

我这样做了:

代码语言:javascript
运行
复制
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)

并得到了这个错误

代码语言:javascript
运行
复制
Error in { : 
  task 1 failed - "variable lengths differ (found for 'xregg')"

如果我试着把它作为一个函数传递。

代码语言:javascript
运行
复制
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)

我得到了:

代码语言:javascript
运行
复制
Error in { : task 1 failed - "object 'X' not found"

当然,我可以分别对nnetar和arima进行交叉验证,然后对交叉验证预测进行平均,但是您知道为什么它不能通过cvts + hybrid model工作吗?

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2020-09-25 01:07:20

我终于找到了答案。我们应该在FUN函数中添加另一个xreg参数。然后,应该在函数外部写入第二个xreg参数(来自cvts函数)。然后将第二个xreg的值传递给第一个xreg

代码语言:javascript
运行
复制
    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)

啊,真灵!

代码语言:javascript
运行
复制
accuracy(cv)

                        ME      RMSE       MAE
Forecast Horizon  1 -0.2173456 0.9328878 0.7368945
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62734633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档