Ваш вопрос уже есть ответ в комментариях, но только повторить, вы должны установить частоту до 24, как вы хотите, чтобы прогнозировать часовые данные:
sensor = ts(hourlyPressure, frequency = 24)
К следующей точке с пожеланиями для фиксации дат в вашем участке, позволяет начать с некоторых данных: например
###Sequence of numbers to forecast
hourlyPressure<-c(1:24, 12:36, 24:48, 36:60)
###Sequence of Accompanying Dates
dates<-seq(as.POSIXct("2016-04-19 00:00:00"), as.POSIXct("2016-04-23 02:00:00"), by="hour")
Теперь мы можем установить данные hourlyPressure быть ТС() объекта (давайте игнорировать даты за минуту)
sensor <- ts(hourlyPressure, frequency=24)
Теперь подходим к вашей модели аримы, в этом примере я буду использовать функцию auto.arima из пакета прогноза, так как поиск лучшей модели аримы здесь не в центре внимания (хотя использование auto.arima() довольно надежный способ найти лучшие модели ARIMA в соответствии с вашими данными):
###fit arima model to sensor data
sensor_arima_fit<- auto.arima(sensor)
Вы можете построить эти данные с соответствующими датами, просто указав й значение на графике функции()
plot(y=sensor_arima_fit$x, x=dates)
Намного сложнее, когда мы прогнозируем наши данные и хотите распечатать исходные данные, с прогнозами и правильными датами.
###now forecast ahead (lets say 2 days) using the arima model that was fit above
forecast_sensor <- forecast(sensor_arima_fit, h = 48)
Теперь для построения исходных данных, прогнозы с правильными датами, мы можем сделать следующее:
###set h to be the same as above
h <- c(48)
###calculate the dates for the forecasted values
forecasted_dates<-seq(dates[length(dates)]+(60*60)*(1),
dates[length(dates)]+(60*60)*(h), by="hour")
###now plot the data
plot(y=c(forecast_sensor$x, forecast_sensor$mean),
x=seq(as.POSIXct("2016-04-19 00:00:00"),as.POSIXct(forecasted_dates[length(forecasted_dates)]), by="hour"),
xaxt="n",
type="l",
main="Plot of Original Series and Forecasts",
xlab="Date",
ylab="Pressure")
###correctly formatted x axis
axis.POSIXct(1, at=seq(as.POSIXct("2016-04-19 00:00:00"),
as.POSIXct(forecasted_dates[length(forecasted_dates)]),
by="hour"),
format="%b %d",
tick = FALSE)
Строит исходные данные с прогнозами и даты являются правильными. Однако, как и в случае с пакетом прогнозов, возможно, мы хотим, чтобы прогнозы были синими.
###keep same plot as before
plot(y=c(forecast_sensor$x, forecast_sensor$mean),
x=seq(as.POSIXct("2016-04-19 00:00:00"),as.POSIXct(forecasted_dates[length(forecasted_dates)]), by="hour"),
xaxt="n",
type="l",
main="Plot of Original Series and Forecasts",
xlab="Date",
ylab="Pressure")
axis.POSIXct(1, at=seq(as.POSIXct("2016-04-19 00:00:00"),
as.POSIXct(forecasted_dates[length(forecasted_dates)]),
by="hour"),
format="%b %d",
tick = FALSE)
###This time however, lets add a different color line for the forecasts
lines(y=forecast_sensor$mean, x= forecasted_dates, col="blue")
Я нашел это сообщение по временным рядам весьма полезным для этого. http://stats.stackexchange.com/questions/120806/frequency-value-for-seconds-minutes-intervals-data-in-r – theArun
Спасибо. Я наткнулся на ссылку, но это не решило, скорее смутило меня больше. –
Поскольку ваши данные агрегируются почасово, частота = 24 в день. Зависит, если у вас есть данные за неделю или месяц. – theArun