时间序列中p,q值选择

1.模型识别:

对平稳时间序列Yn,求得其自相关函数(ACF)和偏自相关函数(PACF)序列。
若PACF序列满足在p步截尾,且ACF序列被负指数函数控制收敛到0,则Yn为AR(p)序列。
若ACF序列满足在q步截尾,且PACF序列被负指数函数控制收敛到0,则Yn为MA(q)序列。
若ACF序列和PACF序列满足皆不截尾,但都被负指数函数控制收敛到0,则Yn为ARMA序列。

2.模型定阶:

对于有N个观察值的序列,求得相应于AR(p)、MA(q) 和 ARMA(p,q)三种模型的残差方差,出现模型最小残差方差时的模型阶数就是各个模型的最佳阶数。

3.模型参数估计:

AR模型的参数可以根据ACF序列构成的矩阵及其矩阵之间的转化关系求得。
MA模型的参数采用线性迭代法即可求出。
ARMA模型参数估计方法是按上述求解AR模型和MA模型参数的方法分别对AR和MA模型进行参数估计,即可得到ARMA模型的参数。

4.模型估计函数:

根据对应的模型以及估计参数等带入估计函数计算出估计值。

python中使用Statsmodel库进行p,q值选择

最近工作中用到时间序列模型中的ARMA(ARIMA),需要自动选择p,q值,但是我查到的资料都是根据自相关图和偏自相关图来观察拖尾和截尾,以此来选择p,q值,刚开始时一筹莫展,后来灵机一动,为何不看下导入的statsmodel库中对应画图的函数调用时用的源代码呢:

import statsmodelsprint statsmodels.__file__

根据输出找到源代码所在位置,用来画偏自相关图的代码部分为:

acf_x, confint = pacf(x, nlags=nlags, alpha=alpha, method=method)if use_vlines:ax.vlines(lags, [0], acf_x, **kwargs)ax.axhline(**kwargs)# center the confidence interval TODO: do in acf?confint = confint - confint.mean(1)[:,None]kwargs.setdefault('marker', 'o')kwargs.setdefault('markersize', 5)kwargs.setdefault('linestyle', 'None')ax.margins(.05)ax.plot(lags, acf_x, **kwargs)ax.fill_between(lags, confint[:,0], confint[:,1], alpha=.25)

从画图部分可以看到置信区间上界为confint[:,0],下界线为 confint[:,1],又有:

confint = confint - confint.mean(1)[:,None]

因此可以写个循环,当出现截尾时返回当前p,q值,也就可以确定选择AR或MA模型了,如果两者都拖尾,则需要用赤池信息准则,或者贝叶斯信息准则或别的准则来进一步判断,那就是另一回事了,除了运行时间稍微有点长外并没有什么困难的了。

代码如下:

1、判断时间序列稳定性

#用来检查时间序列稳定性的,代码中选用的临界值为5%,p-value选用的为0.1,这个可以根据实际进行修改。from statsmodels.tsa.arima_model import ARIMA
from statsmodels.tsa.stattools import adfuller, acf, pacfdef testStationarity(timeSer):stationarity = Falsedftest = adfuller(timeSer)dfoutput = Series(dftest[:4], index=['Test Statistic', 'p-value', 'lags', 'nobs'])for key, value in dftest[4].items():dfoutput['Critical values (%s)' % key] = valueif dfoutput['Test Statistic'] < dfoutput['Critical values (5%)']:if dfoutput['p-value'] < 0.1:stationarity = Truereturn stationarity

2、选择合适的p,q值

(由于自动判断,因此收敛速度状况并没有做判断,这个是因为我使用的数据在满足第一个在置信区间内的值后即是局部最优,实际中因数据的不同代码需要部分修改,这里只是提供了一个思路。)

def p_q_choice(timeSer, nlags=40, alpha=.05):kwargs = {'nlags': nlags, 'alpha': alpha}acf_x, confint = acf(timeSer, **kwargs)acf_px, confint2 = pacf(timeSer, **kwargs)confint = confint - confint.mean(1)[:, None]confint2 = confint2 - confint2.mean(1)[:, None]for key1, x, y, z in zip(range(nlags), acf_x, confint[:,0], confint[:,1]):if x > y and x < z:q = key1breakfor key2, x, y, z in zip(range(nlags), acf_px, confint2[:,0], confint[:,1]):if x > y and x < z:p = key2breakreturn p, q

附录:
ARIMA模型运用的流程

  1. 根据时间序列的散点图、自相关函数和偏自相关函数图识别其平稳性。

  2. 对非平稳的时间序列数据进行平稳化处理。直到处理后的自相关函数和偏自相关函数的数值非显著非零

  3. 根据所识别出来的特征建立相应的时间序列模型。
    平稳化处理后,若偏自相关函数是截尾的,而自相关函数是拖尾的,则建立AR模型;
    若偏自相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。

  4. 参数估计,检验是否具有统计意义。

  5. 假设检验,判断(诊断)残差序列是否为白噪声序列。

  6. 利用已通过检验的模型进行预测。

时间序列ARMA中p,q选择相关推荐

  1. matlab之ARMA(p,q)模型

    学完MA(q),再接再厉啊! 已知零均值平稳时间序列ARMA(p,q)的自协方差函数,求系数. %ARMA(2,2) p=2;q=2; r=[5.61,-1.1,0.23,0.43,-0.1];%r1 ...

  2. 时间序列预测任务的模型选择最全总结

    在第一部分,将了解多种时间序列的模型,如 经典的时间序列模型 监督学习模型 基于深度学习的模型 在第二部分,将建立几个时间序列模型来预测股市的应用案例,并了解一些时间序列建模技术.这些模型将相互比较, ...

  3. python怎么做q检验_关于eviews做时间序列模型的残差Q统计量检验我决定写一些!...

    本文目的:1.做arima模型的时候你需要在模型拟合完之后做残差的Q统计量检验,但是你又不会看结果: 2.你会看结果,但是是否发现疑问:为什么直接在模型中选择残差检验中的Q统计量检验得出的结果与选择r ...

  4. 1、下列时间序列模型中,哪一个模型可以较好地拟合波动性的分析和预测。

    感想 这对我来说应该算是一个超纲的题目,我从没接触过时间序列预测的问题,我这里也弥补一下. problem 1.下列时间序列模型中,哪一个模型可以较好地拟合波动性的分析和预测. A. AR模型 B. ...

  5. 在 Visual Studio 中使用 Q# 进行量子编程

    1 量子计算机与量子编程 1.1 量子计算机 Quantum computing is computing using quantum-mechanical phenomena, such as su ...

  6. hotelling变换_基于Hotelling-T²的偏最小二乘(PLS)中的变量选择

    hotelling变换 背景 (Background) One of the most common challenges encountered in the modeling of spectro ...

  7. GAN(生成对抗网络)在合成时间序列数据中的应用(第二部分——利用GAN生成时间序列数据)

    GAN(生成对抗网络)在合成时间序列数据中的应用(第二部分–TimeGAN 与合成金融输入) (本文基本是对Jasen 的<Machine Learning for Algorithmic Tr ...

  8. 时间序列模型中,哪一个模型可以较好地拟合波动性的分析和预测

    注:转载出处: http://blog.csdn.net/ztf312/ 在此感谢原博主的整理分享! 题目:下列时间序列模型中,哪一个模型可以较好地拟合波动性的分析和预测? AR模型 MA模型 ARM ...

  9. python的for语句条件_Python中的条件选择和循环语句

    Python中的条件选择和循环语句 同C语言.Java一样,Python中也存在条件选择和循环语句,其风格和C语言.java的很类似,但是在写法和用法上还是有一些区别.今天就让我们一起来了解一下. 一 ...

最新文章

  1. HTC Element Behaviors in Internet Explorer.
  2. Zookeeper系列五:Master选举、ZK高级特性:基本模型
  3. muduo网络库学习(五)服务器监听类Acceptor及Tcp连接TcpConnection的建立与关闭
  4. opc服务器组态文件已写保护_iscada电力组态监控源代码,电力组态版,只有opc驱动版本...
  5. 2021儋州市民族中学高考成绩查询,海南2021高考成绩排名查询,海南高考个人成绩排名如何查询...
  6. 两大开源硬件之树莓派与a_开源硬件之美
  7. 计算机网络(七)——无线局域网
  8. python语言变量随时命名随时赋值_Python变量及数据类型用法原理汇总
  9. SYN flood***的原理及其防御 (一)
  10. 三万字详解SpringClould高可用流量防护组件Sentinel哨兵(含源码例子)
  11. 安卓c语言代码编辑器,安卓源代码编辑器
  12. 关于对H264码流的PS的封装的相关代码实现
  13. ai智能时代教育内容的改变_人工智能正在改变我们的评论方式
  14. python中rect函数_Rect和RectF函数
  15. mysql workbench 备份数据库
  16. Laravel 生成Controller
  17. 掷骰子python代码_Python之使用Pygal模拟掷骰子
  18. MVC中的ViewData、ViewBag和TempData
  19. ChatGPT 可以联网了!浏览器插件下载
  20. Spring Boot使用@RepeatSubmit 防止重复提交

热门文章

  1. polsarpro滤波后没有bmp文件_win10系统右键新建菜单中没有bmp如何解决
  2. strtok函数的实现
  3. Python代码实现中国日报网双语文章订阅至邮箱
  4. python的or的用法_python中or和and的用法
  5. cart算法示例代码
  6. webpack坑系列--安装webpack-cli
  7. 民锋国际期货:期货交易 | 博弈之道,遵守法则
  8. LeetCode 6. Z 字形变换 (N字形变换)
  9. 中国蚁剑下载时,出现“无法成功完成操作,文件包含病毒或潜在的垃圾软件”报错的解决方案
  10. 关于Eclipes上Servlet程序404的问题