######加载程序包
library(readxl)
library(tseries)
library(forecast)
library(TSA)
######预处理
GDP<-read_excel("D:/data/GDP.xlsx")
GDP1<-subset(GDP[1:40,])#预留3个数据
GDP2<-ts(GDP1,start=1978,frequency=1)
plot(GDP2,type="b",lty=1,col="red",
main="我国1978-2016的国内生产总值(GDP)",xlab="年份",ylab="金额(亿元)")
adf.test(GDP2)#单位根检验
ndiffs(GDP2)#判断需要几阶差分才能转为平稳序列
GDP3<-diff(GDP2)#一次差分
plot(GDP3,type="b",lty=1,col="blue",
main="一次差分后我国1978-2016的国内生产总值(GDP)",xlab="年份",ylab="金额(亿元)")
adf.test(GDP3)#对一次差分后的数据进行单位根检验
GDP4<-diff(GDP3)#二次差分
plot(GDP4,type="b",lty=1,col="blue",
main="二次差分后我国1978-2016的国内生产总值(GDP)",xlab="年份",ylab="金额(亿元)")
adf.test(GDP4)#对二次差分后的数据进行单位根检验
for(i in 1:2){
print(Box.test(GDP4,lag=6*i,type="Ljung-Box"))
}#白噪声检验
print(acf(GDP4,main="样本自相关图"))
print(pacf(GDP4,main="样本偏自相关图"))
######模型拟合
eacf(GDP4,ar.max=5,ma.max=5)
GDP5<-arima(GDP2,order=c(0,2,2),include.mean=T,method="ML")
GDP6<-arima(GDP2,order=c(1,2,3),include.mean=T,method="ML")
GDP7<-arima(GDP2,order=c(2,2,1),include.mean=T,method="ML")
######模型的显著性检验
t1<-(-0.5845)/0.1952
pt(t1,df=96,lower.tail=T)#ar1系数显著性检验
t2<-(-0.4787)/0.1722
pt(t2,df=96,lower.tail=T)#ar2的显著性检验
t3<-0.7810/0.2133
pt(t3,df=96,lower.tail=F)#ma1系数显著性检验
for(i in 1:2){
print(Box.test(GDP7$residuals,lag=6*i,type="Ljung-Box"))
}#残差白噪声检验
tsdiag(GDP7)#诊断函数
######预测2018-2020
forecast(GDP7,h=3)
plot(forecast,type="b",lty=1,col="purple",
main="预测我国2017-2020的国内生产总值(GDP)",xlab="年份",ylab="金额(亿元)")
######预测2021-2022
forecast1<-forecast::forecast(GDP7,h=5)