Language agnostic 从逻辑分布生成样本

Language agnostic 从逻辑分布生成样本,language-agnostic,statistics,random,random-sample,Language Agnostic,Statistics,Random,Random Sample,我正在研究一些统计代码,并探索从随机分布创建样本的不同方法——从生成从0到1的统一浮点值的随机数生成器开始 我知道,通过将足够多的独立、相同分布的均匀随机变量(通过)相加,可以从a生成近似样本 是否可以执行类似的操作,从中创建样本?我假设要添加的样本需要以某种方式进行加权或关联,以避免以正常值结束 另外,我也知道可能有更有效的方法来生成随机样本,我之所以提出这个问题,是因为我更感兴趣的是了解这种生成器的工作原理,而不是效率……对于大多数感兴趣的分布,有一种非常常见的方法来创建随机数,那就是反向c

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

我知道,通过将足够多的独立、相同分布的均匀随机变量(通过)相加,可以从a生成近似样本

是否可以执行类似的操作,从中创建样本?我假设要添加的样本需要以某种方式进行加权或关联,以避免以正常值结束


另外,我也知道可能有更有效的方法来生成随机样本,我之所以提出这个问题,是因为我更感兴趣的是了解这种生成器的工作原理,而不是效率……

对于大多数感兴趣的分布,有一种非常常见的方法来创建随机数,那就是反向cdf方法

首先,为所讨论的分布生成一个逆函数——因为cdf是一个函数,它获取分布域中的值并将它们映射到[0,1],所以逆cdf是一个函数,它获取[0,1]中的值并将它们映射到分布域中的值,具有适当的概率。许多常见的分布都有解析推导的逆cdf,但如果分布是不可解的或近似的,则可以创建近似的数值逆cdf

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


可以找到逻辑分布的反向cdf。

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

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)

logistic分布是两个Gumbel分布的差,其变量是指数变量的负对数或等价的
log(u/(1.0-u))
其中
u
是一个均匀变量。

谢谢这是一个很好的答案。你不知道有没有不使用c.d.f.而通过将不同的统一值相加得到逻辑分布的方法?对不起,我不知道其他方法。这在数值上不精确。在进行逆变换采样时,通常必须使用数值优化来校正值。在这种情况下,算法将非常低效。