【问题标题】:Stats: Probability of Sequence given Binomial distribution?统计:给定二项分布的序列概率?
【发布时间】:2017-11-26 03:24:04
【问题描述】:

我试图在 numpy 中找到一个函数,它给出了在给定初始二项式概率分布的情况下观察序列的概率。

例如,如果序列是 [H, T, H, T, H, T, H, T] 并且 H 都有 0.5 的概率,是否有一个函数可以给出观察到这些 H 计数的低概率和 T(顺序无关紧要)?

我试图按照 numpy 文档中的示例进行操作,但我下面的代码给出的概率非常低(5.8%),而它应该接近 50%: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.binomial.html#numpy.random.binomial

import numpy as np

p_H = 0.5
p_T = 1 - p_H

seq = ['H', 'T', 'H', 'T', 'H', 'T', 'H', 'T']

num_H = seq.count('H')

p_obs = sum(np.random.binomial(num_H, p_H, 1000)==num_H)/1000

print('Probability of observing', num_H, 'H:',p_obs)

我想我遗漏了一些明显的东西,但我似乎无法弄清楚。谢谢!

【问题讨论】:

  • 句子“...和 ​​H 都有 0.5 的概率,是否有函数可以降低观察的概率...”? “低概率”是什么意思?问题不清楚。

标签: python numpy statistics


【解决方案1】:

您想要计算给定 n 次独立成功概率 p 的试验的 k 次成功观察值的概率:

   choose(n, k) * p**k * (1-p)**(n-k)

这是二项分布的概率质量函数。它也可以通过

   binom.pmf(k)

【讨论】:

  • 完美。谢谢!
【解决方案2】:

您得到的答案是连续获得 4 个的机会 - 或大约 6%(4 个在 1000 个样本中抽取 4 个,p = 0.5)

你想要的是:p_obs = sum(np.random.binomial(len(seq), p_H, 1000)==num_H)/1000

【讨论】:

  • 啊,我明白了 - 好的,这是对另一个问题的答案。谢谢。
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2011-09-30
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多