Python:如何找到两个值之间的相关性并消除噪音?

时间:2019-07-25 10:15:34

标签: python signal-processing pearson-correlation

我有两条曲线AB高度相关,如下图所示,其中CA和{{1}之间的皮尔逊相关性}。

包含数据的文件可以here下载。

B

绿色曲线的值应为import numpy as np import pandas as pd import pylab as plt df = pd.read_csv('prova.csv') A = df['A'].values B = df['B'].values from scipy.stats.stats import pearsonr C = pearsonr(A,B)[0] fig, ax = plt.subplots(1,2, figsize=(20, 5)) ax1 = ax[0] ax2 = ax1.twinx() ax1.plot(A, 'g-') ax2.plot(B, 'b-') ax1.set_ylabel('A', color='g', fontsize=20); ax2.set_ylabel('B', color='b', fontsize=20); ax2 = ax[1] txt = 'C = %.2f'%C ax2.scatter(A, B, label=txt) ax2.set_xlabel('A', color='g', fontsize=20); ax2.set_ylabel('B', color='b', fontsize=20); ax2.legend(fontsize = 16) ,但信号受0影响。我想找到BA之间的关系,以使BA被抵消,但我不确定如何进行。

Data and correlation plot

1 个答案:

答案 0 :(得分:1)

很显然,AB相互预测得很好。我们可以利用它来确保在给定0A的情况下获得大约B的值。我选择的方法是least_squares拟合。

对于某些参数A - x * B - cx,我们希望最小化c。可以使用

import matplotlib.pyplot as plt
import pandas as pd
import scipy.optimize as opt


df = pd.read_csv('prova.csv')

def fit(x):
    return df['A'] - x[0] * df['B'] - x[1]


result = opt.least_squares(fit, [0, 0])

(df['A'] - result.x[0] * df['B'] - result.x[1]).plot()
plt.show()

结果是

Result

哪个数量级接近零。