从逻辑分布生成样本

时间:2010-10-18 00:04:29

标签: language-agnostic statistics random random-sample

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

我知道通过将足够多的独立,相同分布的均匀随机变量(normal distribution)加在一起,可以从central limit theorem生成近似样本。

是否有可能做类似的事情来创建logistic distribution的样本?我假设要添加的样本需要加权或以某种方式相关,以避免以正常结束。

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

3 个答案:

答案 0 :(得分:10)

后勤分配的反转并不难找到,因此您可以使用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之间的Uniform变量。

这是一些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)

答案 1 :(得分:6)

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

首先,为所讨论的分布生成逆Cumulative distribution function - 因为cdf是一个在分布域中取值并将它们映射到[0,1]的函数,因此逆cdf是一个函数获取[0,1]中的值并将它们映射到分布域中的值,并具有适当的概率。很多常见的发行版都有分析得出的逆cdfs,但是如果你的发行版是不可比的或近似的,你可以创建一个近似的数字逆cdf。

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

可以找到逻辑分布的逆cdf here

答案 2 :(得分:1)

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