二项式分布Binomial Distribution

二项式分布Binomial Distribution

引言

因为我在一个课题中,需要统计一个基因出现的频率数,是否有显著性。原看文献说是应用超几何分布检验,后来经过调研,参考这篇Without Replacement; Hypergeometric / With replacement: Binomial
最后我认为是不放回抽样的模型,所以应该使用二项式分布模型,所以这里总结一下二项式分布概率计算和R语言实现的知识。

二项分布是离散的概率分布。它描述了一个实验中n个独立试验的结果。每个试验都假定只有两种结果,要么成功,要么失败。如果一次试验成功的概率是p,那么事件X,即在n次独立试验中k次试验成功的概率为:

Binomial probability model

公式个人理解:因为是放回抽样的模型,每次抽样是相互独立的,所以事件X,可以理解为等价于,一个子事件(该子事件的发生概率是p^k * q ^(n-k)),然后乘以排列组合的项。

Problem

假设在英语课堂测验中有10道单项选择题。每个问题有4个选项,其中只有1个是正确的。如果学生准备随机回答每一个问题,请问回答正确的不少于6道题目的概率。这个例子可以通俗理解为,一次考试试卷一共10道选择题,答对6道算是及格,问他全蒙的话,能及格的概率。

Solution

因为4个可能的答案中只有1个是正确的,所以随机回答一个问题的正确概率是1/4=0.25。我们可以通过下面的办法,找出恰好答对6道的概率。

> options(digits = 3)
> dbinom(x = 6, size = 10, prob = 0.25)
[1] 0.0162

因为事件X是答对不少于6道题,所以接下来可以有两种解决问题的思路:一是分别计算答对7,8,9,10道的概率并求和;二是分别计算答对0-5道题的概率,用1减求和。

两种思路都可以,下面我用第二种思路计算,答对0, 1, 2, 3,4,5 道题的概率并求和:

> sum(unlist(lapply(0:5, function(x){dbinom(x, size = 10, prob = 0.25)})))
[1] 0.98

上面使用了R语言dbinom函数,我们也可以根据公式自行计算刚好答对6道题的概率,如下:

> pvalue <- factorial(10)/ factorial(4)/factorial(6) * 0.25^6 * 0.75^4
> print(pvalue)
[1] 0.0162
# 可以看到计算结果和R语言stats包中的dbinom函数的计算结果一致。

# 计算答对题目道数,从0到5道题的概率之和
> sum(unlist(lapply(0:5, function(x){factorial(10)/ factorial(x)/factorial(10-x)*0.25^x * 0.75^(10-x)})))
[1] 0.98

所以,根据结果得出结论,该同学全蒙的情况下,98%的概率他答对题目数不到6道,也就是说,全蒙的话,98%的概率会挂科

另外,可以发现上述逐个计算概率再求和比较麻烦,R语言提供了pbinom() 函数,直接计算答对不超过5道的概率,计算结果也是一致的,如下:

> pbinom(5, size = 10, prob = 0.25)
[1] 0.98

参考

原文地址:https://www.cnblogs.com/songbiao/p/12711359.html