Gibbs Sampling

15 篇文章 1 订阅
7 篇文章 0 订阅

Gibbs Sampling

1 Gibbs算法

1.1 二阶段Gibbs

已知二维随机向量 ( X 1 , X 2 ) (X_1,X_2) (X1,X2)服从联合概率分布 f ( x 1 , x 2 ) f(x_1,x_2) f(x1,x2),对应的边缘概率密度函数为
f ( x 1 ) = ∫ f ( x 1 , x 2 ) d x 2 f ( x 2 ) = ∫ f ( x 1 , x 2 ) d x 1 ; f(x_1) = \int f(x_1,x_2)dx_2\\ f(x_2) = \int f(x_1,x_2)dx_1; f(x1)=f(x1,x2)dx2f(x2)=f(x1,x2)dx1;
则可以计算出随机变量 X 1 X_1 X1 X 2 X_2 X2的条件概率分布:
f ( x 1 ∣ x 2 ) = f ( x 1 , x 2 ) f ( x 2 ) = f ( x 1 , x 2 ) ∫ f ( x 1 , x 2 ) d x 1 f ( x 2 ∣ x 1 ) = f ( x 1 , x 2 ) f ( x 1 ) = f ( x 1 , x 2 ) ∫ f ( x 1 , x 2 ) d x 2 \begin{aligned} f(x_1|x_2) = \dfrac{f(x_1,x_2)}{f(x_2)}=\dfrac{f(x_1,x_2)}{\int f(x_1,x_2)dx_1}\\ f(x_2|x_1) = \dfrac{f(x_1,x_2)}{f(x_1)}=\dfrac{f(x_1,x_2)}{\int f(x_1,x_2)dx_2} \end{aligned} f(x1x2)=f(x2)f(x1,x2)=f(x1,x2)dx1f(x1,x2)f(x2x1)=f(x1)f(x1,x2)=f(x1,x2)dx2f(x1,x2)
二阶段Gibbs算法如下:

(1)给定初始值 ( x 1 0 , x 2 0 ) (x_1^0,x_2^0) (x10,x20)

(2)对应 t = 2 , 3 … N t=2,3\dots N t=2,3N,

  • 从条件密度 f ( x 1 ∣ x 2 t − 1 ) f(x_1|x_2^{t-1}) f(x1x2t1)采样得到 x 1 t x_1^t x1t
  • 从条件密度 f ( x 2 ∣ x 1 t ) f(x_2|x_1^{t}) f(x2x1t)采样得到 x 2 t x_2^t x2t

根据上面的算法得到样本 { x t = ( x 1 t , x 2 t ) ∣ 0 ≤ t ≤ N } \{\boldsymbol{x^t} = (x_1^t,x_2^t)|0\le t\le N\} {xt=(x1t,x2t)∣0tN}。不难发现,下一期 x t + 1 x^{t+1} xt+1仅仅取决于当前 x t x^t xt的取值,而与过去时刻取值无关,这种性质具有马尔可夫链的性质。因此,二阶段Gibbs采样也属于马尔科夫链蒙特卡洛模拟(MCMC)采样。为保证采样结果收敛到目标分布,前一段时间的采样应该舍去。


1.2 多阶段Gibbs

类似地可以得到多阶段Gibbs算法:

(1)给定初始值 ( x 1 0 , x 2 0 … x n 0 ) (x_1^0,x_2^0\dots x_n^0) (x10,x20xn0)

(2)对应 t = 2 , 3 … T t=2,3\dots T t=2,3T,

  • 从条件密度 f ( x 1 ∣ x 2 t − 1 , x 3 t − 1 … x n t − 1 ) f(x_1|x_2^{t-1},x_3^{t-1}\dots x_n^{t-1}) f(x1x2t1,x3t1xnt1)采样得到 x 1 t x_1^t x1t;
  • 从条件密度 f ( x 2 ∣ x 1 t , x 3 t − 1 … x n t − 1 ) f(x_2|x_1^{t},x_3^{t-1}\dots x_n^{t-1}) f(x2x1t,x3t1xnt1)采样得到 x 2 t x_2^t x2t;
  • ……
  • 从条件密度 f ( x n ∣ x 1 t , x 3 t … x n − 1 t ) f(x_n|x_1^{t},x_3^{t}\dots x_{n-1}^{t}) f(xnx1t,x3txn1t)采样得到 x n t x_n^t xnt;

为保证采样结果收敛到目标分布,前一段时间的采样应该舍去。


2 代码实现

以二元正态分布为例。已知二元随机变量 ( x 1 , x 2 ) (x_1,x_2) (x1,x2)满足二元联合正态分布,均值分别为 μ 1 = 2 , μ 2 = 1.5 \mu_1=2,\mu_2=1.5 μ1=2,μ2=1.5,方差为 σ 1 = 3 , σ 2 = 5 \sigma_1=3,\sigma_2=5 σ1=3,σ2=5,相关系数 ρ = − 0.5 \rho=-0.5 ρ=0.5。使用Gibbs方法进行采样。对于一般二维正态分布
f ( x , y ) = 1 2 π σ x σ y 1 − ρ 2 exp ⁡ ( − 1 2 ( 1 − ρ 2 ) [ ( x − μ x ) 2 σ x 2 − 2 ρ ( x − μ x ) ( y − μ y ) σ x σ y + ( y − μ y ) 2 σ y 2 ] ) f(x, y)=\frac{1}{2 \pi \sigma_x \sigma_y \sqrt{1-\rho^2}} \exp \left(-\frac{1}{2\left(1-\rho^2\right)}\left[\frac{\left(x-\mu_x\right)^2}{\sigma_x^2}-2 \rho \frac{\left(x-\mu_x\right)\left(y-\mu_y\right)}{\sigma_x \sigma_y}+\frac{\left(y-\mu_y\right)^2}{\sigma_y^2}\right]\right) f(x,y)=2πσxσy1ρ2 1exp(2(1ρ2)1[σx2(xμx)22ρσxσy(xμx)(yμy)+σy2(yμy)2])
x x x条件下。 y y y的条件分布也为正态分布(一维):
f ( y ∣ x ) = 1 2 π σ y ∣ x exp ⁡ ( − ( y − μ y ∣ x ) 2 2 σ y ∣ x 2 ) f(y \mid x)=\frac{1}{\sqrt{2 \pi} \sigma_{y \mid x}} \exp \left(-\frac{\left(y-\mu_{y \mid x}\right)^2}{2 \sigma_{y \mid x}^2}\right) f(yx)=2π σyx1exp(2σyx2(yμyx)2)
其中条件均值:
μ y ∣ x = μ y + ρ σ y σ x ( x − μ x ) \mu_{y \mid x}=\mu_y+\rho \frac{\sigma_y}{\sigma_x}\left(x-\mu_x\right) μyx=μy+ρσxσy(xμx)
条件方差:
σ y ∣ x = σ y 1 − ρ 2 \sigma_{y \mid x}=\sigma_y \sqrt{1-\rho^2} σyx=σy1ρ2

y ∣ x ∼ N ( μ y + ρ σ y σ x ( x − μ x ) , σ y 1 − ρ 2 ) x ∣ y ∼ N ( μ x + ρ σ x σ y ( y − μ x ) , σ x 1 − ρ 2 ) \begin{aligned} y|x\sim N(\mu_y+\rho \frac{\sigma_y}{\sigma_x}\left(x-\mu_x\right),\sigma_y \sqrt{1-\rho^2})\\ x|y\sim N(\mu_x+\rho \frac{\sigma_x}{\sigma_y}\left(y-\mu_x\right),\sigma_x \sqrt{1-\rho^2}) \end{aligned} yxN(μy+ρσxσy(xμx),σy1ρ2 )xyN(μx+ρσyσx(yμx),σx1ρ2 )

#二阶段Gibbs抽样
x1  <- numeric()
x2 <- numeric()
rho = 0.6;mu1 = 1.1;sigma1 = 3;mu2 = 1.8;sigma2 = 4
x1[1] = 0
x2[1] = 0
N = 5000
for(t in 2:N){
  print(t)
  x1[t] = rnorm(1,mean = mu1+rho*sigma1/sigma2*(x2[t-1]-mu2),
                sd = sqrt(1-rho^2)*sigma1)
  x2[t] = rnorm(1,mean = mu2+rho*sigma2/sigma1*(x1[t]-mu1),
                sd = sqrt(1-rho^2)*sigma2)
}
cor(x1,x2)
plot(x1,x2)
grid(col = "black")
# 样本期望、方差
mean(x1[1001:2000])
mean(x2[1001:2000])
sd(x1[1001:2000])
sd(x2[1001:2000])

参考书籍:

黄长全,贝叶斯统计及其R实现[M]. 北京: 清华大学出版社, 2017.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值