Statistische Informationsverarbeitung - Übung 3
From StatWiki
Angabe: Media:StatInfMCMCue3.pdf
Contents |
Accept/Reject
Verwenden sie den Accept/Reject Algorithmus, um
mit
zu simulieren.
Benutzen Sie dazu eine zweiseitige Exponentialverteilung als Kandidatsverteilung, also
.
("
" bedeutet "proportional zu",
heißt also, dass
für eine Konstante
ist.)
(a)
Um
zu erzeugen, benutzen Sie die Inverse Transformationsmethode für
eine "normale" Exponentialverteilung und setzen
mit Wahrscheinlichkeit
.
1. generierenach
![]()
![]()
Eine "normale" Exponentialverteilung
pdf(rpdf)
G1 = function(y) { -log(1 - y) }
y = G1(runif(10000,0,1))
hist(y,main=expression(tilde(g)(y)), freq=FALSE, xlim=c(-4,4),ylim=c(0,1))
yv=seq(-4,4,length.out=1000)
lines(yv, dexp(yv),col=2)
#
Jene mit "... und setzenmit Wahrscheinlichkeit
."
pdf(rpdf) y = y * c(-1,1)[rbinom(10000,1,.5) + 1] hist(y,main=expression(tilde(g)(y)), freq=FALSE, xlim=c(-4,4),ylim=c(0,.45)) #
(b)
Generieren Sie so
(oder mehr) normalverteilte Zufallszahlen, erstellen
Sie ein Histogramm und plotten Sie zur Überprüfung die Dichtefunktion der Normalverteilung
in Ihr Histogramm. Schreiben Sie Ihr Programm so, dass es genau
die gewünschte Anzahl an Zufallszahlen liefern kann.
2. generiere3. Falls
, dann setze
sonst gehe zu 1.
pdf(rpdf)
g=function(x) { .5 * exp(-.5 * x) }
f=function(x) { 1/(2 * pi) * exp(-.5 * x^2) }
ft = function(x) { exp(-.5 * x^2) }
gt = function(y) { exp( - abs(y) ) }
M = ft(.5)/gt(.5)
x = 1:10000
yNeeded = rep(0,length(x))
for(i in x)
{
# no do { } while(); construct in R :(
repeat
{
yNeeded[i] = yNeeded[i] + 1
y = G1(runif(1,0,1)) * c(-1,1)[rbinom(1,1,.5) + 1]
u=runif(1,0,M)
if(ft(y) / (M * gt(y)) >= u)
break;
}
x[i] = y
}
hist(x, main="f(x)", freq=FALSE, xlim=c(-4,4),ylim=c(0,.45))
xv = seq(-4,4,length.out=1000)
lines(xv, dnorm(xv), col=2)
#
(c)
Wieviele Iterationsschritte mussten Sie durchschnittlich vornehmen, um zu einem "accept-Schritt" zu gelangen? Wieviele Schritte haben Sie erwartet? Warum?
ACHTUNG das stimmt so nicht. Um m-tilde zu finden muss manin der Ableitung verwenden. und das maximum wird bei x=1 angenommen.
mean(yNeeded) #
[1] 1.685
Also erwartet habe ich einen Schritt, weil ichgesetzt habe.
mit
![]()
mit
Herleitung des Supremums ("Jener Funkionswert (nicht das x) das immer größer/gleich der Funktion ist").
![]()
![]()
0.
pdf(rpdf)
x=seq(-5,5,length.out=1000)
g=function(x) { .5 * exp(-.5 * x) }
f=function(x) { 1/(2 * pi) * exp(-.5 * x^2) }
plot(x,f(x)/g(x),type="l")
abline(v=.5,col=2)
#
Ich glaub in der VO ist der Buchstabe M doppelt verwendet worden, oder ich blick grad nicht durch. Erwartet habe ichSchritte, weil
(die Anzahl der Iterationsschritte bis zum akzeptieren eines
) geometrisch verteilt ist. Wie unten ersichtlich
, daher ist
.
mit
![]()
(c) Beweis zu ACCEPT/REJECT
Beweis das ACCEPT/REJECT einvon der gewünschten Verteilung mit Dichtefunktion
generiert.
![]()
nach Satz d. totalen Wahrscheinlichkeit
![]()
![]()
![]()
da eine Dichte auf 1 summieren muss.
![]()
![]()
![]()
![]()
![]()
![]()
(Die REJECT Wahrscheinlichkeiten dürfen miteinander multipliziert werden, da die Versuche unabhängig voneinander sind)
(Geometrische Summenformel)
![]()
(d)
Schreiben Sie nun Ihr Programm um, sodass Sie anstelle einer vorgegebenen Anzahl
von
eine eine vorgegebene Zahl an Kandidaten (also
) generieren.
Wenn Sie nun in etwa
(zB
) normalverteilte
möchten, wieviele Kandidaten müssen Sie erzeugen?
pdf(rpdf) n = 10000 y = G1(runif(n,0,1)) * c(-1,1)[rbinom(n,1,.5) + 1] u=runif(n,0,M) x = y[ft(y) / (M * gt(y)) >= u] hist(x, main="f(x)", freq=FALSE, xlim=c(-4,4),ylim=c(0,.45)) xv = seq(-4,4,length.out=1000) lines(xv, dnorm(xv), col=2) #
nach
Eine "normale" Exponentialverteilung
3. Falls
, dann setze
sonst gehe zu 1.
in der Ableitung verwenden. und das maximum wird bei x=1 angenommen.
gesetzt habe.
mit
Herleitung des Supremums ("Jener Funkionswert (nicht das x) das immer größer/gleich der Funktion ist").
0.
Schritte, weil
(die Anzahl der Iterationsschritte bis zum akzeptieren eines
) geometrisch verteilt ist.
Wie unten ersichtlich
, daher ist
.
mit
von der gewünschten Verteilung mit Dichtefunktion
generiert.
nach Satz d. totalen Wahrscheinlichkeit
da eine Dichte auf 1 summieren muss.
(Die REJECT Wahrscheinlichkeiten dürfen miteinander multipliziert werden, da die Versuche unabhängig voneinander sind)
(Geometrische Summenformel)
