2016-08-03 1 views
-1

Ich bin ein Anfänger zu Statistiken und lerne derzeit Importance Sampling. Ich habe hier ähnliche Probleme durchsucht, kann aber immer noch nicht gelöst werden.Wichtigkeit Stichproben in R

Wenn ich E(x) einer Zielverteilung

f(x)=2 * x * exp(-x^2), x>0 

Durch die Verwendung von Importance Sampling bewerten müssen, nehme ich einen Vorschlag Verteilung

g(x)=exp(-x) 

Dann

E(x)=integral(x* (f(x)/g(x)) * g(x) dx) 
    =integral(exp(-x) * 4 * x^2 dx) 

Mein R Code war wie dieses

x=rexp(1000) 
w=4*x^2 
y=exp(-w) 
mean(y) 

Mache ich es richtig? Vielen Dank für Ihre Hilfe!

+1

Ich denke du brauchst zuerst einen theoretischen Rat. Dieses Forum richtet sich an Leute, die wissen, dass algorithmische Schritte benötigt werden. Und es sieht nicht so aus, als wären Sie noch da –

Antwort

1

Es ist einfach der gewichtete Stichprobenmittelwert.

Nicht gewichtete Stichprobe Mittelwert mean(x) gibt Ihnen die Erwartung der Angebotsdichte; während gewichtete Stichprobe bedeutet mean(w * x) gibt die Erwartung der Zieldichte. Aber Sie verwenden ein falsches Gewicht. Ich denke, der richtige ist w <- 2 * x * exp(-x^2 + x).

Wenn ich Sie wäre, würde ich selbst keine Gewichte berechnen. Ich würde

set.seed(0) 
x <- rexp(1000) ## samples from proposal density 
f <- function(x) 2 * x *exp(-x^2) ## target density 
w <- f(x)/dexp(x) ## importance weights 

mean(x) ## non-weighted sample mean 
# [1] 1.029677 

mean(w * x) ## weighted sample mean 
# [1] 0.9380861 

In der Theorie tun, sollte die Erwartung von Gewichten 1 sein, aber praktisch nur Sie bekommen nahe 1:

mean(w) 
[1] 1.036482 

So, könnte man die normalisierte Version wollen:

mean(w * x)/mean(w) 
[1] 0.9050671 
2

ich denke, man könnte so etwas wie dies tun wollen:

x<-rexp(n=1000,r=1) 
fx<-function(x){ 
    return(x^2*exp(-(x^2))) 
} 
gx<-function(x){ 
    return(exp(-x)) 
} 

Ex=mean(x*fx(x)/gx(x))