<- 954630 # runde Ecken
n_control_group <- 1082180 # quadratische Ecken
n_exp_group <- n_control_group + n_exp_group n_total
wikipedia
1 Aufgabe
In Ihrem Buch “Active Statistics” beschreiben die Autoren eine Studie der Wikipedia-Organisation (Gelman & Vehtari, 2024), vgl. S. 33f.
In der Studie - ein kontrolliertes Experiment, auch “A/B-Test” genannt - wurde der Effekt von abgerundeten vs. quadratischen Ecken von Textboxen auf die Spendenbereitschaft untersucht (s. Abb. 2, S. 34). (Das Buch ist kostenfrei auf der Webseite zum Buch erhältlich.)
Runde Ecken:
Quadratische Ecken:
Das Wikipedia-Team gab folgende Stichprobengrößen an:
Damit liegt der Anteil der Experimentalgruppe am Gesamtstichprobenumfang bei 53%:
/ n_total n_exp_group
[1] 0.5313112
Wie hoch ist die Wahrscheinlichkeit, einen so großen, d.h. 53% vs. 47%, (oder noch größeren) Unterschied in den Umfängen der beiden Stichproben zu erhalten, unter der Annahme einer zufälligen Aufteilung?
Hinweise:
- Nutzen Sie Simulationstechniken.
- Die Wahrscheinlichkeit ist auf 2 Dezimalen zu runden.
2 Lösung
library(tidyverse)
library(ggpubr) # Visualisierung
Wir führen probehalber den Versuch einmal durch. Hat jemand mal eben zwei Millionen Münzen? Anstelle von Münzen können wir auch den Computer nutzen.
Wir bezeichnen die beiden Ausgänge des Münzwurfexperiments mit 0 (Kontrollgruppe) und 1 (Experimentalgruppe). Eine 1
bedeutet also, dass eine Person der Experimentalgruppe zugeordnet wurde und eine 0
, dass sie der Kontrollgruppe zugeordnet wurde.
Den Münzwurf wiederholen wir n_total
Mal:
set.seed(42) # Zufallszahlen festlegen, zur Reproduzierbarkeit
<- sample(
wikipedia_experiment x = c(0,1), # Ergebnisraum
size = n_total, # Anzahl der Münzen
replace = TRUE) # Ziehen mit Zurücklegen
Mit sample
können wir Stichproben ziehen, z.B. von Münzwürfen.
Das Ergebnis ist ein lange Reihe von 0 und 1, die die jeweiligen Ergebnisse der Münzwürfe darstellt. Hier sind die ersten paar Ergebnisse:
head(wikipedia_experiment, n = 20)
[1] 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1
Wenn wir jetzt den Mittelwert berechnen, haben wir damit den Anteil der Experimentalgruppe an der Gesamtstichprobe:
<- mean(wikipedia_experiment)
anteil_exp_gruppe anteil_exp_gruppe
[1] 0.5002185
Sehr nah dran an der exakten Hälfte! Dieser Versuchsausgang spricht dagegen, dass 53% dass Ergebnis einer Zufallsaufteilung (in Experimental- und Kontrollgruppe) ist. Aber vielleicht war es nur Pech bzw. Glück? Vielleicht würde das Experiment, wenn wir nochmal die ca. 2 Millionen Münzen werfen, zu einem ganz anderen Ergebnis kommen?
Probieren wir es aus! Wir wiederholen das Experiment sagen wir n_reps = 100
Mal und notieren jedes Mal den Anteil der Experimentalgruppe am Stichprobenumfang.
<- 100 n_reps
Dazu hilft die Funktion replicate
, die die Münzwurf (Funktion sample
plus (danach) mean
) beliebig oft wiederholt:
set.seed(42)
<- replicate(n_reps,
viele_versuche sample(x = c(0,1),
size = n_total,
replace = TRUE) |>
mean())
Hier sind die Ergebnisse:
viele_versuche
[1] 0.5002185 0.5001561 0.5004016 0.4997148 0.4999867 0.4998606 0.5006157
[8] 0.4999214 0.4997987 0.5005185 0.5001198 0.5008940 0.4995905 0.4995876
[15] 0.5000462 0.5000658 0.5000570 0.5002308 0.5000756 0.5002509 0.4999126
[22] 0.4995596 0.4996062 0.4993976 0.5003250 0.5002921 0.5004021 0.4996809
[29] 0.5000844 0.4997948 0.4999995 0.5002170 0.5000025 0.5005086 0.4999362
[36] 0.5003211 0.5008872 0.4996401 0.4998296 0.5004311 0.5002288 0.4998660
[43] 0.4993681 0.4996784 0.5001031 0.4996779 0.5003638 0.4997722 0.4999656
[50] 0.4993347 0.4998650 0.4998871 0.5000128 0.5000786 0.5005307 0.5001576
[57] 0.5000417 0.4998424 0.4998449 0.4998606 0.5005715 0.5002686 0.4999651
[64] 0.5001060 0.4996313 0.5003024 0.5000948 0.5005975 0.5002897 0.4995689
[71] 0.5002278 0.4997894 0.5002254 0.5000304 0.4998719 0.5005464 0.4998012
[78] 0.4998714 0.4999396 0.4999008 0.4995149 0.5001267 0.5003800 0.4999273
[85] 0.4995100 0.5000584 0.5000172 0.5005818 0.5003000 0.4997800 0.4999887
[92] 0.4998915 0.5001939 0.4997683 0.4999651 0.4996475 0.5001630 0.4998046
[99] 0.5006564 0.4997820
Ein paar Statistiken dazu:
mean(viele_versuche)
[1] 0.5000308
sd(viele_versuche)
[1] 0.0003243425
median(viele_versuche)
[1] 0.5000076
IQR(viele_versuche)
[1] 0.0004255429
Wie man sieht, ist die Streuung sehr gering: Alle Ergebnisse streuen sehr eng um 1/2 (50%). Von 3 Prozentpunkten Abweichung ist nichts zu sehen.
Vielleicht ist es nützlich, wenn man diesen Vektor (viele_versuche
) visualisiert, z.B. mit einem Histogramm aus ggpubr
.
Die Daten benötigen wir dazu als Dataframe:
<- tibble(viele_versuche)
d
glimpse(d)
Rows: 100
Columns: 1
$ viele_versuche <dbl> 0.5002185, 0.5001561, 0.5004016, 0.4997148, 0.4999867, …
gghistogram(d, x = "viele_versuche",
add = "mean")
Hier noch ein Dichtediagramm, da sieht man die Verteilungsform besser:
ggdensity(d, x = "viele_versuche")
Unter der Annahme einer Normalverteilung (was man als hinreichend gegeben betrachten kann), liegen ca. 95% der Werte zwischen MW ± 2 sd, bzw. ca. 99% nicht weiter als 3 sd vom MW entfernt.
Fazit: Unsere Simulation zeigt, dass die Wahrscheinlichkeit für einen Stichprobenanteil von 53% sehr klein ist, kleiner als 1 von 100 in unserer Simulation (1%) und vermutlich noch deutlich kleiner als 1%.
Wir können daraus schließen, dass die Zufallszuteilung (Randomisierung) nicht richtig funktioniert hat. Hätte sie funktioniert, wäre eine Aufteilung von 53% zu 47% kaum zu erwarten gewesen.
Anders gesagt verwerfen wir die (Null-)Hypothese einer zufälligen Zuteilung zu den Gruppen.