WedX - журнал о программировании и компьютерных науках

Ошибка при вычислении точности модели таймсерий в R (Ошибка в NextMethod (.Generic): объект (list) не может быть принудительно приведен к типу 'double')

С помощью этого кода:

#plotting time series from year 1998 to 2008 
    year.time_series <- ts(t_AMOUNT,start = c(1998) , frequency = 12 ) #Monthly 12
    plot(year.time_series)
#splitting the timeseries for further model evaluation 
    train <- window(year.timeseries, start=1998,end=2005)
    test <- window(year.timeseries, start=2005, end=2008)

#using models to check the accuracy results
    etsfit <- ets(train)
    summary(etsfit)

    plot(train, main="ETS Forecast", ylab = "ets(training set)", cex.lab = 1.5, cex.main = 1.5, cex.axis = 1.5)
    lines(etsfit$fitted, col="orange")

#forecast
    forecast.ets <- forecast(etsfit, h=24)
    summary(forecast.ets)
    plot(forecast.ets)

    plot(forecast.ets, main = "2 Year Forecast Using ETS Model",
         xlim = c(1998, 2008), cex.lab = 1.5, cex.main = 1.5, cex.axis = 1.5)
    lines(test, col="red")

    library(Metrics)
#input = forecast values, actual values
    accuracy(forecast.ets,test)

Я получаю следующую ошибку на accuracy(forecast.ets,test):

Ошибка в NextMethod (.Generic): объект
(список) не может быть приведен к вводу 'double'

Дополнительно: Предупреждающее сообщение:
В !=.default (фактическое, прогнозируемое):
более длинная длина объекта не кратна длине более короткого объекта.

Есть ли способ разбить временной ряд и рассчитать его точность?


Ответы:


1

Проблема в том, что вы используете Metrics::accuracy(), а не forecast::accuracy(), и это функция, которая выполнит то, что я думаю, вы хотите. После некоторого объяснения причины у меня также есть несколько общих замечаний о том, как задавать вопросы о переполнении стека, которые могут быть вам полезны, если у вас в будущем возникнет еще один вопрос по этому сайту.

Metrics::accuracy() vs. forecast::accuracy()

Мы можем увидеть некоторые различия между функциями, если посмотрим на файлы справки (help("forecast::accuracy") и help("Metrics::accuracy")).

Аргументы в пользу точности прогнозов похожи на

accuracy(f, x, test = NULL, d = NULL, D = NULL, ...)

где f - «Объект класса« прогноз »или числовой вектор, содержащий прогнозы ....» и x - «Необязательный числовой вектор, содержащий фактические значения такой же длины, что и объект, или временной ряд, перекрывающийся с временами f. " Это соответствует тому, как вы пытались его использовать, передавая в качестве первого аргумента объект класса прогноза, а в качестве второго - вектор фактических значений.

Если вы хотите использовать Metrics::accuracy(), его аргументы похожи на

accuracy(actual, predicted)

где actual - это «основной истинный вектор, где элементы вектора могут быть любого типа переменной», а predicted - «предсказанный вектор, где элементы вектора представляют собой предсказание для соответствующего значения в фактическом состоянии». Другими словами, вашим первым аргументом должны быть только сами прогнозы, а не вся другая информация, содержащаяся в forecast объекте. Я также не думаю, что это дает вам тот тип метрики точности, который вам нужен для такого рода анализа; он дает «долю элементов в фактическом состоянии, которые равны соответствующему элементу в прогнозе».

Несколько советов, как задавать вопросы в будущем

Сначала я бы посмотрел на отличный ресурс Как сделать отличный Воспроизводимый пример R. Затем я дам вам код, который я использовал для воспроизведения вашей проблемы, и вы увидите некоторые изменения, которые мне пришлось внести даже для начала работы (мои комментарии начинаются с ###):

#plotting time series from year 1998 to 2008 
### Since we don't have t_AMOUNT, we can't recreate your data
# year.time_series <- ts(t_AMOUNT, start = c(1998), frequency = 12) #Monthly 12
### So I did the following to make some dummy data
set.seed(42)
year.time_series <- ts(rnorm(12*11), start = c(1998), frequency = 12 )
plot(year.time_series)
#splitting the timeseries for further model evaluation
### Since there are spelling changes below for some reason,
### I had to do the next line (or change the variable names below)
year.timeseries <- year.time_series 
train <- window(year.timeseries, start=1998, end=2005)
test <- window(year.timeseries, start=2005, end=2008)

#using models to check the accuracy results
### We need the forecast library for ets(),
### but it wasn't loaded in your code
library(forecast) 
etsfit <- ets(train)
summary(etsfit)

plot(train, main = "ETS Forecast", ylab = "ets(training set)",
     cex.lab = 1.5, cex.main = 1.5, cex.axis = 1.5)
lines(etsfit$fitted, col = "orange")

#forecast
forecast.ets <- forecast(etsfit, h = 24)
summary(forecast.ets)
plot(forecast.ets)

plot(forecast.ets, main = "2 Year Forecast Using ETS Model",
     xlim = c(1998, 2008), cex.lab = 1.5, cex.main = 1.5, cex.axis = 1.5)
lines(test, col = "red")

library(Metrics)
#input = forecast values, actual values
accuracy(forecast.ets,test)
forecast::accuracy(forecast.ets, test)
24.09.2018
  • Спасибо за вашу помощь. Этот прогноз :: точность (прогноз.етс, тест) работает. 24.09.2018
  • @Logica Рад, что это сработало! Не забудьте принять ответ, нажав [ing] на галочку рядом с ответом, чтобы переключить его с серого цвета. заполнить. Ура! 24.09.2018
  • Мне было интересно, не могли бы вы помочь мне выяснить, хорошие или плохие результаты, полученные с помощью метода прогноз :: точность ()? Учебный набор -9307315 (ME) 112315906 (RMSE) 65976168 (MAE) -2760.9186 (MPE) 2802.6128 (MAPE) 0,6907705 (MASE) 0,01781224 (ACF1) NA (Theil's U) Тестовый набор -117005759 (ME) 361431964 (R50MSE) MAE) -201,7622 (MPE) 226,7654 (MAPE) 2,7642377 (MASE) 0,13804565 (ACF1) 0,7776152 (U Тейла) соответственно? Например, по каким метрикам я должен оценивать модель. 25.09.2018
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]