Programmieraufgabe 3

Wichtig: Damit alle benötigten Pakete richtig eingebunden werden, führen Sie die nächste Zelle einmal aus, sobald Sie das Notebook neu öffnen.

In [1]:
# some setup
%matplotlib inline
import numpy as np # makes numpy routines and data types available as np.[name ouf routine or data type]
import matplotlib.pyplot as plt # makes plotting command available as plot.[name of command]

from ipywidgets import interactive
import random

Zufällige Teilmengen und Monte Carlo Simulation

a) Implementieren Sie einen Algorithmus, der eine (pseudo)zufällige $n$-elementige Teilmenge aus der Menge $\{1,\ldots,m\}$ auswählt. Die Teilmenge kann als Liste gespeichert werden, und soll über eine Funktion $\texttt{rsubset[m,n]}$ abrufbar sein.

Hinweis: Erstellen Sie zuerst die Liste mit den Zahlen $1$ bis $m$. Um einen zufälligen Element der Liste mit der Funktion $\texttt{random}.\texttt{choice(Liste)}$. Um einen Element $z$ aus einer Liste $\texttt{Liste}$ zu entfernen, benutzen Sie $\texttt{Liste}.\texttt{remove(z)}$.

In [2]:
# Fuegen Sie hier Ihre Loesung ein.

b) In einer Urne befinden sich wieder $m$ Kugeln, wobei nun $r$ Kugeln rot und die restlichen schwarz sind. Aus dieser Urne werden diesmal $n$ Stichproben ohne Zurüucklegen entnommen. Die Verteilung der roten Kugeln unter den $n$ gezogenen Kugeln wird nun durch die hypergeometrische Verteilung mit Parameter $m$, $r$ und $n$ beschrieben.

Verwenden Sie die Funktion $\texttt{rsubset[m,n]}$ um eine Funktion $\texttt{rhypgeom[m,r,n]}$ zu definieren, die eine Stichprobe von der hypergeometrischen Verteilung mit Parametern $m$, $r$ und $n$ erzeugt.

In [3]:
# Fuegen Sie hier Ihre Loesung ein.

c) Wählen Sie $N$ Zahlen durch $\texttt{rhypgeom[m,r,n]}$ und erzeugen Sie einen Histogram der empirische Verteilung. Die Parametern $m,r,n$ und $N$ sollten als Variablen am Anfang definiert. Plotten Sie es für $m=30$, $r=10$, $n=20$ and $N=1000$

In [1]:
# Fuegen Sie hier Ihre Loesung ein.

c) Obwohl jede $n$-elementige Teilmenge mit derselben Wahrscheinlichkeit auftritt, empfindet man Mengen $\omega \subset \{1,2,\ldots,m\}$, die viele aufeinander folgende Zahlen enthalten, als wenige "zufällig. Diese Eigenschaft quantifizieren wir durch die Zahl

\begin{equation} X(\omega) := \max\{ k \, : \, k \text{ aufeinander folgende Zahlen gehoeren zu } \omega \}\, . \end{equation}

Explizite Formeln für die Wahrscheinlichkeiten

\begin{equation} p_X(k) = P\big[ \{ \omega \, : \, X(\omega) = k \} \big] \end{equation}

unter Gleichverteilung auf den $n$-wertigen Teilmengen von $\{1,2,\ldots,m\}$ sind schwierig zu finden. Ein möglicher Ausweg sind Monte Carlo Schätzer. Dazu simuliert man $N_{\mathrm{trials}}$ zufällige $n$-elementige Teilmengen $\{\omega_1, \ldots, \omega_s\}$ und berechnet die relativen Häufigkeiten

\begin{equation} \hat p_X(k) = \frac{ \big|\{ 1 \leq i \leq N_{\mathrm{trials}} \, : \, X(\omega_i) = k \}\big| }{N_{\mathrm{trials}}} \end{equation}

als Schätzwert für die Wahrscheinlichkeiten $p_X(k)$.

Erstellen Sie ein Program um ein Monte-Carlo Schätzer für gegebeben $n$, $m$ und $N_{\mathrm{trials}}$.

Simulieren es für $n=10$, $m=40$, $N_{\mathrm{trials}}=1000$ und stellen Sie $\hat p_X$ jeweils graphisch dar.

In [2]:
# Fuegen Sie hier Ihre Loesung ein.