#下载和安装包
install.packages("forecast")
install.packages("tseries")
install.packages("readxl")
install.packages("aTSA")
library(forecast)
library(tseries)
library(readxl)
library(aTSA)
#导入数据集
Nile
#1.绘制时序图
plot(Nile)
#划分训练集与测试集
train<-window(Nile,start=1871,end=1960)
test<-window(Nile,start=1961,end=1970)
#自相关图#偏自相关图
acf(train)
pacf(train)
#一阶差分
ndiffs(train) #判断需要几阶差分才能转化为平稳序列。
dtrain <- diff(train) #一阶差分
#单位根平稳性检验
ADF<-adf.test(dtrain) #P值小于显著性水平,认为该序列显著平稳
#差分后序列纯随机性检验
for(k in 1:2)print(Box.test(dtrain,lag=6*k,type="Ljung-Box"))
#差分后序列自相关和偏自相关
acf(dtrain)
pacf(dtrain)
#手动定阶拟合
fit011 <- Arima(train, order = c(0,1,1))
fit011
summary(fit011)
fit110 <- Arima(train, order = c(1,1,0))
fit110
fit010 <- Arima(train, order = c(0,1,0))
fit010
fit111 <- Arima(train, order = c(1,1,1))
fit111
summary(fit111)
fit210<- Arima(train, order = c(2,1,0))
fit210
fit212 <- Arima(train, order = c(2,1,2))
fit212
fit012<- Arima(train, order = c(0,1,2))
fit012
#.模型自动定阶及拟合,基于最小AIC准测
fit <- auto.arima(train)
fit
accuracy(fit)
#3.模型显著性检验
tsdiag(fit111)
Box.test(fit111$residuals, type="Ljung-Box") #残差检验,不显著:残差平稳
#4.用ARIMA(1,1,1)模型做预测
fore<-forecast::forecast(fit111, 10)#预测10期
#预测效果图
plot(fore, xlab="Year", ylab="Annual Flow")
lines(fore$fitted,col=2,lty=2)