怎样用python画超前滞后先关图

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理

作者:domotokoi  

想要获取更多Python学习资料,了解更多关于Python的知识,可以加Q群630390733踊跃发言,大家一起来学习讨论吧!

超前滞后相关是什么

想看两个时间序列是否相关,最简单的方法就是求二者的相关系数,但是在大气、海洋等科学问题的研究中,往往一个过程的响应并不是实时的,可能当a过程发生以后一段时间b过程才会发生,这样的关系往往不是同时期的相关系数可以表现的。超前滞后相关就是为了看两个过程的发生演变是否在时间的先后上有一定的相关性。

举个例子:
有a、b两个时间序列,长度都是十二个月,直接求相关系数就是简单的同期相关。如果a的1-11月对b的2-12月做相关系数,就是a对b超前1个月的相关;拿a的2-12月对b的1-11月做相关则称之为a对b的滞后1月相关,以此类推,就能求出n个月的超前滞后相关,画图出来就是沿0月(同期)正负各n月。

在这里插入图片描述
摘自黄嘉佑的书《气相统计分析与预报方法》,第三版,17页

python中的实现

需要输入两个时间序列,结果为data1对data2的超前滞后相关系数的序列

from scipy.stats import pearsonr
import numpy as np

#超前滞后相关
def leadlagcor(data1,data2,n):
	#data1和data2为两个时间序列,n设置做多少个时间步长的超前滞后
    a=-n
    b=-a
    c=b*2+1
    x=np.arange(-n,n+1,1)
    r=np.zeros((c,1))
    p=np.zeros((c,1))

    for i in range(c):
        if i<(b):
            r[n-i],p[n-i]=pearsonr(data1[:(len(data1)-i)], data2[i:])
        else:
            r[i],p[i]=pearsonr(data1[x[i]:], data2[:len(data1)-x[i]])
    return r

附赠一个可视化程序

def leadlagcor_plot(data1,data2,n):
	#data1和data2为两个时间序列,n设置做多少个时间步长的超前滞后
    r=leadlagcor(data1,data2,n)#调用上面写的函数做超前滞后相关
    x=range(-n,n+1,1)
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(x,r,'k--',linewidth=0.8)
    ax.axhline(0, color='k')
    
    b=ax.bar(x,np.squeeze(r),color='red')
    for bar,height in zip(b,r):
        if height<0:
            bar.set(color='blue')
     
    print('cor_max:',np.max(r),'\n','cor_min:',np.min(r))

    plt.savefig('%s.jpg')
    plt.show()

画出来的结果就是这样啦,有更好的写法和例图也欢迎分享~
祝大家科研顺利,身心健康!
在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的时间序列超前滞后相关是一种用于分析时间序列数据之间关系的统计方法。它可以帮助我们确定一个时间序列是否在另一个时间序列之前或之后发生,以及它们之间的相关性。 在Python中,我们可以使用一些库和函数来计算时间序列的超前滞后相关。例如,我们可以使用pandas库来处理时间序列。通过pandas的Series对象,我们可以很容易地计算两个时间序列之间的滞后相关。 在计算滞后相关之前,我们需要先将时间序列数据转换为pandas的Series对象。然后,我们可以使用Series对象的autocorr()方法来计算滞后相关。该方法使用滞后k作为参数,返回滞后相关的值。如果滞后相关为正数,则表示当前时间序列在另一个时间序列之后发生;如果滞后相关为负数,则表示当前时间序列在另一个时间序列之前发生。 此外,我们还可以使用statsmodels库中的函数来计算时间序列的超前滞后相关。statsmodels提供了更复杂和多样化的统计模型,可以帮助我们更准确地分析时间序列数据。通过statsmodels的tsa模块,我们可以使用ccf()函数来计算时间序列之间的滞后相关。该函数返回滞后相关的值和对应的置信区间。 总之,Python提供了丰富的工具和库来处理和分析时间序列数据。利用这些工具和函数,我们可以方便地计算时间序列的超前滞后相关,并进一步了解这些时间序列之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值