2015-11-05 78 views
0

假设我有一些分布由如下的概率定义[0.1, 0.6, 0.2, 0.1]。概率之和等于1.我想知道如何抽样这个分布,这样抽样将遵循分布。抽样分布

回答

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

+0

你可以提供直觉或给出一些参考为什么这是正确的方式吗? – com

1

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

  1. u01
  2. 之间的随机数让i这样p[i] <= u <= p[i+1]
  3. 返回(x[i+1] - x[i])/(p[i+1] - p[i]) * (u - p[i]) + x[i]

请注意,在2有可能是没有这样的i因为原因有两个:(a)u < p[1]或(b)p[n] < u(我假设基于1的阵列)。如果(a)在(b)x[n]的情况下返回x[1]