Aufgaben zur Vorbereitung – Zufallsvariablen und Verteilungen

Aufgabe 1: Doppelwurf eines Würfels

Ein fairer Würfel wird zweimal hintereinander geworfen. Die erste Augenzahl sei \(a_1\), die zweite \(a_2\). Es werden zwei Zufallsvariablen definiert:

\[X = a_1 + a_2 \quad \text{(Summe der Augenzahlen)}\] \[Y = \text{ggT}(a_1, a_2) \quad \text{(grösster gemeinsamer Teiler der Augenzahlen)}\]

  1. Handelt es sich bei \(X\) und \(Y\) jeweils um diskrete oder um stetige Zufallsvariablen?

  2. Wie lässt sich das Ereignis \(A =\) «Es wird eine Augensumme grösser als 8 geworfen» mit Hilfe der Zufallsvariablen \(X\) kurz beschreiben?

  3. Skizzieren Sie jeweils den Graphen der Wahrscheinlichkeits- und der Verteilungsfunktion von \(X\) und \(Y\).

  4. Bestimmen Sie jeweils den Erwartungswert und die Varianz von \(X\) und \(Y\).

a) Sowohl \(X\) als auch \(Y\) sind diskrete Zufallsvariablen, da beide nur diskrete Werte, d.h. eine endliche Menge von Ausprägungen, annehmen können.

b) Es ist \(A = (X > 8)\) oder äquivalent \(A = (X \geq 9)\).

c) Ordnet man die Augenpaare \((a_1, a_2)\) in der Reihenfolge \((1,1), (1,2), \ldots, (1,6), (2,1), \ldots, (2,6), \ldots, (6,6)\) an, so lauten die dazugehörenden Ausprägungen von \(X\):

\[2, 3, 4, 5, 6, 7,\ 3, 4, 5, 6, 7, 8,\ 4, 5, 6, 7, 8, 9,\ 5, 6, 7, 8, 9, 10,\ 6, 7, 8, 9, 10, 11,\ 7, 8, 9, 10, 11, 12\]

Die Wahrscheinlichkeiten der möglichen Ausprägungen von \(X\) lauten:

\(x\) 2 3 4 5 6 7 8 9 10 11 12
\(f(x)\) \(\tfrac{1}{36}\) \(\tfrac{2}{36}\) \(\tfrac{3}{36}\) \(\tfrac{4}{36}\) \(\tfrac{5}{36}\) \(\tfrac{6}{36}\) \(\tfrac{5}{36}\) \(\tfrac{4}{36}\) \(\tfrac{3}{36}\) \(\tfrac{2}{36}\) \(\tfrac{1}{36}\)

Ordnet man die Augenpaare in derselben Reihenfolge, so lauten die Ausprägungen von \(Y = \text{ggT}(a_1, a_2)\):

\[1, 1, 1, 1, 1, 1,\ 1, 2, 1, 2, 1, 2,\ 1, 1, 3, 1, 1, 3,\ 1, 2, 1, 4, 1, 2,\ 1, 1, 1, 1, 5, 1,\ 1, 2, 3, 2, 1, 6\]

Die Wahrscheinlichkeiten der möglichen Ausprägungen von \(Y\) lauten:

\(y\) 1 2 3 4 5 6
\(f(y)\) \(\tfrac{23}{36}\) \(\tfrac{7}{36}\) \(\tfrac{3}{36}\) \(\tfrac{1}{36}\) \(\tfrac{1}{36}\) \(\tfrac{1}{36}\)

d) Der Erwartungswert von \(X\) ergibt sich aus den Ausprägungen \(x_k\) und den dazugehörenden Wahrscheinlichkeiten \(f(x_k)\) gemäss:

\[\begin{align} E(X) &= \sum_{k=1}^{11} x_k \cdot f(x_k) \\ &= 2 \cdot \frac{1}{36} + 3 \cdot \frac{1}{18} + \cdots + 12 \cdot \frac{1}{36} = 7 \end{align}\]

Dies lässt sich auch ohne Rechnung einsehen: Da die Wahrscheinlichkeitsfunktion symmetrisch bezüglich der Ausprägung \(x_6 = 7\) ist, muss dies der Erwartungswert von \(X\) sein.

Die Varianz von \(X\) ergibt sich als:

\[\begin{align} \text{Var}(X) &= E\!\left[(X - E(X))^2\right] = \sum_{k=1}^{11}(x_k - 7)^2 \cdot f(x_k) \\ &= (2-7)^2 \cdot \frac{1}{36} + (3-7)^2 \cdot \frac{1}{18} + \cdots + (12-7)^2 \cdot \frac{1}{36} \\ &= \frac{35}{6} \approx 5.833 \end{align}\]

Der Erwartungswert von \(Y\) ergibt sich als:

\[\begin{align} E(Y) &= \sum_{k=1}^{6} x_k \cdot f(x_k) \\ &= 1 \cdot \frac{23}{36} + 2 \cdot \frac{7}{36} + \cdots + 6 \cdot \frac{1}{36} = \frac{61}{36} \approx 1.694 \end{align}\]

Und die Varianz von \(Y\) ergibt sich als:

\[\begin{align} \text{Var}(Y) &= \sum_{k=1}^{6}\left(y_k - \frac{61}{36}\right)^2 \cdot f(x_k) \\ &= \left(1 - \frac{61}{36}\right)^2 \cdot \frac{23}{36} + \left(2 - \frac{61}{36}\right)^2 \cdot \frac{7}{36} + \cdots + \left(6 - \frac{61}{36}\right)^2 \cdot \frac{1}{36} \\ &= \frac{1859}{1296} \approx 1.434 \end{align}\]

Code
library(tidyverse)
library(patchwork)

# Hilfsfunktion ggT
ggT <- function(a, b) { while (b != 0) { t <- b; b <- a %% b; a <- t }; a }

# Alle 36 Ergebnisse erzeugen
wuerfe <- expand_grid(a1 = 1:6, a2 = 1:6) |>
  mutate(X = a1 + a2,
         Y = map2_int(a1, a2, ggT))

# Wahrscheinlichkeitsfunktionen
wf_X <- wuerfe |> count(X) |> mutate(f = n / 36, F = cumsum(f))
wf_Y <- wuerfe |> count(Y) |> mutate(f = n / 36, F = cumsum(f))

# Kenngrößen
kenngroessen <- function(wf, var) {
  x <- wf[[var]]; f <- wf$f; mu <- sum(x * f)
  tibble(Variable = var, `E(X)` = round(mu, 4),
         `Var(X)` = round(sum((x - mu)^2 * f), 4))
}
bind_rows(kenngroessen(wf_X, "X"), kenngroessen(wf_Y, "Y")) |>
  knitr::kable(caption = "Kenngrößen von X und Y")
Kenngrößen von X und Y
Variable E(X) Var(X)
X 7.0000 5.8333
Y 1.6944 1.4344
Code
# Hilfsfunktion: Wahrscheinlichkeits- und Verteilungsfunktion plotten
plot_ZV <- function(wf, var, titel) {
  x_sym <- sym(var)
  x_min <- min(wf[[var]]) - 1.2
  x_max <- max(wf[[var]]) + 1.2

  # Segmente für Treppenfunktion
  seg <- bind_rows(
    tibble(x = x_min, xend = wf[[var]][1], y = 0, yend = 0),
    tibble(x = wf[[var]],
           xend = c(wf[[var]][-1], x_max),
           y = wf$F, yend = wf$F)
  )

  p1 <- ggplot(wf, aes(x = !!x_sym, y = f)) +
    geom_col(fill = "#2C7BB6", width = 0.4) +
    scale_x_continuous(breaks = wf[[var]]) +
    labs(title = paste("f(x) –", titel), x = var, y = "f(x)") +
    theme_minimal()

  p2 <- ggplot(wf, aes(x = !!x_sym, y = F)) +
    geom_segment(data = seg,
                 aes(x = x, xend = xend, y = y, yend = yend),
                 color = "#2C7BB6", linewidth = 0.9) +
    geom_point(color = "#2C7BB6", size = 2.5) +
    geom_point(data = tibble(!!x_sym := wf[[var]],
                             F = c(0, wf$F[-nrow(wf)])),
               shape = 1, size = 2.5, color = "#2C7BB6") +
    scale_x_continuous(breaks = wf[[var]]) +
    scale_y_continuous(limits = c(-0.02, 1.05)) +
    labs(title = paste("F(x) –", titel), x = var, y = "F(x)") +
    theme_minimal()

  list(p1, p2)
}

px <- plot_ZV(wf_X, "X", "Augensumme")
py <- plot_ZV(wf_Y, "Y", "ggT")

(px[[1]] | px[[2]]) / (py[[1]] | py[[2]])


Aufgabe 2: Wartezeit an der Fussgängerampel

Eine Fussgängerampel schaltet alle 40 Sekunden von Rot auf Grün. Die Fussgänger treffen völlig zufällig und regellos in der Rotphase vor der Ampel ein. Die Zufallsvariable \(T\) messe die Wartezeit vor der Ampel in Sekunden.

  1. Handelt es sich bei \(T\) um eine diskrete oder um eine stetige Zufallsvariable?

  2. Geben Sie mit Hilfe der Zufallsvariablen \(T\) die Wahrscheinlichkeit an, dass man mehr als 15 Sekunden vor der Ampel wartet, und berechnen Sie anschliessend diese Wahrscheinlichkeit.

  3. Skizzieren Sie die Dichte- und die Verteilungsfunktion von \(T\). Zeichnen Sie in der Verteilungsfunktion die Wahrscheinlichkeit ein, dass man mehr als 15 Sekunden vor der Ampel wartet.

a) \(T\) ist eine stetige Zufallsvariable, weil sie beliebige reelle Werte im Intervall \((0, 40]\) annehmen kann.

b) Es ist:

\[\begin{align} P(\text{«Man wartet mehr als 15 Sekunden»}) &= P(T > 15) \\ &= 1 - P(T \leq 15) = 1 - F(15) \\ &= 1 - \frac{15}{40} = \frac{5}{8} \end{align}\]

c) Da jede Wartezeit zwischen 0 und 40 Sekunden «gleich wahrscheinlich» ist, ist die Dichtefunktion \(f\) im Intervall \((0, 40]\) konstant:

\[f(t) = \frac{1}{40}\]

Für \(t \leq 0\) oder \(t > 40\) gilt \(f(t) = 0\).

Die Verteilungsfunktion \(F\) ergibt sich im Intervall \((0, 40]\) als Integral über die Dichtefunktion \(f\), d.h. indem man die Fläche unterhalb des Graphen der Dichtefunktion bestimmt:

\[\begin{align} F(t) &= \int_0^t f(u)\, du \\ &= \text{(Rechteck-)Fläche unterhalb des Graphen von } f \text{ zwischen 0 und } t \\ &= \frac{1}{40} \cdot t \end{align}\]

Für \(t \leq 0\) gilt \(F(t) = 0\), und für \(t > 40\) gilt \(F(t) = 1\).

Code
# Wahrscheinlichkeit P(T > 15)
sprintf("P(T > 15) = %.4f", 1 - punif(15, min = 0, max = 40))
[1] "P(T > 15) = 0.6250"
Code
library(tidyverse)
library(patchwork)

t_vals <- seq(-5, 47, length.out = 2000)
dat <- tibble(t = t_vals,
              f = dunif(t, 0, 40),
              F = punif(t, 0, 40))

p_f <- ggplot(dat, aes(x = t, y = f)) +
  geom_ribbon(data = filter(dat, t >= 15, t <= 40),
              aes(ymin = 0, ymax = f),
              fill = "#D7191C", alpha = 0.3) +
  geom_line(color = "#2C7BB6", linewidth = 1) +
  annotate("text", x = 29, y = 0.013,
           label = "P(T > 15) = 5/8", color = "#D7191C", size = 3.5) +
  scale_x_continuous(breaks = c(0, 15, 40)) +
  scale_y_continuous(limits = c(0, 0.04),
                     breaks = c(0, 1/40),
                     labels = c("0", "1/40")) +
  labs(title = "Dichtefunktion f(t)", x = "t [Sek.]", y = "f(t)") +
  theme_minimal()

p_F <- ggplot(dat, aes(x = t, y = F)) +
  geom_line(color = "#2C7BB6", linewidth = 1) +
  annotate("segment", x = 15, xend = 15, y = 0, yend = punif(15, 0, 40),
           linetype = "dashed", color = "grey50") +
  annotate("segment", x = -5, xend = 15,
           y = punif(15, 0, 40), yend = punif(15, 0, 40),
           linetype = "dashed", color = "grey50") +
  annotate("segment", x = 43, xend = 43,
           y = punif(15, 0, 40), yend = 1,
           arrow = arrow(ends = "both", length = unit(0.15, "cm")),
           color = "#D7191C") +
  annotate("text", x = 46, y = 0.81, label = "5/8",
           color = "#D7191C", size = 3.5) +
  scale_x_continuous(breaks = c(0, 15, 40)) +
  scale_y_continuous(breaks = c(0, 0.25, 15/40, 0.5, 0.75, 1),
                     labels = c("0", "1/4", "3/8", "1/2", "3/4", "1")) +
  labs(title = "Verteilungsfunktion F(t)", x = "t [Sek.]", y = "F(t)") +
  theme_minimal()

p_f | p_F


Aufgabe 3: Simulation in R – Würfelexperiment

Beim Werfen eines fairen Würfels erscheint jede Augenzahl von 1 bis 6 mit derselben Wahrscheinlichkeit \(p = 1/6\). Der Datensatz wuerfeln.RData enthält 1000 Beobachtungen: neben der Identifikationsvariablen id eine Variable augenzahl, welche einer simulierten Augenzahl beim Werfen eines fairen Würfels entspricht.

  1. Stellen Sie für die ersten \(n = 10\), \(n = 100\) bzw. \(n = 1000\) Beobachtungen die relative empirische Häufigkeitsfunktion von augenzahl grafisch dar.

  2. Bestimmen Sie jeweils sowohl die absolute als auch die relative Häufigkeit von augenzahl.

  3. Welchen Zusammenhang zwischen der Anzahl Beobachtungen und der Abweichung zwischen beobachteter und erwarteter absoluter bzw. relativer Häufigkeit stellen Sie fest? Wie interpretieren Sie diesen Zusammenhang?

c) Mit zunehmender Beobachtungszahl \(n\) nimmt die Abweichung zwischen beobachteter und erwarteter absoluter Häufigkeit \(n/6\) zu. Hingegen nimmt die Abweichung zwischen beobachteter und erwarteter relativer Häufigkeit \(1/6\) ab. Die empirische Verteilung nähert sich also der theoretischen Verteilung mit zunehmendem \(n\) an. Das ist auch deutlich aus den Balkendiagrammen in a) ersichtlich.

Code
library(tidyverse)

load("wuerfeln.RData")
wuerfeln <- wuerfeln |> mutate(augenzahl = factor(augenzahl))

a) Grafische Darstellung der relativen Häufigkeiten

Code
rel_hf <- function(data, n) {
  data |>
    slice_head(n = n) |>
    count(augenzahl, .drop = FALSE, name = "anzahl") |>
    mutate(rel = anzahl / n, n_label = paste0("n = ", n))
}

bind_rows(rel_hf(wuerfeln, 10),
          rel_hf(wuerfeln, 100),
          rel_hf(wuerfeln, 1000)) |>
  mutate(n_label = factor(n_label,
                          levels = c("n = 10", "n = 100", "n = 1000"))) |>
  ggplot(aes(x = augenzahl, y = rel)) +
  geom_col(fill = "#2C7BB6", width = 0.6) +
  geom_hline(yintercept = 1/6, linetype = "dashed",
             color = "#D7191C", linewidth = 0.8) +
  facet_wrap(~ n_label) +
  scale_y_continuous(labels = scales::label_percent(accuracy = 1),
                     limits = c(0, 0.5)) +
  labs(title = "Relative Häufigkeiten beim Würfeln",
       subtitle = "Rote Linie: theoretischer Wert 1/6 ≈ 16.7 %",
       x = "Augenzahl", y = "Relative Häufigkeit") +
  theme_minimal() +
  theme(strip.text = element_text(face = "bold"))

b) Absolute und relative Häufigkeiten

Code
map_dfr(c(10, 100, 1000), \(n) {
  wuerfeln |>
    slice_head(n = n) |>
    count(augenzahl, .drop = FALSE, name = "anzahl") |>
    mutate(rel = round(anzahl / n, 3), n_total = n)
}) |>
  pivot_wider(id_cols = augenzahl,
              names_from = n_total,
              values_from = c(anzahl, rel),
              names_glue = "{.value} (n={n_total})") |>
  knitr::kable(caption = "Absolute (anzahl) und relative (rel) Häufigkeiten")
Absolute (anzahl) und relative (rel) Häufigkeiten
augenzahl anzahl (n=10) anzahl (n=100) anzahl (n=1000) rel (n=10) rel (n=100) rel (n=1000)
1 0 14 170 0.0 0.14 0.170
2 2 17 162 0.2 0.17 0.162
3 4 20 161 0.4 0.20 0.161
4 1 19 170 0.1 0.19 0.170
5 1 17 170 0.1 0.17 0.170
6 2 13 167 0.2 0.13 0.167

c) Konvergenz der relativen Häufigkeiten

Code
map_dfr(c(10, 50, 100, 250, 500, 1000), \(n) {
  wuerfeln |>
    slice_head(n = n) |>
    count(augenzahl, .drop = FALSE, name = "anzahl") |>
    summarise(max_abw  = max(abs(anzahl / n - 1/6)),
              mean_abw = mean(abs(anzahl / n - 1/6)),
              n = n)
}) |>
  pivot_longer(c(max_abw, mean_abw),
               names_to = "Typ", values_to = "Abweichung") |>
  mutate(Typ = if_else(Typ == "max_abw",
                       "Maximale Abweichung", "Mittlere Abweichung")) |>
  ggplot(aes(x = n, y = Abweichung, color = Typ)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2.5) +
  scale_color_manual(values = c("#D7191C", "#2C7BB6")) +
  scale_y_continuous(labels = scales::label_percent(accuracy = 0.1)) +
  labs(title = "Konvergenz der relativen Häufigkeiten gegen 1/6",
       x = "Stichprobenumfang n",
       y = "Abweichung von 1/6", color = NULL) +
  theme_minimal() +
  theme(legend.position = "bottom")