描述性时序分析及时间序列因素分解

目的:

  1. 掌握产生一个时间序列对象并画出时间序列数据的时序图;通过时序图了解时间序列常具有的特征;
  2. 了解时间序列数据的一般特征,掌握离散时间序列数据的一般构成要素;
  3. 时间序列因素分解

一、描述性时间序列分析---时序图

在时间序列分析中将数据按时间先后顺序连接起来描述数据的波动变化特征,这种图称之为时序图。在R程序中用作图函数plot来画一个时间序列对象的时序图。

通常,一个时间序列由以下几种要素构成,长期趋势(T):呈现某种明显的长期变化趋势(如线性增长,曲线增长);季节波动(S):因受季节性因素的影响而导致数据表现出稳定的周期性波动(通常体现在季度和月度数据);循环波动(C):受某种大尺度变化的影响而导致数据呈现从低到高或从高到低的反复循环波动,与季节性变化相比较,循环波动的周期性一般都是超过一年;随机波动(R):除长期趋势、季节性变化、循环波动以外,还收到其他各种因素的影响而导致数据呈现出不规律的随机波动。这四种要素通常按照加法乘法或者混合的形式组合起来构成一个时间序列。

二、时间序列分解

时间序列分解常用来描述序列中的趋势和季节波动,更广泛的还可包括循环波动、假日效应和周末效应等。这里我们只考虑趋势和季节波动的分解。时间序列分解的主要目的之一就是估计趋势和季节波动,由于其可以表示成时间的函数,因而也称之为时间序列的确定性分析。

时间序列分解的步骤:

  1. 估计趋势项。常用的方法有光滑方法(如移动平均法、局部光滑等)和回归方法。
  2. 去趋势。对于加法模型,将序列减掉估计的趋势部分;而对于乘法模型,则将序列除以估计的趋势部分。
  3. 估计季节波动。用除趋势后的序列估计季节波动,常用方法为回归法。
  4. 确定随机波动。对于加法模型,将原序列减掉趋势和季节波动;对于乘法模型,将原序列除以趋势和季节波动。(1-3步可以循环!

R中常用的分解函数有decompose和stl--该函数默认为加法模型。

# 用法:decompose(x, type = c("additive", "multiplicative"))
# stl(x, s.window, s.degree = 0,t.window = NULL, t.degree = 1,...)

本次案例以澳大利亚每季度的啤酒产量为对象,主要内容如下:

(1)画出该序列的时序图,说明该序列由哪几种要素构成,其构成模型是什么?并对其进行描述性分析。

(2)利用回归的方法该序列进行因素分解(提示:注意对于时间序列数据,可以用TSA程序包中的season函数取季节变量,time取时间变量)

三、代码实现及结果

(一)代码实现

1.使用ts()函数产生时间序列对象时间序列。

data <- read.table("beerprod.txt") ##读取数据
data <- as.matrix(data) ##生成矩阵
data1 <- NULL  #定义数据行
for (i in 1:8) { #按行形成新数据
  data1=c(data1,data[i,])
}

data2 <- ts(data1,start = 1, frequency = 4)  #数值型数据转化为时间序列对象
plot(data2,main = "时序图" ) #绘制时间序列图

2.使用season()提取季节变量,time()提取时间变量,使用lm()进行回归拟合趋势

time1 <- as.vector(time(data2)) #提取时间变量
fm1 <- lm(data2~time1) #回归拟合长期趋势
pred <- predict(fm1) #预测长期趋势
data3 <- data2-pred #剔除长期趋势
plot(pred) #绘制长期趋势图
plot(data3) #绘制去除长期趋势后的时序图

season1 <- season(data3) #提取季节变量
fm2<-lm(data3~season1)  #回归拟合季节趋势
pred1<-predict.lm(fm2)  #计算季节波动
data4<-data3-pred1  ##剔除季节波动
plot(pred1)  #绘制季节波动
plot(data4) #绘制随机波动图

(二)结果分析

1.时序图及描述性分析

整体来看,该数据逐年稳步增长,具有明显的长期变化趋势,数据反复循环波动,先增长后减少,周期大致在一年以内,推测具有季节趋势。该序列由长期趋势(T)、季节波动(S)和随机波动(R)3种要素构成,基于以上预测,估计模型为 :

Xt=\; Tt+St+Rt

2.利用回归的方法对该序列进行因素分解。

(1)提取时间变量做回归拟合,预测长期趋势并绘制长期趋势图

 (2)剔除长期趋势,绘制时间序列图如下:

 (3)提取季节变量做回归拟合,预测季节波动并绘制季节波动图

(4)剔除季节波动,绘制随机波动趋势如下: 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐