4

我正在研究一些统计代码并探索从随机分布创建样本的不同方法 - 从生成从 0 到 1 的统一浮点值的随机数生成器开始

我知道可以通过将足够多的独立、相同分布的均匀随机变量(通过中心极限定理)相加来​​从正态分布中生成近似样本。

是否可以做类似的事情来从逻辑分布中创建样本?我假设要添加的样本需要以某种方式加权或相关,以避免以正常结果结束。

PS我也知道可能有更有效的方法来生成随机样本,我问这个问题是因为我更感兴趣的是了解这样的生成器将如何工作而不是效率......

4

3 回答 3

11

不难找到逻辑分布的逆,因此您可以使用Inverse transform sampling。基本算法是:

for each random variate x ~ logistic
  generate a random variate y ~ Uniform(0, 1)
  x := F^-1 (y)

其中 F^-1 是逻辑分布或所需分布的逆 CDF。大多数编程语言将允许您通过某种 rand 函数生成介于 0 和 1 之间的统一变量。

这是一些 python 代码,它从逻辑分布中生成 1000 个随机变量:

from random import random
import math
import pylab

loc, scale = 0, 1

randvars = []
for i in range(1000):
    x = random()
    y = loc + scale * math.log(x / (1-x))
    randvars.append(y)

pylab.hist(randvars)
于 2010-10-18T00:17:36.737 回答
6

有一种非常常见的方法可以为大多数感兴趣的分布创建随机数,即逆 cdf 方法。

首先,为所讨论的分布生成一个逆累积分布函数——因为 cdf 是一个函数,它采用分布域中的值并将它们映射到 [0,1] 上,因此逆 cdf 是一个采用 [0 中的值的函数,1] 并以适当的概率将它们映射到分布域中的值。许多常见的分布都有解析得出的逆 cdf,但如果您的分布难以处理或近似,您可以创建一个近似的数值逆 cdf。

其次,采用任何生成均匀分布在 [0,1] 上的数字的好的随机数生成器,并通过逆 cdf 运行其输出。现在输出遵循您开始的分布。

可以在此处找到逻辑分布的逆 cdf 。

于 2010-10-18T00:16:53.040 回答
2

逻辑分布是两个 Gumbel 分布的差异,其变量是指数变量的负对数,或者等效地log(u/(1.0 - u)),其中u是均匀变量。

于 2017-08-02T13:03:47.843 回答