首页 文章

pandas dataframe python中的偏相关系数

提问于
浏览
4

我在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具有最高偏相关的第二个自变量 . 所以我的问题是如何在这种情况下找到偏相关?

我们将非常感谢您的帮助 .

1 回答

  • 3

    Pairwise ranks between Y (last col) and others

    如果你只是想找到 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']
    

    Pairwise ranks between all columns

    如果你试图找到彼此之间所有列之间的等级,我们会有这样的方法 -

    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
    

相关问题