对数柯西随机数生成

机器算法验证 分布 模拟 随机生成 转换 分位数
2022-03-13 04:20:22

我需要从具有密度的对数柯西分布中抽取随机数:

f(x;μ,σ)=1xπσ[1+(ln(x)μσ)2]x>0.
任何人都可以帮助我或将我指向一本可以告诉我如何做的书/论文吗?

1个回答

一个变量X具有对数柯西分布,如果log(X)具有柯西分布。因此,我们只需要生成柯西随机变量并将它们取幂以获得对数柯西分布的东西。

我们可以使用逆变换采样从柯西分布生成,这表示如果您将随机制服插入分布的逆 CDF,那么您得到的就是该分布。带位置的柯西分布μ和规模σ 有 CDF:

F(x)=1πarctan(xμσ)+12

反转这个函数很容易找到

F1(y)=μ+σtan[π(y12)]

因此,如果UUniform(0,1)然后Y=μ+σtan[π(U12)]具有带位置的柯西分布μ和规模σexp(Y)具有对数柯西分布。R从此发行版生成的一些代码(不使用rcauchy:))

rlogcauchy <- function(n, mu, sigma)
{
    u = runif(n)
    x = mu + sigma*tan(pi*(u-.5))
    return( exp(x) ) 
}

注意:由于柯西分布的尾很长,当您在计算机上对它们求幂时,您可能会得到数值上“无限”的值。我不确定有什么可做的。

另请注意,如果您要直接使用 log-cauchy 分位数函数进行逆变换采样,您将遇到同样的问题,因为在进行计算之后,您实际上会得到相同的结果 -经验(μ+σ棕褐色[π(ü-12)])