scipy.stats.

ttest_1samp#

scipy.stats.ttest_1samp(a, popmean, axis=0, nan_policy='propagate', alternative='two-sided', *, keepdims=False)[Quelle]#

Berechnet den T-Test für den Mittelwert EINER Gruppe von Scores.

Dies ist ein Test für die Nullhypothese, dass der Erwartungswert (Mittelwert) einer Stichprobe unabhängiger Beobachtungen a gleich dem gegebenen Populationsmittelwert popmean ist.

Parameter:
aarray_like

Stichprobenbeobachtungen.

popmeanfloat oder array_like

Erwarteter Wert in der Nullhypothese. Wenn array_like, dann muss seine Länge entlang der Achse axis gleich 1 sein und er muss ansonsten mit a broadcastbar sein.

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.

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.

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

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

  • ‘two-sided’: der Mittelwert der zugrundeliegenden Verteilung der Stichprobe unterscheidet sich vom gegebenen Populationsmittelwert (popmean)

  • ‘less’: der Mittelwert der zugrundeliegenden Verteilung der Stichprobe ist kleiner als der gegebene Populationsmittelwert (popmean)

  • ‘greater’: der Mittelwert der zugrundeliegenden Verteilung der Stichprobe ist größer als der gegebene Populationsmittelwert (popmean)

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 array

Die t-Statistik.

pvaluefloat oder array

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

dffloat oder array

Die Anzahl der Freiheitsgrade, die bei der Berechnung der t-Statistik verwendet werden; dies ist eins weniger als die Größe der Stichprobe (a.shape[axis]).

Hinzugefügt in Version 1.10.0.

Das Objekt hat auch die folgende Methode

confidence_interval(confidence_level=0.95)

Berechnet ein Konfidenzintervall um den Populationsmittelwert für das gegebene Konfidenzniveau. Das Konfidenzintervall wird in einem namedtuple mit den Feldern low und high zurückgegeben.

Hinzugefügt in Version 1.10.0.

Hinweise

Die Statistik wird als (np.mean(a) - popmean)/se berechnet, wobei se der Standardfehler ist. Daher wird die Statistik positiv sein, wenn der Stichprobenmittelwert größer als der Populationsmittelwert ist, und negativ, wenn der Stichprobenmittelwert kleiner als der Populationsmittelwert 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_1samp hat experimentelle Unterstützung für Backends, die mit dem Python Array API Standard kompatibel sind, zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie eine Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy, PyTorch, JAX oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen aus Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

⚠️ kein JIT

⚠️ kein JIT

Dask

⚠️ berechnet Graph

n/a

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

Beispiele

Angenommen, wir möchten die Nullhypothese testen, dass der Mittelwert einer Population gleich 0,5 ist. Wir wählen ein Konfidenzniveau von 99 %; das heißt, wir werden die Nullhypothese zugunsten der Alternative verwerfen, wenn der p-Wert kleiner als 0,01 ist.

Beim Testen von Zufallsvariablen aus der Standard-Gleichverteilung, die einen Mittelwert von 0,5 hat, erwarten wir, dass die Daten meist mit der Nullhypothese übereinstimmen.

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> rvs = stats.uniform.rvs(size=50, random_state=rng)
>>> stats.ttest_1samp(rvs, popmean=0.5)
TtestResult(statistic=2.456308468440, pvalue=0.017628209047638, df=49)

Wie erwartet liegt der p-Wert von 0,017 nicht unter unserem Schwellenwert von 0,01, daher können wir die Nullhypothese nicht verwerfen.

Beim Testen von Daten aus der Standard-Normalverteilung, die einen Mittelwert von 0 hat, würden wir erwarten, dass die Nullhypothese verworfen wird.

>>> rvs = stats.norm.rvs(size=50, random_state=rng)
>>> stats.ttest_1samp(rvs, popmean=0.5)
TtestResult(statistic=-7.433605518875, pvalue=1.416760157221e-09, df=49)

Tatsächlich ist der p-Wert niedriger als unser Schwellenwert von 0,01, daher verwerfen wir die Nullhypothese zugunsten der Standard-Alternative „zweiseitig“: Der Mittelwert der Population ist *nicht* gleich 0,5.

Angenommen, wir würden jedoch die Nullhypothese gegen die einseitige Alternative testen, dass der Mittelwert der Population *größer* als 0,5 ist. Da der Mittelwert der Standard-Normalverteilung kleiner als 0,5 ist, würden wir nicht erwarten, dass die Nullhypothese verworfen wird.

>>> stats.ttest_1samp(rvs, popmean=0.5, alternative='greater')
TtestResult(statistic=-7.433605518875, pvalue=0.99999999929, df=49)

Un überraschend würden wir mit einem p-Wert, der größer als unser Schwellenwert ist, die Nullhypothese nicht verwerfen.

Beachten Sie, dass bei einem Konfidenzniveau von 99 % eine wahre Nullhypothese ungefähr 1 % der Zeit verworfen wird.

>>> rvs = stats.uniform.rvs(size=(100, 50), random_state=rng)
>>> res = stats.ttest_1samp(rvs, popmean=0.5, axis=1)
>>> np.sum(res.pvalue < 0.01)
1

Tatsächlich würden wir, obwohl alle 100 obigen Stichproben aus der Standard-Gleichverteilung gezogen wurden, die einen Populationsmittelwert von 0,5 hat, irrtümlicherweise die Nullhypothese für eine davon verwerfen.

ttest_1samp kann auch ein Konfidenzintervall um den Populationsmittelwert berechnen.

>>> rvs = stats.norm.rvs(size=50, random_state=rng)
>>> res = stats.ttest_1samp(rvs, popmean=0)
>>> ci = res.confidence_interval(confidence_level=0.95)
>>> ci
ConfidenceInterval(low=-0.3193887540880017, high=0.2898583388980972)

Die Grenzen des 95%igen Konfidenzintervalls sind die minimalen und maximalen Werte des Parameters popmean, für die der p-Wert des Tests 0,05 wäre.

>>> res = stats.ttest_1samp(rvs, popmean=ci.low)
>>> np.testing.assert_allclose(res.pvalue, 0.05)
>>> res = stats.ttest_1samp(rvs, popmean=ci.high)
>>> np.testing.assert_allclose(res.pvalue, 0.05)

Unter bestimmten Annahmen über die Population, aus der eine Stichprobe gezogen wird, wird erwartet, dass das Konfidenzintervall mit einem Konfidenzniveau von 95 % den wahren Populationsmittelwert in 95 % der Stichprobenreplikationen enthält.

>>> rvs = stats.norm.rvs(size=(50, 1000), loc=1, random_state=rng)
>>> res = stats.ttest_1samp(rvs, popmean=0)
>>> ci = res.confidence_interval()
>>> contains_pop_mean = (ci.low < 1) & (ci.high > 1)
>>> contains_pop_mean.sum()
953