Logit Beta分布是一个在广义线性模型中时常遇到的分布,通常是作为模型算法的一个中间部分。因其自身特点,在采样的时候,很容易得到取值非常大的样本点,从而导致算法发散。所以本篇简单介绍一下这个分布,并给出对其进行采样的策略。
Diaconis-Ylvisaker分布是Natural Exponential Family的共轭先验分布,假设
X
∼
D
Y
(
α
,
κ
;
ψ
)
X \sim DY(\alpha,\kappa;\psi)
X∼DY(α,κ;ψ),则
f
(
x
)
∝
exp
(
α
x
−
κ
ψ
(
x
)
)
f(x) \propto \exp(\alpha x-\kappa \psi(x))
f(x)∝exp(αx−κψ(x))
在Data Model为二项分布的广义线性模型(主要是Logit模型及其变型)中,
ψ
(
x
)
=
log
(
1
+
e
x
)
\psi(x)=\log(1+e^x)
ψ(x)=log(1+ex)
从下面的定理可以看出这个分布与beta分布的关系,而这种关系经常出现在分层logit模型中,所以这个分布也被称为logit beta分布。
定理 假设
w
∼
Beta
(
α
,
κ
−
α
)
w \sim \text{Beta}(\alpha,\kappa-\alpha)
w∼Beta(α,κ−α),则
X
=
log
w
1
−
w
∼
D
Y
(
α
,
κ
;
ψ
)
X=\log \frac{w}{1-w} \sim DY(\alpha,\kappa;\psi)
X=log1−ww∼DY(α,κ;ψ)
证明 X X X是随机变量 w w w的连续可微且单调递增的变换,其逆变换为 w = e X 1 + e X w=\frac{e^X}{1+e^X} w=1+eXeX
所以
X
X
X的概率密度为
f
(
x
)
=
f
w
(
w
(
x
)
)
w
′
(
x
)
=
Γ
(
κ
)
Γ
(
α
)
Γ
(
κ
−
α
)
(
e
x
1
+
e
x
)
α
−
1
(
1
1
+
e
x
)
κ
−
α
−
1
e
x
(
1
+
e
x
)
2
=
Γ
(
κ
)
Γ
(
α
)
Γ
(
κ
−
α
)
e
α
x
(
1
+
e
x
)
κ
=
Γ
(
κ
)
Γ
(
α
)
Γ
(
κ
−
α
)
exp
(
α
x
−
κ
log
(
1
+
e
x
)
)
Logit Beta分布的直接采样法可能遇到的问题
根据上文的定理,要得到Logit Beta分布的随机样本,只需要生成一个beta分布的样本
w
∼
beta
(
α
,
κ
−
α
)
w\sim \text{beta}(\alpha,\kappa-\alpha)
w∼beta(α,κ−α),然后根据变换
x
=
log
w
1
−
w
x=\log \frac{w}{1-w}
x=log1−ww就可以得到logit beta分布的样本。但beta分布与这个变换的特征综合起来就会带来一些问题。
考虑
beta
(
α
,
κ
−
α
)
\text{beta}(\alpha,\kappa-\alpha)
beta(α,κ−α),它的核为
g
(
x
)
=
x
α
−
1
(
1
−
x
)
κ
−
α
−
1
,
x
∈
(
0
,
1
)
g(x)=x^{\alpha-1}(1-x)^{\kappa-\alpha-1},x \in (0,1)
g(x)=xα−1(1−x)κ−α−1,x∈(0,1)
如果 α < 1 \alpha<1 α<1,则当 x → 0 x \to 0 x→0时, g ( x ) → + ∞ g(x) \to +\infty g(x)→+∞;如果 κ − α < 1 \kappa-\alpha<1 κ−α<1,则当 x → 1 x \to 1 x→1时, g ( x ) → + ∞ g(x) \to +\infty g(x)→+∞;也就是说如果 α < 1 \alpha<1 α<1或者 κ − α < 1 \kappa-\alpha<1 κ−α<1,beta分布的密度都会集中到 0 0 0或者 1 1 1附近。
而关于变换 h ( x ) = log x 1 − x , x ∈ ( 0 , 1 ) h(x)=\log \frac{x}{1-x},x \in (0,1) h(x)=log1−xx,x∈(0,1)
它是一个单调递增的函数,当 x → 0 x \to 0 x→0时, h ( x ) → − ∞ h(x) \to -\infty h(x)→−∞;当 x → 1 x \to 1 x→1时, h ( x ) → + ∞ h(x) \to +\infty h(x)→+∞;综合变换与beta分布的特征,如果 α , κ − α \alpha,\kappa-\alpha α,κ−α均小于1,直接采样法就会得到很多绝对值非常大的logit beta样本,所以用直接采样法作为算法的中间步骤极大概率导致算法无法收敛。
对直接采样法的改进
根据上文的分析,我们不希望beta分布的样本太靠近0和1,所以引入一个threshold
δ
\delta
δ,记生成的beta随机样本为
w
w
w,按下面的思路处理:
根据这个替代方法可以写出logit beta的采样代码(Jonathan Bradley 2018)
#' Simulate logitBeta
#'
#' This code simulates logit beta random variables
#' @param alpha A n-dimensional vector of shape parameters
#' @param kappa A second n-dimensional vector of shape parameters. kappa must be greater than alpha.
#' @return W An n-dimensional vector of simulated values
#' @export
logitbetasim<-function(alpha,kappa){
temp1=rbeta(length(alpha),alpha,kappa-alpha)
indics = temp1<=1e-12
indics2 = (1-temp1)<=1e-12
W = log(temp1/(1-temp1))
bet2 = kappa-alpha
#small shape and scale stuff
if (sum(indics)>0){
X1 = -(1/alpha[indics==1])*rgamma(sum(indics),matrix(1,sum(indics),1),matrix(1,sum(indics),1))
Y1 = rgamma(sum(indics),bet2[indics==1],matrix(1,sum(indics),1))
W[indics==1] = X1 - log(exp(X1)+Y1);
}
if (sum(indics2)>0){
X1 = -(1/bet2[indics2==1])*rgamma(sum(indics2),matrix(1,sum(indics2),1),matrix(1,sum(indics2),1))
Y1 = rgamma(sum(indics2),alpha[indics2==1],matrix(1,sum(indics2),1))
W[indics2==1] = -X1 + log(exp(X1)+Y1);
}
return(W)
}