预测包中未找到对象错误

Object not found error in Forecast Package

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

当 运行 这个函数时,我总是收到一个错误代码,上面写着, "Error in eval(expr, p) : object 'fitxreg' not found"。我已经尝试过调试,但我无法弄清楚到底是什么问题,但是当我恢复到 forecast 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()

我希望这是 return 来自 auto.arima() 的预测对象,它不使用外部回归变量(请注意 fitxreg 和 forxreg 均为 NULL)。但是,我只是得到了上述错误。

非常感谢任何帮助!

解决方案

我们可以添加一个检查以查看 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()

Returns:

   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

知道了!

问题是拟合对象包含外部回归量的名称 'fitxreg',当 forecast() 去寻找 'fitxreg' 时,它什么也没找到。对代码的以下更新现在会生成预测。感谢 Hector 提供的线索!

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()