R语言时间序列应用(decompose、Holt-Winters初步)

对于明显的周期性时间序列,可以使用decompose函数对数据进行分解成季节部分、趋势部分、随机部分三种。decompose函数有两种type,即“additive”以及“multiplicative”两种,还有一个fliter选项,表示是否加入线性滤波,一般fliter选择NULL即可。下面的例子展现了使用decompose分析含有季节因素时间序列数据的例子

将某地区1962-1970年平均每头奶牛的月度产奶量数据导入outcome内。对于时间序列数据,常常还要使用ts函数将其形式进行转换成时间序列专用的数据形式:

outcome<-ts(B,frequency = 12,start = c(1962,1))

Result1<-decompose(outcome,type = "additive")

plot(Result1)

Result2<--decompose(outcome,type = "multiplicative")

plot(Result2)

选择乘性模型继续进行分析。通过以下命令提取模型中的趋势项,并使用线性模型进行拟合。

results<-Result1

plot.ts(results$trend)

abline(lm(results$trend~time(outcome)),col="red")

reg<-lm(results$trend~time(outcome))

summary(reg)

par(mfrow=c(2,2))

plot(reg,which=c(1:4))

模型回归的摘要,以及统计图如下

Ver

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept)   -4.269e+04  4.678e+02  -91.25   <2e-16 ***

time(outcome)  2.207e+01  2.379e-01   92.75   <2e-16 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.383 on 94 degrees of freedom

(12 observations deleted due to missingness)

Multiple R-squared:  0.9892, Adjusted R-squared:  0.9891

F-statistic:  8603 on 1 and 94 DF,  p-value: < 2.2e-16

显然回归模型拟合效果一般,残差出现了明显的自相关性。使用该方法对模型进行预测需要提取出序列的季节因子,并与线性拟合的趋势项预测数据相乘。首先我们提取出季节指数,得到季节指数sea,注意要先把results$seasonal项化为向量型,以便后面的计算。

注意如果前面分解采用加性模型,应该采用原始数据减去季节因素。

sea<-as.vector(results$seasonal)

sea<-sea[1:12]

par(mfrow=c(1,1))

plot(sea,type = "l")

pre<-1971+(0:11)/12

pre<--42690.59+22.07*pre

pred<-pre*sea

最后得到pred项即为预测的结果

> sea [1] 0.9752900 0.9239188 1.0481092 1.0718562 1.1567964 1.1178806

[7] 1.0416054 0.9783800 0.9233615 0.9286178 0.8919580 0.9422262

> pred [1] 789.3802 749.5006 852.1739 873.4530 944.7980 915.0700

[7] 854.5487 804.4770 760.9361 766.9756 738.3376 781.6811

含季节因素时间序列预测的另一个方式是采用x11方法,与前面decompose不同的地方在于提取季节因子,x11方法提取季节因子是通过某季节该变量的平均数/所有季节该变量的平均数得到。使用x11方法得到季节指数sea2

xbar<-rep(0,12)

for (i in 1:108){

xbar[i%%12+1]<-xbar[i%%12+1]+B[i]

}

xbar<-xbar/9

ex<-sum(B)/108

sea2<-xbar/ex

> sea2 [1] 0.9551790 0.9607222 0.9125752 1.0381691 1.0643016 1.1536269

[7] 1.1165664 1.0429205 0.9841622 0.9309471 0.9385493 0.9022806

从模型中去除季节因素,并对趋势项使用线性拟合

trend<-c(0)

for (i in 1:108){

trend[i]<-B[i]/sea2[i%%12+1]

}

trend<-ts(trend,frequency = 12,start = c(1962,1))

ts.plot(trend)

reg2<-lm(trend~time(trend))
abline(lm(trend~time(trend)),col="red")

显然x11方法提取的趋势项没有decompose函数提取的平滑,但是其趋势拟合效果更好,残者基本符合正态分布

Call:

lm(formula = trend ~ time(trend))

Coefficients:

(Intercept)  time(trend)

-41832.05        21.63

时间序列预测的有效方法为Holt-Winters方法平滑预测,该方法有三个参数来控制:alpha,beta和gamma,分别对应当前时间点上的水平,趋势部分的斜率和季节性部分。参数alpha,beta和gamma的取值都在0和1之间,并且当其取值越接近0意味着对未来的预测值而言最近的观测值占据相对较小的权重。如果我们事先采用decompose对季节因素进行提取

将某城市1980年1月至1995年8月每月屠宰生猪数量导入data集中,并用ts函数转化

datats<-ts(data,frequency = 12,start =c(1980,1) )

ts.plot(datats)

datatshw<-HoltWinters(datats)

#需要使用forecast包中forecast.HoltWinters以及plot.forecast函数

datatshwforecast<-forecast.HoltWinters(datatshw,h=48)
plot.forecast(datatshwforecast)

datatshw中储存了平滑参数的值如下:

Smoothing parameters:

alpha: 0.3074266

beta : 0.00366508

gamma: 0.4374631

参考资料:http://blog.csdn.net/jiabiao1602/article/details/43153139

http://www.dataguru.cn/article-3235-1.html

http://bbs.pinggu.org/thread-4116352-1-1.html

时间: 2024-08-11 16:04:32

R语言时间序列应用(decompose、Holt-Winters初步)的相关文章

R语言时间序列数据应用xts

zoo是时间序列的基础库,是面向通用的设计. xts 是对时间序列库(zoo) 的一种扩展实现.xts 类型继承了zoo 类型,丰富了时间序列数据处理的函数. 一.xts对象的结构和定义 1.xts对象是一个具有时间索引的观测值矩阵,结构如下: xts = matrix + times 2.创建xts对象,函数如下: xts (x= ,  order.by= ,  -  ) 参数   x : 数据,必须是一个向量或者矩阵: order.by: 索引(index),是一个与x行数相同的升序排列的时

R语言时间序列中的时间设置

时间序列的不同时间分段设置 1. 普通的时间序列:年.月.季 1 myserises<-ts(data,start=,end=,frequency=)#其中frequency=1代表年:frequency=12代表月:frequency=4代表季度数据 2. 如果以天为单位的时间序列 1 t<-ts(1:365,frequency=1,start=as.Date("2017-05-01")) 2 s<-as.Date("2017-05-01") 3

R语言时间序列ARMAX建模

建立ARMAX模型需要运用R的dse包,在R的dse包中The ARMA model representation is general, so that VAR, VARX,ARIMA, ARMAX, ARIMAX can all be considered to be special cases. 数据集为天然气炉中的天然气(input)与产生的CO2(output),数据来源为王燕应用时间序列分析第三版附录表A1-24,首先队数据做简要的分析,做出时序图以及协方差图 input<-ts(i

R语言-时间序列

时间序列:可以用来预测未来的参数, 1.生成时间序列对象 1 sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20, 2 22, 31, 40, 29, 25, 21, 22, 54, 31, 25, 26, 35) 3 # 1.生成时序对象 4 tsales <- ts(sales,start = c(2003,1),frequency = 12) 5 plot(tsales) 6 # 2.获得对象信息 7 start(tsales

R语言时间序列分析

原文:http://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/src/timeseries.html 作者:Avril Coghlan Email:[email protected]  中文档由梁德明.赵华蕾合译:联系方式:[email protected]:内容遵循许可协议CC 3.0 BY 中文档PDF版本地址为:http://doc.datapanda.net/a-Little-Book-of-R-for-T

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

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

R语言学习笔记(十三):时间序列

#生成时间序列对象 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 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec2003 18 33 41 7 34 35 24 25 24 21 25 202004 22 31 40 29

R语言k-Shape时间序列聚类方法对股票价格时间序列聚类

这次,我们将使用k-Shape时间序列聚类方法检查与我们有业务关系的公司的股票收益率的时间序列. 执行环境如下. R:3.5.1 企业对企业交易和股票价格 在本研究中,我们将研究具有交易关系的公司的价格变化率的时间序列的相似性,而不是网络结构的分析.由于特定客户的销售额与供应商公司的销售额之比较大,当客户公司的股票价格发生变化时,对供应商公司股票价格的反应被认为更大. k-Shape k-Shape [Paparrizos和Gravano,2015]是一种关注时间序列形状的时间序列聚类方法.在我

用R分析时间序列(time series)数据

时间序列(time series)是一系列有序的数据.通常是等时间间隔的采样数据.如果不是等间隔,则一般会标注每个数据点的时间刻度. time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等. 这篇文章主要讨论prediction(forecast,预测)问题. 即已知历史的数据,如何准确