测试整个数据框的重要性

Test for significance on whole dataframe

我计算了以下示例数据帧 df1 的相关性:

df1 = pd.DataFrame({'A':[1,2,3], 'B':[2,5,3], 'C':[5,2,1] })
df1.head()
    A   B   C
0   1   2   5
1   2   5   2
2   3   3   1

相关数据框如下所示:

df2=df1.corr()
df2
        A           B           C
A   1.000000    0.327327    -0.960769
B   0.327327    1.000000    -0.576557
C  -0.960769   -0.576557     1.000000

如果某个值与我 dataframe/column 中的其他值相比显着,我该如何测试?例如:我想知道 A 和 C 之间的高相关性是否显着,或者我的数据中的高相关性是否正常。

编辑:所需输出:

        A               B              C
A   p-value(A/A)    p-value(A/B)    p-value(A/C)
B   p-value(B/A)    p-value(B/B)    p-value(B/C)
C   p-value(C/A)    p-value(C/B)    p-value(C/C)

我知道 pearsonr() returns p 值,但是它没有考虑 df2 的其他值:我想比较每个相关性(例如 A 和 C 之间的相关性) df2.[​​=15=] 的相关性

请尝试 scipy 包。上面计算出的相关性是皮尔逊相关性。使用 scipy 包,同样可以用 'p-value':

计算

参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html

from scipy.stats import pearsonr
pearson_corr_BC = pearsonr(df1['B'],df1['C'])
print("pearson correlation:",pearson_corr_BC[0])
print("p-value:",pearson_corr_BC[1])

要计算p-value矩阵,可以试试下面的代码:

import numpy as np
row_index = df2.index
col_index = df2.columns
p_value_array = np.zeros(shape=(len(df1.columns),len(df1.columns)))
for i,a in enumerate(row_index):
  for j,b in enumerate(col_index):
    p_value_array[i,j] = pearsonr(df1[a],df1[b])[1]
pvalue_df = pd.DataFrame(p_value_array,index=row_index,columns=col_index)

现在将两个特征的相关值与其他相关值进行比较,例如,试试这个:

df2[abs(df2.loc['B','C'])>df2.abs()]

这将给出一个绝对相关值小于绝对相关值 bw 'B' 和 'C' 的矩阵。同样也可以比较一下意义。