R中的重要性抽样

时间:2016-08-03 17:02:59

标签: r

我是统计学的初学者,目前正在学习重要性抽样。我在这里搜索过类似的问题,但仍然无法解决我的问题。

如果我需要评估目标分布的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)

我做得对吗? 非常感谢你的帮助!

2 个答案:

答案 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