ju.*_*ju. 6 python correlation pandas p-value
我正在尝试计算相关矩阵,并根据p值过滤相关性,以找出高度相关的对。
为了解释我的意思,请说我有一个这样的数据框。
df
A B C D
0 2 NaN 2 -2
1 NaN 1 1 1.1
2 1 NaN NaN 3.2
3 -4 NaN 2 2
4 NaN 1 2.1 NaN
5 NaN 3 1 1
6 3 NaN 0 NaN
Run Code Online (Sandbox Code Playgroud)
为相关系数。我使用了pd.corr()。此方法可以处理具有NaN值的数据帧,更重要的是,它可以容忍具有0重叠的列对(列A和列B):
rho = df.corr()
A B C D
A 1.000000 NaN -0.609994 0.041204
B NaN 1.0 -0.500000 -1.000000
C -0.609994 -0.5 1.000000 0.988871
D 0.041204 -1.0 0.988871 1.000000
Run Code Online (Sandbox Code Playgroud)
挑战在于计算p值。我没有找到执行此操作的内置方法。但是,从具有统计意义的大熊猫列相关性中,@ BKay提供了一种计算p值的循环方法。如果重叠少于3个,此方法将报告错误。因此我通过添加错误异常进行了一些修改。
ValueError:零大小的数组,直到没有身份的最大缩减操作
pval = rho.copy()
for i in range(df.shape[1]): # rows are the number of rows in the matrix.
for j in range(df.shape[1]):
try:
df_ols = pd.ols(y=df.iloc[:,i], x=df.iloc[:,j], intercept=True)
pval.iloc[i,j] = df_ols.f_stat['p-value']
except ValueError:
pval.iloc[i,j] = None
pval
A B C D
A 0.000000 NaN 0.582343 0.973761
B NaN 0.000000 0.666667 NaN
C 0.582343 0.666667 0.000000 0.011129
D 0.973761 NaN 0.011129 0.000000
Run Code Online (Sandbox Code Playgroud)
此方法输出一个p值矩阵,但是当原始数据帧的大小增加时(我的实际数据帧为〜5000行x 500列),它会变得非常慢。您将建议如何针对大型数据帧有效地获取此p值矩阵。
| 归档时间: |
|
| 查看次数: |
2679 次 |
| 最近记录: |