pandas - Pandas 数据框python中的偏相关系数

标签 pandas numpy statistics regression correlation

我在 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之间的成对排名(last col) 及其他

如果您只是想找到 Y 之间的相关等级和其他人,只需做 -

corrs = df.corr().values
ranks = (df.columns[:-1][-corrs[:-1,-1].argsort()]).tolist()

sample 运行 -
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']])

sample 运行 -
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

关于pandas - Pandas 数据框python中的偏相关系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44843134/

相关文章:

Python - 主成分分析(PCA)错误

python - 使用 pandas 转换字符串时间戳

python - 如何在Python中将列标题设置为副标题

pandasUDF 和 pyarrow 0.15.0

python - 在 Python 中重新编码类似于 R ifelse 的变量

python - 如何在 python 中找到对称平均绝对误差?

Python Pandas 数据阅读器不工作

python - 将 Numpy 数组从 (3, 2, 3) reshape 为 (3, 3, 2)

python - Scipy 循环方差

validation - Rand 和 Jaccard 相似度指数之间的区别?