изменить ось / масштаб графика временного ряда после прогноза

Я изо всех сил пытаюсь изменить ось x (время) для графика прогноза временных рядов. Я пробовал много моделей, но борюсь с той же проблемой. Я собираюсь написать код для подгонки модели, прогноза и графика для одной из моделей. Во-первых, это мой первоначальный временной ряд. Примечание: я настраиваю свою модель на данные обучения за 2008-2016 годы и тестирую свою модель на своих тестовых данных за 11 месяцев 2017 года.

введите здесь описание изображения

Разделение данных.

sal.ts <- window(sal.ts.original, start=c(2008,1), end=c(2016,12))
sal.test <- window(sal.ts.original, start=c(2017,1))

Теперь модель.

sal.hw.mul <- HoltWinters(sal.ts, seasonal = "mult")
sal.hw.mul
fc.hwm <- forecast(sal.hw.mul, h=11)
fc.hwm
plot(fc.hwm, xlim=c(2017,2017+11/12), main = "Forecast from Mutltiplicative HW", xlab = "Year", ylab = "Total Sales, $M")
lines(sal.test,col='red', lwd=2)
legend("topleft", c("Actual", "Predicted"), col = c(4,2), lty = 1)

Вот мой прогнозный график:  введите описание изображения здесь

Видите уродливые 2017.0, 2017.2 .... 2017.8? Я хочу вместо этого сказать 1,2,3, .... 11 за 11 месяцев 2017 года.

Да, я хочу только построить график своих тестовых данных и сделать прогноз по ним, а не для всей серии.

Я почти уверен, что моя проблема связана с тем, что я использую функцию xlim. Я использую эту функцию xlim, чтобы просто отобразить месяцы 2017 года, и если я не буду использовать это, R отобразит всю серию с 2008 по 2017 год. Я много пытался поиграть с функцией оси, установив xaxt = "n" в команде plot, но все равно не мог понять.

Дайте мне знать, если вам понадобится от меня дополнительная информация. Любая помощь будет оценена по достоинству.

Обновите, по чьему-то предложению я попытался написать настраиваемую ось, установив xaxt = 'n' в моем графике. Вот изменение кода.

x <- seq(1,11,1)
fc.hwm <- forecast(sal.hw.mul, h=11)
fc.hwm
layout(1:1)
plot(fc.hwm, xaxt='n', xlim=c(2017,2017+11/12), main = "Forecast from Mutltiplicative HW", xlab = "Year", ylab = "Total Sales, $M")
axis(side=1, at= x, labels=c("1","2","3","4","5","6","7","8","9","10","11"))
lines(sal.test,col='red', lwd=2)
legend("topleft", c("Actual", "Predicted"), col = c(4,2), lty = 1)

введите здесь описание изображения

Как видите. Это приводит меня к цели. Я могу удалить текущую метку оси, но не могу написать новую ось. Этот новый код даже не выдает мне ошибки, иначе я бы попытался отладить его. Он принимает мой код, но не дает желаемого результата.


person Mayur    schedule 16.04.2018    source источник


Ответы (1)


Вот идея. Я не уверен, как выглядят данные, но я предполагаю, что у вас есть тип Date для переменной даты - и это означает, что ваша последовательность «by» целых чисел от 1 до 11 может размещать эти новые метки за пределами пределы сюжета. Вместо этого попробуйте использовать последовательность даты.

Измените это: x ‹- seq (1,11,1)

Примерно так: x ‹- seq.Date (as.Date (" 2017-01-01 "), as.Date (" 2017-11-01 ")," months ")

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

person Afton Coombs    schedule 18.04.2018
comment
Хороший совет, Афтон. Итак, я делаю прогноз на 11 месяцев (h = 11). Я попытался изменить последовательность для x, как вы предложили, но это не сработало. Любое другое предложение? Я все еще получаю ту же пустую ось, что и на последнем опубликованном мной изображении. :( Пожалуйста, задайте мне любые другие вопросы, которые могут помочь мне решить эту проблему. - person Mayur; 20.04.2018