我已经阅读了
时间序列预测:将差异预测转换回差异水平之前
和
如何"无差别"时间序列变量
不幸的是,这些都没有给出任何明确的答案,如何使用差异方法(diff())转换在ARIMA中完成的预测,以达到固定系列。
代码示例。
## read data and start from 1 jan 2014
dat<-read.csv("rev forecast 2014-23 dec 2015.csv")
val.ts <- ts(dat$Actual,start=c(2014,1,1),freq=365)
##Check how we can get stationary series
plot((diff(val.ts)))
plot(diff(diff(val.ts)))
plot(log(val.ts))
plot(log(diff(val.ts)))
plot(sqrt(val.ts))
plot(sqrt(diff(val.ts)))
##I found that double differencing. i.e.diff(diff(val.ts)) gives stationary series.
#I ran below code to get value of 3 parameters for ARIMA from auto.arima
ARIMAfit <- auto.arima(diff(diff(val.ts)), approximation=FALSE,trace=FALSE, xreg=diff(diff(xreg)))
#Finally ran ARIMA
fit <- Arima(diff(diff(val.ts)),order=c(5,0,2),xreg = diff(diff(xreg)))
#plot original to see fit
plot(diff(diff(val.ts)),col="orange")
#plot fitted
lines(fitted(fit),col="blue")
这给了我一个完美的健身时间系列。但是,如何将拟合值从当前形式重新转换为其原始指标?我的意思是从双差异到实际数字?对于log我知道我们可以做10 ^拟合(拟合)平方根有类似的解决方案,但是如何做差异,这也是双重差异?
对此有任何帮助吗?经过几天的严格锻炼,我陷入了困境。
我运行测试以检查差异是否对auto.arima函数的模型拟合有任何影响,并发现它确实存在。因此auto.arima无法处理非固定序列,分析师需要花费一些精力才能将系列转换为静止。
首先,auto.arima没有任何差异。橙色是实际值,蓝色适合。
ARIMAfit <- auto.arima(val.ts, approximation=FALSE,trace=FALSE, xreg=xreg)
plot(val.ts,col="orange")
lines(fitted(ARIMAfit),col="blue")
其次,我尝试了差异
ARIMAfit <- auto.arima(diff(val.ts), approximation=FALSE,trace=FALSE, xreg=diff(xreg))
plot(diff(val.ts),col="orange")
lines(fitted(ARIMAfit),col="blue")
第三,我做了差异2次。
ARIMAfit <- auto.arima(diff(diff(val.ts)), approximation=FALSE,trace=FALSE,
xreg=diff(diff(xreg)))
plot(diff(diff(val.ts)),col="orange")
lines(fitted(ARIMAfit),col="blue")
目视检查可以表明第三张图更准确。我知道这一点。挑战在于如何将这种以双差异形式存在的拟合值重新转换为实际度量标准!
答案 0 :(得分:2)
与diff
相反的是cumsum
,但你需要知道每个差异的起始值。
e.g:
set.seed(1234)
x <- runif(100)
z <- cumsum(c(x[1], cumsum(c(diff(x)[1], diff(diff(x))))))
all.equal(z, x)
[1] TRUE
分享您的一些数据以制作可重复的示例,以便更好地帮助回答问题。
答案 1 :(得分:2)
如果您希望差分对于获得平稳性是必要的,那么为什么不简单地在函数调用中包含最大差分顺序?也就是说,&#34; I&#34;在ARIMA中,在拟合ARMA模型之前是差分的顺序,如果
y = diff(diff(x)),y是ARMA(p,q)过程,
然后
x遵循ARIMA(p,2,q)过程。
在auto.arima()
中,您可以使用d
参数指定差异(如果涉及季节,则指定D
)。所以,你想要这样的东西(最多3个差异):
fit <- auto.arima(val.ts, d=3, ...)
由此,您可以验证拟合值是否确实映射到原始数据
plot(val.ts)
lines(fit, col="blue")