引言

最近写论文关于预测的特征选择遇到一些问题,想把自己查询学习到的东西整理记录一下,理一理头绪,希望能加深自己对这些东西的理解。首先介绍引入几个概念:自相关函数(autocorrelation function,ACF)、偏自相关函数(partial autocorrelation,PACF)和互相关函数(cross-correlation function,CCF)。接下来介绍每个指标的计算方法和用途:

1. ACF

顾名思义,自相关函数是针对单个时间序列的,对于时间序列,滞后k阶的自协方差函数(autocovariance function,ACVF)为[1]:

ACF被定义为:

我理解的也等同于序列的pearson相关系数。置信区间一般使用下式进行计算[2]

下面是一个简单的计算程序,是对statsmodels模块的源代码进行简化得到的[3]

from scipy.stats import norm
import numpy as npdef acf(x,nlags=40, alpha=None):# Calculate the autocorrelation function. nobs = len(x)avf = acovf(x,nlag = nlags)acf = avf[:nlags + 1] / avf[0]if alpha is not None:varacf = np.ones(nlags + 1) / nobsvaracf[0] = 0varacf[1] = 1. / nobsvaracf[2:] *= 1 + 2 * np.cumsum(acf[1:-1]**2)interval = norm.ppf(1 - alpha / 2.) * np.sqrt(varacf)confint = np.array(lzip(acf - interval, acf + interval))return acf, confintelse:return acf
def acovf(x,nlag=None):# Estimate autocovariances.xo = x - x.mean()n = len(x)lag_len = nlagif nlag is None:lag_len = n - 1elif nlag > n - 1:raise ValueError('nlag must be smaller than nobs - 1')acov = np.empty(lag_len + 1)acov[0] = xo.dot(xo)for i in range(lag_len):acov[i + 1] = xo[i + 1:].dot(xo[:-(i + 1)])return  acov

理解了原理可以这样。

import pandas as pd
import matplotlib.pyplot as pltfrom statsmodels.tsa.stattools import acf
from statsmodels.graphics.tsaplots import plot_acfx = pd.read_excel('resample.xls',index_col=0,date_parse=True)acf_x, interval = acf(x=x,nlags=10,alpha=0.05)
print('ACF:\n',acf_x)
print('ACF95%置信区间下界:\n',interval[:,0]-acf_x)
print('ACF95%置信区间上界:\n',interval[:,1]-acf_x)plot_acf(x=x,lags=10,alpha=0.05)
plt.show()

输出结果:

ACF:[1.         0.97339745 0.95013662 0.93091665 0.91399405 0.898971860.88282934 0.86933546 0.85708885 0.84621534 0.83720026]
ACF95%置信区间下界:[ 0.         -0.03625835 -0.06169254 -0.07861061 -0.09196861 -0.10322176-0.11304703 -0.12177398 -0.12967655 -0.13692158 -0.14363264]
ACF95%置信区间上界:[0.         0.03625835 0.06169254 0.07861061 0.09196861 0.103221760.11304703 0.12177398 0.12967655 0.13692158 0.14363264]

[1] https://nwfsc-timeseries.github.io/atsa-labs/sec-tslab-correlation-within-and-among-time-series.html : Book, Applied Time Series Analysis for Fisheries and Environmental Sciences

[2] https://www.statsmodels.org/stable/_modules/statsmodels/tsa/stattools.html#acf : Python modular, statsmodels

[3] https://www.itl.nist.gov/div898/handbook/eda/section3/autocopl.htm : Engineering statistics handbook

2. PACF

偏自相关函数也是针对单个时间序列的,关于其和ACF的区别,[4] 进行了一般性的易于理解的解释,我在这里根据自己的理解进行简要翻译一下。

偏自相关函数是序列与滞后k阶的序列的线性相关性,移除的线性依赖,计算公式为:

滞后1阶的pacf与滞后1阶的acf相等,不存在滞后0阶的pacf。

import pandas as pd
import matplotlib.pyplot as pltfrom statsmodels.tsa.stattools import pacf
from statsmodels.graphics.tsaplots import plot_pacfx = pd.read_excel('resample.xls',index_col=0,date_parse=True)pacf_x, interval = pacf(x=x,nlags=10,alpha=0.05)
print('PACF:\n',pacf_x)
print('PACF95%置信区间下界:\n',interval[:,0]-pacf_x)
print('PACF95%置信区间上界:\n',interval[:,1]-pacf_x)plot_pacf(x=x,lags=10,alpha=0.05)
plt.savefig('acf1.jpg',dpi=200)
plt.show()
PACF:[ 1.          0.97373069  0.05083912  0.07012207  0.04486007  0.04104969-0.01595041  0.0505279   0.02666616  0.03388021  0.04459499]
PACF95%置信区间下界:[ 0.         -0.03625835 -0.03625835 -0.03625835 -0.03625835 -0.03625835-0.03625835 -0.03625835 -0.03625835 -0.03625835 -0.03625835]
PACF95%置信区间上界:[0.         0.03625835 0.03625835 0.03625835 0.03625835 0.036258350.03625835 0.03625835 0.03625835 0.03625835 0.03625835]

3. CCF

交叉相关系数是针对两个时间序列的,对于时间序列,先计算互协方差函数:

CCF的定义类似ACF:

其中,分别为的标准差。同时,应该注意的是。其中,y是解释变量,x是预测因子。CCF的95%的置信区间计算公式定义为[1]:

其中n是用于计算互相关系数的样本数量。

import pandas as pdfrom statsmodels.tsa.stattools import ccfx = pd.read_excel('resample.xls',index_col=0,date_parse=True)
ccf_x = ccf(x=x.values.ravel(),y=x.values.ravel())
print('CCF:\n',ccf_x[:10])
输出是:
CCF:[1.         0.97373069 0.95078739 0.9318734  0.91524696 0.900512780.88464586 0.87142306 0.85944187 0.8488298 ]

附录:

1. 计算ccf,acf和pcf的置信区间的时候,和数据序列的长度有关系,长度取多少的时候比较合适?

数据序列相关性-ACF,PACF和CCF相关推荐

  1. Python使用matplotlib可视化时间序列自回归ACF图和偏自回归PACF图、ACF图显示了时间序列与其自身滞后的相关性、PACF显示了任何给定的滞后(时间序列)与当前序列的自相关性

    Python使用matplotlib可视化时间序列自回归ACF图和偏自回归PACF图.ACF图显示了时间序列与其自身滞后的相关性.PACF显示了任何给定的滞后(时间序列)与当前序列的自相关性,但消除了 ...

  2. ACF PACF ETS ARIMA

    这里写自定义目录标题 ACF:**加粗样式** ACF:加粗样式 参考链接:https://blog.csdn.net/perke/article/details/117732680 自相关,也叫做序 ...

  3. 【数据挖掘】时序模式-白噪音-时序图-ADF检验-一阶差分-acf pacf(2021-11-11

    时序模式 2. 根据课堂上所讲的概念,编写程序产生以下时间序列数据(时间可以简化用1,2,3. . . . .表示),每种类型数据至少20条数据.并根据自己想法,使用程序画出相应的图. 一. 纯随机序 ...

  4. 一阶广义差分模型_4.2 序列相关性_清华大学:计量经济学(李子奈博导)_ppt_大学课件预览_高等教育资讯网...

    § 4.2 序列相关性 Serial Correlation 一,序列相关性概念二.实际经济问题中的序列相关性三.序列相关性的后果四.序列相关性的检验五.具有序列相关性模型的估计六.案例 § 4.2 ...

  5. 【计量经济学导论】06. 序列相关性

    文章目录 序列相关性 序列相关性的含义 序列相关性的产生原因 序列相关性的后果 序列相关性的检验方法 序列相关性的修正措施 广义最小二乘法 GLS 广义差分法 GD 可行的广义最小二乘法 FGLS 杜 ...

  6. R语言函数:length计算长度、seq生成数据序列、rep将数据对象重复N遍复制、cut将连续变量分割为多水平的因子变量、pretty将连续变量x分成n个区间创建合适的断点、cat数据对象拼接

    R语言函数:length函数计算数据对象的长度.seq函数生成数据序列(sequenceÿ

  7. R语言seq函数生成数据序列实战

    R语言seq函数生成数据序列实战 目录 R语言seq函数生成数据序列实战 #基本语法 #seq函数的基础应用

  8. R语言生成对数线性间隔数据序列(Log-linearly Spaced Sequences)

    R语言生成对数线性间隔数据序列(Log-linearly Spaced Sequences) # Log-linearly Spaced Sequences # 类似python中的 np.arang ...

  9. matlab数据序列的几种滤波器

    一维数据序列滤波的matlab代码, 其实和之前做的图像滤波大同小异, 只是图像的噪声情况复杂得多, 而且是二维的. 做这个主要是手上有个心电的的mens传感器, 蓝牙把数据传过来做一个数据的100H ...

最新文章

  1. ModuleNotFoundError: No module named ‘mmcv._ext‘
  2. php单屏网站源码,关于原生js实现类似fullpage的单页/全屏滚动的方法
  3. RAID重组和数据库数据的修复与验证
  4. BERT论文阅读(二): CG-BERT:Conditional Text Generation with BERT for Generalized Few-shot Intent Detection
  5. Python中有几种办法交换两个变量的值?
  6. 手游引擎之战再现新挑战者,OGEngine来了
  7. C#宿舍管理系统命名规范与评分标注
  8. Python中的数据遍历操作
  9. 云从科技宣布B+轮融资,多家国有基金入股,累计获资35亿元
  10. Session Cookie 之我见
  11. 主引导扇区(MBR)释疑
  12. 读《深入浅出设计模式》
  13. 小米9开发版自带root吗_怎么获取root权限-小米CC9和小米CC9美图版刷入MIUI开发版,获取完美ROOT权限功能...
  14. 常用的音频处理库介绍
  15. 【一起学生信】群体结构图形—structure堆叠图
  16. AIX补丁中TL、SP、CSP、IF、PTF的含义
  17. Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文件到相册等功能。通过plus.gallery获取相册管理对象
  18. vue项目中获取今天,昨天,明天时间方法
  19. Python中的命名元组(namedtuple)到底是什么东西?干嘛用的?
  20. 浏览器收藏夹(书签)导入导出

热门文章

  1. linux和windows怎么鼠标切换,如何在Linux系统中设置微软鼠标
  2. 一维数组实验题:计算平均数、中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平
  3. Python 运算符
  4. Nginx配置valid_referer解决跨站请求伪造(CSRF)
  5. 光学快门光闸 光学快门
  6. 网络安全(三)_数字签名与证书颁发机构CA
  7. @responseBody + 序列化
  8. 土壤墒情测量仪有哪些
  9. 手机号码在线实名校验(免开发PC版)使用说明书
  10. muduo scoped_ptr详解