r - 在 ARIMA 或 ETS 预测后为最终结果添加季节性和非平稳性
问题描述
TS<-ts(Product_Dist_Training_Trans[,17], frequency = 7)
plot(TS)
library(tseries)
library(forecast)
TSETS<- TS
adf<- adf.test(TS)
Order<- ndiffs(TS)
if (adf$p.value>.05)
{
for(i in 1:Order){
TSDiff<- diff(TS)
TS<- TSDiff}} else
{
TS
}
decomp<- decompose(TS)
TSadj<- TS-decomp$seasonal
Arima<- auto.arima(TSadj)
AM<- forecast(Arima, h = 29)
AM$mean
plot(AM)
ETS<- ets(TSETS)
fc <- forecast(ETS, h = 29)
fc$mean
plot(fc)
我正在尝试使用 118 天的训练数据预测 29 天的每日销售量,我同时使用 ARIMA 和 ETS 预测。我在 ARIMA 的最终结果中得到了负值(因为我使 ARIMA 的系列是固定的和非季节性的)以及 ETS,我如何在最终结果中获得正确的预测值?另外我应该如何对这两种方法进行比较以获得更准确的结果?
解决方案
首先,您定义了频率 = 7 的时间序列对象,这意味着您正在定义数据的每周季节性
要使用 arima 预测时间序列,请使用以下代码:
TS<-ts(Product_Dist_Training_Trans[,17], frequency = 7)
plot(TS)
library(tseries)
library(forecast)
decomp<-stl(TS , s.window = "periodic")
plot(decomp)
decomp_components<-as.data.frame(decomp$time.series)
seasonal_component<-ts(decomp_components$seasonal, frequency = 7)
relation1<-auto.arima(seasonal_component,seasonal = T ,max.p = 10, max.q = 10, max.d = 5, max.P = 5, max.Q = 5, max.D = 2, max.order = 30, start.p = 1, start.q = 1)
result1<-forecast(relation1, model = "Arima", h = 29)
plot(result1)
deseasonal_cnt<-seasadj(decomp)
relation2 <- auto.arima(deseasonal_cnt,seasonal = F ,max.p = 10, max.q = 10, max.d = 5,max.P = 5, max.Q = 5, max.D = 2, max.order = 30, start.p = 1, start.q = 1)
result2<-forecast(relation2, model = "Arima",h=29)
plot(result2)
result<-result1$mean+result2$mean
如果这仍然为您提供负值,这意味着趋势分量正在减少,因此为避免负值,请改为使用零
result[result<0]<- 0
您的代码的问题是您只预测了季节性部分,您还必须预测非季节性部分,然后结合结果
推荐阅读
- assembly - 错误 A2023 指令操作数必须具有 LGDT 指令的大小
- javascript - Redux-saga,yield call(history.push, 'pathname'),只在第一次工作,阻塞所有其他调用
- python - 累计收益
- python - render_to_string 给出错误,而渲染工作
- node.js - 无法使用nodeJS在ejs中呈现错误页面
- xamarin.forms - 如何在 ios 中设置 Xamarin.forms 选项卡页未选中的图标和文本颜色
- javascript - 如何在 React-App 中查找导入特定 .js 文件的所有 .js 文件
- c - 是否可以创建一个读取半个 C 文本文件的函数?
- javascript - 窗口和 DOM 加载
- android-gradle-plugin - 没有方法签名: com.crashlytics.tools.gradle.CrashlyticsPlugin 在 Mac