滞后相关的python实现
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
算法原理
存在滞后关系的因果关系一般有这样的特点:当一个变量是原因,另一个变量是结果时,结果变量的变化总是滞后于原因变量,而且这两个变量存在着高相关,所以追踪测查变量间的滞后相关可能会得到因果的结论。
环境
主要用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为输入数据,直接利用[]进行列的选择,输入函数中即可计算。