二項式分布Binomial Distribution
引言
因為我在一個課題中,需要統計一個基因出現的頻率數,是否有顯著性。原看文獻說是應用超幾何分布檢驗,后來經過調研,參考這篇Without Replacement; Hypergeometric / With replacement: Binomial 。
最后我認為是不放回抽樣的模型,所以應該使用二項式分布模型,所以這里總結一下二項式分布概率計算和R語言實現的知識。
二項分布是離散的概率分布。它描述了一個實驗中n個獨立試驗的結果。每個試驗都假定只有兩種結果,要么成功,要么失敗。如果一次試驗成功的概率是p,那么事件X,即在n次獨立試驗中k次試驗成功的概率為:
公式個人理解:因為是放回抽樣的模型,每次抽樣是相互獨立的,所以事件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