舍选法抽样matlab,12 重要抽样法 | 统计计算

2023-05-16

12.2 带有舍选控制的重要抽样法

在重要抽样法和标准化重要抽样法的实际应用中,

好的试抽样分布很难获得,

所以权重\(\{ W_i = f(\boldsymbol X_i)/g(\boldsymbol X_i) \}\)经常会差别很大,

使得抽样样本主要集中在少数几个权重最大的样本点上。

为此,可以舍弃权重太小的样本点,

重新抽样替换这样的样本点,

这种方法称为带有舍选控制的重要抽样法。

需要预先选定权重的一个阈值\(c\),并计算

\[\begin{align*}

p_c = \int \min\left\{1, \frac{f(\boldsymbol x)}{c g(\boldsymbol x)} \right\} g(\boldsymbol x) \,d\boldsymbol x

= \int \min\left\{g(\boldsymbol x), \frac{f(\boldsymbol x)}{c} \right\} \,d\boldsymbol x .

\end{align*}\]

在产生每个抽样点\(\boldsymbol X_i\)时,计算权重\(W_i\),

当权重\(W_i \leq c\)时接受此抽样点,但权重改为\(W_i^* = p_c W_i\);

当\(W_i < c\)时仅以\(W_i/c\)的概率接受此抽样点,并调整权重为\(p_c c\),

如果没有被接受则重新从\(g(\cdot)\)中抽取。

算法如下:

带有舍选控制的重要抽样法

for(\(i\) in \(1:N\)) {

\(\quad\) repeat {

\(\qquad\) 从\(g(\cdot)\)抽取\(\boldsymbol\xi_i\)

\(\qquad\) 计算\(W_i \leftarrow f(\boldsymbol\xi_i)/g(\boldsymbol\xi_i)\)

\(\qquad\) if(\(W_i \geq c\)) {

\(\qquad\quad\) 令\(\boldsymbol X_i \leftarrow \boldsymbol\xi_i\), \(W_i^* \leftarrow p_c W_i\)

\(\qquad\quad\) break

\(\qquad\) } else {

\(\qquad\quad\) 从U(0,1)抽取\(U\)

\(\qquad\quad\) if(\(U < W_i / c\)) {

\(\qquad\qquad\) 令\(\boldsymbol X_i \leftarrow \boldsymbol\xi_i\), \(W_i^* \leftarrow p_c c\)

\(\qquad\qquad\) break

\(\qquad\quad\) }

\(\qquad\) }

\(\quad\) } # repeat

} # for

输出\((\boldsymbol X_i^*, W_i^*)\), \(i=1,2,\dots,N\)

在实际应用带有舍选控制的重要抽样法时,

一般先选略小的抽样量\(N_0\)进行原始的重要抽样,

分析权重\(W_i\)的分布,

据此选择权重\(c\),

比如可以选\(\{ W_i \}\)的某个分位数。

舍选控制算法中的\(p_c\)是归一化常数,

如果使用标准化重要抽样法,

\(p_c\)可以省略,

否则,

\(p_c\)可以从原始的重要抽样法结果中估计为

\[\begin{align}

\hat p_c = \frac{1}{N_0} \sum_{i=1}^{N_0} \min\left\{1, \; \frac{W_i}{c} \right\}.

\end{align}\]

带有舍选控制的重要抽样法得到的\(\{(\boldsymbol X_i, W_i^*), \ i=1,\dots,N \}\)是关于\(f(\cdot)\)适当加权的,

被接受的\(\boldsymbol X_i^*\)的分布密度不再是试投密度\(g(\boldsymbol x)\),而是改成了

\[\begin{align}

g^*(\boldsymbol x) = \frac{1}{p_c} \min\left\{g(\boldsymbol x), \frac{f(\boldsymbol x)}{c} \right\}.

(\#sim-rq-rjgstar)

\end{align}\]

例12.1用MC积分法计算

\(I = \int_0^1 e^x \,dx = e-1 \approx 1.718\)。

对被积函数\(h(x)=e^x\)做泰勒展开得

\[\begin{aligned}

e^x = 1 + x + \frac{x^2}{2!} + \cdots

\end{aligned}\]

\[\begin{aligned}

g(x)=c(1+x) = \frac{2}{3}(1+x)

\end{aligned}\]

要产生\(g(x)\)的随机数可以用逆变换法,

密度\(g(x)\)的分布函数\(G(x)\)的反函数为

\[\begin{aligned}

G^{-1}(y) = \sqrt{1+3y}-1, \ 0

\end{aligned}\]

因此,取\(U_i\) iid U(0,1),

令\(X_i = \sqrt{1+3U_i}-1\), \(i=1,2,\ldots,N\),

则重要抽样法的积分公式为

\[\begin{aligned}

\hat I_3 = \frac{1}{N}

\sum_{i=1}^N \frac{e^{X_i}}{\frac{2}{3}(1+X_i)}

\end{aligned}\]

渐近方差为

\[\begin{aligned}

\text{Var}(\hat I_3) = \frac{1}{N} \left(

\frac{3}{2}\int_0^1 \frac{e^{2x}}{1+x} dx - I^2 \right)

\approx 0.02691/N.

\end{aligned}\]

积分真值:

重要抽样法的程序实现:

一次模拟的估计值和绝对误差、相对误差:

相对误差很小,说明有效位数在三位以上。

用一次模拟的结果估计平均相对误差为:

说明估计精度大约有三位有效数字。

从一次模拟中对\(\text{Var}(\hat I_3)*N\)进行估计:

理论值是0.02691。

如果用平均值法, 估计公式为

\[\begin{aligned}

\hat I_2 = \frac{1}{N} \sum_{i=1}^N e^{U_i},

\end{aligned}\]

渐近方差为

\[\begin{aligned}

\text{Var}(\hat I_2) = \frac{1}{N} \left(\int_0^1 e^{2x} \,dx - I^2 \right)

\approx 0.2420/N \approx 9.0 \times \text{Var}(\hat I_3)

\end{aligned}\]

是重要抽样法方差的9倍。

因为随机模拟误差的方差通常是\(\text{Var}(Y_i)/N\),

其中\(Y_i\)是重复\(N\)次抽样中的一次的估计,

所以方差的倍数可以换算成计算量的倍数。

在这个问题中,

为了达到相同的精度,

重要抽样法只需要平均值法的\(1/9\)的样本量。

平均值法的R程序:

一次模拟的估计值和绝对误差、相对误差:

相对误差很小,说明有效位数约有三位。

用一次模拟的结果估计平均相对误差为:

说明估计精度大约有二位有效数字。

从一次模拟中对\(\text{Var}(\hat I_2)*N\)进行估计:

理论值是0.2420。

如果用随机投点法,\(h(x)=e^x \leq e(0 < x < 1)\), 取上界\(M=e\),

向\([0,1] \times [0,M]\)随机投点,落到\(f(x)\)下方的概率为

\[\begin{aligned}

p = I/(M(b-a)) = (e-1)/e,

\end{aligned}\]

设投\(N\)点落到\(h(x)\)下方的频率为\(\hat p\), 用随机投点法估计\(I\)的公式为

\[\begin{aligned}

\hat I_1 = \hat p \cdot M (b-a) = e \hat p,

\end{aligned}\]

渐近方差为

\[\begin{aligned}

\text{Var}(\hat I_1) = e^2 p(1-p) / N = (e-1)/N \approx 1.718 / N

\approx 7.1 \times \text{Var}(\hat I_2)

\approx 64.8 \times \text{Var}(\hat I_3)

\end{aligned}\]

即重要抽样法只需要随机投点法的\(1/65\)的样本量。

可见选择合适的抽样算法对减少计算量、提高精度是十分重要的。

随机投点法的R程序:

一次模拟的估计值和绝对误差、相对误差:

相对误差很小,说明有效位数将近三位。

用一次模拟的结果估计平均相对误差为:

说明估计精度大约有二位有效数字。

从一次模拟中对\(\text{Var}(\hat I_1)*N\)进行估计:

理论值是1.718。

※※※※※

例12.2

设二元函数\(f(x,y)\)定义如下

\[\begin{aligned}

f(x,y) =& \exp\{ -45(x + 0.4)^2 - 60(y-0.5)^2 \}

+ 0.5 \exp\{ -90(x-0.5)^2 - 45(y+0.1)^4 \}

\end{aligned}\]

求如下二重定积分

\[\begin{aligned}

I =& \int_{-1}^1 \int_{-1}^1 f(x,y) \,dx\,dy

\end{aligned}\]

\(f(x,y)\)有两个分别以\((-0.4, 0.5)\)和\((0.5, -0.1)\)为中心的峰,

对积分有贡献的区域主要集中在\((-0.4,0.5)\)和\((0.5, -0.1)\)附近,

在其他地方函数值很小,对积分贡献很小。

\(f(x,y)\)写成R函数:

用平均值法, 取点数\(N=10000\)。

一次模拟的估计值为:

估计的平均相对误差为:

\(\hat I_2\)的一个估计值为\(\hat I_2 = 0.126\),

从这一次模拟估计的平均相对误差为0.03,

仅有一位有效数字精度,

只能保证\(\hat I_2=0.1\)基本可信。

平均值法的缺点是在整个正方形区域\((-1,1) \times (-1,1)\)上均匀布点,

而被积函数\(f(x,y)\)仅在两个峰附近有较大正值,

其它区域基本是零。

用重要抽样法改进。取试投密度为

\[\begin{aligned}

g(x,y) \propto& \tilde g(x,y) \\

=& \exp \{ -45(x+0.4)^2 - 60(y-0.5)^2 \}

+ 0.5 \exp\{ -90(x-0.5)^2 - 10(y+0.1)^2 \}, \\

& -\infty < x < \infty, -\infty < y < \infty,

\end{aligned}\]

这样抽取到\([-1,1]\times [-1,1]\)范围外的点对积分没有贡献,

因为构成\(g(x,y)\)的两个密度都很集中,所以效率损失不大。

需要求使得\(\tilde g(x,y)\)化为密度的比例常数。

记N(\(\mu, \sigma^2)\)的分布密度为

\(f(x;\mu, \sigma^2)\),对\(\tilde g(x,y)\)积分得

\[\begin{aligned}

\int_{-\infty}^\infty \int_{-\infty}^\infty \tilde g(x,y) =&

\sqrt{2\pi/90} \int_{-\infty}^\infty f(x;-0.4, 90^{-1}) dx

\cdot \sqrt{2\pi/120} \int_{-\infty}^\infty f(y;0.5,120^{-1}) dy \\

& + 0.5 \sqrt{2\pi/180} \int_{-\infty}^\infty f(x;0.5,180^{-1}) dx

\cdot \sqrt{2\pi/20} \int_{-\infty}^\infty f(y;-0.1,20^{-1}) dy \\

=& \sqrt{2\pi/90}\sqrt{2\pi/120} + 0.5 \sqrt{2\pi/180}\sqrt{2\pi/20} \\

\approx& 0.1128199

\end{aligned}\]

于是令

\[\begin{aligned}

g(x,y) =& \tilde g(x,y) / 0.1128199 \\

=& 0.5358984 f(x;-0.4,90^{-1}) f(y;0.5,120^{-1}) \\

& + 0.4641016 f(x;0.5,180^{-1}) f(y;-0.1,20^{-1}), \\

& -\infty < x < \infty, -\infty < y < \infty,

\end{aligned}\]

用复合抽样法对\(g(x,y)\)抽样,然后用重要抽样法得到估计值\(\hat I_3\)。

注意用重要抽样法计算时需要\(X_i\)独立同分布,

但是其次序并不重要,

当\(N\)很大时,

可以固定取混合分布中两个分布的样本个数严格等于混合比例,

而不需要从两个分布中随机抽取。

一次模拟的估计值为:

估计的平均相对误差为:

\(N=10000\)时一次模拟得到的\(\hat I_3 = 0.1253\),

从这一次模拟估计的平均相对误差为0.002, 估计精度有两位有效数字以上,

估计结果可报告为0.13。

重要抽样法与平均值法的方差相比:

两种方法的方差差距有200倍以上,

说明重要抽样法节省了200倍的计算量。

※※※※※

例12.3标准化的重要抽样法在贝叶斯统计推断中有重要作用。

例如,设独立的观测样本\(Y_j\)服从如下的贝塔—二项分布:

\[\begin{align}

& f(y_j | K, \eta)

= P(Y_j = y_j) \\

=& \binom{n_j}{y_j}

\frac{B(K\eta + y_j,\ K(1-\eta) + n_j - y_j)}{B(K\eta,\, K(1-\eta))},

\ y_j=0,1,\dots, n_j,

\tag{12.8}

\end{align}\]

其中\(B(\cdot, \cdot)\)是贝塔函数,

\(n_j\)为已知的正整数,\(K>0\)和\(0

贝塔—二项分布用于描述比二项分布更为分散的随机变量分布。

按照贝叶斯统计的做法, 假设参数\((K, \eta)\)也是随机变量,

具有所谓的“先验分布”, 假设\((K, \eta)\)有如下的“无信息”先验分布密度:

\[\begin{align}

\pi(K, \eta) \propto \frac{1}{(1+K)^2} \frac{1}{\eta(1-\eta)},

\tag{12.9}

\end{align}\]

则\((K, \eta)\)有如下的“后验密度”:

\[\begin{align}

\tilde p(K, \eta | \boldsymbol Y) \propto& \pi(K, \eta) \prod_{j=1}^n f(y_j | K, \eta) \nonumber \\

\propto& \frac{1}{(1+K)^2} \frac{1}{\eta(1-\eta)}

\prod_{j=1}^n

\frac{B(K\eta + y_j,\ K(1-\eta) + n_j - y_j)}{B(K\eta,\, K(1-\eta))}.

\tag{12.10}

\end{align}\]

要求

\(E (\log K | \boldsymbol Y) = \int_0^\infty \log K \, \tilde p(K, \eta | \boldsymbol Y) \,dK\)的值。

如果可以从后验密度\(\tilde p(K, \eta | \boldsymbol Y)\)直接抽样,

可以用平均值法估计\(E (\log K | \boldsymbol Y)\),

但从(12.10)来看很难直接抽样。

为此,使用标准化的重要抽样法。 为了解除\((K, \eta)\)的取值限制,

作变换\(\alpha = \log K\), \(\beta = \log \frac{\eta}{1-\eta}\),

则\(\alpha, \beta \in (-\infty, \infty)\),

而(12.10)对应的\((\alpha, \beta)\)的后验密度为:

\[\begin{align}

p(\alpha, \beta | \boldsymbol Y)

\propto

\frac{e^\alpha}{(1 + e^\alpha)^2}

\prod_{j=1}^n

\frac{B(\frac{e^{\alpha}}{1 + e^{-\beta}} + y_j,

\ \frac{e^{\alpha}}{1 + e^{\beta}} + n_j - y_j)}

{B(\frac{e^{\alpha}}{1 + e^{-\beta}},

\ \frac{e^{\alpha}}{1 + e^{\beta}})}.

\tag{12.11}

\end{align}\]

取值无限制的随机变量试抽样密度经常使用自由度较小的t分布,

比如t(4)分布,设t(4)分布密度函数为\(g(\cdot)\),

用独立的t(4)分布生成\((\alpha, \beta)\)

的试抽样样本\((\alpha_i, \beta_i), i=1,2,\dots,N\),

可以估计\(E(\log K | \boldsymbol Y)\)为

\[\begin{aligned}

\hat \alpha = \frac{\sum_{i=1}^N \alpha_i

\frac{p(\alpha_i, \beta_i | \boldsymbol Y)}{g(\alpha_i) g(\beta_i)}}

{\sum_{i=1}^N

\frac{p(\alpha_i, \beta_i | \boldsymbol Y)}{g(\alpha_i) g(\beta_i)}}.

\end{aligned}

\tag{3.39}

\]

其中的\(p(\alpha_i, \beta_i | \boldsymbol Y)\)只要用(12.11)的右侧计算,

因为分子和分母的归一化常数可以消掉。

下面用R语言产生一组模拟的观测数据\(\boldsymbol Y\),然后对这组数据估计\(E(\log K | \boldsymbol Y)\)。

先定义贝塔-二项分布的概率质量函数:

其中\(n\)是正整数,\(y\)是非负整数且\(0 \leq y \leq n\),

K和eta是上述分布参数\(K\)和\(\eta\)。

给定\(n\)个独立观测,

设这组观测的\(n_1, \dots, n_n\)保存在向量narr中,

\(y_1, \dots, y_n\)保存在向量yarr中,

于是以\((\alpha, \beta)\)为自变量的后验密度函数(差一个未知的常数倍),

将\(\alpha\)和\(\beta\)记为自变量a, b,R函数为:

注意其中的narr和yarr是还没有赋值的全局变量。

在R的函数定义中,

允许使用尚未定义的变量,

只要调用该函数时变量已经在该函数定义的环境中赋值就可以。

下面用模拟方法生成观测样本,然后认为观测样本已知。

将这些模拟生成的数据固定下来。

下面用标准化的重要抽样法估计\(E(\log K | \boldsymbol Y)=E(\alpha | \boldsymbol Y)\)。

取\(\alpha\)和\(\beta\)的试抽样分布为t(4)。

\(\log(K)\)真值为:

用10000个抽样的重要抽样法给出的\(\log(K)\)的后验估计为:

重要性权重最好取值比较均匀,

否则重要性权重很小的抽样点基本不起作用,

效率较低。

上述模拟的归一化重要性权重的分布情况:

a940898d0129a734bc2f48d921d8f0fe.png

可见绝大多数抽样点都贡献很小。

这也是求解比较复杂的问题时重要抽样法应用的普遍现象。

舍选控制是解决这样问题的一种技术,

下面尝试采用这一技术。先看权重的分为点:

取舍选控制阈值\(c\)为90%分位数。

对\(N\)个权重,超过阈值的都保留;

小于阈值的,

以概率\(W_i/c\)保留,\(c\)是阈值,

其它的丢弃,这样减少了样本量。

原来的舍选控制法是预先选好阈值\(c\),

对每个\(i=1,2,\dots, N\)的每个,

从\(g(\boldsymbol x)\)中抽取后\(X_i\)后,

都进行舍选控制;如果第\(i\)个被丢弃,就重新从\(g(\boldsymbol)\)中抽取,直到被接受。

在R的向量化做法中,可以多抽取一些,

然后丢弃的就不再重复抽取。

舍选控制:

原来的10000个抽样仅保留了1000多个。

权重修改为:

在新的权重下保留的抽样是关于后验密度适当加权的。

新的估计为:

※※※※※

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

舍选法抽样matlab,12 重要抽样法 | 统计计算 的相关文章

随机推荐