自相关ACF与偏自相关PACF

在做机器学习预测时,往往需要对数据进行auto-correlation和partial auto-correlation function(ACF和PACF),根据查阅文献和相关资料,整理出比较容易上手和理解的知识与代码:

定义:

自相关系数:把一列数据按照滞后数拆成两列数据,在对这两列数据做类似相关系数的操作。

 这组数据是求滞后数为2的自相关系数,则变成求{x1,x2,...,x8}和{x3,x4,...,x10}两者的“相关系数”,相关系数打引号是因为这个相关系数的公式和以往的有点不一样。下面看一下公式的对比:

 要注意的是在计算自相关系数的时候 是使用的总体的均值, 可以看到他们除了 取得不一样, 几乎就是一样的。所以,我们可以这么理解自相关系数, 就是用来表达一组数据前后数据 (自己和自己) 的相关性

偏自相关系数:对于平稳AR(p)序列,所谓滞后k偏自相关系数就是指在给定中间k-1个随即变量Xt-1,Xt-2,...,Xt-k+1的条件下,或者说,在剔除了中间k-1个随即变量的干扰滞后,Xt-k对Xt影响的相关度量。用数学语言描述就是

 概念和原理是比较好懂的,如何python实现呢,这里我们介绍一个比较好用的py库:statsmodels

代码:

安装所需要的py库

pip install statsmodels

导入所需要的包

import numpy as np
import statsmodels as st
import statsmodels.api as sm
from matplotlib import pyplot
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.graphics.tsaplots import plot_acf

在这里,我使用了某站点2年的月尺度降水数据为例

pre=np.array([12,24,43,53,130,102,140,159,133,84,42,26,29,46,37,66,71,103,150,143,129,75,33,12])

ACF

#参数设置:pre输入数据,nlags需要计算的lag时长,alpha置信区间
ACF=sm.tsa.stattools.acf(pre, adjusted=False, nlags=15, qstat=False, fft=True, alpha=.05,  missing='none')
print(ACF)

#输出结果:第一个是在1至15lag下的相关系数,第二个是95%置信区间的相关系数
'''(array([ 1.        ,  0.70040232,  0.30596026, -0.12741208, -0.46239925,
       -0.56591442, -0.5848706 , -0.47952963, -0.26610439,  0.0271988 ,
        0.25168961,  0.44747089,  0.45208154,  0.33528031,  0.15724224,
       -0.07627136]), array([[ 1.        ,  1.        ],
       [ 0.30032635,  1.10047829],
       [-0.2571567 ,  0.86907722],
       [-0.71653671,  0.46171255],
       [-1.0559181 ,  0.13111961],
       [-1.21453666,  0.08270782],
       [-1.30821883,  0.13847763],
       [-1.27497781,  0.31591855],
       [-1.1065503 ,  0.57434153],
       [-0.82662649,  0.8810241 ],
       [-0.60227436,  1.10565358],
       [-0.41828508,  1.31322687],
       [-0.44993365,  1.35409674],
       [-0.60230016,  1.27286077],
       [-0.79933652,  1.113821  ],
       [-1.03697838,  0.88443565]]))'''

作图

#参数设置:pre输入数据,lags所计算的lag范围
plot_acf(pre,lags=15,color='c')
pyplot.show()

PACF

#输入数据类似ACF,注意PACF的nlags需要少于数组长度的一半
PACF=st.tsa.stattools.pacf(pre,nlags=8,method='ywadjusted', alpha=0.05)
print(PACF)



#输出结果
'''(array([ 1.        ,  0.7308546 , -0.4301233 , -0.47442131, -0.3657477 ,
       -0.0327055 , -0.58720785, -0.84116329, -2.90972345]), array([[ 1.        ,  1.        ],
       [ 0.33077862,  1.13093057],
       [-0.83019927, -0.03004733],
       [-0.87449728, -0.07434534],
       [-0.76582367,  0.03432827],
       [-0.43278147,  0.36737047],
       [-0.98728382, -0.18713188],
       [-1.24123927, -0.44108732],
       [-3.30979943, -2.50964748]]))'''

 作图

plot_pacf(pre, lags=8)
pyplot.show()

 参考:

statsmodels.tsa.stattools.pacf — statsmodels

[时间序列分析][3]--自相关系数和偏自相关系数_WMN7Q的博客-CSDN博客_自相关系数

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值