目录
1.导入包,查看数据是否为时间序列模型
library(tseries)
library(forecast)
library(openxlsx)
library(xlsx)
library(TSA)
setwd('/Users/langran/Desktop')
# ctrl+shift+C注释
#install.packages("showtext") mac显示中文
library(showtext)
showtext_auto(enable = TRUE)
# install.packages("readxl")
library(readxl)
# 读取xlsx文件
Nile1 <- read_excel("report.xlsx")
is.ts(Nile1)#是否时间序列模型
2.ACF PACF图
#1.验证序列的平稳性
#Nile<-as.numeric(unlist(Nile1))
oil <-ts(Nile1,start = 1,end= 44,frequency = 1)#设置时间按序列
oil=oil[,2]
head(oil)
# win.graph(width=8, height=8,pointsize=8)
plot(oil,xlab="时间(月)",ylab="指数") #原始数据趋势图
tsdisplay(oil)#时序图、acf、pacf图
3.平稳性检验
#单位根检验 H0:非平稳;不平稳需进行差分、
adf.test(oil)
#install.packages("fUnitRoots")
library(fUnitRoots)
#unitrootTest(Nile)
#纯随机性 H0:白噪声;拒绝原假设可以继续分析
Box.test(Nile,type = "Ljung-Box",lag=6)#lag时间间隔
4.差分
#差分
ndiffs(oil)#判断需要几阶差分才能转化为平稳序列。可见,Nile需要2阶差分后变为平稳序列
dNile <- diff(oil,2) #1阶差分
plot(dNile)
#单位根检验差分后是否平稳
adf.test(dNile)
# win.graph(width=8, height=8,pointsize=8)
tsdisplay(dNile)#时序图、acf、pacf
5.确定ARIMA(p,d,q)
#定阶
eacf(dNile)
auto.arima(dNile)
fit<-arima(dNile,order=c(1,1,2),method="ML")
fit
BIC(fit)#查看模型BIC
accuracy(fit)
6.残差诊断
#3.残差诊断
par(mfrow=c(1,1))
qqnorm(fit$residuals) #画图 残差是否服从正态分布
qqline(fit$residuals) #加线
shapiro.test(fit$residuals)
Box.test(fit$residuals, type="Ljung-Box") #残差独立性检验,不显著:残差平稳
tsdisplay(fit$residuals)
7.预测10期
#预测
library(stats)
fit=stats::arima(oil[1:44],order=c(2,1,2))
# oil.test=oil[35:44]
f.p1<-forecast(fit, 10,level=c(99.5))#预测20期
f.p1[[4]]
#作图
#win.graph(width=8, height=8,pointsize=8)
plot(f.p1[[4]], col="orange",xlab="days",ylab="price",type='l')