我在 pandas 数据框中有一个数据,例如:
df =
X1 X2 X3 Y
0 1 2 10 5.077
1 2 2 9 32.330
2 3 3 5 65.140
3 4 4 4 47.270
4 5 2 9 80.570
我想做多元回归分析。这里 Y 是因变量,x1、x2 和 x3 是自变量。 每个自变量与因变量之间的相关性为:
df.corr():
X1 X2 X3 Y
X1 1.000000 0.353553 -0.409644 0.896626
X2 0.353553 1.000000 -0.951747 0.204882
X3 -0.409644 -0.951747 1.000000 -0.389641
Y 0.896626 0.204882 -0.389641 1.000000
正如我们在这里看到的,y 与 x1 的相关性最高,所以我选择 x1 作为第一个自变量。在这个过程中,我尝试选择与 y 具有最高部分相关性的第二个自变量。在这种情况下如何找到偏相关?
在
Y
(最后一列)和其他之间成对排名
如果您只是想找到
Y
和其他之间的相关等级,只需执行 -
corrs = df.corr().values
ranks = (df.columns[:-1][-corrs[:-1,-1].argsort()]).tolist()
样品运行 -
In [145]: df
Out[145]:
X1 X2 X3 Y
0 0.576562 0.481220 0.148405 0.929005
1 0.732278 0.934351 0.115578 0.379051
2 0.078430 0.575374 0.945908 0.999495
3 0.391323 0.429919 0.265165 0.837510
4 0.525265 0.331486 0.951865 0.998278
In [146]: df.corr()
Out[146]:
X1 X2 X3 Y
X1 1.000000 0.354387 -0.642953 -0.646551
X2 0.354387 1.000000 -0.461510 -0.885174
X3 -0.642953 -0.461510 1.000000 0.649758
Y -0.646551 -0.885174 0.649758 1.000000
In [147]: corrs = df.corr().values
In [148]: (df.columns[:-1][-corrs[:-1,-1].argsort()]).tolist()
Out[148]: ['X3', 'X1', 'X2']
所有列之间的成对排名
如果您试图找到所有列之间的排名,我们将采用这样的一种方法 -
def pairwise_corr_rank(df):
corrs = df.corr().values
cols = df.columns
n = corrs.shape[0]
r,c = np.triu_indices(n,1)
idx = corrs[r,c].argsort()
out = np.c_[cols[r[idx]], cols[c[idx]], corrs[r,c][idx]][::-1]
return pd.DataFrame(out, columns=[['P1','P2','Value']])
样品运行 -
In [109]: df
Out[109]:
X1 X2 X3 Y
0 1 2 10 5.077
1 2 2 9 32.330
2 3 3 5 65.140
3 4 4 4 47.270
4 5 2 9 80.570
In [110]: df.corr()
Out[110]:
X1 X2 X3 Y
X1 1.000000 0.353553 -0.409644 0.896626
X2 0.353553 1.000000 -0.951747 0.204882
X3 -0.409644 -0.951747 1.000000 -0.389641
Y 0.896626 0.204882 -0.389641 1.000000
In [114]: pairwise_corr_rank(df)
Out[114]:
P1 P2 Value
0 X1 Y 0.896626
1 X1 X2 0.353553
2 X2 Y 0.204882
3 X3 Y -0.389641
4 X1 X3 -0.409644
5 X2 X3 -0.951747
import numpy as np
Par_corr = -np.linalg.inv(np.corrcoef(df.values.T)) # 4x4 size