Я хочу преобразовать свой код временного ряда для одного временного ряда в автоматический код, который можно использовать для данных нескольких временных рядов (мои данные содержат месячные временные ряды).Мой общий подход для одного временного ряда состоял в том, чтобы убрать сезонную составляющую и использовать первые различия для достижения стационарности.Затем я использую auto.arima для получения параметров ARIMA.Я использую эти параметры для построения моей модели ARIMA с моими исходными данными временных рядов.Затем я прогнозирую и сравниваю с фактическими данными за 4 месяца (которые я вырезал ранее) и вычисляю СКО.Поскольку я не могу использовать свои фактические данные, я просто генерирую случайные временные ряды и набор тестов в качестве примера - конечно, результат не имеет особого смысла.
library('forecast')
set.seed(123)
# create random time series and 4 months testing data
ts <- ts(runif(26, min = 50, max = 3000), start = c(2017,01), end = c(2019,02), frequency = 12)
test.data <- runif(4, min = 50, max = 3000)
# Decomompose
comp.ts = decompose(ts)
# subtrect seasonal trend
ts2 <- ts - comp.ts$seasonal
ts2 <- diff(ts2, differences=1)
auto.arima(ts2, trace = T, seasonal = TRUE,ic = 'aicc', max.p = 10,max.q = 10,max.P = 10,max.Q = 10,max.d = 10, stepwise = F)
# Use auto.arima outcome as input
my.arima <- Arima(ts2, order=c(0,0,0),seasonal = list(order = c(0,1,0), period = 12),method="ML", include.drift = F)
# Forecast and calculate RMSE
data.forecast <- forecast(my.arima, h=4, level=c(99.5))
my.difference <- test.data - data.forecast$mean
my.rmse <- (sum(sqrt(my.difference^2)))/length(my.difference)
Поскольку мой фактический набор данных содержит более 500 временных рядов, мне нужно автоматизировать весь процесс.К сожалению, я пока не использовал R для временных рядов, поэтому у меня возникают проблемы с автоматизированным процессом.
Давайте предположим, что 4 случайных временных ряда с 4 случайными наборами тестов.Как я могу сгенерировать автоматизированный процесс для этих временных рядов (который я также могу использовать для своих фактических 500+ временных рядов), который делает то же самое, что и выше?
ts1 <- ts(runif(26, min = 50, max = 3000), start = c(2017,01), end = c(2019,02), frequency = 12)
ts2 <- ts(runif(26, min = 50, max = 3000), start = c(2017,01), end = c(2019,02), frequency = 12)
ts3 <- ts(runif(26, min = 50, max = 3000), start = c(2017,01), end = c(2019,02), frequency = 12)
ts4 <- ts(runif(26, min = 50, max = 3000), start = c(2017,01), end = c(2019,02), frequency = 12)
test.data1 <- runif(4, min = 50, max = 3000)
test.data2 <- runif(4, min = 50, max = 3000)
test.data3 <- runif(4, min = 50, max = 3000)
test.data4 <- runif(4, min = 50, max = 3000)
Спасибо за помощь!