0 Daumen
151 Aufrufe

Aufgabe:

In dieser Aufgabe wollen wir Zufallsvariablen mit der Dichte \( f(x)=\frac{1}{2} e^{-|x|}, x \in \mathbb{R} \) simulieren. Schreibe dazu eine Funktion r_density \( (n) \), die \( n \) solcher Zufallsvariablen simuliert.

Nutze anschließend diese Funktion, um N \( =1000 \) solcher Zufallsvariablen zu simulieren. Mithilfe von geom_density( ) kannst du nun die Dichte aus den simulierten Zufallsvariablen ermitteln. Diese Schätzung können wir mit der echten Dichte vergleichen. Erstelle dazu eine Grafik, die folgendermaßen aussieht:


blob.png


Code:

library(tidyverse)

N <- 1000

r_density <- function(n){
exp(-abs(n))/2
}

x <- runif(N)

tb <- tibble(
x = x,
density_fkt = r_density(x)
)

ggplot() +
geom_density(
  data = tb,
  mapping = aes(
    x = density_fkt,
    y = ..scaled..
  )
) +
geom_function(
  fun = r_density,
  xlim = c(-6,6),
  color = "red",
  size = 1
) +
theme_minimal() +
labs(
x = "x",
y = "Dichtefunktion f(x)",
title = "Geschätzte (schwarz) vs echte (rot) Dichte"


blob.png

Problem:

Wie man im Bild erkennt, stimmt etwas mit den Werten der Dichtefunktion noch nicht und ich weiß einfach nicht, wo das Problem liegen könnte. Die gegebene Funktion sollte stimmen, da man auch die rote Linie bekommt, aber warum stimmen die Zufallsvariablen nicht?

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Erklärung:

Das Problem liegt in der Art und Weise, wie in deinem Code die Zufallsvariablen generiert und wie die Dichtefunktion berechnet wird.

Schritt-für-Schritt Lösung:

1. Simulation der Zufallsvariablen:
Die Dichtefunktion \( f(x) = \frac{1}{2} e^{-|x|} \) entspricht der Laplace-Verteilung. Diese kann nicht einfach durch \( \texttt{runif(n)} \)-Funktion generiert werden. Stattdessen müssen wir die Funktion nutzen, um Variablen zu simulieren, die dieser Verteilung folgen.

2. Simulation der Laplace-Verteilung:
Dies erreichen wir durch die Inverse-Transformationsmethode. Für die Laplace-Verteilung kann dies durch den folgenden Code umgesetzt werden:

R
r_density <- function(n) {
  u <- runif(n) - 0.5
  return(sign(u) * log(1 - 2 * abs(u)))
}

Dieser Code generiert n Zufallsvariablen, die der Laplace-Verteilung folgen.

3. Erstellung der Grafik:
Mit den simulierten Daten können wir die Dichtefunktion schätzen und grafisch darstellen. Dazu nutzen wir den folgenden angepassten Code:

R
library(tidyverse)

N <- 1000

# Simulation der Laplace-Verteilung
r_density <- function(n) {
  u <- runif(n) - 0.5
  return(sign(u) * log(1 - 2 * abs(u)))
}

# Generieren von Zufallsvariablen
x <- r_density(N)

# Wahre Dichtefunktion
true_density <- function(x) {
  return(1/2 * exp(-abs(x)))
}

# Erstellung der Grafik
ggplot() +
  geom_density(aes(x = x), color = "black", size = 1) +
  stat_function(fun = true_density, color = "red", size = 1) +
  theme_minimal() +
  labs(
    x = "x",
    y = "Dichtefunktion f(x)",
    title = "Geschätzte (schwarz) vs echte (rot) Dichte"
  )


Erklärung des Codes:
- Wir implementieren die Funktion r_density, die n Zufallsvariablen der Laplace-Verteilung generiert.
- Wir generieren 1000 solcher Zufallsvariablen x.
- Dann definieren wir die wahre Dichtefunktion true_density.
- Schließlich erstellen wir die Grafik mit ggplot2, wobei die geschätzte Dichte in Schwarz und die wahre Dichte in Rot dargestellt werden.

Ergebnis

Durch Betrachtung des resultierenden Plots sollte die geschätzte Dichtefunktion (schwarz) nun die wahre Dichtefunktion (rot) gut approximieren. Die Diskrepanz in der ursprünglichen Aufgabe entstand durch das falsche Simulieren der Zufallsvariablen.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community