【问题标题】:Object not found error in Forecast Package预测包中未找到对象错误
【发布时间】:2019-08-17 07:06:21
【问题描述】:

我正在使用 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)。但是,我只是收到上述错误。

非常感谢任何帮助!

【问题讨论】:

    标签: r package forecast


    【解决方案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
    

    【讨论】:

    • 这绝对有效,但有没有办法在不在全局环境中设置变量的情况下处理这个问题?感谢您的帮助!
    • 这样更合适吗? @BurlyPotatoMan
    • 是的!谢谢!我刚刚发布了一个做同样事情的解决方案,只是代码更少。感谢您的帮助!
    • @BurlyPotatoMan 不用担心,这是一个有趣的问题,如果它回答了您的问题,请考虑接受答案(答案左上角的绿色勾号)。
    【解决方案2】:

    知道了!

    问题在于 fit 对象包含外部回归器的名称为“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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-20
      • 2017-08-26
      • 2013-11-25
      • 2018-01-04
      • 2013-06-22
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      相关资源
      最近更新 更多