如何计算重要性抽样?

机器算法验证 贝叶斯 蒙特卡洛 计算统计 重要性抽样
2022-03-22 06:52:31

我正在尝试实现这个积分的重要性采样 其中是 df=5 的 t 分布。

I=|θ1θ|f(θ)dθ
f(θ)(1+θ2/5)3

我已经从上述分布中取样,并被告知使用下面 1 和 2 中的样本:

  1. 重要性函数等于 其中

    0.5{g1(θ)+g2(θ)},
    g1(θ)=1π11+θ2

    g2(θ)=14|1θ|on [0,2]

  2. 重要性函数等于

    g(θ)1|1θ|exp(|1θ|)

我该怎么做?我搜索了一下,模糊地理解了概念。有人可以更详细地解释我应该做什么吗?好像我有我需要的所有工具。

1个回答

如果您的困难在于模拟本身,这是我的 R 代码,用于比较来自(普通)的模拟,等于 (柯西分布和幂分布的混合)和等于 (折叠 Gamma)。fg

121π11+x2+1214I[0,2](x)|1x|
m
121Γ(1/2)1|1x|exp{|1x|}

模拟很简单f

> sam1=matrix(rt(10^6,df=5),ncol=100)
> fam1=h(sam1)

在哪里

> h
function(x){ 
sqrt(abs(x/{1-x}))}

进行模拟需要从平方根部分进行模拟。如果你,你会得到 over over,这意味着这个分布可以表示为 (在下文中,我强制两个子样本具有相同的大小,这是一个 Rao-Blackwellisation 技巧,可以减少方差而不影响预期。)g1/4|1x|[0,2]11x[0,1]x1[1,2]

1±U(0,1)2.
5105

> sam22=1+sample(c(-1,1),5*10^5,rep=TRUE)*runif(5*10^5)^2
> sam21=rcauchy(5*10^5)
> sam2=matrix(sample(c(sam21,sam22)),ncol=100)
> fam2=h(sam2)*dt(sam2,df=5)/g(sam2)

在哪里

g=函数(x){.5*dcauchy(x)+.125*((x>0)*(x<2))/sqrt(abs(1-x))}

模拟遵循折叠表示:m

> sam3=matrix(1+sample(c(-1,1),10^6,rep=TRUE)*rgamma(10^6,.5),ncol=100)
> fam3=h(sam3)*dt(sam3,df=5)/(.5*dgamma(abs(1-sam3),.5))

下面的箱线图说明了三种模拟方法的比较(我们应该在下一版的蒙特卡洛统计方法中使用它!)

\mathfrak{I} 的三个估计量变化的箱线图