2015-11-05 33 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]