采样分配

时间:2015-11-05 09:59:16

标签: node.js math probability

假设我有一些由下列[0.1, 0.6, 0.2, 0.1]概率定义的分布。概率之和等于1.我想知道如何对此分布进行采样,以便采样将遵循分布。

2 个答案:

答案 0 :(得分:1)

假设Node.JS的PRNG遵循统一分布,可以使用这个简单的解决方案:

var v = Math.random(); // return a number between 0 and 1

if(v < 0.1)
    // first value
else if(v < 0.7) // (0.1 + 0.6)
    // second value
else if(v < 0.9) // (0.1 + 0.6 + 0.2)
    // third value
else
    // forth value

此问题已经在这里得到解答(建议的解决方案更为通用,因为他们提出了一个可以接受一系列概率的函数): distributional sampling in Node.js

答案 1 :(得分:1)

这取决于您的分布是离散的还是连续的。对于连续情况,您必须在两个值之间线性插值。这是伪代码

  1. u01
  2. 之间的随机数
  3. i p[i] <= u <= p[i+1]
  4. 返回(x[i+1] - x[i]) / (p[i+1] - p[i]) * (u - p[i]) + x[i]
  5. 请注意,在2中可能没有此类i,原因有两个:(a)u < p[1]或(b)p[n] < u(我假设1 - 基于数组)。如果(a)在案例(b)x[1]中返回x[n]