gpt4 book ai didi

python - 如何计算 Pearson 相关矩阵并仅保留重要值?

转载 作者:行者123 更新时间:2023-12-04 10:52:28 27 4
gpt4 key购买 nike

我有一个 4×3 矩阵,X ,并希望形成 3×3 Pearson 相关矩阵,C ,通过计算 X 的所有 3 个可能的列组合之间的相关性获得.但是,条目 C对应于统计上不显着的相关性应该设置为零。

我知道如何使用 pearsonr 获得成对相关性和显着性值在 scipy.stats .例如,

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 的第一列和第二列之间的相关性约为 0.9915 ,p 值为 0.0085。

我可以使用嵌套循环轻松获得所需的矩阵:
  • 预填充 C作为一个 3×3 的零矩阵。
  • 嵌套循环的每次传递将对应两列 X . C的条目如果 p 值小于或等于我的阈值,例如 0.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 ,没有循环?如果是这样,我如何设置 C 的每个条目? P 中的相应 p 值应为零超过我的阈值?

    最佳答案

    查看 pearsonr 的文档揭示了用于计算相关性的公式。使用矢量化获得矩阵每一列之间的相关性应该不会太难。

    虽然您可以计算 C 的值使用 Pandas ,我将展示整个过程的纯 numpyan 实现。

    首先,计算 r 值:

    X = np.array([[1,  1, -2],
    [0, 0, 0],
    [0, .2, 1],
    [5, 3, 4]])
    n = X.shape[0]

    X -= X.mean(axis=0)
    s = (X**2).sum(axis=0)
    r = (X[..., None] * X[..., None, :]).sum(axis=0) / np.sqrt(s[:, None] * s[None, :])

    计算 p鉴于 scipy 中存在 beta 分布,values 变得简单。直接从文档中获取:
    dist = scipy.stats.beta(n/2 - 1, n/2 - 1, loc=-1, scale=2)
    p = 2 * dist.cdf(-abs(r))

    您可以从 p 轻松制作面具使用您的阈值,并将其应用于 r制作 C :
    mask = (p <= 0.01)
    C = np.zeros_like(r)
    C[mask] = r[mask]

    更好的选择可能是修改您的 r到位:
    r[p > 0.1] = 0

    函数形式:
    def non_trivial_correlation(X, threshold=0.1):
    n = X.shape[0]
    X = X - X.mean(axis=0) # Don't modify the original
    x = (X**2).sum(axis=0)
    r = (X[..., None] * X[..., None, :]).sum(axis=0) / np.sqrt(s[:, None] * s[None, :])
    p = 2 * scipy.stats.beta(n/2 - 1, n/2 - 1, loc=-1, scale=2).cdf(-abs(r))
    r[p > threshold] = 0
    return r

    关于python - 如何计算 Pearson 相关矩阵并仅保留重要值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416390/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com