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 einValueErrorausgelö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:
- Ergebnis
TtestResult 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
namedtuplemit den Feldern low und high zurückgegeben.Hinzugefügt in Version 1.10.0.
- Ergebnis
Hinweise
Die Statistik wird als
(np.mean(a) - popmean)/seberechnet, wobeiseder 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 innp.ndarraykonvertiert. In diesem Fall ist die Ausgabe eine Skalar- odernp.ndarraymit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- odernp.ndarrayanstelle eines Masked Arrays mitmask=Falsesein.ttest_1samphat 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 UmgebungsvariableSCIPY_ARRAY_API=1setzen 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_1sampkann 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