Inversionsmethode Normalverteilung

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
TopProtet
Beiträge: 7
Registriert: So Apr 18, 2021 12:36 pm

Inversionsmethode Normalverteilung

Beitrag von TopProtet »

Hey:)
Ich habe folgende Fragestellung zur Bearbeitung bekommen und würde mich über paar Hilfestellungen freuen:

Mit der Inversionsmethode können Zufallszahlen aus einer Verteilung F gezogen werden, indem man erst auf (0, 1) gleichverteilte Zufallszahlen erzeugt und diese dann mit Hilfe der inversen Verteilungsfunktion (= Quantilsfunktion) transformiert. Wenn

U ∼ Unif(0,1)
X = F−1(U),

dann gilt, dass X ∼ F , d.h. die Zufallsvariable X folgt der gewünschten Verteilung F. Diesen Umstand macht man sich zunutze, indem man die inverse Transformation auf eine gleichverteilte Zufallsvariable anwendet.

1. Erzeugen Sie mit Hilfe der Inversionsmethode Zufallszahlen aus einer gestutzten (trunkierten) Normalverteilung. Schreiben Sie dafür die folgende Funktion:

> rtrnorm <- function(n, mean = 0, sigma = 1, lower = -Inf, upper = Inf) {}
Dabei gilt:
• mean: Erwartungswert der Normalverteilung vor der Trunkierung
• sigma: Standardabweichung der Normalverteilung vor der Trunkierung
• lower, upper: obere und untere Schranken des Wertebereichs

Wenden Sie die Funktion folgendermaßen an:
> x <- rtrnorm(2000, 3, 1, 1, 4)

2. Visualisieren Sie die Stichprobe und vergleichen Sie deren Verteilung mit der theoretischen, entweder indem Sie die Dichtefunktion der theoretischen Verteilung u ̈ber ein Histogramm der empirischen Verteilung einzeichnen oder indem Sie die empirische und die theoretische Verteilungsfunktion gemeinsam in eine Grafik zeichnen (oder beides).

Den ersten Teil hab ich wie folgt implementiert:

Code: Alles auswählen

rtrnorm <- function(n, mean = 0, sigma = 1, lower = -Inf, upper = Inf){
  u <- runif(n,min = lower, max = upper)
  rnorm <- ((sigma/(2*pi*u^3))^(1/2)*exp(-((sigma*(u-mean)^2)/(2*mean^2*u))))
  
  return (rnorm)
}

x <- rtrnorm(2000, 3, 1, 1, 4)
Stimmt das? Und kann mir wer bei der Darstellung bzgl 2. helfen, ich verstehe die Angabe nicht ganz. Vielen Dank!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Inversionsmethode Normalverteilung

Beitrag von bigben »

Hallo Top,
TopProtet hat geschrieben: Sa Jun 12, 2021 6:13 pm2. Visualisieren Sie die Stichprobe und vergleichen Sie deren Verteilung mit der theoretischen, entweder indem Sie die Dichtefunktion der theoretischen Verteilung über ein Histogramm der empirischen Verteilung einzeichnen oder indem Sie die empirische und die theoretische Verteilungsfunktion gemeinsam in eine Grafik zeichnen (oder beides).
Der erste Schritt wäre wohl eine Histogramm der empirischen Verteilung, also ein Histogramm der 2000 Werte, die Du in x gespeichert hast.

Code: Alles auswählen

x <- rtrnorm(2000, 3, 1, 1, 4)
hist(x)
Wenn ich das richtig verstehe, sollte dieser Aufruf von rtrnorm zweitausend Werte zwischen 1 und 4 und ein Maximum bei 3 liefern. Tut er das laut diesem Histogramm?

Die Aufgabenstellung beginnt mit
Mit der Inversionsmethode können Zufallszahlen aus einer Verteilung F gezogen werden, indem man erst auf (0, 1) gleichverteilte Zufallszahlen erzeugt...
Hast Du das bis dahin richtig umgesetzt?

Der folgende Code ist nicht die Antwort auf die Aufgabe aber er sollte Dir beim Erstellen der gewünschten Grafik helfen:

Code: Alles auswählen

rtrnorm <- rnorm ## !!!! Das ist natürlich falsch, rtrnorm muss ander definiert werden

zeichne <- function(n = 2000, mean = 0, sd = 1, lower = -3, upper = +3){
        x <- rtrnorm(n, mean, sd)
        curve(dnorm(x, mean, sd), from = lower - .5, to = upper +.5, lwd = 2,
              ylim = c(0, 1.2*dnorm(mean, mean, sd)),
              ylab = "Wahrscheinlichkeit(sdichte)")
        abline(v = c(lower, upper), lty = 3, col = "grey")
        axis(3, at = c(lower, upper), labels = c("lower", "upper"))
        hist(x, freq = FALSE, col = "#5599FF33", breaks = 30, add = TRUE)
}

zeichne(1000)
zeichne(2000, 2, .5, 0, 4)
zeichne(2000, 3, 1, 1, 4)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Inversionsmethode Normalverteilung

Beitrag von Athomas »

Ich habe folgende Fragestellung zur Bearbeitung bekommen
Darf ich mal fragen, wer solche Fragestellungen zur Bearbeitung verteilt - und welchem Zweck die Beantwortung dienen würde?
Ich halte die Aufgabenstellung nämlich für - freundlich gesagt - wenig sinnvoll!
Antworten