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)

图展现出了原始的时间序列图(顶部),估计出的趋势部分图(第二部份),估计出的季节性部分(第三个部分),估计得不规则部分(底部)。我们可以看到估计出的趋势部分从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)

结果如下:

该序列看上去不适合时间,因为该序列的季节波动性和随机波动的大小随着时间序列逐步上升。为了使该序列符合标准的时间序列从而采用相加模型描述,我们对原始数据取自然对数进行转换:

logsouvenirtimeseries <- log(souvenirtimeseries)
plot.ts(logsouvenirtimeseries)

结果如下:

我们可以看到季节性波动和随机变动的大小在对数变换后的时间序列上,随着时间推移,季节性波动和随机波动的大小是大致恒定的,并且不依赖于时间序列水平。因此转换后的时间序列可以用相加模型进行描述,我们对变化后的序列进行分解:

logsouvenirtimeseriesComponents <- decompose(logsouvenirtimeseries)
plot(logsouvenirtimeseriesComponents)

观察该图,我们也可以看出随着时间的推移,随机和季节的波动都是稳定的,再次证明我们的转换是有作用的

今天就和小伙伴们分享到这里了,后面会介绍常用的几种时间序列预测算法,敬请期待

时间: 2024-10-06 18:00:09

R语言与数据分析之六:时间序列简单介绍的相关文章

软件入门的知识之程序设计语言Java和C#的简单介绍和对比[图]

软件入门的知识之程序设计语言Java和C#的简单介绍和对比[图]:前言:要做软件就必然会涉及到程序设计语言,它是什么?有哪些特点?又有哪几部分组成的呢?在这里我们为大家做了一个总结,希望可以通过这些内容让大家对于程序设计语言有一个大概的认识.基本概念:1.低级/高级计算机的硬件只可以识别由1.0组成的机器指令程序,所以机器指令是最基本的计算机语言.由于机器指令是由特定的计算机系统所固有的.面向机器的语言,所以使用机器语言进行程序设计,效率低.可读性差.难以理解,而且也不便修改和维护.后来出现了由

R语言与数据分析之七:时间序列简单指数平滑

上篇我们对时间序列数列有了整体的认识并将时间序列进行了分解,今天和小伙伴们分享常用预测算法中相对最简单的:简单指数平滑法.简单指数平滑适用于可用相加模型描述,并且处于恒定水平和没有季节变动的时间序列地短期预测. 简单指数平滑法提供了一种方法估计当前时间点上的水平.为了更加准确的估计当前时间的水平,我们使用alpha参数来控制平滑,alpha的取值在0-1之间.当alpha越接近0,临近预测的观测值在预测中的权重就越小. 我们采用伦敦1813年到1912年全部的每年每英尺降雨量来做分析对象,首先读

R语言与数据分析之二:绘图

图形展示是最高效且形象的数据描述手段,因此巧妙的图像展示是高质量数据分析报告的必备内容,因此强大的图形展示功能也是统计分析软件的必备功能.R语言提供了强大的吐血展示功能.今天我由简单到复杂分别和小伙伴们分享如何用R语言画出各位想要的图形. 首先罗列下所有可选图形: 1.直方图(hist()):2.散点图(plot()):3.柱状图(barplot());4.饼图(pie());5.箱线图(boxplot());6.星相图(stars());7.脸谱图(faces());8.茎叶图(stem())

R语言基因组数据分析可能会用到的data.table函数整理

R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度.因此,在对大数据处理上,使用data.table无疑具有极高的效率.这里主要介绍在基因组数据分析中可能会用到的函数. fread 做基因组数据分析时,常常需要读入处理大文件,这个时候我们就可以舍弃read.ta

基于R语言的数据分析和挖掘方法总结——描述性统计

1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变异系数.全距(最小值.最大值).内四分位距(25%分位数.75%分位数) 分布描述:峰度系数.偏度系数 用户可选择多个变量同时进行计算,亦可选择分组变量进行多组别的统计量计算. 1.2 详细介绍 1.2.1 样本数和总和 1. R语言涉及的方法:length(x) 1.2.2 均值(Mean) 1.

R语言与数据分析之四:聚类算法1

前面和大家分享的分类算法属于有监督学习的分类算法,今天继续和小伙伴们分享无监督学习分类算法---聚类算法.聚类算法也因此更具有大数据挖掘的味道 聚类算法本质上是基于几何距离远近为标准的算法,最适合数据是球形的问题,首先罗列下常用的距离: 绝对值距离(又称棋盘距离或城市街区距离) Euclide距离(欧几里德距离,通用距离) Minkowski 距离(闵可夫斯基距离),欧几里德距离 (q=2).绝对值距离(q=1)和切比雪夫距离(q=无穷大),这些都是闵可夫斯基的特殊情况. Chebyshew(切

R语言与数据分析之三:分类算法2

上期与大家分享的传统分类算法都是建立在判别函数的基础上,通过判别函数值来确定目标样本所属的分类,这类算法有个最基本的假设:线性假设.今天继续和大家分享下比较现代的分类算法:决策树和神经网络.这两个算法都来源于人工智能和机器学习学科. 首先和小伙伴介绍下数据挖掘领域比较经典的Knn(nearest neighbor)算法(最近邻算法) 算法基本思想: Step1:计算出待测样本与学习集中所有点的距离(欧式距离或马氏距离),按距离大小排序,选择出距离最近的K个学习点: Step2:统计被筛选出来的K

R语言与数据分析之三:分类算法1

分类算法与我们的生活息息相关,也是目前数据挖掘中应用最为广泛的算法,如:已知系列的温度.湿度的序列和历史的是否下雨的统计,我们需要利用历史的数据作为学习集来判断明天是否下雨:又如银行信用卡诈骗判别. 分类问题都有一个学习集,根据学习集构造判别函数,最后根据判别函数计算我们所需要判别的个体属于哪一类的. 常见的分类模型与算法 传统方法 1.线性判别法:2.距离判别法:3.贝叶斯分类器: 现代方法: 1.决策树:2.支持向量机:3.神经网络: 线性判别法: 天气预报数据(x1,x2分别为温度和湿度,

用R语言做数据分析(9)——日期与时间格式1

R语言是开源的,同时可以运行在各种平台上(Linux.Windows.MacOS等).R的许多软件包是由R语言. LaTeX.Java及最常用C语言和Fortran撰写.本篇为大家介绍的是R语言日期格式数据.#日期型数据在R中自带的日期形式为:as.Date();以数值形式存储:对于规则的格式,则不需要用format指定格式:如果输入的格式不规则,可以通过format指定的格式读入:标准格式:年-月-日或者年/月/日:如果不是以上二种格式,则会提供错误:as.Date('23-2013-1')错