Mathematik für Biologiestudierende II¶
Sommersemester 2024
09.04.2024
© 2024 Prof. Dr. Rüdiger W. Braun
Tests für Erwartungswerte¶
Verbundene und unverbundene Stichproben¶
Zwei Versuchsreihen liefern Messergebnisse. Der Test soll entscheiden, ob sich diese Ergebnisse signifikant unterscheiden.
Unverbundene Stichproben: Die Messerergebnisse werden an verschiedenen Populationen gewonnen.
Z-Test zum Vergleich zweier Erwartungswerte bei verbundenen Stichproben¶
- Gegeben sind Zufallsvariable $X_1, \dots, X_n$ und $Y_1, \dots, Y_n$
- Verteilungsvoraussetzungen:
- Alle $X_j$ sind normalverteilt mit unbekanntem Erwartungswert $\mu_1$ und bekannter Varianz $\sigma^2$
- Alle $Y_j$ sind normalverteilt mit unbekanntem Erwartungswert $\mu_2$ und bekannter Varianz $\sigma^2$
- Die beiden Varianzen müssen also gleich und bekannt sein (unrealistisch)
- Ziel: $\mu_1$ und $\mu_2$ sollen verglichen werden
- $x_j$ und $ _j$ seien Realisierungen (d.h., die Daten)
- $z_j = x_j - y_j$ seien die Differenzen
- Bestimme arithmetischen Mittelwert $$ \overline z = \frac1n \sum_{j=1}^n z_j $$
- Die Teststatistik ist $$ t = \frac{\overline z}\sigma \cdot \sqrt{n} $$
- Die Teststatistik wird mit einem Quantil der Standardnormalverteilung verglichen
- $\phi$ ist die Verteilungsfunktion der Standardnormalverteilung
- $q_\alpha$ ist das Quantil der Standardnormalverteilung zum Wert $\alpha$
- das bedeutet $\Phi(q_\alpha) = \alpha$
Ein- und zweiseitige Tests¶
- Tests können ein- oder zweiseitig sein
- Es sind $\mu_1$ und $ \mu_2 $ die unbekannten wahren Erwartungswerte der beiden Stichproben
- Bei zweiseitigen Tests ist die Nullhypothese von der Form $H_0 = \{\mu_1 = \mu_2\}$
- Beim einseitigen unteren Test ist die Nullhypothese von der Form $H_0 = \{\mu_1 \ge \mu_2\}$, d.h. die Alternativhypothese ist $\mu_1 < \mu_2$
- Beim einseitigen oberen Test ist die Nullhypothese von der Form $H_0 = \{\mu_1 \le \mu_2\}$, d.h. die Alternativhypothese ist $\mu_1 > \mu_2$
Entscheidungsregel¶
- Das Signifikanzniveau sei $\alpha$
- Beim Z-Test müssen die Quantile der Standardnormalverteilung verwendet werden
\begin{align*} &q_{1-\alpha/2} &&\text{beim zweiseitigen Test} \\ &q_{1-\alpha} &&\text{bei einem einseitigen Test} \end{align*}
- $z_j = x_j - y_j$ und Teststatistik $$ t = \frac{\overline z}\sigma \cdot \sqrt{n} $$
- Entscheidung:
- $H_0 = \{\mu_1=\mu_2\} $: Die Nullhypothese $H_0$ wird abgelehnt, wenn $\left|t\right| > q_{1-\alpha/2}$
- $H_0 = \{\mu_1\le\mu_2\}$: Die Nullhypothese $H_0$ wird abgelehnt, wenn $t > q_{1-\alpha}$
- $H_0 = \{\mu_1\ge\mu_2\}$: Die Nullhypothese $H_0$ wird abgelehnt, wenn $t < -q_{1-\alpha}$
- Der Z-Test wird auch als Gauß-Test bezeichnet
- Um ihn anzuwenden, muss die Varianz der Daten bekannt sein. Das ist unrealistisch.
- Für grobe Überschlagsrechnungen hat der Z-Test aber seine Berechtigung
- in
scipy.stats
ist der Z-Test nicht implementiert
t-Tests für Mittelwerte¶
Wiederholung aus dem Wintersemester
- Ein Medikament soll bei einer fortschreitenden Bewegungserkrankung die Verschlechterung aufhalten
- 900 Patienten bekommen das Verum, weitere 900 ein Placebo
- Zu den Zeitpunkten $t_0$ (Anfangszeitpunkt) und $t_1$ (Endzeitpunkt) wird die Beweglichkeit durch geschultes Personal auf einer Skala von 1 (schlecht) bis 100 (perfekt) eingeordnet.
import pandas as pd
from scipy import stats
df = pd.read_csv('treatment.csv', index_col=0)
df
t0 | t1 | Treatment | Difference | |
---|---|---|---|---|
0 | 63.0 | 62.0 | Verum | -1.0 |
1 | 24.0 | 22.0 | Verum | -2.0 |
2 | 77.0 | 72.0 | Verum | -5.0 |
3 | 43.0 | 41.0 | Verum | -2.0 |
4 | 88.0 | 84.0 | Verum | -4.0 |
... | ... | ... | ... | ... |
1764 | 62.0 | 53.0 | Placebo | -9.0 |
1765 | 54.0 | 56.0 | Placebo | 2.0 |
1766 | 57.0 | 52.0 | Placebo | -5.0 |
1767 | 95.0 | 93.0 | Placebo | -2.0 |
1768 | 41.0 | 39.0 | Placebo | -2.0 |
1769 rows × 4 columns
- In der Spalte "Difference" steht die Differenz zwischen den beiden Zeitpunkten. Idealerweise ist sie positiv, wenn das Medikament die Verschlechterung sogar umkehrt.
- Jedenfalls soll der Test zeigen, dass die Differenz bei den Probanden mit Verum im Mittel größer als bei den anderen ist
- Einseitiger, unverbundener Test
dfv = df[df.Treatment=='Verum']
dfv.describe()
t0 | t1 | Difference | |
---|---|---|---|
count | 887.000000 | 887.000000 | 887.000000 |
mean | 61.073281 | 57.054115 | -4.019166 |
std | 20.169044 | 20.405522 | 3.093843 |
min | 5.000000 | 1.000000 | -15.000000 |
25% | 47.000000 | 43.000000 | -6.000000 |
50% | 61.000000 | 57.000000 | -4.000000 |
75% | 75.000000 | 71.000000 | -2.000000 |
max | 100.000000 | 100.000000 | 5.000000 |
dfp = df[df.Treatment=='Placebo']
dfp.describe()
t0 | t1 | Difference | |
---|---|---|---|
count | 882.000000 | 882.000000 | 882.000000 |
mean | 63.548753 | 59.189342 | -4.359410 |
std | 20.061947 | 20.266874 | 3.089117 |
min | 0.000000 | 0.000000 | -13.000000 |
25% | 50.000000 | 45.000000 | -6.000000 |
50% | 64.000000 | 60.000000 | -4.000000 |
75% | 78.000000 | 74.000000 | -2.000000 |
max | 100.000000 | 100.000000 | 5.000000 |
- Aus der Gruppe der Probanden mit Verum sind 13 Leute ausgeschieden
- aus der anderen 18
stats.ttest_ind(dfv.Difference, dfp.Difference, alternative='greater')
TtestResult(statistic=2.314493969317715, pvalue=0.010377396661800722, df=1767.0)
Die Nullhypothese, dass das Medikament nicht besser wirkt als Placebo, kann zum Signifikanzniveau $\alpha=0.011$ abgelehnt werden.
Effektstärke¶
Beim Vergleich zweier Mittelwerte kann "Cohen's d" zur Messung der Effektstärke verwendet werden.
$$ d = \left| \frac{\overline x - \overline y}s \right| $$
wobei $\overline x$ und $\overline y$ die beiden Mittelwerte, $s$ die Stichprobenstreuung und $|a|$ den Betrag von $a$ bezeichnet.
- Bei verbundenen Stichproben verwendet man die Stichprobenstreuung der Differenz
- Bei unverbundenen Stichproben verwendet man die Standardabweichung der gepoolten Stichproben (s. Lektion 12)
import numpy as np
n1 = dfv.Difference.count()
n2 = dfp.Difference.count()
xq = dfv.Difference.mean()
yq = dfp.Difference.mean()
sx = dfv.Difference.std()
sy = dfp.Difference.std()
zaehler = (n1-1)*sx**2 + (n2-1)*sy**2
nenner = n1+n2-2
sp = np.sqrt(zaehler/nenner)
sp
3.091487580276714
d = (xq - yq) / sp
d
0.11005857045633367
Interpretation der Effektgröße¶
d-Wert | Interpretation |
---|---|
0.2 | geringer Effekt |
0.5 | mittlerer Effekt |
0.8 | starker Effekt |
Wir haben also einen geringen Effekt beobachtet
Power-Analyse¶
Bauer Pillenhuber wird verdächtigt, seine Bio-Hühnchen mit Antibiotika vollzudröhnen. Wir wollen das durch Blutuntersuchungen nachweisen.
- Es handelt sich um den Vergleich mit einem Referenzwert, also einen verbundenen t-Test
- Er ist einseitig
- Wie viele Tiere müssen untersucht werden?
- Wir erwarten einen starken Effekt, sagen wir d=0.7
- Wir verlangen ein Signifikanzniveau von $\alpha=0.01$, um niemanden zu Unrecht zu verdächtigen
import statsmodels.stats.power as smp
import seaborn as sns
sns.set_theme()
Power: Wahrscheinlichkeit, dass die Nullhypothese abgelehnt wird, wenn tatsächlich die Alternative gilt
poweranalyse = smp.TTestPower()
poweranalyse.power(effect_size=0.7, alpha=0.01, nobs=10)
0.2260109977856286
poweranalyse.plot_power(effect_size=[0.7], alpha=0.01, nobs=np.arange(2,100),
alternative='larger');
# nobs: "number of observations"
Wir sollten 35 Hühner untersuchen
poweranalyse.power(effect_size=0.7, alpha=0.01, nobs=35, alternative='larger')
0.9502228513191198
Power-Analyse für unverbundene t-Tests¶
- Sie wollen wissen, ob auf sandigem Boden das Verhältnis von Kiefern zu Fichten ein anderes als auf lehmigem ist
- Sie erwarten einen mittleren Effekt
- Sie wählen den Standardwert $\alpha=0.05$
- Es handelt sich um einen unverbundenen Test
- Sie wählen $n_1$ sandige und $n_2=n_1$ lehmige Waldparzellen aus
- Wie groß müssen $n_1$ und $n_2$ sein?
poweranalyse = smp.TTestIndPower() # Ind = Independent
poweranalyse.plot_power(effect_size=[0.5], alpha=0.05, nobs=np.arange(2,150));
Sie müssen ca 100 Parzellen von jeder Sorte ansehen, um eine Power von knapp 95% zu erreichen
poweranalyse.power(effect_size=0.5, alpha=0.05, nobs1=100, ratio=1)
0.9404271933839895
ratio
ist das Verhältnis $\frac{n_2}{n_1}$- Man plant eingentlich immer mit
ratio=1
- Dann kann man diese Angabe bei
poweranalyse.power
weglassen