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
如果
x
和y
的形狀分別為(n, p)
和(n, q)
,其中 n 是樣本數,p 和 q 是維度數,則將執行 MGC 獨立性檢定。或者,如果x
和y
是距離或相似度矩陣,則它們可以具有形狀(n, n)
,並且必須將compute_distance
設定為None
。如果x
和y
的形狀分別為(n, p)
和(m, p)
,則將執行非成對雙樣本 MGC 檢定。- compute_distancecallable, optional
一個函數,用於計算每個資料矩陣中樣本之間的距離或相似度。如果
x
和y
已經是距離矩陣,則設定為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,將執行雙樣本檢定。如果
x
和y
的形狀分別為(n, p)
和(m, p)
,則此選項將被覆寫並設定為True
。如果x
和y
的形狀均為(n, p)
且需要雙樣本檢定,則設定為True
。預設值為False
。請注意,如果輸入是距離矩陣,則不會執行此檢定。- random_state{None, int,
numpy.random.Generator
, numpy.random.RandomState
}, optional如果 seed 為 None(或 np.random),則使用
numpy.random.RandomState
單例。如果 seed 是一個整數,則會使用新的RandomState
實例,並以 seed 作為種子。如果 seed 已經是Generator
或RandomState
實例,則使用該實例。
- 返回:
- 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] 中找到。它使用以下步驟執行
計算兩個距離矩陣 \(D^X\) 和 \(D^Y\),並修改為逐列平均值為零。這產生兩個 \(n \times n\) 距離矩陣 \(A\) 和 \(B\)(居中和無偏修改) [3]。
對於從 \(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}}\]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)