从逻辑分布生成样本

mik*_*era 3 language-agnostic random statistics random-sample

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

我知道通过将足够大量的独立的,相同分布的均匀随机变量(通过中心极限定理)加在一起,可以从正态分布生成近似样本.

是否有可能做类似的事情从物流分配中创建样本?我假设要添加的样本需要以某种方式加权或相关,以避免以正常结束.

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

ars*_*ars 10

逻辑分布的倒数不难找到,因此您可以使用逆变换采样.基本算法是:

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

其中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)
Run Code Online (Sandbox Code Playgroud)


hob*_*bbs 6

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

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

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

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