R语言与数据分析之六:时间序列简介
今年在某服装企业蹲点了4个多月,之间非常长一段时间在探索其现货和期货预測。时间序列也是做销售预測的首选,今天和小伙伴分享下时间序列的基本性质和怎样用R来挖据时间序列的相关属性。
首先读入一个时间序列:从1946年1月到1959年12月的纽约每月出生人口数量(由牛顿最初收集)数据集能够从此链接下载(http://robjhyndman.com/tsdldata/data/nybirths.dat)。
我们将数据读入R。而且存储到一个时间序列对象中,输入下面代码:
births<- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
birthstimeseries<-ts(births,frequency=12,start=c(1946,1))
月度数据就设定frequency=12,季度数据就设定frequency=4。“start”參数来指定收集数据的第一年和这一年第一个间隔期。
接下来我们用plot函数绘制时间序列图:
plot.ts(birthstimeseries)
能够看到这个时间序列在一定月份存在的季节性变动:在每年的夏天都有一个出生峰值,在冬季的时候进入波谷。
相同,这种时间序列也可能是一个相加模型。随着时间推移。季节性波动时大致稳定的而不是依赖于时间序列水平,且对着时间的变化,随机波动看起来也是大致稳定的。
接下来我们来分解时间序列。时间序列分为:非季节性数据和季节性数据
一个非季节性时间序列包括一个趋势部分和一个不规则部分。分解时间序列即为试图把时间序列拆分成这些成分。也就是说,须要预计趋势的和不规则的这两个部分。
一个季节性时间序列包括一个趋势部分。一个季节性部分和一个不规则部分。
分解时间序列就意味着要把时间序列分解称为这三个部分:也就是预计出这三个部分。
上述的婴儿出生是明显季节性时间序列,我们採用R提供的“decompose()”函数分解该时间序列:
birthstimeseriescomponents <- decompose(birthstimeseries)
预计出的季节性、趋势的和不规则部分如今被存储在变量birthstimeseriescomponents$seasonal, birthstimeseriescomponents$trend和 birthstimeseriescomponents$random 中。
我们能够分别画出这三部分,观察其特性:
plot(birthstimeseriescomponents)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG93YXJkZ2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
图展现出了原始的时间序列图(顶部),预计出的趋势部分图(第二部份),预计出的季节性部分(第三个部分)。预计得不规则部分(底部)。
我们能够看到预计出的趋势部分从1947年的24下降到1948年的22。紧随着是一个稳定的添加直到1949年的27。
上述演示样例充分展示了时间序列的多模型加和性,该属性也是时间序列的一个非常重要的属性,每拿到一个时间序列,我们首先须要推断该时间序列能否够用相加模型来描写叙述,在确定了加和属性后去考虑怎样分解时间序列,下面举一个样例说明(澳大利亚昆士兰州海滨度假圣地的纪念品商店从1987年1月到1987年12月的每月销售数据)。我们首先画出该序列,找个总体的感知:
souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1))
plot.ts(souvenirtimeseries)
结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG93YXJkZ2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
该序列看上去不适合时间。由于该序列的季节波动性和随机波动的大小随着时间序列逐步上升。为了使该序列符合标准的时间序列从而採用相加模型描写叙述,我们对原始数据取自然对数进行转换:
logsouvenirtimeseries <- log(souvenirtimeseries)
plot.ts(logsouvenirtimeseries)
结果例如以下:
我们能够看到季节性波动和随机变动的大小在对数变换后的时间序列上,随着时间推移。季节性波动和随机波动的大小是大致恒定的。而且不依赖于时间序列水平。因此转换后的时间序列能够用相加模型进行描写叙述,我们对变化后的序列进行分解:
logsouvenirtimeseriesComponents <- decompose(logsouvenirtimeseries)
plot(logsouvenirtimeseriesComponents)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG93YXJkZ2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="middle" alt="">
观察该图,我们也能够看出随着时间的推移,随机和季节的波动都是稳定的,再次证明我们的转换是有作用的
。
今天就和小伙伴们分享到这里了。后面会介绍经常使用的几种时间序列预測算法,敬请期待
R语言与数据分析之六:时间序列简介的更多相关文章
- 【机器学习与R语言】1-机器学习简介
目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...
- 基于R语言的数据分析和挖掘方法总结——描述性统计
1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变 ...
- R语言基因组数据分析可能会用到的data.table函数整理
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部 ...
- 基于R语言的数据分析和挖掘方法总结——中位数检验
3.1 单组样本符号秩检验(Wilcoxon signed-rank test) 3.1.1 方法简介 此处使用的统计分析方法为美国统计学家Frank Wilcoxon所提出的非参数方法,称为Wilc ...
- 基于R语言的数据分析和挖掘方法总结——均值检验
2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, ...
- R语言与数据分析
K最近邻(k-Nearest Neighbor,KNN)分类算法 R语言实现包:R语言中有kknn package实现了weighted k-nearest neighbor. 决策树: R语言实现决 ...
- R语言和数据分析十大:购物篮分析
提到数据挖掘,我们的第一个反应是之前的啤酒和尿布的故事听说过,这个故事是一个典型的数据挖掘关联规则.篮分析的传统线性回归之间的主要差别的差别,对于离散数据的相关性分析: 常见的关联规则: 关联规则:牛 ...
- R语言入门(一)简介安装
数据挖掘常用的语言有R语言,python,SQL等,其中R语言最受欢迎.(注:SQL Server包含微软研究院开发的两种数据挖掘算法:Microsoft决策树和Microsoft聚集,此外还支持第三 ...
- R语言与数据分析之八:时间序列--霍尔特指数平滑法
上篇我和小伙伴们分享了简单指数平滑法,简单指数平滑法仅仅能预測那些处于恒定水平和没有季节变动的时间序列,今天和大家分享非恒定水平即有增长或者减少趋势的.没有季节性可相加模型的时间序列预測算法---霍尔 ...
随机推荐
- hdu 4975 A simple Gaussian elimination problem.(网络流,推断矩阵是否存在)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 Problem Description Dragon is studying math. One ...
- linux eclipse中运行android AVD 错误
当使用android的AVD时提示以下错误: Starting emulator for AVD 'NexusOne' ERROR: 32-bit Linux Android emulator bin ...
- [置顶] 搭建apache+tomcat+memcached集群环境
一.搭建apache server服务器 1.apache server图示:(加载图片要一张一张,所以可以到下面网站下载带图片的word) http://download.csdn.net/user ...
- servlet 与缓存(4)
1.设置缓存的两种情况: 第一种:对于不常常变化的数据,在servlet中能够为其设置合理的缓存时间值,以避免浏览器频繁向server发送请求,提升server的性能. 另外一种:假设要实现一种高级功 ...
- Objective-C基础笔记(5)Protocol
Protocol简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现.这中模式一般称为代理(delegation)模式. 在IOS和OS X开发中,Apple採用了大量的代理模式来实现MV ...
- Android屏幕大小适配问题解决
转载: 一.一些基本概念 1.长度(真实长度):英寸.inch 2.分辨率:density 每英寸像素数 dpi(密度) 3.像素:px 4.dip的公式:px /dip=dpi/160 所以 d ...
- 简单区分`:before`与`::before`的区别
简单区分:before与::before的区别 :hover我们都知道,称作伪类,英文名pseudo-class,而我们此处提到的:before以及:after也是伪类,属于css2的内容,在ie8下 ...
- [放松一下] 经典高清电影合集 170G BT种子下载
经典高清电影合集 170G BT种子下载 点击文件名下载 经典高清电影合集170G BT种子.torrent 下载方法 经典高清电影合集详情见目录: 1. 杀手47 2. 这个杀手不太冷 3. 放牛班 ...
- Swift - 实现拨打电话
要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) 1 2 //自动打开拨号页面并自动拨打电话 UIApplication.sharedApplica ...
- 重操JS旧业第九弹:函数表达式
函数表达式,什么概念,表达式中的函数表达式. 1 函数申明 function 函数名([函数参数]){ //函数体 } js中无论像这样的显示函数什么放在调用之前还是调用之后,都不影响使用,因为js解 ...