R语言之数据分析高级方法「时间序列」
作者简介Introduction
姚某某
知乎专栏:https://zhuanlan.zhihu.com/mydata
往期回顾:
R语言之高级数据分析「聚类分析」
本节主要总结「数据分析」的「时间序列」相关模型的思路。
「时间序列」是一个变量在连续时点或连续时期上测量的观测值的序列,它与我们以前见过的数据有本质上的区别,这个区别在于之前的数据都在一个时间的横截面上去测量、计算数据,而「时间序列」给出了一种时间轴线上纵向的视角,将时间作为自变量,测量出一系列纵向数据。
关于「时间序列」的预测模型,我所了解的常用模型有三种:1. 移动平均 2. 指数预测模型 3. ARIMA 预测模型
0. 时序的分解
要研究时序如何预测,首先需要将复杂的时序数据进行分解,将复杂的时序数据分解为单一的分解成分,这样能利用统计方法进行拟合,然后个个击破,最后再合成为我们需要预测的未来时序数据。
前人在这一问题上已经得到很好的结论,通过对时序数据现实意义的理解,一般将时序数据分解为四个成分:
1. 水平项
2. 趋势项
3. 季节效应(衍生出去为周期项)
4. 随机波动
水平项,即剔除时序数据的趋势影响和季节影响后,时序数据所剩的成分,它代表着时序数据在时间轴上相对稳定的一个基础值。就像一个原点一样,在这个原点上去考虑时间所带来的趋势影响和季节影响。
趋势项,它用于捕捉时序数据的长期变化,是逐步增长还是逐步下降。就像在二元空间中的一个单调函数。
季节效应,衍生出去就是周期型,在一定时间内,时序数据所包含的周期型变化。就像在二元空间中的三角函数,如y=sinx,其数值是周而复始的。
通常在分解以上各个成分时,有两种模式,一个是乘法模型,一个是加法模型。其中,加法模型的季节效应被认为不依赖于时间序列,二乘法模型认为季节影响随着时间会发生改变。不过两种模型在计算时可以相通,对乘法模型作对数处理即可。
1. 移动平均
这一方法很简单,只做简单讲解
所谓移动平均,就是使用时间序列中最接近的 k 期数据值的平均值作为下一个时期的预测值。
即:
较小的 k 值将更快速追踪时间序列的移动,而较大的 k 值将随着时间的推移更有效地消除随机波动。
可延伸为加权移动平均,此法对每个数值选择不同的的权重,然后计算最近 k 期数据值的加权平均数作为预测值。
如果仅用于平滑现有数据,也可以使用居中移动平均,即使用时序中前后最接近的各 q 期数据及自己的平均值作为在该时点上的平滑值。
即:
2. 指数预测模型
指数预测模型也是利用过去的时间序列值的加权平均数作为预测值,它是加权移动平均法的一个特例。
即:只选择最近时期观测值的权重,其他数据值的权重则自动推算,原则是时间距离越远权重越小。
2.1. 单指数平滑
单指数平滑,不考虑季节和趋势分解,仅用过去数据值的加权平均数来预测。其思想为:
其中 F 为某时刻的预测值,Y 为某时刻的观测值。以上公式从 t = 1 开始递推,则每个时刻的预测值都包含着过去所有观测值的成分,只是权重不同,令F1 = Y1 ,则:
α为平滑常数,越接近于 1 ,则近期观测值的权重越大;反之,越接近于0,历史观测值权重越大。
2.2. Holt 指数平滑
Holt 指数平滑,在单指数平滑的基础上,还对趋势项进行了拟合。
由于考虑到了趋势项,则预测值可表示为:
其中 Lt 为 t 时刻时序水平项的估计值,bt为 t 时刻时序斜率的估计值。
α为水平平滑常数, β为斜率平滑常数。
2.3. Holt-Winters 指数平滑
Holt-Winters 指数平滑,在 Holt 指数平滑的基础上,还对季节项(周期项)进行了拟合,
由于还考虑到了季节项,则预测值表示为:
其中 i 为季节项的周期,mod 是求余,P 是某时刻时序周期的估计值。
α为水平平滑常数,β为斜率平滑常数,γ为周期平滑常数。
2.4. R 语言实现
以上三种指数平滑模型,采用 forecast 包中的 ets ( ) 函数即可:
ets(ts, model="zzz")
# ts 为需要分析的时序
# model 为模型选择参数,具体分类如下
# 不指定 model 参数时,自动匹配最优模型
3. ARIMA 预测模型
ARIMA 模型的相关资料我找到了,但是并没有看完和看懂,相对来说其思想确实有些复杂。而且最近买了《统计学方法》和《机器学习》两本书,发现自己的线性代数水平还很难看懂这些公式和算法推导,所以准备把《 R 语言实战 》敲完后转入线性代数的复习,之后学习方向待定。
这里我就仅把利用 R 语言进行 ARIMA 模型模拟和预测的流程做以总结:
3.1. 确保时序是平稳的
时序平稳的要求一般有两个:方差为均值、无趋势项
方法是利用时序图估判和 ndiffs ( ) 函数推荐最优的差分次数 d 。
3.2. 选择模型
通过 ACF 和 PACF 图来判断 p 和 q 参数的值。
其中 ACF 为自相关函数图用于判断 q,PACF 为偏自相关图用于判断 p。
p 为自回归模型(AR)参数,q 为移动平均模型(MA)参数。
3.3. 拟合模型
fit <- arima(ts, order=c(p,d,q))
# ts 为原时序,order 中放入包含三个参数的向量
fit
# 一般要进行多组参数的尝试,在输出结果中利用 AIC 值来选择最合理的模型,AIC 越小越好
accuracy(fit)
# 得到一系列误差值,用于准确性度量
3.4. 模型评价
模型的残差应该满足独立正态分布,根据这一条:
1. 使用正态 Q-Q 图来判断其正态性
2. 使用box.test ( ) 函数对模型的残差进行独立性检验。
3.5. 预测
forecast(fit,3)
# fit 为我们之前拟合好的最佳模型,3 指的是要预测的年数
3.6. 自动预测
forecast 包中的 auto.arima ( ) 函数可以实现最优 ARIMA 模型的自动选取。
往期精彩内容整理合集
2017年R语言发展报告(国内)
R语言中文社区历史文章整理(作者篇)
R语言中文社区历史文章整理(类型篇)
公众号后台回复关键字即可学习
回复 R R语言快速入门及数据挖掘
回复 Kaggle案例 Kaggle十大案例精讲(连载中)
回复 文本挖掘 手把手教你做文本挖掘
回复 可视化 R语言可视化在商务场景中的应用
回复 大数据 大数据系列免费视频教程
回复 量化投资 张丹教你如何用R语言量化投资
回复 用户画像 京东大数据,揭秘用户画像
回复 数据挖掘 常用数据挖掘算法原理解释与应用
回复 机器学习 人工智能系列之机器学习与实践
回复 爬虫 R语言爬虫实战案例分享
R语言之数据分析高级方法「时间序列」相关推荐
- R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展
R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展 ARIMA模型 ARIMA模型(英语:Autoregressive Integrated Moving Average mod ...
- R语言与数据分析练习:使用ARIMA模型预测网站访问量
R语言与数据分析练习:使用ARIMA模型预测网站访问量 使用ARIMA模型预测网站访问量 一.实验背景: 随着流量的增大,某网站的数据信息量也在以一定的幅度增长 基于该网站2016年9月~2017年2 ...
- R语言对数线性模型loglm函数_用R语言进行数据分析:常规和广义线性模型
用R语言进行数据分析:常规和广义线性模型 线性模型 对于常规的多重模型(multiple model)拟合,最基本的函数是lm(). 下面是调用它的方式的一种改进版: >fitted.model ...
- R语言 面板数据分析 plm包实现(一) ——LSDV和固定效应模型
系列文章 R做面板数据分析:R语言 面板数据分析 plm包实现(一) --LSDV和固定效应模型 如果想看随机效应模型怎么做,参见这篇文章 R语言 面板数据分析 plm包实现(二)--随机效应模型 如 ...
- R语言创建新变量方法
R语言创建新变量方法 在数据分析中,可能需要对数据进行求和.求均值等处理,并且将处理后的数据重新保存到原来的数据框中,这里提供三种可供解决的方法: 数据框$变量名 <- 表达式.若原数据框中含有 ...
- 2014全球软件技术峰会WOT:R语言金融数据分析
跨界知识聚会系列文章,"知识是用来分享和传承的",各种会议.论坛.沙龙都是分享知识的绝佳场所.我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果.从听众到演讲 ...
- 【R语言与数据分析实战】R软件编程
目录 1.流程控制 (1) if语句 (2) 循环语句 2.运算 (1) 数值运算 (2) 向量运算 (3) NA处理 3.定义函数 (1) 可变长函数 (2) 嵌套函数 4.作用域 5.对象的不变性 ...
- 【R语言与数据分析实战】绘图
目录 1.散点图 2.图像选项 2.1 坐标轴名称 2.2 图形标题 2.3 点的类型 2.4 点的大小 2.5 颜色 2.6 坐标轴的取值范围 2.7 图像类型 2.8 线型 2.9 图形排列 2. ...
- R语言学习笔记——高级篇:第十四章-主成分分析和因子分析
R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...
- 看书标记【R语言 商务数据分析实战4】
看书标记--关于R语言 chapter 4 4.2 任务实现 [R语言 商务数据分析实战4] chapter 4 财政收入预测分析 从海量数据中发现隐藏的运行模式,并提供具有决策意义的信息.变量过多会 ...
最新文章
- PARAMETERS 指令
- 如何用消息系统避免分布式事务?
- Keepalived实现LVS-DR双机热备_2015101601
- 微信平台开发者:桥梁上的运动员
- 酷派手机android版本,酷派大神的手机系统是什么?酷派大神能升级安卓4.3吗?...
- [Linux] linux下安装配置 zookeeper/redis/solr/tomcat/IK分词器 详细实例.
- oracle课程设计摘要,Oracle程序设计课程设计概要(doc 35页)
- centos下升级jdk版本
- Spark SQL连接数据库找不到Mysql驱动解决方法
- 网易云音乐喊话酷狗称其“耍猴”:专利文件与“跟听”毫无关系
- struct device结构体(2.6.23)
- 使用Jenkins打包vue项目丢失静态资源
- 推荐一个互联网电子书免费下载网站
- linux红帽子系统作用,linux 红帽子9.0操作系统怎么装?
- Windows 10聚焦怎么用?教你玩转Windows聚焦功能
- Java基础知识和进阶
- 神奇的分形艺术: Mandelbrot集和Julia集
- 人工智能是从什么时候开始发展的?AI的起源
- 产品经理的主要工作职责
- 面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我