我有两条曲线A
和B
高度相关,如下图所示,其中C
是A
和{{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
影响。我想找到B
和A
之间的关系,以使B
和A
被抵消,但我不确定如何进行。
答案 0 :(得分:1)
很显然,A
和B
相互预测得很好。我们可以利用它来确保在给定0
和A
的情况下获得大约B
的值。我选择的方法是least_squares
拟合。
对于某些参数A - x * B - c
和x
,我们希望最小化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()
结果是
哪个数量级接近零。