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 检验。

compute_distance可调用,可选

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

repsint,可选

使用置换检验时用于估计无效值的复制次数。默认值为1000

workersint或类似于字典的可调用对象,可选

如果workers是int,则总体将细分为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、numpy.random.Generator,

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

返回值:
resMGCResult

包含如下属性的对象

statisticfloat

[-1, 1] 之内的样本 MGC 检验统计量。

pvaluefloat

通过置换获得的 p 值。

mgc_dictdict

包含其他有用的结果

  • mgc_mapndarray

    表示关系潜在几何形状的 2D 表现形式。

  • opt_scale(int, int)

    作为(x, y) 对估计的最佳尺度。

  • null_distlist

    从置换矩阵导出的零分布。

另请参阅

pearsonr

用于检验非相关性的 Pearson 相关系数和 p 值。

kendalltau

计算 Kendall 系数。

spearmanr

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

备注

可以从 [1] 中找到有关 MGC 过程的描述以及神经科学数据中的应用。使用以下步骤执行

  1. 计算两个距离矩阵\(D^X\)\(D^Y\),并将其修改为按列为均值零。这将得到两个\(n \times n\) 距离矩阵\(A\)\(B\)(居中和无偏修改)[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} \}\)的平滑最优局部相关性。用平滑运算表示为\(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 个样本才能运行并获得可靠结果。它还可以处理高维数据集。此外,通过处理输入数据矩阵,双样本检验问题可以简化为独立性检验问题[4]。给出样本数据\(U\)\(V\),大小分别为\(p \times n\) \(p \times m\),则可以创建如下数据矩阵\(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]等类似检验。

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] (1,2)

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

[4] (1,2)

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)