滞后相关的python实现

812 阅读1分钟

滞后相关的python实现

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

算法原理

存在滞后关系的因果关系一般有这样的特点:当一个变量是原因,另一个变量是结果时,结果变量的变化总是滞后于原因变量,而且这两个变量存在着高相关,所以追踪测查变量间的滞后相关可能会得到因果的结论。

b37c18d625d05872568c15cc25534d5.png

环境

主要用python3、pandas以及scipy

代码

def lag_corr(x_list,y_list):
    '''
    计算序列滞后相关性
    :param x_list:x值,list
    :param y_list: y值,list
    :return: 相关性结果,dict
    '''
    n = len(x_list)
    lag_corr_result = {}
    for lag in range(0,int(n/2) + 1):
        x_select = x_list[lag:]
        y_select = y_list[:n-lag]
        sci_corr = stats.pearsonr(x_select,y_select)
        lag_corr_result[lag] = sci_corr
    return lag_corr_result

def reprocessing(lag_result,output):
    '''
    针对lag_corr结果进行后处理
    :param lag_result: lag_corr函数结果
    :return: None
    '''
    max_lag = max(lag_result.items(),key=lambda x:abs(x[1][0]))

    data = pd.DataFrame(lag_result)
    data.index = ["corr","p_value"]
    data.to_csv("{}/lag_corr.csv".format(output))
    print("序列最大滞后lag为{},相关系数为{},p值为{}".format(max_lag[0],max_lag[1][0],max_lag[1][1]))

lag_corr函数主要做两个list的滞后相关,reprocessing主要做后处理,如输出最大的lag,以及输出所有的lag、corr、p-value等。

做滞后相关性之前还需要进行数据的预处理,如读取Excel数据等,直接利用pandas操作即可,选择相应的数据.values就可以输入函数,如下:

#Example
data = pd.read_csv(r"C:\Users\Think\Desktop\data.csv")
reprocessing(lag_corr(data["W"].values,data["F"].values),r"C:\Users\Think\Desktop")

data.csv为输入数据,直接利用[]进行列的选择,输入函数中即可计算。