Let's work with this data sample
timeseries<-structure(list(Data = structure(c(10L, 14L, 18L, 22L, 26L, 29L,
32L, 35L, 38L, 1L, 4L, 7L, 11L, 15L, 19L, 23L, 27L, 30L, 33L,
36L, 39L, 2L, 5L, 8L, 12L, 16L, 20L, 24L, 28L, 31L, 34L, 37L,
40L, 3L, 6L, 9L, 13L, 17L, 21L, 25L), .Label = c("01.01.2018",
"01.01.2019", "01.01.2020", "01.02.2018", "01.02.2019", "01.02.2020",
"01.03.2018", "01.03.2019", "01.03.2020", "01.04.2017", "01.04.2018",
"01.04.2019", "01.04.2020", "01.05.2017", "01.05.2018", "01.05.2019",
"01.05.2020", "01.06.2017", "01.06.2018", "01.06.2019", "01.06.2020",
"01.07.2017", "01.07.2018", "01.07.2019", "01.07.2020", "01.08.2017",
"01.08.2018", "01.08.2019", "01.09.2017", "01.09.2018", "01.09.2019",
"01.10.2017", "01.10.2018", "01.10.2019", "01.11.2017", "01.11.2018",
"01.11.2019", "01.12.2017", "01.12.2018", "01.12.2019"), class = "factor"),
client = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("Horns", "Kornev"), class = "factor"), stuff = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("chickens",
"hooves", "Oysters"), class = "factor"), Sales = c(374L,
12L, 120L, 242L, 227L, 268L, 280L, 419L, 12L, 172L, 336L,
117L, 108L, 150L, 90L, 117L, 116L, 146L, 120L, 211L, 213L,
67L, 146L, 118L, 152L, 122L, 201L, 497L, 522L, 65L, 268L,
441L, 247L, 348L, 445L, 477L, 62L, 226L, 476L, 306L)), .Names = c("Data",
"client", "stuff", "Sales"), class = "data.frame", row.names = c(NA,
-40L))
I want to perform forecast using auto.arima by group
# first the grouping variable
timeseries$group <- paste0(timeseries$client,timeseries$stuff)
# now the list
listed <- split(timeseries,timeseries$group)
library("forecast")
library("lubridate")
listed_ts <- lapply(listed,
function(x) ts(x[["Sales"]], start = start = c(2017, 1), frequency = 12) )
listed_ts
listed_arima <- lapply(listed_ts,function(x) auto.arima(x) )
#Now the forecast for each arima:
listed_forecast <- lapply(listed_arima,function(x) forecast(x,2) )
listed_forecast
do.call(rbind,listed_forecast)
If i do so i get forecast on future, but i want see, what auto.arima model predicts for initial value from my example.
To be more clear.
In my example Sales
for 01.04.2017 Horns chickens=374. Right? How can I see what value the auto.arima model predicted for this date and another dates from example data.
Those values are known as fitted values and they can be obtained with the function fitted
as follows:
lapply(listed_arima, fitted)
# $Hornschickens
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
# 2017 223.8182 223.8182 223.8182 223.8182 223.8182 223.8182 223.8182 223.8182 223.8182 223.8182 223.8182
#
# $Hornshooves
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 2017 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231 336.9231
# 2018 336.9231
#
# $KornevOysters
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 2017 137.125 137.125 137.125 137.125 137.125 137.125 137.125 137.125 137.125 137.125 137.125 137.125
# 2018 137.125 137.125 137.125 137.125
In this case results are not very interesting as all the fitted models are ARIMA(0,0,0) - white noise.
As a side comment, note that the solution is equivalent to
lapply(listed_arima, function(x) fitted(x))
For the same reason you may also use
listed_arima <- lapply(listed_ts, auto.arima)
来源:https://stackoverflow.com/questions/53924851/display-predicted-values-for-initial-data-using-auto-arima-in-r