我正在研究一些统计代码并探索从随机分布创建样本的不同方法 - 从随机数生成器开始,生成从0到1的统一浮点值
我知道通过将足够多的独立,相同分布的均匀随机变量(normal distribution)加在一起,可以从central limit theorem生成近似样本。
是否有可能做类似的事情来创建logistic distribution的样本?我假设要添加的样本需要加权或以某种方式相关,以避免以正常结束。
P.S。我也知道可能有更有效的方法来生成随机样本,我问这个问题,因为我更了解这样的发生器是如何工作而不是效率....
答案 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
是一个统一的变量。