(五十一)时间序列分析二:平稳时间序列分析(ARMA)

2023-11-13

平稳时间序列

平稳时间序列分为严平稳时间序列与宽平稳时间序列。如果在一个时间序列中,各期数据的联合概零分布与时间 t 无关,则该序列为严平稳时间序列。实际中讨论的平稳时间序列是宽平稳时间序列,指对任意时间下,序列的均值、方差存在并为常数,且自协方差函数与自相关系数只与时间间隔k有关。只有平稳时间序列才可以进行统计分析,因为平稳性保证了时间序列数据都是出自同一分布。可以使用单位根检验来检验时间序列的平稳性。

若一个平稳时间序列的序列值之间没有相关性,那么就意味着这种数据前后没有规律,也就无法挖掘出有效的信息,这种序列称为纯随机序列。在纯随机序列中,有一种序列称为白噪声序列,这种序列随机且各期的方差一致。平稳时间序列分析在于充分挖掘时间序列之间的关系,当时间序列中的关系被提取出来后,剩下的序列就应该是个白噪声序列。
在这里插入图片描述
时间序列自相关与概率论中的相关定义本质是一致的,它衡量的是序列自身在不同时刻随机变量的相关性;偏自相关系数则剔除了两时刻之间其他随机变量的干扰,是更加纯粹的相关。

ARMA模型与定阶

1、AR模型认为通过时间序列过去时点的线性组合加上白噪声即可预测当前时点。
Xt = α1Xt-1 + α2Xt-2 +…+ αpXt-p + εt ,其中 εt 是一个独立于 Xt 的白噪声序列。AR模型在金融模型中主要是对金融序列过去的表现进行建模,如交易中的动量与均值回归。

2、MA模型是历史白噪声的线性组合。与AR最大的不同之处在于,AR模型中历史白噪声的影响是间接影响当前预测值的(通过影响历史时序值)。Xt = εt - β1εt-1 - β2εt-2 -…- βqεt-q 。在金融模型中,MA常用来刻画冲击效应,例如预期之外的事件。

3、ARMA模型是AR和MA模型的混合,AR( p )和MA( q )共同组成了ARMA(p,q)。Xt = α1Xt-1 + α2Xt-2 +…+ αpXt-p + εt - β1εt-1 - β2εt-2 -…- βqεt-q

如何确定p、q的值就是ARMA模型的定阶问题。一个常用的定阶方法是利用ACF图和PACF图,不同模型的ACF、PACF图识别方法如下表:

模型 AR( p ) MA( q ) ARMA(p,q)
ACF 拖尾 q阶截尾 拖尾
PACF p阶截尾 拖尾 拖尾

所谓截尾指的是从某阶开始均为(接近)0的性质,拖尾指的是并不存在某一阶突然跳变到0而是逐渐衰减为0。

使用ACF与PACF对ARMA模型进行定阶时,由于估计误差的存在,实际中有时很难判断AR模型与MA模型的截尾期数。在实际操作中,可以通过AIC或者BIC准则识别,两个统计量都是越小越好。

案例

ARMA建模的基本步骤是:检验数据的平稳性→定阶→ARMA建模→模型预测→残差白噪声检验。先导入库和数据,查看时序图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
data= pd.read_csv(r'C:\Users\lenovo\Desktop\ts_simu200.csv',index_col='t')
dates=pd.date_range(start='2017/01/01', periods=200)
data.set_index(dates, inplace=True)
data=data['ARMA_11_b']
data.plot(figsize=(12,8))
plt.show()

在这里插入图片描述

1、平稳性检验

ADF是一种常用的单位根检验方法,它的原假设为序列具有单位根,即非平稳,对于一个平稳的时序数据,就需要在给定的置信水平上显著,拒绝原假设。

temp = np.array(data)
t = sm.tsa.stattools.adfuller(temp) # ADF检验
output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Value(10%)"],columns=['value'])
output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
output
Out[1]: 
                                   value
Test Statistic Value             -4.8944
p-value                      3.57598e-05
Lags Used                              3
Number of Observations Used          196
Critical Value(1%)              -3.46416
Critical Value(5%)               -2.8764
Critical Value(10%)             -2.57469

可以看出,p-value接近于0,小于显著性水平。原假设"序列具有单位根即非平稳"被拒绝,因此该时间序列为平稳的。

2、ARMA模型定阶

先用第一种定阶方法:利用ACF图和PACF图找出该序列适合的模型。

#自相关和偏自相关图	
fig = plt.figure(figsize=(12,8))
fig = sm.graphics.tsa.plot_acf(data,lags=20)#lags表示展示的滞后的阶数
fig = sm.graphics.tsa.plot_pacf(data,lags=20)
plt.show()

在这里插入图片描述
在这里插入图片描述
很明显图中ACF和PACF都是拖尾的,应该建立ARMA(p,q)模型。下面分别应用AIC和BIC法则为我们的模型定阶。为了控制计算量,根据上图我们限制AR最大阶不超过5,MA最大阶不超过5:

sm.tsa.arma_order_select_ic(data,max_ar=5,max_ma=5,ic='aic')['aic_min_order']# AIC
Out[3]: (1, 1)
sm.tsa.arma_order_select_ic(data,max_ar=5,max_ma=5,ic='bic')['bic_min_order']# BIC
Out[4]: (1, 1)

可以看出,AIC和BIC法则求解的模型阶次均为(1,1),下面就来建立ARMA(1,1)模型,源数据的最后20个数据用于预测。

3、ARMA(1,1)建模

为了检验拟合效果,可用经调整的R²来测算:
在这里插入图片描述

order = (1,1)
train = data[:-20]
test = data[-20:]
tempModel = sm.tsa.ARMA(train,order).fit()
#拟合效果打分
delta = tempModel.fittedvalues - train
score = 1 - delta.var()/train.var()
print (score)
0.8106057124595238

可以发现拟合精度较高,接着来看预测效果。

4、模型预测

由于该数据集从2017-01-01开始,共有200条,因此我们需要预测最后20条并对比,即2017-06-30至2017-07-19。

predicts = tempModel.predict(180,199,dynamic=True)
comp = pd.DataFrame()
comp['original'] = test
comp['predict'] = predicts
comp.plot()

在这里插入图片描述
可以发现预测效果不是很好。结合之前的拟合效果来看,发现该模型拟合历史数据较好,而预测差强人意:

import datetime
fig = tempModel.plot_predict(pd.to_datetime('2017-01-01'),\
      pd.to_datetime('2017-01-01')+datetime.timedelta(days=220), dynamic=False, plot_insample=True)
plt.show()

在这里插入图片描述

5、残差白噪声检验

模型是否提取了原数据足够的信息的重要参考是ARMA模型的残差是否是白噪声序列:

resid = tempModel.resid
sm.graphics.tsa.plot_acf(resid, lags=50)
sm.graphics.tsa.plot_pacf(resid, lags=50)
plt.show()

在这里插入图片描述
在这里插入图片描述
可以看出,残差已经无信息可提取。在ACF图中,残差滞后各期均无显著的自相关性(ACF第0期代表与自身的相关性,其值恒为1),在PACF图中,各期也无显著的偏自相关性。可以判定,残差序列为白噪声序列。

参考文献

常国珍等《Python数据科学:技术详解与商业实践》,机械工业出版社;
https://uqer.datayes.com/v3/community/share/57988677228e5ba28e05faff

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(五十一)时间序列分析二:平稳时间序列分析(ARMA) 的相关文章

  • Mybatis将整数0识别为空

    本文内容整理来源 http blog csdn net john1337 article details 70230563 今天在使用mybatis时遇到一个问题 Java代码中传递的整数0在mybatis中被识别成null html vi
  • sql if判断

    判断 permission 是否等于 null 如果是null则返回 为null select ifnull permission 为null from sys menu 如果sex 1返回男 否则返回女 select if sex 1 男
  • 02-----关于将已存在的项目代码提交到git仓库(命令方式)

    上一篇我们讲述了关于如何使用TortoiseGit配合Putty将本地项目push到远程仓库 本篇将讲述Linux基于命令行的方法将项目推送到远程库 注意一些概念 工作区 暂存区和分支的区别 工作区就是我们的项目目录 暂存区就是我们git
  • 存储过程返回结果集_存储过程

    在开发SQL Server时 为了修改和扩充方便 经常会将负责不同功能的语句集中起来并且按照用途分别独立存储 以便能够反复调用 这些独立存储且拥有不同功能的语句即是 存储过程 存储过程属于数据库对象 是一种高效的 安全的访问数据库的方法 主
  • C++打印hello world

    首先我们要知道 C 中有一个很重要的东西 那就是面向对象 其中 C 中的打印和输入都是一个对象 而不是像C一样是一个函数 所以打印和输入都有一定的区别 打印是C 最基础的东西 下面我们先放代码 再逐条分析 include
  • OrangePIPC2---uboot flash的适配

    下载uboot源码 去我的github上下载源码 或者官方uboot都行 由于我还没装git所以先临时下载用用 解压 unzip XXX zip即可 编译 export CROSS COMPILE aarch64 linux gnu mak
  • Java获取Set中第一个值

    Map
  • [1227]在浏览器里面运行命令行ttyd

    文章目录 Web Terminal 安装 使用 基本使用 绑定端口 Basic Auth 自动打开浏览器 Docker 支持 SSH 终端 SSL 支持 更多 公网暴露 总结 Web Terminal ttyd https github c
  • Java反射---对象池

    在很多Java EE 框架中都需要根据配置文件信息来创建Java对象 从配置文件读取的只是i某个类的字符串类名 程序就需要根据该字符串来创建对应的实例 就必须使用反射 下面程序就实现了一个简单的对象池 该对象池会根据配置文件读取name v
  • IPv4,IPv6,TCP,路由

    主要回顾一下TCP IP的传输过程 在这个过程中 做了什么事情 ip 网际协议 IP协议能让世界上任意两台计算机之间进行通信 IP协议的三大功能 寻址和路由 传递服务 不可靠 尽最大努力交付传输数据包 可靠性由上层协议提供 无连接 数据包分
  • flea-jersey使用之Flea RESTful接口客户端接入

    Flea RESTful接口客户端接入 引言 1 客户端依赖 2 客户端接入步骤 3 具体接入讲解 3 1 资源客户端配置 3 2 客户端业务输入和输出参数定义 3 3 FleaJerseyClient使用 引言 本篇介绍 flea jer
  • HTTP状态 404~~~~

    HTTP常用状态码及其含义 1xx 指示信息 表示请求已接收 继续处理 100 Continue 初始的请求已经接受 客户应当继续发送请求的其余部分 HTTP 1 1新 101 Switching Protocols 服务器将遵从客户的请求
  • html&css

    html 规范 尽量使用双引号 img src 1 jpg div style color red div div HTML5标准模版 div

随机推荐

  • 图论感想

    图论基础无非也就是图存储 遍历 有向图无向图的连通性 分为图联通和联通分量 有向图为强联通分量 割点与割边 本人目前还没有看网络流内容 只是大致知道是什么 觉得也是图论一部分 个人认为学东西应该大体了解一下所学内容 每学一个必要好好思考 最
  • Android 设置默认锁屏壁纸接口

    完成自定义service后 接下来就是具体实现接口 1 在frameworks base core java android app customized ICustomizedService aidl中定义接口 boolean setLo
  • 第十二届蓝桥杯高职java组国一的感悟和建议

    我是高职java组的选手 这次比赛取得了国一前三的成绩 之前作为一个懵懂的大一新生 参加过一次比赛 只取得了国三的成绩 这次也算是实现一下小目标 不过可惜二次都没去北京 说好的300旅游呢 o 这应该是我最后一次参加蓝桥杯 这次比赛的题解我
  • ssh 安装注意

    修改version h 大部分漏洞要求隐藏 1 version h define SSH VERSION OpenSSH 8 4 改 define SSH PORTABLE p1 改 define SSH RELEASE SSH VERSI
  • Linux 6.6 RC 1 发布,还没加上 Bcachefs

    Linux 6 6 亮点包括 EEVDF 调度器 有利于 AMD 芯片 CPU 的工作队列变更 DRM CI 实验 KSMBD 不再是实验性质 HP BIOS 设置驱动程序 内核 make xconfig 的 Qt6 端口 新声音硬件支持
  • 快速刷爆六级词汇方式

    刷六级词汇 开启excel朗诵 方式1 方式2 关闭excel朗诵 方式1 方式2 词汇清单 之前考六级用excel刷词汇 一次通过 记录刷词方式 开启excel朗诵 方式1 点击打开朗读单元格 方式2 自定义功能区 gt 新建选项卡 gt
  • Linux文件传输--本地Windows文件上传到Linux服务器

    运行框中输入cmd打开命令框 输入下方语句进行上传 scp P 22 C Users Administrator Desktop 2023111 tar gz root IP data 语句解释 22 Linux服务器端口 C Users
  • 构建跨平台桌面应用程序:入门 Tauri 开发指南

    什么是 Tauri 简介和背景 Tauri 是一个用于构建跨平台桌面应用程序的工具包 它允许开发人员使用 Web 技术 如 HTML CSS 和 JavaScript 来构建原生应用程序 同时提供了访问底层系统 API 和外部命令的能力 T
  • 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强 PAT组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第1行给出不超过105的正整数N 即参赛人数 随后N行 每行给出一位参赛者的信息和成绩 包括其所代表的学校的编号
  • android刘海屏之终极适配

    前言 作为安卓开发 也得承认苹果设计一直在引领潮流 所以自从 iPhone X 发布之后 刘海屏 就一直被热议 作为我自己必须先吐槽一下 真没觉得刘海屏好看 但是作为苦逼的开发者 还是要必须去适配刘海屏的 自然而然的在吐槽完毕以后还是有了这
  • Python爬虫技巧:使用代理IP和User-Agent应对反爬虫机制

    在当今的网络环境中 反爬虫机制广泛应用于各个网站 为爬虫程序增加了困难 然而 作为一名Python爬虫开发者 我们可以利用一些技巧应对这些反爬虫措施 本文将分享一个重要的爬虫技巧 使用代理IP和User Agent来应对反爬虫机制 帮助您更
  • JAVA中的异常和错误

    异常 Exception 异常可分为两类 运行期异常 RuntimeException 和受检异常 CheckedException 运行期异常 定义 RuntimeException及其子类都被称为运行时异常 特点 Java编译器不会检查
  • cocos命令编译Android平台,sdk版本错误解决方案

    cocos compile p android运行以后出现the android platform should be equal larger than 10的解决方案 可以使用以下命令 解决此问题 cocos compile p and
  • 【论文翻译】【剪枝】Pruning filters for efficient convnets修剪滤波以实现高效卷积网络

    摘要 神经网络在各种应用中的成功伴随着计算和参数存储成本的显著增加 最近为减少这些开销所做的努力包括在不损害原始精度的情况下修剪和压缩各个层的权重 然而 基于大小的权重修剪减少了来自全连接层的大量参数 并且由于修剪后的网络中的不规则稀疏性
  • 关于vue轮播vue-seamless-scroll自动滚动插件复制出来的数据点击事件无效

    关于vue轮播vue seamless scroll自动滚动插件复制出来的数据点击事件无效 关于vue seamless scroll 我的问题 然后又又又有新的问题了 改变插件 使用 vue j scroll总结 关于vue seamle
  • 100道Python基础入门练习题(附答案)

    我们都知道实践是检验真理的唯一标准 想知道自己学会了多少 不妨来做题检验一下吧 今天给大家分享的100道Python基础练习题 因为篇幅有限 先给大家准备了前10道例题 需要全部习题 这些知识部分习题 篇幅还是比较多的 这份完整版的Pyth
  • Linux下ffmpeg的卸载与安装

    ubuntu下比较容易安装会自动安装依赖 sudo add apt repository ppa kirillshkrogalev ffmpeg next sudo apt get update sudo apt get install f
  • FFmpeg av_interleaved_write_frame错误

    av interleaved write frame 1 av interleaved write frame 崩溃 检查 传入的AVPacket中的pts和dts AVFormatContext中的AVStream中的time base
  • 3分钟学会在C ++中以编程方式合并Excel工作表中的单元格

    合并和取消合并单元格是Microsoft Excel的一项简单且常用功能 合并单元格可能会在某些情况下很有用 例如 当工作表中有多个列共享相同的标题时 可以合并列上方的单元格以使其具有共同的标题 如果不再需要合并的单元格 则可以轻松地取消合
  • (五十一)时间序列分析二:平稳时间序列分析(ARMA)

    平稳时间序列 平稳时间序列分为严平稳时间序列与宽平稳时间序列 如果在一个时间序列中 各期数据的联合概零分布与时间 t 无关 则该序列为严平稳时间序列 实际中讨论的平稳时间序列是宽平稳时间序列 指对任意时间下 序列的均值 方差存在并为常数 且