Анализ временных рядов и Р. Холт Уинтерс

У меня есть сезонный (интервал 7 дней) временной ряд, ежедневные данные за 30 дней. Как лучше всего сделать разумный прогноз? Временной ряд содержит заказы, сделанные с помощью приложения, с сезонностью 1 неделя (снижение продаж в начале недели). Я пробую подход Holt Winters с этим кодом:

(m <- HoltWinters(ts,seasonal = "mult"))
 plot(m)
 plot(fitted(m))

но это дает мне ошибку, например: Ошибка при разложении (ts (x [1L: wind], start = start (x), frequency = f), Season): временной ряд не имеет или меньше двух периодов.

Что ты посоветуешь?

РЕДАКТИРОВАТЬ: данные здесь


person xxxvincxxx    schedule 15.11.2015    source источник
comment
Вы можете предоставить некоторые данные?   -  person DatamineR    schedule 15.11.2015
comment
конечно: отредактировал мой пост   -  person xxxvincxxx    schedule 15.11.2015


Ответы (2)


Сначала вы должны определить ts объект. Предполагая, что ваши данные называются df:

ts <- ts(df$install, frequency = 7)
(m <- HoltWinters(ts,seasonal = "mult"))
 plot(m)
 plot(fitted(m))

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

Затем вы можете сделать такой прогноз (на 10 шагов вперед):

predict(m, n = 10)
Time Series:
Start = c(4, 5) 
End = c(5, 7) 
Frequency = 7 
            fit
 [1,] 1028.8874
 [2,] 1178.4244
 [3,] 1372.5466
 [4,] 1165.2337
 [5,]  866.6185
 [6,]  711.6965
 [7,]  482.2550
 [8,]  719.0593
 [9,]  807.6147
[10,]  920.3250

Слишком сложно ответить на вопрос о наилучшем методе. Обычно сравнивают характеристики разных моделей, учитывая их точность вне выборки, и выбирают ту, которая дает лучший результат.

person DatamineR    schedule 15.11.2015
comment
Спасибо за подсказку. Как вы думаете, разумный подход Холта Винтерса - разумный выбор? - person xxxvincxxx; 15.11.2015
comment
На самом деле сложно ответить. Я не знаю ваших данных. Метод HoltWinters отличается тем, что придает больший вес новым наблюдениям. Если вы можете предположить для своих данных, что новые наблюдения более репрезентативны для будущего, это может быть разумным подходом. - person DatamineR; 15.11.2015
comment
Благодарю. Я должен протестировать разные модели и проверить работоспособность. Но: как построить на одном графике реальные данные и подогнанные значения? отображение времени в x в правильном формате? - person xxxvincxxx; 15.11.2015

Вы можете использовать df $ data для хранения дат, соответствующих каждому дню в серии ts.

ts_series <- ts(df$install, frequency = 7)
ts_dates <- as.Date(df$data, format = "%d/%m/%Y")

Аналогичным образом даты для прогнозируемых значений могут быть сохранены в другой последовательности.

m <- HoltWinters(ts_series, seasonal = "mult")
predict_values <- predict(m, 10)
predict_dates <- seq.Date(tail(ts_dates, 1) + 1, length.out = 10, by = "day")

Последовательность дат позволяет построить ежедневный ряд с датами по оси x в правильном формате. Больше контроля за делениями по оси x можно получить с помощью функции axis.Date.

plot(ts_dates, ts_series, typ = "o"
  , ylim = c(0, 4000)
  , xlim = c(ts_dates[1], tail(predict_dates, 1))
  , xlab = "Date", ylab = "install", las = 1)
lines(predict_dates, predict_values, lty = 2, col = "blue", lwd = 2)
grid()

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

person josep maria porrà    schedule 04.04.2019