Das Ziel der Inferenzstatistik ist es, aus einer einzelnen Stichprobe $x_1, \dots, x_n$ die Stichproben-Verteilung eines Schätzers, wie dem Mittelwert $\bar{x}$ oder dem Median $x_{0.5}$, herzuleiten. Wenn die Stichproben-Verteilung eines Schätzers vorliegt kann damit der Wert des tatsächlichen unbekannten Populationsparameters eingegrenzt werden.
Für viele Schätzer kann deren Stichproben-Verteilung theoretisch hergeleitet werden. Neben der theoretischen Herangehensweise, gibt es auch eine intuitive empirische Methode, das Bootstrapping-Verfahren. Es basiert auf der Simulation von vielen Stichproben. Simulation bedeutet, dass die Stichproben nicht real erhoben, sondern alle aus der einzigen vorhanden Stichprobe erstellt werden.
Eine einzelne Bootstrapping-Stichprobe erhält man, indem aus der vorhanden Stichprobe der Größe $n$, genau $n$ Beobachtungen mit Zurücklegen zufällig gezogen werden. Das bedeutet, dass Beobachtungen mehrmals in der simulierten Stichprobe vorkommen können.
Nimm an, dass die Stichprobe die folgenden $n=7$ Werte enthält:
import pandas as pd
x = pd.Series([21, 13, 8, 14, 10, 12, 5])
x.mean()
Eine simulierte Bootstrapping-Stichprobe erhältst Du, indem Du aus der vorhandenen Stichprobe genau $n=7$ Werte mit Zurücklegen (replace=True
) zufällig auswählst:
x.sample(n=len(x), replace=True)
Für jede simulierte Stichprobe wird daraufhin der zu interessierende Schätzwert berechnet. Um möglichst exakte Ergebnisse zu erhalten sollten mindestens $S \geq 5000$ Simulationen durchgeführt werden. Man erhält damit eine Annäherung an die tatsächliche Stichprobenverteilung des Schätzwerts:
Wir erstellen eine Bootstrapping-Verteilung für den Stichproben-Mittelwert. Die Anzahl der Simulationen wird auf $S=10000$ festgelegt. Mit einer for
Schleife wird die Simulation wiederholt. In jeder Simulation wird eine Bootstrapping-Stichprobe erstellt und deren Mittelwert berechnet.
x_means = []
S=10000
for i in range(S):
x_mean = x.sample(n=len(x), replace=True).mean()
x_means.append(x_mean)
Die Mittelwerte jeder Simulation werden in der Liste x_means
abgespeichert. Die Liste enthält nun eine empirische Stichprobenverteilung des Mittelwerts. Nun kannst Du Dir die Verteilung des Stichproben-Mittelwertes beispielsweise in einem Histogramm ansehen:
#matplotlib inline
import seaborn as sns
sns.set()
sns.distplot(x_means, kde=False, bins=35)
Wie viele Mittelwerte liegen zwischen 9 und 11?
x_means = pd.Series(x_means)
x_means.between(9,11).mean()
'Circulation Active Year'
wird standardmäßig als Text eingelesen]'Total Renewals'
. Wie viele Verlängerungen wurden im Mittel durchgeführt?pandas.Series.quantile
]