У меня есть четыре разных временных ряда часовых измерений:
- Потребление тепла внутри дома
- Температура вне дома
- Солнечная радиация
- Скорость ветра
Я хочу иметь возможность прогнозировать потребление тепла в доме. Существует четкая сезонная тенденция, как на ежегодной, так и на ежедневной основе. Поскольку существует четкая корреляция между различными сериями, я хочу подогнать их под модель ARIMAX. Это можно сделать в R, используя функцию arimax из пакета TSA.
Я пытался прочитать документацию по этой функции и прочитать о передаточных функциях, но пока мой код:
regParams = ts.union(ts(dayy))
transferParams = ts.union(ts(temp))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1))
pred10 = predict(model10, newxreg=regParams)
дает мне:
где черная линия - это фактические измеренные данные, а зеленая линия - моя подходящая модель для сравнения. Мало того, что это не хорошая модель, но явно что-то не так.
Я признаю, что мои знания о ARIMAX-моделях и функциях передачи ограничены. В функции arimax () (насколько я понял) xtransf - это экзогенный временной ряд, который я хочу использовать (используя передаточные функции) для прогнозирования моего основного временного ряда. Но в чем разница между xreg и xtransf?
В целом, что я сделал не так? Я хотел бы иметь возможность получить лучшее прилегание , чем тот достигается от пленки (тепло ~ температура Radi ветра * время).
Изменения: на основе некоторых комментариев я удалил перевод и добавил вместо него xreg:
regParams = ts.union(ts(dayy), ts(temp), ts(time))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams)
где dayy - «число чисел года», а time - час дня. Температура снова температура снаружи. Это дает мне следующий результат:
что лучше, но не совсем то, что я ожидал увидеть.
источник
predict()
используется для прогнозирования, аfitted()
возвращает модель, подходящую за исторический период. Если вам нужна более конкретная помощь, вы должны опубликовать воспроизводимый пример с некоторым кодом.heat
линейного увеличения с часом дня, а затем спрыгиваете вниз, когда час возвращается к 1. Если вы используете фиктивные переменные, каждый час дня будет иметь свой собственный эффект. Запустите мой пример кода и обратите особое внимание на то, как я создаю свой объект xreg.stats
andforecast
является то, что они не соответствуют функциям передачи пробера. Документация по этойstats::arima
функции гласит следующее: Если включен член xreg, линейная регрессия (с постоянным членом, если include.mean имеет значение true и разностей нет) снабжается моделью ARMA для термина ошибки. Так что, если вам действительно нужно установить передаточные функции, похоже, чтоTSA::arimax
функция - это путьR
.Я некоторое время использовал R для прогнозирования нагрузки и могу предложить вам использовать
forecast
пакет и его бесценные функции (напримерauto.arima
).Вы можете построить модель ARIMA с помощью следующей команды:
с
y
вашим прогнозом (я полагаюdayy
),order
порядком вашей модели (с учетом сезонности) иexogenous_data
вашей температурой, солнечной радиацией и т. д. Функцияauto.arima
помогает вам найти оптимальный порядок модели. Вы можете найти краткое руководство по пакету прогнозирования здесь .источник
Я лично не понимаю функции передачи, но я думаю, что вы получили
xtransf
иxreg
изменили. По крайней мере, в базе R этоarima
то,xreg
что содержит ваши внешние переменные. У меня сложилось впечатление, что передаточная функция описывает, как (запаздывающие данные влияют на будущие значения), а не как .Я бы попытался использовать
xreg
для ваших экзогенных переменных, возможно, используя,arima
еслиarimax
требует передаточную функцию. Проблема в том, что ваша модель является ежедневной, но ваши данные имеют сезонную и дневную сезонность, и сейчас я не уверен, позаботится ли об этом первое различие (order=(*, 1, *)
или нет). (Вы, конечно, не получите волшебные круглогодичные прогнозы из модели, которая учитывает только ежедневную сезонность.)PS Что
time
вы используете в своемlm
? Буквальное время на часах или 1-й номер наблюдения? Я думаю, что вы могли бы получить что-то, используя модель со смешанным эффектом (lmer
вlme4
пакете), хотя я не выяснил, учитывает ли это правильное выполнение автокорреляцию, которая произойдет во временном ряду. Если не учесть, чтоlm
нет, вы можете получить интересную информацию, но ваша концепция точности прогноза будет слишком оптимистичной.источник