multiscale_graphcorr#
- scipy.stats.multiscale_graphcorr(x, y, compute_distance=<function _euclidean_dist>, reps=1000, workers=1, is_twosamp=False, random_state=None)[Quelle]#
Berechnet die Multiscale Graph Correlation (MGC) Teststatistik.
Genauer gesagt findet MGC für jeden Punkt die \(k\)-nächsten Nachbarn für eine Eigenschaft (z. B. Wolkendichte) und die \(l\)-nächsten Nachbarn für die andere Eigenschaft (z. B. Grasfeuchtigkeit) [1]. Dieses Paar \((k, l)\) wird als "Skala" bezeichnet. A priori ist jedoch nicht bekannt, welche Skalen am informativsten sein werden. Daher berechnet MGC alle Distanzpaare und berechnet dann effizient die Distanzkorrelationen für alle Skalen. Die lokalen Korrelationen zeigen, welche Skalen für die Beziehung relativ informativ sind. Der Schlüssel zur erfolgreichen Entdeckung und Entschlüsselung von Beziehungen zwischen unterschiedlichen Datenmodalitäten besteht daher darin, adaptiv zu bestimmen, welche Skalen am informativsten sind, und die geometrische Implikation für die informativsten Skalen. Dies liefert nicht nur eine Schätzung, ob die Modalitäten miteinander in Beziehung stehen, sondern auch Einblicke, wie die Bestimmung vorgenommen wurde. Dies ist besonders wichtig bei hochdimensionalen Daten, bei denen einfache Visualisierungen keine Beziehungen für das ungeschulte menschliche Auge offenbaren. Charakterisierungen dieser Implementierung im Besonderen wurden aus und anhand von Benchmarks in [2] abgeleitet.
- Parameter:
- x, yndarray
Wenn
xundydie Formen(n, p)und(n, q)haben, wobei n die Anzahl der Stichproben und p und q die Anzahl der Dimensionen sind, dann wird der MGC-Unabhängigkeitstest durchgeführt. Alternativ könnenxundydie Formen(n, n)haben, wenn es sich um Distanz- oder Ähnlichkeitsmatrizen handelt undcompute_distanceaufNonegesetzt werden muss. Wennxundydie Formen(n, p)und(m, p)haben, wird ein ungepaarter Zwei-Stichproben-MGC-Test durchgeführt.- compute_distancecallable, optional
Eine Funktion, die die Distanz oder Ähnlichkeit zwischen den Stichproben innerhalb jeder Datenmatrix berechnet. Auf
Nonesetzen, wennxundybereits Distanzmatrizen sind. Standardmäßig wird die euklidische Normmetrik verwendet. Wenn Sie eine benutzerdefinierte Funktion aufrufen, erstellen Sie entweder die Distanzmatrix im Voraus oder erstellen Sie eine Funktion der Formcompute_distance(x), wobei x die Datenmatrix ist, für die paarweise Distanzen berechnet werden.- repsint, optional
Die Anzahl der Wiederholungen, die zur Schätzung der Nullhypothese bei Verwendung des Permutationstests verwendet werden. Standardmäßig ist dies
1000.- workersint oder Map-ähnliches aufrufbare Objekt, optional
Wenn
workerseine Ganzzahl ist, wird die Population inworkersAbschnitte unterteilt und parallel ausgewertet (verwendetmultiprocessing.Pool <multiprocessing>). Geben Sie-1an, um alle verfügbaren Kerne des Prozesses zu verwenden. Alternativ geben Sie eine Map-ähnliche aufrufbare Funktion an, wie z. B.multiprocessing.Pool.map, um den p-Wert parallel auszuwerten. Diese Auswertung erfolgt alsworkers(func, iterable). Erfordert, dass func picklebar ist. Standardmäßig ist dies1.- is_twosampbool, optional
Wenn True, wird ein Zwei-Stichproben-Test durchgeführt. Wenn
xundydie Formen(n, p)und(m, p)haben, wird diese Option überschrieben und aufTruegesetzt. Setzen Sie aufTrue, wennxundybeide die Formen(n, p)haben und ein Zwei-Stichproben-Test gewünscht ist. Standardmäßig ist diesFalse. Beachten Sie, dass dies nicht ausgeführt wird, wenn die Eingaben Distanzmatrizen sind.- random_state{None, int,
numpy.random.Generator, numpy.random.RandomState}, optionalWenn seed None ist (oder np.random), wird die Singleton-Instanz von
numpy.random.RandomStateverwendet. Wenn seed eine Ganzzahl ist, wird eine neueRandomState-Instanz mit seed initialisiert. Wenn seed bereits eineGenerator- oderRandomState-Instanz ist, wird diese Instanz verwendet.
- Rückgabe:
- resMGCResult
Ein Objekt, das Attribute enthält
- statisticfloat
Die Stichproben-MGC-Teststatistik im Bereich von
[-1, 1].- pvaluefloat
Der p-Wert, der durch Permutation erhalten wurde.
- mgc_dictdict
Enthält zusätzliche nützliche Ergebnisse
- mgc_mapndarray
Eine 2D-Darstellung der latenten Geometrie der Beziehung.
- opt_scale(int, int)
Die geschätzte optimale Skala als
(x, y)-Paar.
- null_distlist
Die Nullverteilung, die aus den permudierten Matrizen abgeleitet wurde.
Siehe auch
pearsonrPearson-Korrelationskoeffizient und p-Wert zum Testen auf Nicht-Korrelation.
kendalltauBerechnet Kendalls Tau.
spearmanrBerechnet einen Spearman-Rangkorrelationskoeffizienten.
Hinweise
Eine Beschreibung des MGC-Prozesses und Anwendungen auf neurowissenschaftliche Daten finden Sie in [1]. Dies wird in folgenden Schritten durchgeführt:
Zwei Distanzmatrizen \(D^X\) und \(D^Y\) werden berechnet und so modifiziert, dass sie spaltenweise mittel Null sind. Dies ergibt zwei \(n \times n\)-Distanzmatrizen \(A\) und \(B\) (die Zentrierung und die unverzerrte Modifikation) [3].
Für alle Werte \(k\) und \(l\) von \(1, ..., n\),
Die \(k\)-nächsten Nachbar- und \(l\)-nächsten Nachbar-Graphen werden für jede Eigenschaft berechnet. Hier gibt \(G_k (i, j)\) die \(k\)-kleinsten Werte der \(i\)-ten Zeile von \(A\) an und \(H_l (i, j)\) gibt die \(l\)-kleinsten Werte der \(i\)-ten Zeile von \(B\) an.
Sei \(\circ\) das elementweise Matrixprodukt, dann werden die lokalen Korrelationen summiert und mit der folgenden Statistik normalisiert:
\[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}}\]Die MGC-Teststatistik ist die geglättete optimale lokale Korrelation von \(\{ c^{kl} \}\). Bezeichnen Sie die Glättungsoperation als \(R(\cdot)\) (die im Wesentlichen alle isolierten großen Korrelationen auf 0 setzt und verbundene große Korrelationen unverändert lässt), siehe [3].) MGC ist,
\[MGC_n (x, y) = \max_{(k, l)} R \left(c^{kl} \left( x_n, y_n \right) \right)\]Die Teststatistik gibt einen Wert zwischen \((-1, 1)\) zurück, da sie normalisiert ist.
Der zurückgegebene p-Wert wird mit einem Permutationstest berechnet. Dieser Prozess wird abgeschlossen, indem zunächst \(y\) zufällig permutiert wird, um die Nullverteilung zu schätzen, und dann die Wahrscheinlichkeit berechnet wird, unter der Nullhypothese eine Teststatistik zu beobachten, die mindestens so extrem ist wie die beobachtete Teststatistik.
MGC benötigt mindestens 5 Stichproben für zuverlässige Ergebnisse. Es kann auch hochdimensionale Datensätze verarbeiten. Darüber hinaus kann durch Manipulation der Eingabedatenmatrizen das Zwei-Stichproben-Testproblem auf das Unabhängigkeitstestproblem reduziert werden [4]. Gegebenen Stichprobendaten \(U\) und \(V\) der Größen \(p \times n\) und \(p \times m\) können die Datenmatrizen \(X\) und \(Y\) wie folgt erstellt werden:
\[X = [U | V] \in \mathcal{R}^{p \times (n + m)} Y = [0_{1 \times n} | 1_{1 \times m}] \in \mathcal{R}^{(n + m)}\]Dann kann die MGC-Statistik wie gewohnt berechnet werden. Diese Methodik kann auf ähnliche Tests wie die Distanzkorrelation erweitert werden [4].
Hinzugefügt in Version 1.4.0.
Referenzen
[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
Beispiele
>>> 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)
Um einen ungepaarten Zwei-Stichproben-Test durchzuführen,
>>> x = np.arange(100) >>> y = np.arange(79) >>> res = multiscale_graphcorr(x, y) >>> res.statistic, res.pvalue (0.033258146255703246, 0.023)
oder, wenn die Form der Eingaben gleich ist,
>>> x = np.arange(100) >>> y = x >>> res = multiscale_graphcorr(x, y, is_twosamp=True) >>> res.statistic, res.pvalue (-0.008021809890200488, 1.0)