【问题标题】:Generating samples from the logistic distribution从逻辑分布生成样本
【发布时间】:2011-04-26 17:36:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: language-agnostic statistics random random-sample


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      逻辑分布的倒数不难找到,所以你可以使用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)
      

      【讨论】:

      • 感谢这是一个很好的答案。您不知道是否有一种方法可以不使用使用 c.d.f. 而是通过将不同的统一值相加来获得逻辑分布?
      • 对不起,我不知道其他方法。
      • 这不是数字精确的。在进行逆变换采样时,您通常必须使用数值优化来校正值。在这种情况下,算法将非常低​​效。
      【解决方案3】:

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

      首先,为有问题的分布生成一个逆 Cumulative distribution function —— 因为 cdf 是一个函数,它在分布的域中获取值并将它们映射到 [0,1],所以逆 cdf 是一个获取值的函数在 [0,1] 中,并以适当的概率将它们映射到分布域中的值。很多常见分布都有解析得出的逆 cdf,但如果您的分布难以处理或近似,您可以创建一个近似数值逆 cdf。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        相关资源
        最近更新 更多