我知道如何在 python 中进行标准二项式分布,其中每次试验的概率都是相同的。我的问题是如果试验概率每次都发生变化该怎么办。我正在根据下面的论文起草一个算法,但我认为我应该在这里检查一下是否已经有标准的方法来做到这一点。
http://www.tandfonline.com/doi/abs/10.1080/00949658208810534#.UeVnWT6gk6w
提前致谢,
詹姆士
我知道如何在 python 中进行标准二项式分布,其中每次试验的概率都是相同的。我的问题是如果试验概率每次都发生变化该怎么办。我正在根据下面的论文起草一个算法,但我认为我应该在这里检查一下是否已经有标准的方法来做到这一点。
http://www.tandfonline.com/doi/abs/10.1080/00949658208810534#.UeVnWT6gk6w
提前致谢,
詹姆士
这是你要找的吗?
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).
假设您要进行 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),该默认dict(float) 由计算出的 p 的正面数量索引。
完成后,计算字典值的总和,然后将字典中的每个值除以该总和。
您将有 10 个值对应于观察到 0 .. 9 个正面的机会。
格里
好吧,这个问题很老,我无法回答,因为我不太了解 python 数学库。
但是,知道此发行版通常以该名称运行可能会对其他读者有所帮助