非平稳序列的确定性分析

非平稳序列的分析方法:

{

由确定性因素导致的非平稳通常显示出明显的规律性
可以分解为4大类因素:
1、长期趋势
2、循环波动(or交易日因素)
3、季节性因素
4、随机波动
因素之间的相互作用模式
加法模型: x t = T t + C t + S t + T t
乘法模型: x t = T t × C t × S t × T t

分析目的:

  1. 单纯测度某一个因素对序列的影响
  2. 测度各个因素之间的相互作用以及他们对序列的综合影响

一、 趋势分析

1、趋势拟合法

找到序列中的趋势,利用这种趋势对未来做预测

①线性拟合

线性模型:

{ x t = a + b t + I t E ( I t ) = 0 , V a r ( I t ) = σ 2

I t 为随机波动
利用 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年的化肥产量进行曲线拟合: x t = a 0 + a 1 t + a 2 t 2

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)

这里写图片描述
可见,两个函数的拟合结果一样:
x t = 319.0225 57.7690 t + 2.3551 t 2 + ε t , ε t N ( 0 , 263 2 )

绘制非线性拟合图:

y<-predict(x.fit2) #将nls得到的拟合值赋给y
y<-ts(y,start = 1949)
plot(x,type="p")
lines(y,col=2,lwd=2.5)

这里写图片描述

2、平滑法

①移动平均法

用一定时间间隔内的加权平均值作为下一期的预测值,权重为 1 n ,说明无论时间远近,过去的 n 期对下一期的影响是一样的。
如:在一个有30个序列值得时间序列当中,假如用4期的的加权平均值预测第31期,那么 x ^ 30 ( 1 ) = x 30 + x 29 + x 28 + x 27 + x 26 5

利用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")) 

这里写图片描述

②指数平滑法

在实际当中,大多数是近期对现在的影响较大,远期对现在的影响较小,所以在指数平滑法中各期权重随时间间隔的增大而减小

  • 简单指数平滑:

x ^ t ( 1 ) = x ~ t = α x t + ( 1 α ) x ~ t 1 ,指定 x ~ 0 = x 1 ,变化缓慢的序列,取较小的 α 值,反之取较大的 α 值。
只能做1期预测

  • Holt两参数指数平滑

    适用于含有线性趋势的序列
    思想:假定序列有较固定的趋势–每期都递增or递减 r ,那么第 t 期的 估计值就等于前一期的值加上固定的趋势变动值 r。但 r 不是固定的,是一个随机序列 r t

  • 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 个月的气温:

x i j = × j + = x ¯ S j + I i j

季节指数: S j = ,>1说明该月的值高于平均值,=1没有明显的季节效应


三、综合分析

分析既有趋势变动又有季节效应的序列

模型:
加法模型: x t = T t + S t + T t
乘法模型: x t = T t × S t × T t

利用函数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")

这里写图片描述
可见,在冬天零售总额偏高


猜你喜欢

转载自blog.csdn.net/qq_33341603/article/details/80381307