我是统计学的初学者,目前正在学习重要性抽样。我在这里搜索过类似的问题,但仍然无法解决我的问题。
如果我需要评估目标分布的E(x)
f(x)=2 * x * exp(-x^2), x>0
通过使用重要性采样,我采用提案分发
g(x)=exp(-x)
然后
E(x)=integral(x* (f(x)/g(x)) * g(x) dx)
=integral(exp(-x) * 4 * x^2 dx)
我的R代码是这样的
x=rexp(1000)
w=4*x^2
y=exp(-w)
mean(y)
我做得对吗? 非常感谢你的帮助!
答案 0 :(得分:2)
我想你可能想做这样的事情:
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))
答案 1 :(得分:1)
这只是加权样本均值。
非加权样本均值mean(x)
为您提供提案密度的期望;而加权样本均值mean(w * x)
给出了目标密度的期望。但是你使用了错误的重量。我认为正确的是w <- 2 * x * exp(-x^2 + x)
。
如果我是你,我不会自己计算体重。我会做的
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
理论上,权重的期望应该是1.但实际上你只接近1:
mean(w)
[1] 1.036482
因此,您可能需要规范化版本:
mean(w * x) / mean(w)
[1] 0.9050671