小编Fra*_*ard的帖子

在 R 中生成非平稳数据和 auto.arima

我生成了自己虚构的销售数据以执行时间序列分析。

它应该代表一家成长中的公司,因此我与趋势合作。但是,我阅读了一些教程并经常阅读信息,即 auto.arima 函数不应预测非平稳时间序列。

但是我收到了有意义的结果,如果我要区分数据(我也是这样做的),输出就没有多大意义。

所以我的问题来了:我可以对auto.arima我的数据使用这个函数吗,这显然有一个趋势?

最好的问候并提前致谢,弗朗西斯科

eps <- rnorm(100, 30, 20)
trend <- seq(1, 100, 1)
trend <- 3 * trend
Sales <- trend + eps
timeframe<-seq(as.Date("2008/9/1"),by="month",length.out=100)
Data<-data.frame(Sales,timeframe) 

plot(Data$timeframe,Data$Sales)

ts=ts(t(Data[,1]))
plot(ts[1,],type='o',col="black")

md=rwf(ts[1,],h=12,drift=T,level=c(80,95))
auto.arima(ts[1,])
Run Code Online (Sandbox Code Playgroud)

使用预测函数,我们可以绘制下一年的预期销售额: plot(forecast(auto.arima(ts[1,]),h=12))

将预测功能与我们的自动化 ARIMA 结合使用可以帮助我们计划下一个季度

forecast(auto.arima(ts[1,]),h=4)
plot(forecast(auto.arima(ts[1,])))
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用自动绘图功能

fc<-forecast(ts[1,])
autoplot(fc)
Run Code Online (Sandbox Code Playgroud)

下一步是分析我们的时间序列。我执行adf test,它具有数据非平稳的零假设。因此,对于 5% 的默认阈值,我们的 p 值必须大于 0.05 才能被证明是非平稳的。

library(tseries)
adf=adf.test(ts[1,])
adf
Run Code Online (Sandbox Code Playgroud)

输出表明数据是非平稳的:

acf
acf=Acf(ts[1,])
Acf(ts[1,])
Run Code Online (Sandbox Code Playgroud)

自相关几乎稳步下降,这也指向非平稳数据。做 akpss.test应该验证我们的数据是非平稳的,因为它的零假设与 adf 测试相反。

我们是否期望值小于 0.05

kpss=kpss.test(ts[1,])
kpss
Run Code Online (Sandbox Code Playgroud)

我们得到 0.01 的 p 值,进一步证明数据有趋势

ndiffs(ts[1,]) …
Run Code Online (Sandbox Code Playgroud)

analytics r time-series

3
推荐指数
1
解决办法
3485
查看次数

标签 统计

analytics ×1

r ×1

time-series ×1