我知道如何在python中进行标准二项分布,其中每个试验的概率是相同的。我的问题是,如果试验概率每次都发生变化该怎么办。我正在根据下面的论文起草一个算法但我认为我应该在这里查看是否已经有一个标准的方法来做到这一点。
http://www.tandfonline.com/doi/abs/10.1080/00949658208810534#.UeVnWT6gk6w
提前致谢,
詹姆斯
答案 0 :(得分: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).
答案 1 :(得分:0)
假设您想要进行9次硬币投掷,并且每次翻转时的P(H)分别为0.1 .. 0.9。 !第一次翻转时有0%的几率,最后一次是90%。
对于E(H),预期的头数,你可以将9个人的预期加起来。
对于分发,您可以枚举有序的可能结果(itertools.combinations_with_replacement([“H”,“T”],9))
(HHH HHH HHH) (HHH HHH HHT) ... (TTT TTT TTT)
以直接的方式计算有序结果的概率。
对于每个有序结果,增加一个defaultdict(float),用计算出的p的头数索引。
完成后,计算字典值的总和,然后将字典中的每个值除以该总和。
您将拥有10个值,这些值对应于观察0 ... 9头的机会。
格里
答案 2 :(得分:0)
嗯,这个问题已经过时了,我无法回答它,因为我不太了解数学库中的pythons。
然而,对于其他读者而言,了解此分发通常以名称
运行可能会有所帮助