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(x1∣x2)=f(x2)f(x1,x2)=∫f(x1,x2)dx1f(x1,x2)f(x2∣x1)=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,3…N,
- 从条件密度 f ( x 1 ∣ x 2 t − 1 ) f(x_1|x_2^{t-1}) f(x1∣x2t−1)采样得到 x 1 t x_1^t x1t
- 从条件密度 f ( x 2 ∣ x 1 t ) f(x_2|x_1^{t}) f(x2∣x1t)采样得到 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)∣0≤t≤N}。不难发现,下一期 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,x20…xn0),
(2)对应 t = 2 , 3 … T t=2,3\dots T t=2,3…T,
- 从条件密度 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(x1∣x2t−1,x3t−1…xnt−1)采样得到 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(x2∣x1t,x3t−1…xnt−1)采样得到 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(xn∣x1t,x3t…xn−1t)采样得到 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−ρ21exp(−2(1−ρ2)1[σx2(x−μx)2−2ρσ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(y∣x)=2πσy∣x1exp(−2σy∣x2(y−μy∣x)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)
μy∣x=μy+ρσxσy(x−μx)
条件方差:
σ
y
∣
x
=
σ
y
1
−
ρ
2
\sigma_{y \mid x}=\sigma_y \sqrt{1-\rho^2}
σy∣x=σ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}
y∣x∼N(μy+ρσxσy(x−μx),σy1−ρ2)x∣y∼N(μ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.