非平稳序列的分析方法:
由确定性因素导致的非平稳通常显示出明显的规律性
可以分解为4大类因素:
1、长期趋势
2、循环波动(or交易日因素)
3、季节性因素
4、随机波动
因素之间的相互作用模式:
加法模型:
乘法模型:
分析目的:
- 单纯测度某一个因素对序列的影响
- 测度各个因素之间的相互作用以及他们对序列的综合影响
一、 趋势分析
1、趋势拟合法
找到序列中的趋势,利用这种趋势对未来做预测
①线性拟合
线性模型:
为随机波动
利用
lm( )
函数拟合线性趋势
#读入数据
x<-c(8444,9215,8879,8990,8115,9457,8590,9294,8997,9574,9051,9724,9120,
+ 10143,9746,10074,9578,10817,10116,10779,9901,11266,10686,10961,10121,
+ 11333,10677,11325,10698,11624,11502,11393,10609,12077,11376,11777,
+ 11225,12231,11884,12109)
#构造时间变量
t<-c(1:40)
x.fit<-lm(x~t)
summary(x.fit)
x<-ts(x)
plot(x,lwd=2.5)
abline(lm(x~t),col="red",lwd=3)
②曲线拟合
对曲线模型估计时,应通过变换将其转换为线性模型,再用最小二乘估计,用
lm( )
函数拟合;
不能转换的就用迭代法估计,用nls()
函数
例如,下面的例子,对1949-2008年的化肥产量进行曲线拟合:
a=read.table("D:\\Backup\\桌面\\R\\时间序列分析--基于R\\data\\file12.csv",sep = ",",header = T)
x<-ts(a$output,start = 1949)
plot(x)
时序图显示有明显的曲线递增趋势。
#lm()拟合
t1<-c(1:60)
t2<-t1^2
x.fit1<-lm(x~t1+t2)
summary(x.fit1)
#nls拟合
x.fit2<-nls(x~a+b*t1+c*t1^2,start = list(a=1,b=1,c=1)) #start指定迭代初始值
summary(x.fit2)
可见,两个函数的拟合结果一样:
绘制非线性拟合图:
y<-predict(x.fit2) #将nls得到的拟合值赋给y
y<-ts(y,start = 1949)
plot(x,type="p")
lines(y,col=2,lwd=2.5)
2、平滑法
①移动平均法
用一定时间间隔内的加权平均值作为下一期的预测值
,权重为 ,说明无论时间远近,过去的 n 期对下一期的影响是一样的。
如:在一个有30个序列值得时间序列当中,假如用4期的的加权平均值预测第31期,那么
利用TTR包中的SMA函数进行拟合简单移动平均趋势趋势
如:对北京1949-2008年的每年最高气温序列做5期移动平均拟合
library(TTR)
a=read.table("D:\\Backup\\桌面\\R\\时间序列分析--基于R\\data\\file6.csv",sep = ",",header = T)
x<-ts(a$temp,start = 1949)
x.ma<-SMA(x,5)
plot(x,type="o",lwd=1.5)
lines(x.ma,col=2,lwd=2.5)
legend(locator(1),cex=0.75,x.intersp=0.3,xjust = 0,yjust = 1, text.width=17,inset=5,c("观察值序列","5期移动平均拟合值序列"),lty = c(1,1),col = c("black","red"))
②指数平滑法
在实际当中,大多数是近期对现在的影响较大,远期对现在的影响较小,所以在指数平滑法中各期权重随时间间隔的增大而减小
- 简单指数平滑:
,指定 ,变化缓慢的序列,取较小的 α 值,反之取较大的 α 值。
只能做1期预测
Holt两参数指数平滑
适用于含有线性趋势的序列
思想:假定序列有较固定的趋势–每期都递增or递减 r ,那么第 t 期的 估计值就等于前一期的值加上固定的趋势变动值 r。但 r 不是固定的,是一个随机序列 。Holt三参数指数平滑
适合序列既含有趋势又含有季节
利用 HoltWinters( )
函数做平滑趋势拟合
例如:对每头奶牛月产量序列做3参数指数平滑,并预测未来两年产量
b<-read.table("D:\\Backup\\桌面\\R\\时间序列分析--基于R\\data\\file5.csv",sep = ",",header = T)
x<-ts(b$milk,start = c(1962,1),frequency = 12)
x.fit<-HoltWinters(x)
plot(x.fit)
legend(locator(1),cex=0.75,x.intersp=0.3,xjust = 0,yjust = 1, text.width=5,inset=5,c("观察值序列","Holt三参数指数平滑序列"),lty = c(1,1),col = c("black","red"))
#预测序列并绘制预测效果图
x.fore<-forecast(x.fit,h=24)
plot(x.fore,main = "HoltWinters三参数指数平滑序列预测图")
二、 季节效应分析
有周期性变化的事件—-季节效应
例如:第 i 年第 j 个月的气温:
季节指数: ,>1说明该月的值高于平均值,=1没有明显的季节效应
三、综合分析
分析既有趋势变动又有季节效应的序列
模型:
加法模型:
乘法模型:
利用函数decompose(x,type= )进行确定性因素分解。
type=”additive”,加法模型,默认
type=”mult”,乘法模型
例:对1993-2000年中国消费品零售总额序列进行确定性因素分解
c<-read.table("D:\\Backup\\桌面\\R\\时间序列分析--基于R\\data\\file14.csv",sep = ",",header = T)
x<-ts(c$sales,start = c(1993,1),frequency = 12)
plot(x)
x.fit<-decompose(x,type = "mult")
plot(x.fit)
输出季节指数图
plot(x.fit$figure,type="o")
可见,在冬天零售总额偏高