BioModel | 对二项分布与泊松分布的理解

二项分布是一种包含两个参数的离散分布。可以用如下案例引入:单位时间发生的次数为随机变量 $X$ ,平均次数为 $\lambda$,设所观察的这段时间为 $[0,1)$ ,取一个很大的自然数 $N$ ,把时间段 $[0,1)$ 分为等长的 $n$ 段:

$$[0, \frac1N], [\frac1N, \frac2N] … [\frac{N-1}N, 1]$$

我们做如下两个假定:

  • 在每段时间内, 恰发生事件的概率,近似的与这段时间的长 $\frac1N$ 成正比,可设为 $\frac\lambda N$ ,也可以标记为 $p$

    • 当 $N$ 很大时, $\frac1N$ 就很小,即在这么短暂的一段时间内,要发生两次或者更多次事故是不可能的

    • 因此在特定的一段时间内不发生该事件的概率为 $1-\frac{\lambda}N$

  • 各段是否发生该事件是相互独立的,把在 $[0,1)$ 时段内发生事件的次数 $X$ ,在一定程度上可以等同为 $n$ 个划分的小时段内有事故的时段数

按照上述两个假定, $X$ 应服从二项分布 $B(n, \frac{\lambda}N)$ ,事件 $X$ 发生 $n$ 次的概率可计算为:

$$P(X=n)=\left(\begin{array}{l}N \ n\end{array}\right)\left(\frac{\lambda}{N}\right)^{n}\left(1-\frac{\lambda}{N}\right)^{N-n} = \frac{N!}{n!(N-n)!}p^n \cdot (1-p)^{N-n}$$

本质上是多次伯努利试验的总和(即每次实验会有两种结果), 随机变量是实验成功的次数

  • 若记结果A的概率为 $p$ ,结果B为 $p’$ ,实验 $N$ 次,则会有 $(p+p’)^M=1$

  • 这个式子是一个二项式,将其展开,就可以对应不同的结果

  • 如果要计算发生 $n$ 次结果A,则其概率为:

    $$P_{binom}(n; p, N) = \frac{N!}{n!(N-n)!}p^n \cdot p’^{N-n}$$

  • 二项分布的期望是 $np$ ,方差是 $np(1-p)$

二项分布主要用于不放回抽取问题中,通常用于如下问题场景:

  • 抛硬币M次,正面朝上的次数为l(抛硬币M次之间相互独立且随机,每次抛硬币可视为伯努利事件)

  • 10mL液体中有4个荧光分子,随机吸取1mL液体,能得到多少个荧光分子。针对该问题,在抽取样本前,4个荧光分子独立且随机;而在取样的一瞬间,荧光分子被分为了两类:被取样或未被取样,而单个荧光分子被取样的概率为:

    $$p=\frac{取样体积}{总体积}=0.1$$

    因而可以将该问题视为二项分布进行估计

  • 应用:如何计算细胞中的荧光分子数?荧光强度在一定程度上是可以反应分子数量的,但是仅仅是成正比的关系,而并不是准确的定量关系,可以使用分配方差来衡量分子数与荧光强度间的比例系数(生物建模书74页)

在一定的方法下,是可以把二项分布扩展到多个结果的高维空间中(而不仅仅是两种结果),这个分布叫做伯努利分布(multinoulli)

获取二项分布的随机变量

x = np.random.binomial(n=10, p=.25, size=100)
# p是伯努利事件成功的概率,n是实验的次数,size是抽样多少次,可以需求数据的shape
# 返回值是随机变量(事件成功的次数)

sns.distplot(x)

计算二项分布相关的概率值,scipy提供了两个函数来进行计算,一个是pmf概率分布函数f(x),另一个是cdf累计概率值F(x),可以使用这两个函数灵活地去计算各种各样的概率值

scipy.stats.binom.pmf(k=10, n=12, p=0.6)
# n是实验次数,p是实验成功概率,k是成功的次数
# 这个代码计算值可以理解为:投篮成功概率为0.6, 投球12次,有10次成功的概率

scipy.stats.binom.cdf(k=10, n=12, p=0.6)
# 这个代码计算的值可以理解为:投篮成功概率为0.6,投球12次,成功次数不超过10次的概率

假设已知事件在单位时间 (或者单位面积) 内发生的平均次数为 $p$ ,则泊松分布描述了:事件在单位时间 (或者单位面积) 内发生的具体次数为 $n$ 的概率(参考一份不错的资料

🚩泊松分布可以理解为二项分布的极限:即当事件的次数、分子个数、时间的分段很大( $N\rightarrow \infty$ ),且单次时间发生的概率很小时,可以得到如下的近似

$$\begin{split} P(X=n) &= \frac{N!}{n!(N-n)!} \times p^n \cdot (1-p)^{N-n} \\[2ex] &= \frac{N(N-1)…(N-n+1)}{n!} \times (\frac{\lambda}N)^n(1-\frac{\lambda}N)^{N-n} \\[2ex] &= \frac{N(N-1)…(N-n+1)}{N^n} \lambda^n \frac{1}{n!} (1-\frac{\lambda}N)^{N-n} \\[2ex] &= 1(1-\frac1N)(1-\frac2N)…(1-\frac{n-1}N) \lambda^n \frac{1}{n!} \frac{(1-\frac{\lambda}N)^N}{(1-\frac{\lambda}N)^n} \\[2ex] \end{split} $$

此时, $N$ 很大,而 $n$ 相对小,故:

$$ \lim_{N \rightarrow \infty}1(1-\frac1N)(1-\frac2N)…(1-\frac{n-1}N)=1$$

$$\lim_{N \rightarrow \infty}(1-\frac{\lambda}N)^n = 1^n = 1$$

而分子,则是满足复利极限

$$\lim_{N \rightarrow \infty} (1-\frac{\lambda}N)^N=(1+\frac{-\lambda}N)^N = e^{-\lambda}$$

因而,可以把

$$P(X=n)= \textcolor{red} {1(1-\frac1N)(1-\frac2N)…(1-\frac{n-1}N)} \lambda^n \frac{1}{n!} \frac { \textcolor{blue}{(1-\frac{\lambda}N)^N } } {\textcolor{green}{(1-\frac{\lambda}N)^n} } =\textcolor{red}1 \frac{\lambda^n}{n!} \frac{\textcolor{blue}{e^{-\lambda}}}{\textcolor{green}1} $$

即是说,泊松分布是二项分布低概率实验次数趋向于无穷时所表现的结果,是包含一个参数的离散分布,或者说,低概率的伯努利试验之和服从泊松分布

在1L水中加入500万个荧光分子,然后提取1立方毫米,可以提取多少个荧光分子?在1立方米水中加入5亿个荧光分子,提取1立方毫米,可以提取多少个荧光分子?

针对这两个问题,可以使用二项分布的期望值来回答这个问题

$$ \lambda=(5\times10^6)\cdot \frac{1mm^3}{10^6 mm^3}=5 $$

  • 针对这两个问题在分析时,可以合理地认为,这两个分布是大致相同的

  • 也就是说,可以认为存在某一个分布:在荧光分子浓度为5e6个/L的溶液中,任何足够大的不同库会产生相同的分布结果

泊松分布的参数 $\lambda=Np$ ,是二项分布的期望值,可以理解为在当前的抽样方法下事件平均发生的次数,更合理的理解为上面案例中说的抽取样本中荧光分子的个数

  • 泊松分布的方程在对 $N$ 取极限后,得到

$$P_{Pois} (X=n, \lambda) = \frac{\lambda^n e^{-\lambda}}{n!} $$

  • 方差为 $p$ ,期望为 $p$

泊松分布的代码和其他分布类似:

scipy.stats.poisson.cdf(120, 100)
# lambda=120的泊松分布,发生次数小于等于100时的概率

scipy.stats.poisson.rvs(mu=50, size=100, random_state=3)
# mu是分布的参数,size是产生的数量
# random_state相当于是R随机数中的seed,设置后每次产生的随机数一样