前言1:首先 向肖恩的好讀者,好夥伴們道一聲感謝,感謝一路的陪伴,最近有數位讀者來詢問問題,讓我很開心。在此,也需要向大家道歉,大家在微信公眾號的留言,只有48h內可以回復,而我是個學生,不能保證固定時間查看公眾號。而且微信公眾號沒有提醒,有所怠慢請見諒咯。
前言2:2020是新的一年,然而,這新年伊始充滿了坎坷,充滿了讓大家措手不及的意外,但我相信大家對生活的熱情不減,生活還要繼續,既然如此,何不重整行囊,砥礪前行。(畢竟我已在家葛優多日,是時候學習啦)
那麼進入正題吧!
今天我們講講假設檢驗這個東西,並且會以qPCR數據處理為例子,應用假設檢驗,獲得傳說中小於0.05就很了不起就P值。
文末還有大大的彩蛋哦!!!
假設檢驗假設檢驗這個東西,我們顧名思義,就是檢驗某一個假設,所以,這就很自然地引出兩個重點,欸對,兩個重點就是:
我們可以這麼理解student t檢驗這個東西:
我有兩組數據,A和B。我想知道A組數據和B組數據的均值是不是有顯著性差異。 那麼我們要先有一個假設,然後檢驗這個假設成不成立
一般來說,我們的假設是,A,B兩組沒有差異,然後計算在A,B沒有差異的情況下,出現我們觀察到的數據的概率。如果該概率<0.05,那麼我們就說,這事發生的概率太低了,這個假設不靠譜,我們就否定原有的假設,進而相信A組數據和B組數據在統計上有顯著性差異。
這裡有兩個統計學的術語:
除了T檢驗,還有別的檢驗,不同的檢驗都有對應的假設和檢驗方法,比如F-檢驗,卡方檢驗,秩和檢驗等,適用於不同的情況,有不同的目的,使用前要搞清楚。
Student T Test(T檢驗)最常用的就是T檢驗,我們已經知道了他的整體邏輯了,但是我們還不清楚,他如何計算的,理解了計算過程,可以讓我們更好地理解和解讀p值,不去錯誤地使用p值,不迷信p值。
在理解計算原理之前,我們舉個慄子,思考一下別人的人生:
B站的羅翔有一個CP,叫張三。
張三是個果農, 種了兩種蘋果樹,一種叫A,一種叫B,他想知道哪種蘋果樹結的果子大。他在果子成熟時,分別摘了A蘋果100個,B蘋果100個,發現A蘋果平均300g,B平均305g。他於是下結論:B蘋果樹結的蘋果比A大。於是計劃著減少A的種植數量。這時候,他的腦海中出現了一個聲音 「老張你這不太嚴謹哦」。老張嚇了一跳,"見鬼啦,誰在說話",一個富有磁性的嗓音說:「我是來幫你的,如果想要蘋果長的大,還請老張思考以下問題:」
A蘋果300g,B蘋果305,你覺得B比A大,那麼如果A平均300g,B平均301g呢,如果B蘋果300.5g呢,你還覺得B比A大呢?
會不會出現以下情況,你兩次都從同一棵A蘋果樹摘蘋果,有沒有可能,第一次300g,第二次305。就算同一棵樹你兩次摘蘋果,結果都可能不一樣的,兩次摘蘋果,平均值差0.5g,差5g,差10g都是完全可能發生的,那平均值差多大才算大呢
最後,請思考以下兩個場景,
你覺得哪一種場景下,B蘋果樹的蘋果重於A的概率更大。
你從AB兩種樹,分別摘10個蘋果,B重量平均比A大5g你從AB兩種樹,分別摘100個蘋果,B重量平均比A大5g老張閉上眼睛,認真思考著以上問題(讀者可以跟著他一起思考,助他一臂之力)
沒想到老張是個被蘋果耽誤了的數學家。他花了一周畫了兩張圖。
# 不感興趣的同學不需要看
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# fig 1
norm1 = stats.norm(300,3)
norm2 = stats.norm(310,3)
x = np.linspace(250,350,100)
y1 = norm1.pdf(x)
y2 = norm2.pdf(x)
fig, axs = plt.subplots(1,2)
ax1 = axs[0]
ax1.plot(x,y1, color='b')
ax1.plot(x,y2, color='r')
ax1.set_ylim((0,0.15))
ax1.axvline(x=300, color='b', alpha=0.5)
ax1.axvline(x=310, color='r', alpha=0.5)
# fig 2
norm1 = stats.norm(300,30)
norm2 = stats.norm(310,30)
y1 = norm1.pdf(x)
y2 = norm2.pdf(x)
ax2 = axs[1]
ax2.set_ylim((0,0.15))
ax2.plot(x,y1, color='b')
ax2.plot(x,y2, color='r')
ax2.axvline(x=300, color='b', alpha=0.5)
ax2.axvline(x=310, color='r', alpha=0.5)
fig1.png老張點了根煙,嘆息道,這一切都是抽樣造成的,如果我能收集世上所有A蘋果和B蘋果,就可以求出準確的均值,我就知道哪個蘋果大了。但是我做不到,做不到就只能抽樣。抽樣只能近似真實的均值,但總存在誤差。
比如上面的兩張圖,藍色是抽樣的A蘋果不同重量的頻數,紅色是B蘋果。左右兩張圖,同樣是均值差10g(均值以豎直直線表示),但是左圖中,紅色曲線下面積與藍色曲線下面積很少重疊,也就是說,紅色整體上確實大於藍色。而右邊的圖,雖然紅色的均值大於藍色10g,但是這兩條曲線基本重合,這次抽樣B比A大10g,很有可能是誤差。下次再試一次,可能A就比B大了。
老張猛吸一口煙,轉念又想,即使是右圖的情況,如果我是統計了咱們鎮所有的AB蘋果,得出這樣的結果,是不是還是可以說B比A平均大10g呢,這總比我統計100個蘋果來的準吧!
老張熄滅了手頭的煙,緩緩的說:
「失去蘋果,失去很多;失去統計學,失去一切。」
面對浩瀚無垠的數學宇宙,張三開始了他的統計之旅:
他提出了以下思路:
我們的目的不是比較被抽樣的蘋果均值大小,而是想利用抽樣來比較兩種蘋果樹真實的蘋果均值的大小我們對蘋果的真實均值的大小只能估計,我們的估計不應該是一個值,而是一個範圍,或者一個分布,一個均值的概率分布我們對真實均值的概率分布估計必須考慮數據的離散程度(即方差)和抽樣次數。方差越小(蘋果重量波動小),抽樣次數多,那麼估計就越精準於是乎,老張不知道怎麼回事(我也不知道怎麼回事,請知道這個公式怎麼來的同學私戳我),推導出了第一個公式
該公式是說,如果我對一顆蘋果樹抽樣,取n個蘋果,那麼我們可以認為蘋果的樣本均值概率應該服從以
注意:這裡描述的是採樣均值的分布,不是採樣個體的分布,即你採樣很多次,每次計算出的均值放在一起,是這樣一個正態分布
這裡可能難以理解,於是老張又畫圖說明
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
norm1 = stats.norm(300, 10)
s = norm1.rvs(30)
x = np.linspace(270,330,100)
mean = s.mean()
std = s.std()
mean_std = np.sqrt(std ** 2 / 30)
y2 = stats.norm(mean, mean_std).pdf(x)
ax = plt.subplot()
ax.hist(s,bins=10, density=True)
ax.plot(x,y2, color='r')
fig2.png這張圖這麼理解,這裡很重要,我是上帝,我知道蘋果樹的蘋果真實均重300g,標準差10g,我從一種樹上摘了30個蘋果,其均值應該是以300為中心,標準差為
的正態分布。張三不是上帝,張三隻能根據採樣,他發現樣本均值為298,標準差為7.78,(圖中藍色部分)。但是他對真實的均值和標準差一無所知,所以聰明的張三,反其道而行,他說,既然能用真實的均值和方差推測樣本的均值,是不是可以用樣本的均值和方差推測真實均值,套用上面的公式,推測蘋果的真實均重概率應該是圖中紅線那樣,以298為中心,標準差為
這時候,張三轉念又想,怎麼比較A和B的差異呢,眼珠子那麼一轉,有了!
我們既然比較AB之間的差距,為什麼不去計算 A均值-B均值呢,張三說要有X,我們就有了X
這是,我們只要檢驗 X = 0 是否成立就行了,我們的零假設是AB無差異,即X=0, 如果零假設成立,那麼X的分布應該是一個以0為中心的分布,該分布的方差,應該是
有了這樣的分布,我們就可以描述每次抽樣X在某個範圍的概率
張三畫了第三張圖
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
norm1 = stats.norm()
x = np.linspace(-4,4,100)
y1 = norm1.pdf(x)
ax = plt.subplot()
ax.plot(x,y1, color='b')
l1 = norm1.ppf(0.025)
l2 = norm1.ppf(1-0.025)
ax.fill_between(x,0,y1,
(x < l1) | (x> l2), color='darkred')
fig3.png該曲線下面積佔比其實就是零假設下的事件發生的概率。
P值計算的是零假設下的發生某事件或者更為極端事件的概率
如我取樣後計算得到X=2, 按照正態分布可以計算得,從2到正無窮,曲線下面積佔比為約0.025(右邊紅色部分),那麼A比B大2或者大更多的概率是2.5%,這就是P值。2.5%這個概率夠小,我們覺得零假設應該是在扯淡,於是拒絕零假設,選擇備選假設,即認為AB有顯著差異
上面其實是算單尾的情況,即比較A比B大,或者A比B小的情況,會先假定一個方向。而日常常用的是雙尾t-檢驗,他不假設AB哪個大哪個小,所以如果算出X=2, 他會計算兩邊,
一般我們以5%作為閾值,只有在P<0.05時,我們才認為,零假設下,出現這麼大的X的概率太小了,才會捨棄零假設,選擇AB確實有差異這個備選假設。因為雙尾不假設AB哪個大哪個小,p值是單尾的兩倍,所以更為嚴格。我們一般都選雙尾
**重要說明:**前面其實我騙了你們,剛才我講的,嚴格來說,不叫t-test,t-test所用的不是正態分布,而是t-分布,t-分布類似於正態分布,比正態分布要胖一些,而且受自由度控制(採樣量-1)。一般來說採樣量 > 30時,用正態分布,採樣量 < 30時,用 t - 分布。
qPCR數據應用說了這麼多,我們來應用一下,比如我有基因A,我一頓操作處理了細胞,想通過qPCR看看A的表達變了沒。比如 我來編個數據,
條件重複1重複2重複3未處理1.51.51.6處理1.61.72那你說這個A的表達是變了還是沒變?
我也不知道,但我們可以假設A沒變,看看我們獲得這樣的數據的概率,如果概率<0.05, 我們就捨棄這個假設。
在Excel中,可以直接算t-test,如圖:
儘管上下兩次計算的時候,他們的均值差大小相近,但由於第二次樣本多,所以我們對真實均值的估計分布會精確一些,即正態分布更加修長苗條,他們同樣的均值差情況下,第二種情況就落在正態分布更外側的地方,曲線下面積更小。
福利時間很感謝,大家看到這裡,還記得之前我出過一個qPCR處理的軟體嗎,這次推出了進化版,可以計算p值,程序會自動計算每個基因處理組與對照組的雙尾t檢驗,還是一鍵全自動,熟悉的味道,更強的功能。對於qPCR還不清楚的同學,歡迎閱讀往期文章 -> qPCR數據處理哪家強
一鍵出圖的qPCR計算工具,歡迎關注微信公眾號「肖恩札記」,後臺回復qPCR領取。
肖恩札記2020-03-28