scipy.stats.

multiscale_graphcorr#

scipy.stats.multiscale_graphcorr(x, y, compute_distance=<function _euclidean_dist>, reps=1000, workers=1, is_twosamp=False, random_state=None)[源代码][源代码]#

计算多尺度图相关性(MGC)检验统计量。

具体来说,对于每一点,MGC 找到一个属性(例如云密度)的 \(k\)-最近邻,以及另一个属性(例如草地湿度)的 \(l\)-最近邻 [1]。这对 \((k, l)\) 被称为“尺度”。然而,事先并不知道哪些尺度将是最具信息量的。因此,MGC 计算所有距离对,然后高效地计算所有尺度的距离相关性。局部相关性说明了哪些尺度在关系中相对信息量较大。因此,成功发现和解读不同数据模态之间关系的关键在于自适应地确定哪些尺度是最具信息量的,以及最具信息量尺度的几何含义。这样做不仅提供了一个模态是否相关的估计,还提供了关于如何做出这种判断的见解。这在高维数据中尤为重要,因为在这种情况下,简单的可视化无法向未经训练的人眼揭示关系。这种实现的特征化特别来自于并在 [2] 中进行了基准测试。

参数:
x, yndarray

如果 xy 的形状分别为 (n, p)(n, q),其中 n 是样本数量,pq 是维度数量,那么将运行 MGC 独立性检验。或者,如果 xy 的形状为 (n, n),并且它们是距离或相似性矩阵,则必须将 compute_distance 设置为 None。如果 xy 的形状分别为 (n, p)(m, p),将运行非配对的两个样本 MGC 检验。

计算距离可调用,可选

一个计算每个数据矩阵中样本之间距离或相似度的函数。如果 xy 已经是距离矩阵,则设置为 None 。默认使用欧几里得范数度量。如果你调用的是自定义函数,要么事先创建距离矩阵,要么创建一个形如 compute_distance(x) 的函数,其中 x 是计算成对距离的数据矩阵。

代表int, 可选

在使用排列检验时,用于估计零假设的复制次数。默认值为 1000

工人int 或类似映射的可调用对象,可选

如果 workers 是一个整数,种群将被细分为 workers 个部分并在并行中进行评估(使用 multiprocessing.Pool <multiprocessing>)。提供 -1 以使用进程可用的所有核心。或者提供一个类似映射的可调用对象,例如 multiprocessing.Pool.map 用于并行评估 p 值。此评估按 workers(func, iterable) 进行。要求 func 是可序列化的。默认值为 1

is_twosampbool, 可选

如果 True,将运行两样本测试。如果 xy 的形状分别为 (n, p)(m, p),此选项将被覆盖并设置为 True。如果 xy 的形状均为 (n, p) 并且希望进行两样本测试,请设置为 True。默认值为 False。请注意,如果输入是距离矩阵,则不会运行此测试。

random_state{None, int,}

如果 seed 是 None(或 np.random),则使用 numpy.random.RandomState 单例。如果 seed 是 int,则使用新的 RandomState 实例,并以 seed 为种子。如果 seed 已经是 GeneratorRandomState 实例,则使用该实例。

返回:
resMGCResult

一个包含属性的对象:

统计浮动

样本 MGC 测试统计量在 [-1, 1] 范围内。

p值浮动

通过排列获得的p值。

mgc_dictdict

包含额外的有用结果:

  • mgc_mapndarray

    关系的潜在几何结构的二维表示。

  • opt_scale(整数, 整数)

    估计的最佳比例作为一个 (x, y) 对。

  • null_dist列表

    从置换矩阵中得出的零分布。

参见

pearsonr

皮尔逊相关系数和用于检验非相关的p值。

kendalltau

计算 Kendall 的 tau 系数。

spearmanr

计算斯皮尔曼等级相关系数。

注释

MGC过程的描述及其在神经科学数据上的应用可以在 [1] 中找到。它通过以下步骤执行:

  1. 计算并修改两个距离矩阵 \(D^X\)\(D^Y\) 使其列均值为零。这将得到两个 \(n imes n\) 的距离矩阵 \(A\) 和 :math:`B`(中心化和无偏修正)[R882c1b4c2283-3]_。

  2. 对于所有从 \(1, ..., n\) 中的值 \(k\)\(l\)

    • 对于每个属性,计算了 \(k\)-最近邻图和 \(l\)-最近邻图。这里,\(G_k (i, j)\) 表示 \(A\) 的第 \(i\) 行的 \(k\) 个最小值,而 \(H_l (i, j)\) 表示 \(B\) 的第 \(i\) 行的 \(l\) 个最小值。

    • \(\circ\) 表示逐元素矩阵乘积,然后使用以下统计量对局部相关性进行求和和归一化:

\[c^{kl} = \frac{\sum_{ij} A G_k B H_l} {\sqrt{\sum_{ij} A^2 G_k \times \sum_{ij} B^2 H_l}}\]
  1. MGC检验统计量是 \(\{ c^{kl} \}\) 的平滑最优局部相关性。将平滑操作记为 :math:`R(cdot)`(它本质上将所有孤立的大相关性设为0,并将连接的大相关性保持不变,参见 [3]。)MGC即为,

\[MGC_n (x, y) = \max_{(k, l)} R \left(c^{kl} \left( x_n, y_n \right) \right)\]

测试统计量返回一个介于 \((-1, 1)\) 之间的值,因为它被标准化了。

返回的 p 值是通过置换检验计算的。该过程首先通过随机置换 \(y\) 来估计零分布,然后计算在零假设下观察到至少与观察到的检验统计量一样极端的检验统计量的概率。

MGC 至少需要 5 个样本来运行以获得可靠的结果。它还可以处理高维数据集。此外,通过操作输入数据矩阵,可以将两样本检验问题简化为独立性检验问题 [R882c1b4c2283-4]。给定大小为 \(p imes n\)\(p imes m\) 的样本数据 \(U\)\(V\),可以创建数据矩阵 \(X\)\(Y\) 如下:

\[X = [U | V] \in \mathcal{R}^{p \times (n + m)} Y = [0_{1 \times n} | 1_{1 \times m}] \in \mathcal{R}^{(n + m)}\]

然后,可以正常计算MGC统计量。这种方法可以扩展到类似的测试,例如距离相关性 [4]

Added in version 1.4.0.

参考文献

[1] (1,2)

Vogelstein, J. T., Bridgeford, E. W., Wang, Q., Priebe, C. E., Maggioni, M., & Shen, C. (2019). 发现并解读不同数据模式之间的关系。ELife.

[2]

Panda, S., Palaniappan, S., Xiong, J., Swaminathan, A., Ramachandran, S., Bridgeford, E. W., … Vogelstein, J. T. (2019). mgcpy: 一个全面的高维独立性测试Python包。arXiv:1907.02088

[3]

Shen, C., Priebe, C.E., & Vogelstein, J. T. (2019). 从距离相关性到多尺度图相关性。美国统计协会杂志。

[4]

Shen, C. & Vogelstein, J. T. (2018). 距离和核方法在假设检验中的精确等价性。arXiv:1806.05514

示例

>>> import numpy as np
>>> from scipy.stats import multiscale_graphcorr
>>> x = np.arange(100)
>>> y = x
>>> res = multiscale_graphcorr(x, y)
>>> res.statistic, res.pvalue
(1.0, 0.001)

要运行一个非配对的两个样本测试,

>>> x = np.arange(100)
>>> y = np.arange(79)
>>> res = multiscale_graphcorr(x, y)
>>> res.statistic, res.pvalue  
(0.033258146255703246, 0.023)

或者,如果输入的形状相同,

>>> x = np.arange(100)
>>> y = x
>>> res = multiscale_graphcorr(x, y, is_twosamp=True)
>>> res.statistic, res.pvalue  
(-0.008021809890200488, 1.0)