R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)

这篇具有很好参考价值的文章主要介绍了R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、准备工作

1、数据准备

所使用的数据是TSA包中的co2数据,如果没有这个包的话,可以先装一下

install.packages("TSA")	# 安装包 TSA

会有让你选镜像的过程,随便选就行了。下载好之后,导入并查看数据

library(TSA)
data(co2)
win.graph(width = 4.875,height = 3,pointsize = 8)
plot(co2,ylab='CO2')        #绘制原始数据

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
可以看到,原始数据明显有一个向上的趋势和一个周期趋势。

2、基本概念

赤池信息准则(Akaike’s(1973) Information Criterion, AIC)是建立在熵的概念基础上,可以权衡所估计模型的复杂度和此模型拟合数据的优良性。
A I C = − 2 l o g ( 极 大 似 然 估 计 值 ) + 2 k AIC=-2log(极大似然估计值)+2k AIC=2log()+2k
其中,如果模型包含截距或常数项,那么k=p+q+1;否则k=p+q。AIC越小越好。

Ljung-Box检验即LB检验、随机性检验,用来检验m阶滞后范围内序列的自相关性是否显著,或序列是否为白噪声(或者统计量服从自由度为m的卡方分布)。若是白噪声数据,则该数据没有价值提取,即不用继续分析了。

二、数据处理

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)

拿到一个序列之后,首先判断它是不是平稳时间序列,如果是就进行模式识别;如果不是就扣除趋势项将其变成一个平稳时间序列。接着做模式识别、参数估计、模型诊断和预测。

ps: 这是从老师课件上找的流程图,个人感觉模式识别部分,不应包含参数d,因为含有d的一般是ARIMA(p,d,q)模型,它是非平稳模型,而上一步已将非平稳时间序列转成平稳时间序列了,d应该是在上一步确认的。也有可能是,扣除趋势项和模式识别的界限根本不可能分那么细,但是又要用流程图表示出来,所以才这么写的。

1、模式识别

一般来讲,模式识别就是判别出ARIMA(p,d,q)中的各阶数p,d,q。模式识别常用的方法有:acf, pacf, eacf

首先来看它的自相关函数

acf(as.vector(co2),lag.max = 36)                #自相关函数

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
季节自相关关系十分显著:在滞后12,24,36,……上表现出很强的相关性。

plot(diff(co2),ylab='1st Diff. of CO2',xlab='Year') #一次差分,消除整体上升趋势

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
可以看到,经过一次差分后,序列中的整体上升趋势已经消除。再来看其样本自相关函数

acf(as.vector(diff(co2)),lag.max = 36)          #一次差分后的自相关函数

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
一次差分后,序列中仍存在强烈的季节性;应用季节差分法应该可以得到更为简约的模型。

plot(diff(diff(co2),lag=12),xlab='Year',ylab='1st & seasonal Diff.')

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
绘制其自相关函数

acf(as.vector(diff(diff(co2),lag=12)),lag.max=36,ci.type='ma')

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
可以看到,经过一次差分和季节差分后的时间序列已经消除了季节性的大部分影响。根据样本自相关函数可以看到,除了在滞后1和12上具有自相关性外,经一次和季节差分后的序列几乎不再具有自相关性,所建模型只需要在滞后1和12上具有自相关性即可。

综上,考虑构建乘法季节 A R I M A ( 0 , 1 , 1 ) × ( 0 , 1 , 1 ) 12 ARIMA(0,1,1)\times (0,1,1)_{12} ARIMA(0,1,1)×(0,1,1)12模型。

2、参数估计

模型建立后,需要估计模型的参数。乘法季节ARIMA模型只是一般ARIMA模型的特例。

m1.co2=arima(co2,order=c(0,1,1),seasonal=list(order=c(0,1,1),period=12))
print(m1.co2)
-------------------------------------------
Coefficients:
          ma1     sma1
      -0.5792  -0.8206
s.e.   0.0791   0.1137

sigma^2 estimated as 0.5446:  log likelihood = -139.54,  aic = 283.08

上面第一行代码便得到了参数的极大似然估计值,参数估值的标准差为0.5446,对数似然值为-139.54AIC=283.08。模型的参数估值均为高度显著,进而将对该模型加以检验。

ps:为什么能根据这些指标值说明参数估值高度显著,标准是多少?

3、诊断性检验

1 残差序列

首先观察残差的时间序列图

plot(window(rstandard(m1.co2),start=c(1995,2)),ylab='Standardized Resi.',type='o');
abline(h=0)

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)

除了序列中间存在某些异常行为外,残差图中并没有表明模型有任何主要的不规则性。然后对残差的样本自相关函数进一步观察

acf(as.vector(window(rstandard(m1.co2),start=c(1995,2))),lag.max=36)

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
统计上显著的相关系数位于滞后22,其值仅为-0.194,相关性非常小,且滞后22上的依赖关系难以给出合理的解释。除了滞后22处的边缘显著以外,该模型似乎已捕捉到了序列中依赖关系的本质。

注:在acf前打个print即可输出滞后各阶的自相关函数的值。

2 Ljung-Box 检验

下面进行Ljung-Box检验:

win.graph(width=3,height =3,pointsize = 8)
hist(window(rstandard(m1.co2),start=c(1995,2)),xlab='Standardized Resi.',ylab='Frequency')

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
直方图的形状像钟形,但并不标准。对模型进行Ljung-Box检验,给出自由度为22的x=25.59, p=0.27,表明该模型已捕获时间序列中的依赖关系。

why?

R 语言进行 Ljung-Box 检验的函数如下:

Box.test(x, lag = 1, type = c("Box-Pierce", "Ljung-Box"), fitdf = 0)
  • x: 一个时间序列,残差检验时,一般是残差
  • lag: 基于自相关因子得出的lag值
  • type: Ljung-Box 检验就设置为 Ljung-Box
  • fitdf: 如果x是一系列残差,则需要减去自由度。

调用函数后,我们关心的就是p值,如果p > 0.05,则说明是白噪声序列,是纯随机性序列。否则数据不是白噪声,具有研究价值。

示例如下:

x <- rnorm (100)
Box.test(x, lag = 5)
Box.test(x, lag = 10, type = "Ljung")
a=Box.test(resid(m1.xpole),type="Ljung",lag=20,fitdf=11)

接着绘制分位数-分位数图(qq图)

win.graph(width=5,height =5,pointsize = 8)
qqnorm(window(rstandard(m1.co2),start=c(1995,2)))
abline(c(0,0),c(1,1),col='red')

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)

QQ 图的上尾部,再次出现了一个异常值。但是,Shapiro-Wilk正态性检验给出的统计量W=0.982,进而得到p=0.11,且在任何显著水平上正态性都未被拒绝。

作为对模型的进一步检验,考虑用 A R I M A ( 0 , 1 , 2 ) × ( 0 , 1 , 1 ) 12 ARIMA(0,1,2)\times (0,1,1)_{12} ARIMA(0,1,2)×(0,1,1)12模型进行过度拟合。

m2.co2=arima(co2,order=c(0,1,2),seasonal=list(order=c(0,1,1),period=12))
print(m1.co2)
print(m2.co2)
--------------------------------
arima(x = co2, order = c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
Coefficients:
          ma1     sma1
      -0.5792  -0.8206
s.e.   0.0791   0.1137
sigma^2 estimated as 0.5446:  log likelihood = -139.54,  aic = 283.08
--------------------------------
arima(x = co2, order = c(0, 1, 2), seasonal = list(order = c(0, 1, 1), period = 12))

Coefficients:
          ma1      ma2     sma1
      -0.5714  -0.0165  -0.8274
s.e.   0.0897   0.0948   0.1224

sigma^2 estimated as 0.5427:  log likelihood = -139.52,  aic = 285.05

可以看到, θ 1 \theta_1 θ1 θ \theta θ的估计变化很小(考虑标准差的大小时)。新参数 θ 2 \theta_2 θ2的估值在统计上与零无异。AIC 已经增加的情况下,sigma^2和对数似然值均无显著变化。所以使用 A R I M A ( 0 , 1 , 2 ) × ( 0 , 1 , 1 ) 12 ARIMA(0,1,2)\times (0,1,1)_{12} ARIMA(0,1,2)×(0,1,1)12模型是过度拟合,根据“奥卡姆剃刀原理”,如无必要,勿增实体。所以使用 A R I M A ( 0 , 1 , 1 ) × ( 0 , 1 , 1 ) 12 ARIMA(0,1,1)\times (0,1,1)_{12} ARIMA(0,1,1)×(0,1,1)12模型即可。

4、预测

前置时间设为2年,进行预测2年并绘制预测值与预测极限。

win.graph(width = 4.875,height = 3,pointsize = 8)
plot(m1.co2,n1=c(2003,1),nahead=24,xlab='Year',type='o',ylab='CO2 Levels')

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)
前置时间设为1年,进行预测4年并绘制预测值与预测极限。

win.graph(width = 4.875,height = 3,pointsize = 8)
plot(m1.co2,n1=c(2004,1),n.ahead=48,xlab='Year',type='b',ylab='CO2 Levels')

R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)

ps: 上面参数的含义,n1=c(2004,1)代表从2004年1月开始(实际数据到2005年12月结束),n.ahead=48代表预测48个值(一年12个值,所以是4年)文章来源地址https://www.toymoban.com/news/detail-469818.html

到了这里,关于R 语言做时间序列分析的实例(模式识别、拟合、检验、预测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用Python语言进行时间序列ARIMA模型分析

    应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛。以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向。例如,利用历史股市数据和经济指标进行时间序列分析,可以预测未来股市的走向。

    2024年02月03日
    浏览(67)
  • ARMA模型的检验与优化 #时间序列分析 R语言

    掌握ARMA模型检验的内容和方法 理解模型优化的SBC准则和BIC准则的思想与原理,能综合运用上述准则选择相对最优拟合模型 训练数据在文末!!! 练习1、根据某公司过去三年每月缴纳的税收金额(行数据)(题目1数据.txt),求 (1)绘制序列时序图,判断序列的平稳性与纯

    2024年04月13日
    浏览(44)
  • 数据分享|R语言分析上海空气质量指数数据:kmean聚类、层次聚类、时间序列分析:arima模型、指数平滑法...

    最近我们被客户要求撰写关于上海空气质量指数的研究报告。本文向大家介绍R语言对上海PM2.5等空气质量数据 ( 查看文末了解数据免费获取方式 ) 间的相关分析和预测分析,主要内容包括其使用实例,具有一定的参考价值,需要的朋友可以参考一下 ( 点击文末“阅读原文

    2024年02月09日
    浏览(58)
  • 时间序列教程 二、识别和转换非平稳时间序列

    定义平稳性 描述确定平稳性的方法 解释如何转换非平稳时间序列数据 使用Python识别和转换非平稳时间序列数据 固定时间序列是指基本系统没有变化的时间序列。 恒定平均值(没有趋势)  恒定方差 常数自相关结构 无周期性成分(没有季节性) 平稳性是许多时间序列预测

    2023年04月09日
    浏览(42)
  • tcn 时间序列回归实例

    目录 时间卷积,输入是多张灰度图: torch-tcn库 示例代码 自定义实现tcn层

    2024年02月05日
    浏览(43)
  • R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列...

    本文描述了一个模型,该模型解释了交易的聚集到达,并展示了如何将其应用于比特币交易数据。这是很有趣的,原因很多。例如,对于交易来说,能够预测在短期内是否有更多的买入或卖出是非常有用的。另一方面,这样的模型可能有助于理解基本新闻驱动价格与机器人交

    2024年02月10日
    浏览(37)
  • 时间序列分析

    公式: 预测标准误差:  本质:用前N次数据预测t+1期的数据 规律:如果实际数据波动较大,N值越大,预测到的数据波动越小 注意:一般不适用于波动较大的数据。用一次移动平均法,预测一期数据比较准确,不能预测多期数据 本质:对一次移动平均法再求均值,根据一次型

    2024年02月05日
    浏览(76)
  • 时间序列分析(SPSS)

      本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:清风数学建模:https://www.bilibili.com/video/BV1DW411s7wi 目录  前言  一、时间序列介绍  1.1 时间序列基本概念​编辑  1.2 时期和时点序列  1.3 时间序列分解  1.3.1 长期趋势(T)​编辑  

    2024年02月06日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包