计算线性回归斜率矩阵(类似于相关矩阵) - Python / Pandas

时间:2016-07-21 11:21:34

标签: python pandas linear-regression correlation

Pandas有一个非常好的功能,为您的数据DataFrame pd.DataFrame.corr()提供相关矩阵数据框。

然而,相关性的r并不总是提供信息。根据您的应用,线性回归的斜率可能同样重要。是否有任何函数可以为输入矩阵或数据帧返回该函数?

除了用scipy.stats.linregress()进行迭代,这会很痛苦,我不知道有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

回归线的斜率y = b 0 + b 1 * x也可以使用相关系数计算:b 1 = corr(x,y)*σ x y

使用numpy的newaxis创建σ x y 矩阵:

df.corr() * (df.std().values / df.std().values[:, np.newaxis])
Out[59]: 
          A         B         C
A  1.000000 -0.686981  0.252078
B -0.473282  1.000000 -0.263359
C  0.137670 -0.208775  1.000000

其中df是:

df
Out[60]: 
   A  B  C
0  5  6  9
1  4  4  2
2  7  3  5
3  4  3  9
4  6  5  3
5  3  8  6
6  2  8  1
7  7  2  7
8  4  1  5
9  1  6  6

这是为了验证:

res = []
for col1, col2 in itertools.product(df.columns, repeat=2):
    res.append(linregress(df[col1], df[col2]).slope)
np.array(res).reshape(3, 3)
Out[72]: 
array([[ 1.        , -0.68698061,  0.25207756],
       [-0.47328244,  1.        , -0.26335878],
       [ 0.1376702 , -0.20877458,  1.        ]])