Mając dane dwie próby losowe \(x_1, x_2 \ldots x_N\) oraz \(y_1, y_2 \ldots y_M\), możemy zbadać hipotezę o różnicy średnich. Jeśli okaże się, że średnie z obu prób różnią się istotnie, będzie to oznaczać, że próby nie pochodzą z tej samej populacji, a więc np. różnią się fizycznym parametrem.
Dla testu jednostronnego warto od razu upewnić się, że zakładana nierówność \(\mu_x\) względem \(\mu_y\) ma taki sam znak, jak nierówność pomiędzy średnimi z prób \(\bar{x}\) i \(\bar{y}\). Jeżeli tak nie jest, to nie ma sensu prowadzić dalszych obliczeń — nie da się obalić hipotezy zerowej.
Ponieważ zgodnie z hipotezą zerową obie próby pochodzą z tej samej populacji, spróbujmy ją zamodelować. Całość informacji na temat tej populacji przedstawia połączona próba \(X\) i \(Y\).
POP = numpy.concatenate((X,Y))
Jako statystykę testową możemy wybrać po prostu różnicę średnich \(\Delta = \bar{x} - \bar{y}\), choć można też pokusić się o inną statystykę, np. pseudo t-Studenta. Z połączonej próby będziemy wielokrotnie losować syntetyczne próby \(X_s\) i \(Y_s\) o tych samych liczebnościach co „prawdziwe” \(X\) i \(Y\), oraz obliczać wartości statystyki testowej dla tych sztucznych danych.
ile_powtorzen = 10000
NX = len(X)
NY = len(Y)
# obliczamy wartość statystyki testowej dla prawdziwych danych
delta_0 = numpy.mean(X) - numpy.mean(Y)
licznik = 0
for i in xrange(ile_powtorzen) :
# losujemy z POP bez zwracania NX liczb
Xs = POP[numpy.random.randint(len(POP), size=NX)]
# losujemy z POP bez zwracania NY liczb
Ys = POP[numpy.random.randint(len(POP), size=NY)]
# obliczamy wartość statystyki testowej dla wylosowanych danych
delta = numpy.mean(Xs) - numpy.mean(Ys)
# przykład dla testu dwustronnego
if numpy.abs(delta) > numpy.abs(delta_0) :
licznik += 1
p = float(licznik) / float(ile_powtorzen)
Ostatecznie, jeżeli \(p\lt\alpha\), możemy odrzucić \(H_0\) na korzyść \(H_1\).
autor: Piotr Różański, ostatnia modyfikacja: 10.04.2016