Aufgaben Nachbereitung Diskrete Verteilungen

Code
library(tidyverse)
library(patchwork)

# Farben konsistent durch das gesamte Dokument
blau <- "#2C7BB6"
rot  <- "#D7191C"
grau <- "grey50"

n_sim <- 1000   # Anzahl Simulationen (global)

Aufgabe 1: Multiple-Choice-Test

Eine Studentin absolviert einen Test, welcher aus 15 Multiple-Choice-Fragen besteht. Sie hat sich gut vorbereitet und geht davon aus, dass sie jede einzelne Frage mit einer Wahrscheinlichkeit von 0.85 richtig beantworten wird. Für die Note 5.0 muss sie 80% aller Fragen richtig beantworten. Wie gross ist die Wahrscheinlichkeit, dass sie beim Test unter der erhofften Note 5.0 bleibt?


Aufgabe 1 – Wahrscheinlichkeit für Note unter 5.0

Definiert man die Zufallsvariable \(X\) als Anzahl richtig beantworteter Fragen, ist \(X\) binomialverteilt mit

\[X \sim B(15;\; 0.85)\]

Für eine Note von mindestens 5.0 müssen mindestens \(0.8 \cdot 15 = 12\) Fragen richtig beantwortet werden. Die gesuchte Wahrscheinlichkeit, unter Note 5.0 zu bleiben, ist also \(P(X < 12)\):

\[\begin{align} P(X < 12) &= 1 - P(X \geq 12) \\[4pt] &= 1 - \sum_{k=12}^{15} \binom{15}{k} \cdot 0.85^k \cdot 0.15^{15-k} \\[4pt] &= 1 - \bigl(0.2184 + 0.2856 + 0.2312 + 0.0874\bigr) \\[4pt] &\approx 0.18 \end{align}\]

Die Wahrscheinlichkeit, dass die Studentin unter den gegebenen Voraussetzungen die Note 5.0 verpasst, beträgt somit etwa 0.18.

n_fragen <- 15
p_richtig <- 0.85

# Einzelwahrscheinlichkeiten P(X = k) für k = 12..15
tibble(k = 12:15) |>
  mutate(`P(X = k)` = dbinom(k, size = n_fragen, prob = p_richtig)) |>
  knitr::kable(digits = 4,
               caption = "Einzelwahrscheinlichkeiten P(X = k) für k = 12, …, 15")
Einzelwahrscheinlichkeiten P(X = k) für k = 12, …, 15
k P(X = k)
12 0.2184
13 0.2856
14 0.2312
15 0.0874
# P(X < 12) = P(X ≤ 11)
p_unter_12 <- pbinom(11, size = n_fragen, prob = p_richtig)
cat("P(X < 12) = P(X ≤ 11) =", round(p_unter_12, 4), "\n")
P(X < 12) = P(X ≤ 11) = 0.1773 
cat("P(X ≥ 12)              =", round(1 - p_unter_12, 4), "\n")
P(X ≥ 12)              = 0.8227 

Die Wahrscheinlichkeit, die Note 5.0 zu verpassen, beträgt \(P(X < 12) \approx 0.18\).


Aufgabe 2: Hypergeometrische Verteilung als Grenzfall der Binomialverteilung

Die Binomialverteilung \(\text{Bi}(n;\, p)\) mit \(p = M/N\) lässt sich als Grenzfall einer hypergeometrischen Verteilung \(\text{H}(N;\, M;\, n)\) auffassen, wenn \(n/N\) immer kleiner wird (in der Praxis z.B. ab \(n/N < 0.1\)). Dies soll hier illustriert werden.

Erzeugen Sie mit 1000 Beobachtungen eine Variable hypervar50, die hypergeometrisch verteilte Zufallszahlen mit \(N = 50\), \(M = 10\) und \(n = 10\) enthält, der hypergeometrischen Verteilung \(\text{H}(50;\, 10;\, 10)\) entsprechend. Erzeugen Sie anschliessend sukzessive weitere Variablen mit hypergeometrisch verteilten Zufallszahlen; dabei soll \(n\) konstant bleiben, und gleichzeitig sollen \(N\) und \(M\) so zunehmen, dass der Quotient \(p = M/N\) konstant bleibt. Führen Sie diesen Prozess so lange durch, bis sich die hypergeometrisch verteilten Variablen einer binomialverteilten Variable binomialvar nähern. Welche Binomialverteilung muss das sein? Stellen Sie die Verteilungen geeignet grafisch dar.


Aufgabe 2 – Grenzübergang H(N; M; n) → Bi(n; p)

Parameterstruktur der hypergeometrischen Verteilung \(\text{H}(N;\, M;\, n)\):

Symbol Bedeutung
\(N\) Gesamtanzahl Elemente in der Grundgesamtheit
\(M\) Anzahl «Erfolge» in der Grundgesamtheit
\(n\) Stichprobengrösse (Ziehungen ohne Zurücklegen)
\(p = M/N\) Erfolgsanteil in der Grundgesamtheit

Die Wahrscheinlichkeitsfunktion lautet:

\[P(X = k) = \frac{\displaystyle\binom{M}{k}\binom{N-M}{n-k}}{\displaystyle\binom{N}{n}}, \quad k = 0, 1, \ldots, \min(n, M)\]

Grenzübergang: Für festes \(n\) und festes \(p = M/N\) gilt:

\[\text{H}(N;\, M;\, n) \;\xrightarrow{\;N, M \to \infty,\; M/N \,=\, p\;}\; B(n;\, p)\]

Je grösser \(N\), desto kleiner ist der Einfluss des «Ohne-Zurücklegen» – die Verteilung nähert sich der Binomialverteilung (mit Zurücklegen) an.

Konkrete Parameterwahl (\(p = M/N = 0.2\) konstant, \(n = 10\) konstant):

Variable \(N\) \(M\) \(n\) \(n/N\)
hypervar50 50 10 10 0.200
hypervar100 100 20 10 0.100
hypervar200 200 40 10 0.050
binomialvar \(\infty\) 10 \(\approx 0\)

Die Grenzverteilung ist \(B(10;\, 0.2)\), da \(n = 10\) und \(p = M/N = 0.2\) konstant bleiben.

In R verwendet rhyper(nn, m, n, k) die Parametrisierung: m = \(M\), n = \(N - M\), k = Stichprobengrösse.

set.seed(42)
n_zug <- 10     # Stichprobengrösse (konstant)
p_hyp <- 0.2   # p = M/N (konstant)

# H(N; M; n): rhyper(nn, m = M, n = N-M, k = n_zug)
hypervar50  <- rhyper(n_sim, m = 10,  n = 40,  k = n_zug)
hypervar100 <- rhyper(n_sim, m = 20,  n = 80,  k = n_zug)
hypervar200 <- rhyper(n_sim, m = 40,  n = 160, k = n_zug)

# Grenzverteilung: Bi(10; 0.2)
binomialvar <- rbinom(n_sim, size = n_zug, prob = p_hyp)
Code
# Empirische relative Häufigkeiten in langer Form
df_hyper <- tibble(
  hypervar50  = hypervar50,
  hypervar100 = hypervar100,
  hypervar200 = hypervar200,
  binomialvar = binomialvar
) |>
  pivot_longer(everything(), names_to = "Variable", values_to = "x") |>
  mutate(Variable = factor(Variable,
    levels = c("hypervar50", "hypervar100", "hypervar200", "binomialvar"))) |>
  count(Variable, x) |>
  group_by(Variable) |>
  mutate(rel = n / sum(n) * 100) |>
  ungroup()

# Theoretische Bi(10; 0.2)-Wahrscheinlichkeiten
df_bi_theorie <- tibble(
  x   = 0:n_zug,
  rel = dbinom(0:n_zug, size = n_zug, prob = p_hyp) * 100
)

ggplot(df_hyper, aes(x = x, y = rel)) +
  geom_col(fill = blau, width = 0.7) +
  geom_point(data = df_bi_theorie, aes(x = x, y = rel),
             colour = rot, size = 2.5) +
  geom_line(data = df_bi_theorie, aes(x = x, y = rel),
            colour = rot, linewidth = 0.6, linetype = "dashed") +
  facet_wrap(~ Variable, nrow = 2) +
  scale_x_continuous(breaks = 0:n_zug) +
  labs(x = "k", y = "relative Häufigkeit [%]") +
  theme_minimal(base_size = 11) +
  theme(strip.text = element_text(face = "bold"),
        axis.text.x = element_text(size = 8))
Abbildung 1: Annäherung der hypergeometrischen Verteilung H(N; M; 10) an die Binomialverteilung Bi(10; 0.2) für wachsendes N bei konstantem p = M/N = 0.2. Rote Punkte: theoretische Bi(10; 0.2)-Wahrscheinlichkeiten.

Aufgabe 3: Binomialverteilung als Grenzfall der Poisson-Verteilung

Die Poisson-Verteilung \(\text{Po}(\lambda)\) lässt sich als Grenzfall einer Binomialverteilung \(\text{Bi}(n;\, p)\) auffassen, wo \(n \to \infty\) und gleichzeitig \(p \to 0\) so, dass das Produkt \(\lambda = n \cdot p\) konstant bleibt. Dies soll hier illustriert werden.

Erzeugen Sie mit 1000 Beobachtungen eine Variable binomialvar10, die binomialverteilte Zufallszahlen mit \(n = 10\) und \(p = 0.2\) enthält, der Binomialverteilung \(\text{Bi}(10;\, 0.2)\) entsprechend. Erzeugen Sie anschliessend sukzessive weitere Variablen mit binomialverteilten Zufallszahlen; dabei soll \(n\) schnell zunehmen und gleichzeitig \(p\) so abnehmen, dass das Produkt \(\lambda = n \cdot p\) konstant bleibt. Führen Sie diesen Prozess so lange durch, bis sich die binomialverteilten Variablen einer entsprechenden poissonverteilten Variable poissonvar nähern (welche muss das sein?). Stellen Sie die Verteilungen geeignet grafisch dar.


Aufgabe 3 – Grenzübergang Bi(n; p) → Po(λ)

Der Poisson-Grenzwertsatz besagt: Für \(n \to \infty\) und \(p \to 0\) mit \(\lambda = n \cdot p = \text{const}\) gilt

\[B(n;\, p) \;\xrightarrow{\;n \to \infty,\; p \,=\, \lambda/n\;}\; \text{Po}(\lambda)\]

Die Wahrscheinlichkeitsfunktion der Poissonverteilung lautet:

\[P(X = k) = \frac{\lambda^k \cdot e^{-\lambda}}{k!}, \quad k = 0, 1, 2, \ldots\]

Konkrete Parameterwahl (\(\lambda = n \cdot p = 2\) konstant):

Variable \(n\) \(p = \lambda/n\) \(\lambda = n \cdot p\)
binomialvar10 10 0.2 2
binomialvar1000 1 000 0.002 2
binomialvar100000 100 000 0.00002 2
poissonvar \(\to \infty\) \(\to 0\) 2

Die Grenzverteilung ist \(\text{Po}(2)\), da \(\lambda = n \cdot p = 2\) konstant bleibt.

Konvergenz der Wahrscheinlichkeitsfunktionen: Für beliebiges \(k\) gilt:

\[\binom{n}{k}\left(\frac{\lambda}{n}\right)^{\!k}\!\left(1-\frac{\lambda}{n}\right)^{\!n-k} \;\xrightarrow{n\to\infty}\; \frac{\lambda^k \cdot e^{-\lambda}}{k!}\]

Für eine gute Annäherung wird \(n\) recht gross gebraucht (z.B. \(n \geq 10\,000\)), da \(p\) sehr klein werden muss.

set.seed(42)
lambda <- 2   # n * p = konstant

# Bi(n; lambda/n) mit wachsendem n
binomialvar10     <- rbinom(n_sim, size = 10,     prob = lambda / 10)
binomialvar1000   <- rbinom(n_sim, size = 1000,   prob = lambda / 1000)
binomialvar100000 <- rbinom(n_sim, size = 100000, prob = lambda / 100000)

# Grenzverteilung: Po(2)
poissonvar <- rpois(n_sim, lambda = lambda)
Code
# Empirische relative Häufigkeiten in langer Form
df_pois <- tibble(
  binomialvar10     = binomialvar10,
  binomialvar1000   = binomialvar1000,
  binomialvar100000 = binomialvar100000,
  poissonvar        = poissonvar
) |>
  pivot_longer(everything(), names_to = "Variable", values_to = "x") |>
  mutate(Variable = factor(Variable,
    levels = c("binomialvar10", "binomialvar1000",
               "binomialvar100000", "poissonvar"))) |>
  count(Variable, x) |>
  group_by(Variable) |>
  mutate(rel = n / sum(n) * 100) |>
  ungroup()

# Theoretische Po(2)-Wahrscheinlichkeiten
k_max <- max(df_pois$x)
df_po_theorie <- tibble(
  x   = 0:k_max,
  rel = dpois(0:k_max, lambda = lambda) * 100
)

ggplot(df_pois, aes(x = x, y = rel)) +
  geom_col(fill = blau, width = 0.7) +
  geom_point(data = df_po_theorie, aes(x = x, y = rel),
             colour = rot, size = 2.5) +
  geom_line(data = df_po_theorie, aes(x = x, y = rel),
            colour = rot, linewidth = 0.6, linetype = "dashed") +
  facet_wrap(~ Variable, nrow = 2) +
  scale_x_continuous(breaks = 0:k_max) +
  labs(x = "k", y = "relative Häufigkeit [%]") +
  theme_minimal(base_size = 11) +
  theme(strip.text = element_text(face = "bold"),
        axis.text.x = element_text(size = 8))
Abbildung 2: Annäherung der Binomialverteilung Bi(n; 2/n) an die Poissonverteilung Po(2) für wachsendes n bei konstantem λ = n·p = 2. Rote Punkte: theoretische Po(2)-Wahrscheinlichkeiten.