混合分布的CDF逆采样


9

上下文外的简短版本

令为CDF y

F(){θ y = 0 θ+(1θ)×CDFlog-normal(;μ,σ) y > 0

假设我想使用反CDF方法模拟绘制。那可能吗?此函数不完全具有逆函数。然后再次有两个正态分布的混合分布逆变换采样,这表明这里有一种已知的方法可以应用逆变换采样。y

我知道两步法,但是我不知道如何将其应用于我的情况(请参见下文)。


带背景的长版

我使用MCMC(特别是Stan)为向量值响应拟合了以下模型:yi=(y1,,yK)i

θkilogit1(αkxi),μkiβkxiσk22F(){θ y = 0 θ+(1θ)×CDFlog-normal(;μ,σ) y > 0ukF(yk),zkΦ1(uk)zN(0,R)×kf(yk)(α,β,σ,R)priors

其中索引观测值,是相关矩阵,是预测变量/回归变量/特征的向量。iNRx

也就是说,我的模型是一个回归模型,其中响应的条件分布假定为具有零膨胀对数正态边际的高斯copula。我之前已经发布过有关该模型的文章;事实证明,Song,Li和Yuan(2009,gated)开发了它,并将其称为向量GLM或VGLM。以下是他们尽可能接近逐字记录的说明: 我的

f(y;μ,φ,Γ)=c{G1(y1),,Gm(ym)|Γ}i=1mg(yi;μi,φi)c(u|Γ)=|Γ|1/2exp(12qT(ImΓ1)q)q=(q1,,qm)T,qi=Φ1(ui)
FK对应于他们的,我的对应于他们的,我的对应于他们的;详细信息在第62页(PDF文件的第3页),但与我在此处写的内容完全相同。GmzqRΓ

零膨胀部分大致遵循Liu和Chan(2010,unated)的规范。

现在,我想从估计的参数中模拟数据,但是我对如何处理它有些困惑。首先,我以为我可以直接在模拟:y

for (i in 1:N) {
    for (k in 1:K) {
        Y_hat <- rbinom(1, 1, 1 - theta[i, k])
        if (Y_hat == 1)
            Y_hat <- rlnorm(1, mu[i, k], sigma[k])
    }
}

不使用可言。我想尝试实际使用我估计的相关矩阵。R

我的下一个想法是抽取,然后将其转换回。这似乎也与在Sklar的copula定理中表达的R中的Copula样本用于分布的双变量样本中的答案相吻合。但是我的在这里到底是什么?用于两个正态分布的混合分布的逆变换采样听起来似乎可行,但是我不知道该怎么做。zyF1


@西安,它是一个高斯系,用于估计分量之间的依赖性。y
shadowtalker 2014年

1
您引用的有关从法线混合中采样的线程直接适用于您的问题,而无需进行必要的修改:不要使用法线的逆CDF,而要使用两个分量的逆CDF。处原子的逆CDF 是常数函数,始终等于。y=00
ub

@whuber我只是对如何使用两个组件的逆CDF 感到困惑:我要画什么,我要从中画什么,然后将每件事插入其中?
shadowtalker 2014年

1
@西安很好地解释了他对正态混合问题的回答:您使用统一变量选择混合成分,然后从该成分中绘制一个值(以您喜欢的任何方式)。在您的情况下,从第一个组件中提取值非常容易:它总是0!要从第二个组件中提取值,请使用您喜欢的任何对数正态随机数生成器。在每种情况下,您都有很多数字:没有“插入”可以完成;随机数生成的全部目标是获得该数字。
ub

@whuber新答案为我清除了它。谢谢你俩。
shadowtalker 2014年

Answers:


5

有背景的长版本的答案:

长版的答案在某种程度上解决了另一个问题,由于我们似乎在制定模型和问题时遇到困难,因此我希望在这里重新表述,希望正确。

对于 1iI,目标是模拟向量 yi=(y1i,,yKi) 这样,以协变量为条件 xi

yki={0 with probability logit1(αkxi)log(σkzki+βkxi) with probability 1logit1(αkxi)
zi=(z1i,,zKi)NK(0,R)。因此,如果要模拟来自该模型的数据,则可以按以下步骤进行:

对于 1iI

  1. 生成 zi=(z1i,,zKi)NK(0,R)
  2. 生成 u1i,,uKiiidU(0,1)
  3. 派生 yki=I{uki>logit1(αkxi)}log{σkzki+βkxi} 对于 1kK

如果一个人对后代的产生感兴趣 (α,β,μ,σ,R) 鉴于 yki,这是一个难题,尽管可以通过Gibbs采样或ABC来解决。


1
我知道我缺少什么。“事后看来,一切都是显而易见的。” 我的意图:我对...的价值感兴趣F(yi|xi),所以是的,我有兴趣从参数的联合后验中进行绘制。我要模拟y查看模型是否适合。
shadowtalker 2014年

1
第二个问题如何困难得多?我已经估算了模型,并且有后验图。如果您愿意,我们可以继续进行聊天,以免使此处的评论混乱不堪。
shadowtalker 2014年

1
哦,总的来说。幸运的是,我有Stan和No-U-Turn Sampler在这里为我辛苦工作。
shadowtalker 2014年

7

上下文外简短版本的答案:

如大多数蒙特卡洛教科书中所述,“倒置”在数学上不可逆的cdf(如混合分布)是可行的。(就像我们的一样,请参见引理2.4。)如果定义广义逆

F(u)=inf{xR; F(x)u}
然后
XF is equivalent to X=F(U) when UU(0,1).
这意味着,当 F(y) 跳了 θy=0F(u)=0 对于 uθ。换句话说,如果你画制服U(0,1) 最终小于 θ,您这一代 Xx=0。否则,当u>θ,您最终会从连续部分生成,即您的情况下的对数正态。这意味着使用第二个均匀随机生成,v,独立于第一次均匀绘制和设置 y=exp(μ+σΦ1(v)) 获得对数正态生成。

几乎就是您的R代码

Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])

是在做。您产生概率的伯努利θki 如果等于 1,则将其变成对数正态。由于它等于1的概率θki你应该不是把它变成一个数正态模拟,当它等于为零,随之修正R代码结束了:

Y_hat <- rbinom(1, 1, theta[i, k])
    if (Y_hat == 0)
        Y_hat <- rlnorm(1, mu[i, k], sigma[k])

因此,总的来说,我的模拟过程将是:1)绘制 z,2)计算 uk=Φ(zk),然后3)计算 yk=0 如果 ukθyk=Flog-normal1(uk)除此以外。正确?
shadowtalker 2014年

不,不正确。你画第一件制服来决定0和对数正态,如果您决定采用对数正态,则使用第二套制服。查看我的答案的编辑版本。
西安

但这忽略了 z零件; 因此,我的问题。我进行了澄清的编辑,还解决了我的伪代码中的错误。
shadowtalker 2014年

我的答案是简短版本和您提供的R代码。希望对长期版本有所帮助,但您对联合模型的公式仍然不正确。您应该在ÿ不用制服...
西安

这个模型怎么不正确?我刚插上电源F1个Fķ 转化为我引用的论文提供的公式(对应于 G1个G在他们的注释中)。那无效吗?
shadowtalker 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.