Ошибка объекта не найдена в пакете прогноза - PullRequest
0 голосов
/ 26 марта 2019

Я работаю с пакетом прогноза (версия 8.5) в R (версия 3.5.3), пытаясь выполнить прогнозирование ARIMA с помощью великолепной функции auto.arima ().

При запуске этой функции я всегда получаю код ошибки, который говорит: Msgstr "Ошибка в 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). Однако я просто получаю ошибку, описанную выше.

Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Понятно!

Проблема в том, что объект подгонки содержит имя внешнего регрессора как «fitxreg», и когда прогноз () ищет «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()
1 голос
/ 26 марта 2019

Решение

Мы можем добавить проверку, чтобы убедиться, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...