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_distancecallable, optional

一個函數,用於計算每個資料矩陣中樣本之間的距離或相似度。如果 xy 已經是距離矩陣,則設定為 None。預設使用歐幾里得範數度量。如果您要呼叫自訂函數,請預先建立距離矩陣,或建立 compute_distance(x) 形式的函數,其中 x 是計算成對距離的資料矩陣。

repsint, optional

使用排列檢定時,用於估計虛無假設的重複次數。預設值為 1000

workersint or map-like callable, optional

如果 workers 是一個整數,則將總體細分為 workers 個部分並平行評估(使用 multiprocessing.Pool <multiprocessing>)。提供 -1 以使用處理程序可用的所有核心。或者,提供類似 map 的可呼叫物件,例如 multiprocessing.Pool.map,以平行評估 p 值。此評估以 workers(func, iterable) 的形式執行。要求 func 可 pickle 化。預設值為 1

is_twosampbool, optional

如果 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 是一個整數,則會使用新的 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's tau。

spearmanr

計算 Spearman 等級順序相關係數。

註解

MGC 流程的描述以及在神經科學資料上的應用,可以在 [1] 中找到。它使用以下步驟執行

  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]。給定大小為 \(p \times n\) \(p \times 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]

在 1.4.0 版本中新增。

參考文獻

[1] (1,2)

Vogelstein, J. T., Bridgeford, E. W., Wang, Q., Priebe, C. E., Maggioni, M., & Shen, C. (2019). Discovering and deciphering relationships across disparate data modalities. ELife.

[2]

Panda, S., Palaniappan, S., Xiong, J., Swaminathan, A., Ramachandran, S., Bridgeford, E. W., … Vogelstein, J. T. (2019). mgcpy: A Comprehensive High Dimensional Independence Testing Python Package. arXiv:1907.02088

[3] (1,2)

Shen, C., Priebe, C.E., & Vogelstein, J. T. (2019). From distance correlation to multiscale graph correlation. Journal of the American Statistical Association.

[4] (1,2)

Shen, C. & Vogelstein, J. T. (2018). The Exact Equivalence of Distance and Kernel Methods for Hypothesis Testing. 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)