时间序列第一次作业
一.数据介绍
本数据来自 Time Series Data Library (citing: Makridakis, Wheelwright and
Hyndman (1998)),数据记载了 1985 年 1 月至 1996 年 10 月美国电力行业的月电
力生产量共 142 期的月份数据。
二.代码及备注解释
setwd("E:/Rstuff") #设置工作目录#
work=read.table(file="work.txt",header=T,sep=" ") #读入数据#
work=ts(work,frequency=12,start=c(1985,1)) #将读入数据生成为时间序列#
plot(work) #绘制时间序列图#
acf(work) #绘制时间序列自相关图#
pacf(work) #绘制时间序列偏自相关图#
work1=diff(work,lag=12) #对原始序列进行 12 步差分#
plot(work1) #绘制差分后序列的时序图#
Box.test(work1) #检验差分后的时间序列是否为平稳序列#
acf(work1,36) #绘制差分后的时间序列自相关图#
pacf(work1,100) #绘制差分后的时间序列偏自相关图#
fit=arima(work,order=c(1,1,1),seasonal=list(order=c(0,1,1), period =12),
include.mean=T,method="CSS-ML",transform.pars=T) #建立模型#
for(i in 1:6){
print(Box.test(fit$residual,type="Ljung-Box",lag=i))
} #对残差序列进行延迟 1-6 阶白噪声检验#
sum((fit$residuals)^2)/142 #计算 MSE#
library(forecast) #加载“forecast”包#
fore=forecast(fit,h=24) #预测未来 12 期#
L1=fore$fitted-1.96*sqrt(fit$sigma2) #构造拟合期数据置信区间下限#
U1=fore$fitted+1.96*sqrt(fit$sigma2) #构造拟合期数据置信区间上限#
L2=ts(fore$lower[,2],start=c(1996,10),frequency=12) #构造预测期数据置信区间
下限#
U2=ts(fore$upper[,2],start=c(1996,10),frequency=12) #构造预测期数据置信区间
上限#
a1=min(work,L1,L2) #确定 plot 图中 y 轴最小值#
a2=max(work,U1,U2) #确定 plot 图中 y 轴最大值#
plot(work,pch=8,xlim=c(1985,1998),ylim=c(a1,a2)) #绘制时序散点图#
lines(fore$fitted,col="red",lwd=2) #在散点图基础上绘制线#
lines(fore$mean,col="green",lwd=2) #在原图上绘制预测期的均值线#
lines(L1,col="blue",lty=2) #绘制拟合期数据置信区间下限#
lines(U1,col="blue",lty=2) #绘制拟合期数据置信区间上限#
lines(L2,col="blue",lty=2) #绘制预测期数据置信区间下限#
lines(U2,col="blue",lty=2) #绘制预测期数据置信区间上限#
abline(v=c(1996,10)) #在 1996 年 10 月处绘制参考线#
三.分析过程
setwd("E:/Rstuff")
设置工作目录;
work=read.table(file="work.txt",header=T,sep=" ")
读入数据;
work=ts(work,frequency=12,start=c(1985,1))
将读入数据生成为时间序列;
plot(work)
绘制时间序列图;
分析:
由时序图可以看出,此时间序列存在明显的趋势成分和季节成分,并且其季
节成分随着时间的推移方差变大,猜想可能需要用乘积模型来拟合并预测。
Time
X227.86
1986 1988 1990 1992 1994 1996
200 220 240 260 280 300
评论10