2013-07-17 7 views
0

Я знаю, как выполнить стандартное биномиальное распределение в python, где вероятности каждого испытания одинаковы. Мой вопрос заключается в том, что делать, если суточные вероятности меняются каждый раз. Я разрабатываю алгоритм, основанный на приведенной ниже статье, но думал, что я должен проверить здесь, есть ли стандартный способ сделать это.Как сделать биномиальное распределение в python, где вероятностные вероятности не равны

http://www.tandfonline.com/doi/abs/10.1080/00949658208810534#.UeVnWT6gk6w

Спасибо заранее,

Джеймс

+0

Вы знаете, пробные probabilites заранее? –

+0

Yup. И я также знаю результат. – user2590701

+0

Вы хотите, чтобы вы рисовали образцы из биномиального распределения на основе, скажем, Trial (1) -> P (Heads) = 0.7 и P (Tails) = 0.3, а P (H) и P (T) изменялись для каждый процесс? – Rhubarb

ответ

0

Это вроде того, что вы ищете?

import numpy as np 

def random_MN_draw(n, probs): # n=2 since binomial 
    """ get X random draws from the multinomial distribution whose probability is given by 'probs' """ 
    mn_draw = np.random.multinomial(n,probs) # do 1 multinomial experiment with the given probs with probs= [0.5,0.5], this is a fair coin-flip 
    return mn_draw 

def simulate(sim_probabilities): 
    len_sim = len(sim_probabilities) 
    simulated_flips = np.zeros(2,len_sim) 
    for i in range(0,len_sim) 
     simulated_flips(:,i) = random_MN_draw(2, sim_probabilities(i)) 

    # Here, at the end of the simulation, you can count the number of heads 
    # in 'simulated_flips' to get your MLE's on P(H) and P(T). 
0

Предположим, вы хотите сделать 9 монетных бросков, а P (H) на каждом переводе - 0,1 .. 0,9, соответственно. ! 0% шанс головы на первый флип, 90% на последний.

Для ожидаемого количества головок E (H) вы можете просто суммировать 9 индивидуальных ожиданий.

Для распределения, вы могли перечислить заказанные возможные результаты (itertools.combinations_with_replacement ([ "Н", "Т"], 9))

(HHH HHH HHH) (HHH HHH ННТ) ... (TTT TTT TTT)

и рассчитывать вероятность для упорядоченного результата простым способом.

для каждого упорядоченного результата, приращение defaultdict (float), индексированное по числу головок с вычисленным p.

Когда закончите, вычислите сумму значений словаря, затем разделите каждое значение в словаре на эту сумму.

У вас будет 10 значений, которые соответствуют шансам наблюдения 0 .. 9 голов.

Gerry

0

Ну, вопрос стар, и я не могу ответить, так как я не знаю, питоны математических библиотек достаточно хорошо.

Howewer, это может быть полезным для других читателей, чтобы узнать, что такое распределение часто проходит под названием

  • Пуассон биномиального распределения