1

我正在使用 R(版本 3.5.3)中的预测包(版本 8.5),尝试使用宏伟的 auto.arima() 函数进行一些 ARIMA 预测。

运行此函数时,我总是收到一个错误代码,上面写着“eval(expr, p) 中的错误:找不到对象‘fitxreg’”。我已经尝试过调试,但我无法准确找出问题所在,但是当我恢复到预测 8.4 时,这段代码可以正常工作。

arimaIssue <- function(fitxreg = NULL, forxreg = NULL){
  library(forecast)

  fit <- auto.arima(AirPassengers[1:87], 
                    seasonal = FALSE, 
                    xreg = fitxreg, lambda = 'auto', allowmean = TRUE)

  fcast <- forecast(fit, xreg = forxreg, h = 3)

  return(fcast)
}

arimaIssue()

我希望这会从 auto.arima() 返回一个不使用外部回归器的预测对象(注意 fitxreg 和 forxreg 都是 NULL)。但是,我只是收到上述错误。

任何帮助是极大的赞赏!

4

2 回答 2

1

解决方案

我们可以添加检查 fitxreg 是否为 NULL

arimaIssue <- function(fitxreg = NULL, forxreg = NULL){
  library(forecast)

  if(missing(fitxreg)){
    fit <- auto.arima(AirPassengers[1:87], 
                    seasonal = FALSE, 
                    xreg = NULL, lambda = 'auto', allowmean = TRUE)
  } else {
    fit <- auto.arima(AirPassengers[1:87], 
                            seasonal = FALSE, 
                            xreg = fitxreg, lambda = 'auto', allowmean = TRUE)
  }
  fcast <- forecast(fit, xreg = forxreg, h = 3)

  return(fcast)
}

arimaIssue()

回报:

   Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
88       320.8124 278.8410 370.7503 259.3371 401.0221
89       310.9559 254.0070 384.2721 229.0197 431.6157
90       301.5867 239.6709 384.1640 213.1853 439.0395

如果您不介意为全局环境设置变量,则解决方案,

arimaIssue <- function(fitxreg = NULL, forxreg = NULL){
  library(forecast)
  fitxreg <<- fitxreg
    fit <- auto.arima(AirPassengers[1:87], 
                    seasonal = FALSE, 
                    xreg = fitxreg, lambda = 'auto', allowmean = TRUE)

  fcast <- forecast(fit, xreg = forxreg, h = 3)

  return(fcast)
}

arimaIssue()


   Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
88       320.8124 278.8410 370.7503 259.3371 401.0221
89       310.9559 254.0070 384.2721 229.0197 431.6157
90       301.5867 239.6709 384.1640 213.1853 439.0395
于 2019-03-26T19:40:31.107 回答
1

知道了!

问题是 fit 对象包含外部回归器的名称为“fitxreg”,当 forecast() 去寻找“fitxreg”时,它什么也没找到。现在对代码的以下更新会产生预测。感谢赫克托提供关于发生了什么的线索!

arimaIssue <- function(fitxreg = NULL, forxreg = NULL){
  library(forecast)

  fit <- auto.arima(AirPassengers[1:87], seasonal = FALSE, xreg = fitxreg, lambda = 'auto',
                    allowmean = TRUE)

  if(is.null(fitxreg)){
    fit$call$xreg <- NULL
  }


  fcast <- forecast(fit, xreg = forxreg, h = 3)

  return(fcast)
}

arimaIssue()
于 2019-03-26T20:02:31.200 回答