Основная редакция: Я хотел бы сказать большое спасибо Дэйву и Нику за их ответы. Хорошая новость заключается в том, что у меня получился цикл (принцип заимствован из поста профессора Гиднмана о пакетном прогнозировании). Чтобы объединить невыполненные запросы:
а) Как мне увеличить максимальное число итераций для auto.arima - кажется, что при большом количестве экзогенных переменных auto.arima достигает максимальных итераций перед тем, как сойтись в конечной модели. Пожалуйста, поправьте меня, если я неправильно понимаю это.
б) В одном ответе Ника подчеркивается, что мои прогнозы для часовых интервалов основаны только на этих часовых интервалах и не зависят от событий, произошедших ранее в течение дня. Мои инстинкты, связанные с этими данными, говорят мне, что это не должно часто вызывать серьезную проблему, но я открыт для предложений относительно того, как справиться с этим.
в) Дейв указал, что мне требуется гораздо более сложный подход к определению времени опережения / отставания, связанного с моими переменными предиктора У кого-нибудь есть опыт с программным подходом к этому в R? Я, конечно, ожидаю, что будут ограничения, но я хотел бы продвинуть этот проект настолько далеко, насколько смогу, и я не сомневаюсь, что он должен быть полезен и для других здесь.
d) Новый запрос, но полностью связанный с поставленной задачей - учитывает ли auto.arima регрессоры при выборе заказов?
Я пытаюсь прогнозировать посещения магазина. Мне нужна способность учитывать движущиеся праздники, високосные годы и спорадические события (по сути, выбросы); Исходя из этого, я понимаю, что ARIMAX - моя лучшая ставка, использующая экзогенные переменные, чтобы попытаться смоделировать множественную сезонность, а также вышеупомянутые факторы.
Данные записываются 24 часа с почасовыми интервалами. Это оказывается проблематичным из-за количества нулей в моих данных, особенно во времена дня, когда количество посещений очень низкое, а иногда и вовсе отсутствует, когда магазин только что открылся. Кроме того, часы работы являются относительно неустойчивыми.
Кроме того, вычислительное время огромно при прогнозировании как один полный временной ряд с 3 годами + исторических данных. Я полагал, что это ускорило бы вычисление каждого часа дня в виде отдельных временных рядов, и при тестировании этого в более загруженные часы дня, как представляется, дает более высокую точность, но опять-таки оказывается проблема с ранними / поздними часами, которые не т постоянно получать посещения. Я полагаю, что этот процесс выиграл бы от использования auto.arima, но он не может сойтись в модели до достижения максимального числа итераций (следовательно, с использованием подбора вручную и предложения maxit).
Я попытался обработать «пропущенные» данные, создав экзогенную переменную для посещений = 0. Опять же, это прекрасно работает для более загруженного времени суток, когда нет единственных посещений, когда магазин закрыт в течение дня; в этих случаях экзогенная переменная успешно, кажется, справляется с этим для прогнозирования вперед и не включает в себя влияние дня, который был ранее закрыт. Однако я не уверен, как использовать этот принцип в отношении прогнозирования более тихих часов, когда магазин открыт, но не всегда получает посещения.
С помощью сообщения профессора Хиндмана о пакетном прогнозировании в R я пытаюсь создать цикл для прогнозирования 24-й серии, но, похоже, он не хочет прогнозировать на 13:00 и не может понять, почему. Я получаю «Ошибка в optim (init [mask], armafn, method = optim.method, hessian = TRUE,: конечное разностное значение без конечных значений [1]», но все серии имеют одинаковую длину, и я, по сути, использую та же матрица, я не понимаю, почему это происходит. Это означает, что матрица не имеет полного ранга, нет? Как я могу избежать этого в этом подходе?
https://www.dropbox.com/s/26ov3xp4ayig4ws/Data.zip
date()
#Read input files
INPUT <- read.csv("Input.csv")
XREGFDATA <- read.csv("xreg.csv")
#Subset time series data from the input file
TS <- ts(INPUT[,2:25], f=7)
fcast <- matrix(0, nrow=nrow(XREGFDATA),ncol=ncol(TS))
#Create matrix of exogenous variables for forecasting.
xregf <- (cbind(Weekday=model.matrix(~as.factor(XREGFDATA$WEEKDAY)),
Month=model.matrix(~as.factor(XREGFDATA$MONTH)),
Week=model.matrix(~as.factor(XREGFDATA$WEEK)),
Nodata=XREGFDATA$NoData,
NewYearsDay=XREGFDATA$NewYearsDay,
GoodFriday=XREGFDATA$GoodFriday,
EasterWeekend=XREGFDATA$EasterWeekend,
EasterMonday=XREGFDATA$EasterMonday,
MayDay=XREGFDATA$MayDay,
SpringBH=XREGFDATA$SpringBH,
SummerBH=XREGFDATA$SummerBH,
Christmas=XREGFDATA$Christmas,
BoxingDay=XREGFDATA$BoxingDay))
#Remove intercepts
xregf <- xregf[,c(-1,-8,-20)]
NoFcast <- 0
for(i in 1:24) {
if(max(INPUT[,i+1])>0) {
#The exogenous variables used to fit are the same for all series except for the
#'Nodata' variable. This is to handle missing data for each series
xreg <- (cbind(Weekday=model.matrix(~as.factor(INPUT$WEEKDAY)),
Month=model.matrix(~as.factor(INPUT$MONTH)),
Week=model.matrix(~as.factor(INPUT$WEEK)),
Nodata=ifelse(INPUT[,i+1] < 1,1,0),
NewYearsDay=INPUT$NewYearsDay,
GoodFriday=INPUT$GoodFriday,
EasterWeekend=INPUT$EasterWeekend,
EasterMonday=INPUT$EasterMonday,
MayDay=INPUT$MayDay,
SpringBH=INPUT$SpringBH,
SummerBH=INPUT$SummerBH,
Christmas=INPUT$Christmas,
BoxingDay=INPUT$BoxingDay))
xreg <- xreg[,c(-1,-8,-20)]
ARIMAXfit <- Arima(TS[,i],
order=c(0,1,8), seasonal=c(0,1,0),
include.drift=TRUE,
xreg=xreg,
lambda=BoxCox.lambda(TS[,i])
,optim.control = list(maxit=1500), method="ML")
fcast[,i] <- forecast(ARIMAXfit, xreg=xregf)$mean
} else{
NoFcast <- NoFcast +1
}
}
#Save the forecasts to .csv
write(t(fcast),file="fcasts.csv",sep=",",ncol=ncol(fcast))
date()
Я был бы полностью признателен за конструктивную критику того, как я поступаю по этому поводу, и любую помощь, чтобы этот скрипт работал. Я знаю, что есть другое доступное программное обеспечение, но я строго ограничен использованием R и / или SPSS здесь ...
Кроме того, я очень новичок в этих форумах - я постарался дать как можно более полное объяснение, продемонстрировать предыдущие исследования, которые я провел, а также привести воспроизводимый пример; Я надеюсь, что этого достаточно, но, пожалуйста, дайте мне знать, если есть что-то еще, что я могу предоставить, чтобы улучшить свой пост.
РЕДАКТИРОВАТЬ: Ник предложил мне использовать дневные итоги в первую очередь. Я должен добавить, что я проверил это, и экзогенные переменные действительно дают прогнозы, которые отражают ежедневную, еженедельную и годовую сезонность. Это было одной из других причин, по которым я думал прогнозировать каждый час как отдельную серию, хотя, как упоминал Ник, мой прогноз на 4 часа дня в тот или иной день не будет зависеть от предыдущих часов дня.
РЕДАКТИРОВАТЬ: 09/08/13, проблема с циклом была просто связана с первоначальными заказами, которые я использовал для тестирования. Я должен был заметить это раньше и уделить больше внимания попытке auto.arima работать с этими данными - см. Пункты а) и d) выше.