chapter15.1-2 时间序列1--时间序列分解

15.1 时间序列--概念

15.1.1 概念

  • 横截面数据:在一个给定的时间点测量变量值
  • 纵向数据:随着时间的变化反复测量变量值

对时序数据的研究包括两个基本问题:

  1. 对数据的描述【这段时间内发生了什么?趋势?季节性?】
  2. 预测【接下来会发生什么?时间序列模型的预测】

15.1.2 生成时间序列

在R中,一个数值型向量或数据框中的一列可通过ts()函数存储为时序对象

myseries <- ts(data, start=, end=, frequency=)

  • data:原始的包含观测值的数值型向量
  • start:时序的起始时间
  • end:时序的终止时间
  • frequency:为每个单位时间所包含的观测值数量(如frequency=1对应年度数据,frequency=12对应月度数据,frequency=4对应季度数据
sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20, 22, 31, 40, 29, 25, 21, 22, 54, 31, 25, 26, 35)
tsales <- ts(sales, start=c(2003, 1), frequency=12) 
tsales
plot(tsales)   # 绘制时间序列

start(tsales)         # start()获得起始时间
end(tsales)           # end()获得结束时间
frequency(tsales)     # frequency()获得频率

# window()函数取子集
tsales.subset <- window(tsales, start=c(2003, 5), end=c(2004, 6)) 
tsales.subset

15.2 时序的平滑化和季节分解

时间序列数据【存在季节性因素,如月度数据、季度数据等】可以被分解为趋势因子、季节性因子和随机因子

  • 趋势因子trend component能捕捉到长期变化
  • 季节性因子seasonal component能捕捉到一年内的周期性变化
  • 随机(误差)因子irregular/error component能捕捉到那些不能被趋势或季节效应解释的变化。

可以通过相加模型,也可以通过相乘模型来分解数据
\begin{align} \\&Y_{t} = Trend_{t} + Seasonal_{t} + Irregular_{t} \\ \\&Y_{t} = Trend_{t} \times Seasonal_{t} \times Irregular_{t} \end{align}
对于乘法模型,可以取对数,将其转化为加性模型

那么如何将时间序列进行拆分,分解成这三部分呢?对于趋势和季节的分解,下面介绍移动平均和季节因子

15.2.1 分解趋势--移动平均

时序数据集中通常有很显著的随机或误差成分。为了辨明数据中的规律,我们总是希望能够撇开这些波动,画出一条平滑曲线。画出平滑曲线的最简单办法是简单移动平均。比如每个数据点都可用这一点和其前后q个点的平均值来表示,这就是居中移动平均centered moving average
S_{t} =\frac{ (Y_{t-q}+...+Y + ...+Y_{t+q})}{2q+1}

St是时间点t的平滑值,k=2q+1是每次用来平均的观测值的个数,一般我们会将其设为一个奇数。居中移动平均法的代价是,每个时序集中我们会损失最后的q个观测值,平均值消除了数据中的一些随机性

使用R语言forecast包中的ma()函数来对Nile时序数据进行平滑处理

ma(ts,k=)

  • ts:时间序列数据
  • k:移动平均的步长为k
library(forecast) 
opar <- par(no.readonly=TRUE) 
par(mfrow=c(2,2)) 
ylim <- c(min(Nile), max(Nile)) 
plot(Nile, main="Raw time series") 
plot(ma(Nile, 3), main="Simple Moving Averages (k=3)", ylim=ylim) 
plot(ma(Nile, 7), main="Simple Moving Averages (k=7)", ylim=ylim) 
plot(ma(Nile, 15), main="Simple Moving Averages (k=15)", ylim=ylim) 
par(opar)

从图像来看,随着k的增大,图像变得越来越平滑。因此我们需要找到最能画出数据中规律的k,避免过平滑或者欠平滑。这里并没有什么特别的科学理论来指导k的选取,我们只是需要先尝试多个不同的k,再决定一个最好的k

除此之外,还可以使用加权移动平均来进行平滑化
\begin{align} \\& assuming\ k=2q+1 \\ \\& weight = [a_{t-q},...,a_{t},...,a_{t+q}] \\ \\& S_{t} = \sum _{j = t-q}^{t+q}ajY_{j} \end{align}

加权移动平均法的一大优势是它可以让趋势周期项的估计更平滑。观测值不是直接完全进入或离开计算,它们的权重缓步增加,然后缓步下降,让曲线更加平滑

15.2.2 季节分解

季节指数的计算

  • 季节因子(Seasonal factor)

\begin{align} \\& \bar x_{k} = \frac{\sum_{i=1}^{n} x_{i}k}{n}, n = 1,2,3... \\ \\& \bar x = \frac{\sum_{i=1}^{n} \sum_{k=1}{m}x_{i}k}{nm},n = 1,2,3... ; k=1,2,3...m \\ \\&S_{k} = \frac{\bar x_{k}}{\bar x},k=1,2,3....m \end{align}

  1. Sk代表第k个季节的季节因子,分子代表第k个季度的平均数,分母代表总平均数
  2. 季节因子表示第k个季节的数相对于总平均数的占比,反应当前季节相对于平均值的变化
  3. Sk越接近1,季节性越弱,Sk大于1说明该季度的值高于平均值,Sk小于1说明该季度的值低于平均值
  • 季节性差分

    有时候我们需要消除季节性,需要将季节性从数据中剔除,这个过程叫季节调整
    \Delta _sx_{t} = x_{t} - x_{t-s}
    s代表周期,即使用t期的数据减t-s期的数据

将时序分解为趋势项、季节项和随机项的常用方法是用LOESS光滑做季节性分解。这可以通 过R中的stl()函数

stl(ts, s.window=, t.window=)

  • ts:要分解的时间序列
  • s.window:控制季节效应变化的速度
  • t.window:控制趋势项变化的速度

stl函数只能处理相加模型,如果要处理相乘模型,可以使用log进行转换

AirPassengers  # 国际航班乘客数据集
plot(AirPassengers) 
lAirPassengers <- log(AirPassengers) 
plot(lAirPassengers, ylab="log(AirPassengers)")
fit <- stl(lAirPassengers, s.window="period")  # 将季节效应限定为每年都一样
plot(fit)
fit$time.series

相关参考:

[1] https://www.youtube.com/watch?v=2mM8BUqWAZ4

[2] https://zhuanlan.zhihu.com/p/21877990

[3] //www.greatytc.com/p/e6d286132690

[4] https://nwfsc-timeseries.github.io/atsa-labs/sec-boxjenkins-stationarity.html

[6] Kabacoff, Robert. R 语言实战. Ren min you dian chu ban she, 2016.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,966评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,170评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,909评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,959评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,851评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,583评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,956评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,590评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,878评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,892评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,719评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,501评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,957评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,124评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,440评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,003评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,211评论 2 339