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)[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 x und y die 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önnen x und y die Formen (n, n) haben, wenn es sich um Distanz- oder Ähnlichkeitsmatrizen handelt und compute_distance auf None gesetzt werden muss. Wenn x und y die 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 None setzen, wenn x und y bereits 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 Form compute_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 workers eine Ganzzahl ist, wird die Population in workers Abschnitte unterteilt und parallel ausgewertet (verwendet multiprocessing.Pool <multiprocessing>). Geben Sie -1 an, 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 als workers(func, iterable). Erfordert, dass func picklebar ist. Standardmäßig ist dies 1.

is_twosampbool, optional

Wenn True, wird ein Zwei-Stichproben-Test durchgeführt. Wenn x und y die Formen (n, p) und (m, p) haben, wird diese Option überschrieben und auf True gesetzt. Setzen Sie auf True, wenn x und y beide die Formen (n, p) haben und ein Zwei-Stichproben-Test gewünscht ist. Standardmäßig ist dies False. Beachten Sie, dass dies nicht ausgeführt wird, wenn die Eingaben Distanzmatrizen sind.

random_state{None, int, numpy.random.Generator,

Wenn seed None ist (oder np.random), wird die Singleton-Instanz von numpy.random.RandomState verwendet. Wenn seed eine Ganzzahl ist, wird eine neue RandomState-Instanz mit seed initialisiert. Wenn seed bereits eine Generator- oder RandomState-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

pearsonr

Pearson-Korrelationskoeffizient und p-Wert zum Testen auf Nicht-Korrelation.

kendalltau

Berechnet Kendalls Tau.

spearmanr

Berechnet 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:

  1. 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].

  2. 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}}\]
  1. 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)