Menu
CoddyTech

Der t-Test

Teil des Abschnitts Statistik für ML der Machine Learning-Journey von Coddy. Lektion 45 von 64.

Vor Computern gab es in der Statistik eine Abkürzung: den t-Test. Eine Formel wandelt die Mittelwerte, Streuungen und Gruppengrößen auf einmal in einen p-Wert um:

from scipy import stats

result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))

Für die Schriftartstudie gibt dies 0.031 und -2.61 aus. Die 1000 Permutationen ergaben 0.039: wie üblich ein ähnlicher Wert.

Die 1000 permutierten Differenzen der Schriftartstudie als blasses Histogramm, darüber die glockenförmige Kurve des t-Tests und eine gestrichelte rote Linie bei der tatsächlichen Differenz von -6.6. Die Legende gibt für die Permutationen p = 0.039 und für die Formel 0.031 an

Der t-Wert gibt den Abstand in Standardfehlern an; sein Vorzeichen zeigt nur, welche Gruppe zuerst kam. Die Formel setzt glockenförmige Daten voraus, vertraue bei kleinen, schief verteilten Gruppen also den Permutationen.

Es prüft auch, ob ein Modell ein anderes wirklich übertrifft.

challenge icon

Aufgabe

Mittel

Ein Farbhersteller hat gemessen, wie lange drei Lackierungen zum Trocknen brauchen. Der Starter legt die Minuten für jede Lackierung in times ab, listet drei pairs auf, definiert permutation_p(a, b) und liest level ein.

  1. Gib den p-Wert des t-Tests für Matt gegenüber Seidenglanz neben dem des Permutationstests aus.
  2. Teste jedes Paar, wobei die zuerst genannte Lackierung an erster Stelle steht, und gib das Paar mit dem kleinsten p-Wert aus.
  3. Zähle die Paare unter level.

Runde die p-Werte auf 3 Dezimalstellen. Ein weiterer Hersteller, Signifikanzniveau 0.05:

matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3

Probier es selbst

import numpy as np
import pandas as pd
from scipy import stats


# Der Permutationstest aus den letzten beiden Lektionen: gibt seinen p-Wert für a im Vergleich zu b zurück
def permutation_p(a, b, shuffles=1000, seed=0):
    rng = np.random.default_rng(seed)
    pooled = np.concatenate([a, b])
    diffs = []
    for i in range(shuffles):
        shuffled = rng.permutation(pooled)
        diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
    real = b.mean() - a.mean()
    return (np.abs(np.array(diffs)) >= np.abs(real)).mean()


paint = pd.read_csv("paint.csv")
times = {
    "matte": paint[paint["finish"] == "matte"]["minutes"],
    "satin": paint[paint["finish"] == "satin"]["minutes"],
    "gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Statistik für ML

Übe selbstständig: Online-Python-Compiler