我有一个4乘3的矩阵X
,并且希望形成3乘3皮尔逊相关矩阵C
,通过计算X
的所有3个可能的列组合之间的相关性得到。然而,C
的条目对应于统计上不显著的相关性,应该设置为零。你知道吗
我知道如何使用scipy.stats
中的pearsonr
获得成对相关性和显著性值。例如
import numpy as np
from scipy.stats.stats import pearsonr
X = np.array([[1, 1, -2], [0, 0, 0], [0, .2, 1], [5, 3, 4]])
pearsonr(X[:, 0], X[:, 1])
返回(0.9915008164289165, 0.00849918357108348)
,X
的第1列和第2列之间的相关性约为.9915,p值为.0085。你知道吗
我可以使用嵌套循环轻松获得所需的矩阵:
C
预先填充为3乘3的零矩阵。你知道吗X
的两列。与这对列对应的C
条目将被设置为成对相关,前提是p值小于或等于我的阈值,例如.01。你知道吗我想知道有没有更简单的方法。我知道在Pandas中,我可以在一行中创建相关矩阵C
:
import pandas as pd
df = pd.DataFrame(data=X)
C_frame = df.corr(method='pearson')
C = C_frame.to_numpy()
有没有办法得到p值的矩阵或数据帧P
,而不需要循环?如果是这样的话,如果P
中对应的p值超过我的阈值,我如何将C
的每个条目设置为零?你知道吗
在文档中查找^{} 揭示了用于计算相关性的公式。使用矢量化来获得矩阵的每一列之间的相关性应该不太困难。你知道吗
虽然可以使用pandas计算
C
的值,但我将展示整个过程的纯numpyan实现。你知道吗首先,计算r值:
考虑到scipy中beta分布的存在,计算
p
值变得很简单。直接取自文件:您可以使用阈值从
p
生成一个掩码,并将其应用于r
以生成C
:更好的选择可能是修改
r
:函数形式:
相关问题 更多 >
编程相关推荐