scipy.stats.

ttest_ind#

scipy.stats.ttest_ind(a, b, *, axis=0, equal_var=True, nan_policy='propagate', permutations=None, random_state=None, alternative='two-sided', trim=0, method=None, keepdims=False)[Quelle]#

Berechnet den T-Test für die Mittelwerte von *zwei unabhängigen* Stichproben von Punktzahlen.

Dies ist ein Test für die Nullhypothese, dass 2 unabhängige Stichproben identische durchschnittliche (erwartete) Werte haben. Dieser Test geht standardmäßig davon aus, dass die Populationen identische Varianzen haben.

Veraltet seit Version 1.17.0: Die Verwendung von Argumenten {'method', 'trim', 'nan_policy', 'axis', 'equal_var', 'keepdims', 'alternative'} nach Position ist veraltet; ab SciPy 1.17.0 werden diese nur noch nach Schlüsselwort vergeben. Die Argumente {'permutations', 'random_state'} sind veraltet, egal ob sie nach Position oder Schlüsselwort übergeben werden; sie werden in SciPy 1.17.0 entfernt. Verwenden Sie method, um einen Permutationstest durchzuführen.

Parameter:
a, barray_like

Die Arrays müssen die gleiche Form haben, außer in der Dimension, die sich auf axis bezieht (standardmäßig die erste).

axisint oder None, Standard: 0

Wenn es sich um eine ganze Zahl handelt, ist dies die Achse des Eingabearrays, entlang der die Statistik berechnet wird. Die Statistik jedes Achsen-Slices (z. B. Zeile) der Eingabe erscheint dann in einem entsprechenden Element der Ausgabe. Wenn None, wird die Eingabe vor der Berechnung der Statistik geglättet.

equal_varbool, optional

Wenn True (Standard), wird ein Standard-unabhängiger 2-Stichproben-Test durchgeführt, der gleiche Populationsvarianzen annimmt [1]. Wenn False, wird Welchs T-Test durchgeführt, der keine gleichen Populationsvarianzen annimmt [2].

Hinzugefügt in Version 0.11.0.

nan_policy{‘propagate’, ‘omit’, ‘raise’}

Definiert, wie Eingabe-NaNs behandelt werden.

  • propagate: Wenn ein NaN in der Achsen-Slice (z. B. Zeile) vorhanden ist, entlang der die Statistik berechnet wird, wird der entsprechende Eintrag der Ausgabe NaN sein.

  • omit: NaNs werden bei der Berechnung weggelassen. Wenn im Achsen-Slice, entlang dem die Statistik berechnet wird, nicht genügend Daten verbleiben, wird der entsprechende Eintrag der Ausgabe NaN sein.

  • raise: Wenn ein NaN vorhanden ist, wird ein ValueError ausgelöst.

permutationsnicht-negative Ganzzahl, np.inf oder None (Standard), optional

Wenn 0 oder None (Standard), wird die t-Verteilung zur Berechnung von p-Werten verwendet. Andernfalls ist permutations die Anzahl der Zufallspermutationen, die zur Schätzung von p-Werten mittels eines Permutationstests verwendet werden. Wenn permutations gleich oder größer der Anzahl der verschiedenen Partitionen der gepoolten Daten ist, wird stattdessen ein exakter Test durchgeführt (d. h. jede verschiedene Partition wird genau einmal verwendet). Siehe Hinweise für Details.

Veraltet seit Version 1.17.0: permutations ist veraltet und wird in SciPy 1.7.0 entfernt. Verwenden Sie stattdessen das Argument n_resamples von PermutationMethod und übergeben Sie die Instanz als Argument method.

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.

Pseudozufallszahlengenerator-Status, der zum Generieren von Permutationen verwendet wird (nur verwendet, wenn permutations nicht None ist).

Veraltet seit Version 1.17.0: random_state ist veraltet und wird in SciPy 1.7.0 entfernt. Verwenden Sie stattdessen das Argument rng von PermutationMethod und übergeben Sie die Instanz als Argument method.

alternative{‘zweiseitig’, ‘kleiner’, ‘größer’}, optional

Definiert die alternative Hypothese. Die folgenden Optionen sind verfügbar (Standard ist ‚two-sided‘)

  • „two-sided“: Die Mittelwerte der Verteilungen, die den Stichproben zugrunde liegen, sind ungleich.

  • „less“: Der Mittelwert der Verteilung, die der ersten Stichprobe zugrunde liegt, ist kleiner als der Mittelwert der Verteilung, die der zweiten Stichprobe zugrunde liegt.

  • „greater“: Der Mittelwert der Verteilung, die der ersten Stichprobe zugrunde liegt, ist größer als der Mittelwert der Verteilung, die der zweiten Stichprobe zugrunde liegt.

trimfloat, optional

Wenn ungleich Null, wird ein getrimmter (Yuen-) T-Test durchgeführt. Definiert den Bruchteil der Elemente, die von jedem Ende der Eingabestichproben getrimmt werden sollen. Wenn 0 (Standard), werden keine Elemente von beiden Seiten getrimmt. Die Anzahl der von jedem Schwanz getrimmten Elemente ist der Boden (floor) von trim mal der Anzahl der Elemente. Gültiger Bereich ist [0, .5).

methodResamplingMethod, optional

Definiert die Methode zur Berechnung des p-Werts. Wenn method eine Instanz von PermutationMethod/MonteCarloMethod ist, wird der p-Wert mittels scipy.stats.permutation_test/scipy.stats.monte_carlo_test mit den angegebenen Konfigurationsoptionen und anderen geeigneten Einstellungen berechnet. Andernfalls wird der p-Wert durch Vergleichen der Teststatistik mit einer theoretischen t-Verteilung berechnet.

Hinzugefügt in Version 1.15.0.

keepdimsbool, Standard: False

Wenn dies auf True gesetzt ist, bleiben die reduzierten Achsen im Ergebnis als Dimensionen mit der Größe eins erhalten. Mit dieser Option wird das Ergebnis korrekt gegen das Eingabearray gestreut (broadcasted).

Rückgabe:
ErgebnisTtestResult

Ein Objekt mit den folgenden Attributen

statisticfloat oder ndarray

Die t-Statistik.

pvaluefloat oder ndarray

Der p-Wert, der mit der angegebenen Alternative verbunden ist.

dffloat oder ndarray

Die Anzahl der Freiheitsgrade, die bei der Berechnung der t-Statistik verwendet werden. Dies ist immer NaN für einen Permutations-T-Test.

Hinzugefügt in Version 1.11.0.

Das Objekt hat auch die folgende Methode

confidence_interval(confidence_level=0.95)

Berechnet ein Konfidenzintervall für die Differenz der Populationsmittelwerte für das angegebene Konfidenzniveau. Das Konfidenzintervall wird in einem namedtuple mit den Feldern low und high zurückgegeben. Wenn ein Permutations-T-Test durchgeführt wird, wird das Konfidenzintervall nicht berechnet und die Felder low und high enthalten NaN.

Hinzugefügt in Version 1.11.0.

Hinweise

Angenommen, wir beobachten zwei unabhängige Stichproben, z. B. Blütenblattlängen von Blumen, und wir prüfen, ob die beiden Stichproben aus derselben Population (z. B. derselben Blumenart oder zwei Arten mit ähnlichen Blütenmerkmalen) oder aus zwei verschiedenen Populationen stammen.

Der T-Test quantifiziert den Unterschied zwischen den arithmetischen Mittelwerten der beiden Stichproben. Der p-Wert quantifiziert die Wahrscheinlichkeit, dass beobachtete oder extremere Werte auftreten, unter der Annahme, dass die Nullhypothese, dass die Stichproben aus Populationen mit denselben Populationsmittelwerten stammen, wahr ist. Ein p-Wert, der größer als ein gewählter Schwellenwert ist (z. B. 5 % oder 1 %), zeigt an, dass unsere Beobachtung nicht so unwahrscheinlich ist, dass sie zufällig aufgetreten ist. Daher lehnen wir die Nullhypothese gleicher Populationsmittelwerte nicht ab. Wenn der p-Wert kleiner als unser Schwellenwert ist, haben wir Beweise gegen die Nullhypothese gleicher Populationsmittelwerte.

Standardmäßig wird der p-Wert durch den Vergleich der t-Statistik der beobachteten Daten mit einer theoretischen t-Verteilung bestimmt.

(In den folgenden Ausführungen ist zu beachten, dass das Argument permutations selbst veraltet ist, ein nahezu identischer Test jedoch durch Erstellen einer Instanz von scipy.stats.PermutationMethod mit n_resamples=permutations und Übergeben als Argument method durchgeführt werden kann.) Wenn 1 < permutations < binom(n, k), wobei

  • k die Anzahl der Beobachtungen in a ist,

  • n die Gesamtzahl der Beobachtungen in a und b ist, und

  • binom(n, k) der Binomialkoeffizient ist (n über k),

werden die Daten gepoolt (verkettet), zufällig entweder der Gruppe a oder b zugeordnet und die t-Statistik berechnet. Dieser Vorgang wird wiederholt (permutation Mal) durchgeführt, wodurch eine Verteilung der t-Statistik unter der Nullhypothese erzeugt wird, und die t-Statistik der beobachteten Daten wird mit dieser Verteilung verglichen, um den p-Wert zu bestimmen. Speziell ist der angegebene p-Wert das "erreichte Signifikanzniveau" (ASL), wie in Abschnitt 4.4 von [3] definiert. Beachten Sie, dass es andere Möglichkeiten gibt, p-Werte mit randomisierten Permutationstests zu schätzen; für andere Optionen siehe den allgemeineren permutation_test.

Wenn permutations >= binom(n, k), wird ein exakter Test durchgeführt: die Daten werden in jeder möglichen unterschiedlichen Weise zwischen den Gruppen aufgeteilt.

Der Permutationstest kann rechenintensiv sein und ist nicht unbedingt genauer als der analytische Test, aber er macht keine starken Annahmen über die Form der zugrunde liegenden Verteilung.

Die Verwendung von Trimming wird üblicherweise als getrimmter t-Test bezeichnet. Manchmal auch Yuen-T-Test genannt, ist dies eine Erweiterung von Welchs t-Test, mit dem Unterschied, dass Winsorisierte Mittelwerte zur Berechnung der Varianz und die getrimmte Stichprobengröße zur Berechnung der Statistik verwendet werden. Trimming wird empfohlen, wenn die zugrunde liegende Verteilung langschwänzig ist oder mit Ausreißern kontaminiert ist [4].

Die Statistik wird berechnet als (np.mean(a) - np.mean(b))/se, wobei se der Standardfehler ist. Daher wird die Statistik positiv sein, wenn der Stichprobenmittelwert von a größer als der Stichprobenmittelwert von b ist, und negativ, wenn der Stichprobenmittelwert von a kleiner als der Stichprobenmittelwert von b ist.

Seit SciPy 1.9 werden np.matrix-Eingaben (für neuen Code nicht empfohlen) vor der Berechnung in np.ndarray konvertiert. In diesem Fall ist die Ausgabe eine Skalar- oder np.ndarray mit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- oder np.ndarray anstelle eines Masked Arrays mit mask=False sein.

ttest_ind hat experimentelle Unterstützung für Backends, die mit der Python Array API Standard kompatibel sind, zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen von Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

n/a

Siehe Unterstützung für den Array API Standard für weitere Informationen.

Referenzen

[3]
  1. Efron und T. Hastie. Computer Age Statistical Inference. (2016).

[4]

Yuen, Karen K. „The Two-Sample Trimmed t for Unequal Population Variances.“ Biometrika, vol. 61, no. 1, 1974, pp. 165-170. JSTOR, www.jstor.org/stable/2334299. Accessed 30 Mar. 2021.

[5]

Yuen, Karen K. und W. J. Dixon. „The Approximate Behaviour and Performance of the Two-Sample Trimmed t.“ Biometrika, vol. 60, no. 2, 1973, pp. 369-374. JSTOR, www.jstor.org/stable/2334550. Accessed 30 Mar. 2021.

Beispiele

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()

Test mit Stichprobe mit identischen Mittelwerten

>>> rvs1 = stats.norm.rvs(loc=5, scale=10, size=500, random_state=rng)
>>> rvs2 = stats.norm.rvs(loc=5, scale=10, size=500, random_state=rng)
>>> stats.ttest_ind(rvs1, rvs2)
TtestResult(statistic=-0.4390847099199348,
            pvalue=0.6606952038870015,
            df=998.0)
>>> stats.ttest_ind(rvs1, rvs2, equal_var=False)
TtestResult(statistic=-0.4390847099199348,
            pvalue=0.6606952553131064,
            df=997.4602304121448)

ttest_ind unterschätzt den p-Wert bei ungleichen Varianzen

>>> rvs3 = stats.norm.rvs(loc=5, scale=20, size=500, random_state=rng)
>>> stats.ttest_ind(rvs1, rvs3)
TtestResult(statistic=-1.6370984482905417,
            pvalue=0.1019251574705033,
            df=998.0)
>>> stats.ttest_ind(rvs1, rvs3, equal_var=False)
TtestResult(statistic=-1.637098448290542,
            pvalue=0.10202110497954867,
            df=765.1098655246868)

Wenn n1 != n2, ist die t-Statistik für gleiche Varianzen nicht mehr gleich der t-Statistik für ungleiche Varianzen

>>> rvs4 = stats.norm.rvs(loc=5, scale=20, size=100, random_state=rng)
>>> stats.ttest_ind(rvs1, rvs4)
TtestResult(statistic=-1.9481646859513422,
            pvalue=0.05186270935842703,
            df=598.0)
>>> stats.ttest_ind(rvs1, rvs4, equal_var=False)
TtestResult(statistic=-1.3146566100751664,
            pvalue=0.1913495266513811,
            df=110.41349083985212)

T-Test mit unterschiedlichen Mittelwerten, Varianz und n

>>> rvs5 = stats.norm.rvs(loc=8, scale=20, size=100, random_state=rng)
>>> stats.ttest_ind(rvs1, rvs5)
TtestResult(statistic=-2.8415950600298774,
            pvalue=0.0046418707568707885,
            df=598.0)
>>> stats.ttest_ind(rvs1, rvs5, equal_var=False)
TtestResult(statistic=-1.8686598649188084,
            pvalue=0.06434714193919686,
            df=109.32167496550137)

Nehmen Sie diese beiden Stichproben, von denen eine einen extremen Ausreißer aufweist.

>>> a = (56, 128.6, 12, 123.8, 64.34, 78, 763.3)
>>> b = (1.1, 2.9, 4.2)

Verwenden Sie das Schlüsselwort trim, um einen getrimmten (Yuen-) T-Test durchzuführen. Zum Beispiel, bei 20% Trimmung, trim=.2, wird der Test einen (np.floor(trim*len(a))) Element aus jedem Schwanz von Stichprobe a entfernen. Er hat keinen Einfluss auf Stichprobe b, da np.floor(trim*len(b)) 0 ist.

>>> stats.ttest_ind(a, b, trim=.2)
TtestResult(statistic=3.4463884028073513,
            pvalue=0.01369338726499547,
            df=6.0)