@evilking
2018-05-01T22:47:30.000000Z
字数 5778
阅读 1533
时间序列篇
所谓预测,就是要利用序列已观察到的样本值对序列在未来某个时刻的取值进行估计.
目前对平稳序列最常用的预测方法是线性最小方差预测.线性是指预测值为观察值的线性函数,最小方差是指预测方差达到最小.
根据 模型的平稳性和可逆性,可以用传递性和逆转形式等级描述该序列:
代入可得:
一个有趣的现象是,根据线性函数的可加性,所有的未知历史信息 都可以用已知历史信息 的线性函数表示出来.以 为例,已知
把 代入上式,得:
同理,对于未来任意 时刻的序列值 ,最终都可以表示成已知历史信息的线性函数,并用该函数形式估计 的值:
用 衡量预测误差:
根据 平稳模型的性质和线性函数的可加性,显然有
序列值 可以如下分解:
在 序列场合:
下面还是以我国邮路及农村投递线路每年新增里程数为例,演示模型预测:
> library(forecast)
> a <- read.table("data/file8.csv",sep = ",", header = T)
> x <- ts(a$kilometer, start = 1950)
> x.fit <- arima(x,order = c(2,0,0), method = "ML")
> x.fore <- forecast(x.fit,h = 5)
> x.fore
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
2009 9.465302 -15.02455 33.95516 -27.98870 46.91930
2010 6.214789 -23.94131 36.37089 -39.90499 52.33456
2011 8.392250 -21.76556 38.55006 -37.73015 54.51465
2012 11.677647 -19.95516 43.31046 -36.70056 60.05586
2013 12.885518 -19.44684 45.21788 -36.56256 62.33360
#系统默认输出预测图
> plot(x.fore)
#个性化输出预测图
> L1 <- x.fore$fitted -1.96*sqrt(x.fit$sigma2)
> U1 <- x.fore$fitted + 1.96*sqrt(x.fit$sigma2)
> L2 <- ts(x.fore$lower[,2],start = 2009)
> U2 <- ts(x.fore$upper[,2],start = 2009)
> c1 <- min(x,L1,L2)
> c2 <- max(x,L2,U2)
> plot(x,type="p",pch=8,xlim=c(1950,2013),ylim=c(c1,c2))
> lines(x.fore$fitted,col=2,lwd=2)
> lines(x.fore$mean,col=2,lwd=2)
> lines(L1,col=4,lty=2)
> lines(U1,col=4,lty=2)
> lines(L1,col=4,lty=2)
> lines(L2,col=4,lty=2)
> lines(U2,col=4,lty=2)
>
对一个 序列 而言,有
所以: 当预测步长小于等于 模型的阶数 时, 可以分解为:
即 序列 步的预测值为:
这说明 序列理论上只能预测 步之内的序列走势,超过 步预测值恒等于序列均值.这是由 序列自相关 步截尾的性质决定的.
序列预测方差为:
在 模型场合: