使用逆方法模拟联合分布

机器算法验证 模拟 分位数 累积分布函数
2022-03-31 08:03:32

我有以下联合分布:

f(x,y)=3x2yxex3(1+x),x>0, y(0,1).

我想通过逆方法模拟这个分布的样本,但我不知道我的过程是否正确。

我试过的

为了模拟上面的随机变量,我必须计算逆边际 cdfx,y,FX1(x),FY1(x)然后对于U,VU[0,1]我将能够模拟随机变量。但我不知道在这种情况下如何计算边际 cdf。任何提示或建议都非常受欢迎!

1个回答

作为记录,整合出y给出边际密度

fX(x)=01f(x,y)dy=3x2ex3.

通过检查(或通过替换集成x3) 这具有分配功能

FX(x)=1ex3(x0).

有条件的x,的密度y正比于yx,其分布函数为

FYX(yx)=y1+x(0y1).

因此,如果我们绘制一个统一变量U在范围内[0,1], x=FX1(U)将具有相同的分布X;然后如果我们独立绘制另一个统一变量V,求解方程

V=FYX(yx)

为了y会给我们一个认识(x,y)从密度分布f.

一个实际的例子是这个R实现,它从这个分布中提取n iid值:

rjoint <- function(n) {
  x <- (-log(runif(n)))^(1/3)
  y <- runif(n)^(1/(1+x))
  cbind(x, y)
}

(通过申请可以节省一点时间FX11U,它也具有均匀分布。)

返回值是一个n×2数组与x在第一列和y在第二。

绘制一千万个值x <- rjoint(1e7)(在这台机器上需要两秒钟)的结果如下图所示,其中生成的 2D 密度的等高线绘制在彩色等高线图上f(两者都使用相同的等高线间隔,范围从0.2靠近底部2.2在顶部)。

数字

协议看起来不错。


评论

这个问题有两种明显的方法:整合出y或整合出去x. 两者都有效,但后者太讨厌了,我不知道如何手工完成。Wolfram 语言 13 引擎找到了一个表达式:

图 2

但是,它不知道如何简化或反转此功能;-)。