如何正確避開臭p?
原標題:如何正確避開臭p?
一、相關背景知識
儘管去年就有學者對p提出異議,但不能否認,目前發文章,p依然是香的,受認可的。
那麼問題來了,很多時候,做出來的結果是陰性的,而大家普遍不喜歡報道陰性結果。那麼這時候就有人挖空心思,左比右比,橫比豎比,硬生生造出來一個滿足檢驗水準的p。
對不起,你的p是有問題的,這個結果是假陽性、不可信的。
爲了直觀展示,我在R中模擬一批數據,帶大家來一步步揭示p值爲什麼要校正:
這個例子是:北京地區男性女性的收入有沒有差距?爲了回答這個問題,我們抽取(模擬)了10000例樣本
set.seed(5)
#爲了讓大家能重複出我的結果,設定種子數
income
#生成“收入”變量,樣本爲10000例,均值爲1萬(北京地區嘛),標準差爲5000(考慮到大家收入差距還是蠻大的。當然了,在這個前提下,極少數樣本會<0)
sex
#生成“性別”變量,一半男,一半女
ck
#基於收入、性別,生成數據集ck
head(ck)
#查看一下
好了,數據集生成了,下面進行檢驗,男女到底收入有沒有差異?採用t檢驗進行分析
t.test(income~sex,data = ck)
t檢驗顯示p值大於0.05,無差異(很正常,因爲是隨機生成的)
從箱式圖來看,分佈也的確非常相似,也提示沒有差異。
好了,劃重點!
如果這10000人就是你的研究總體,而你又沒有那麼大的財力去收集每一個樣本(現實中往往很多人只收個幾百、甚至幾十例的樣本,比如那些臨牀大夫)
我們看看他們所謂的辛苦收集來的數據會是什麼樣的結果:
我們要做的就是從這個10000人的總體中抽取一個小樣本,先來個大的研究吧,200例。我這裏抽取100次,進行100遍檢驗,相當於比較了100次。
p
for (i in 1:100) {
set.seed(eval(i*19+20)) #每循環一次,設定一個種子數
sample
data
t
p
}
p05
#從p值合集裏抽取小於0.05的
100次比較,全部的p值列在下面:
看看其中小於0.05的
高達6次!
高達6次!
高達6次!
也就是說:我只要比較不到20次,就能得到1次有差異(“假陽性”)的結果!
如果我們的研究樣本小一點,比如再減少一半,只抽100例,
那麼每比較10次,就有1次假陽性!
親們,你說你們的p值要校正不?
二、p值的校正方法:
#1.最常見最保守的方法就是Bonferroni校正
理念:如果在同一數據集上同時檢驗n個獨立的假設,那麼用於每一假設的統計顯著水平,應爲僅檢驗一個假設時的顯著水平的1/n。
舉個例子:如要在同一數據集上檢驗兩個獨立的假設,顯著水平設爲常見的0.05。此時用於檢驗該兩個假設應使用更嚴格的0.025。即0.05* (1/2)。該方法是由Carlo Emilio Bonferroni發展的,因此稱Bonferroni校正。
這樣做的理由是基於這樣一個事實:在同一數據集上進行多個假設的檢驗,每20個假設中就有一個可能純粹由於概率,而達到0.05的顯著水平。(有時甚至更高,我上面的模擬,每10次就有1次達到顯著水平)
假如有10個檢驗,經過Bonferroni 校正以後,新的p值可以這樣計算1-(1-p)^(1/10),即爲新的顯著性水平
2.FDR校正
FDR(假陽性率)錯誤控制法是Benjamini於1995年提出的一種方法,基本原理是通過控制FDR值來決定P值的值域,比Bonferroni校正要寬鬆一些。
核心思想就是控制“錯誤率”,比如你比較了10000個SNP基因位點,只要保證錯誤的在500個以內,就相當於統計學上的p<0.05.
計算方法: FDR校正是對每個p-value做校正,轉換爲q-value。q=p*n/rank,其中rank是指p-value從小到大排序後的次序。
記住了喲,多重比較的時候,最次也要用下q-value進行校正。
三、最後一個問題:哪些情景需要校正?
1.方差分析的兩兩比較就不說了,地球人都知道。
2.卡方分割,這個會有人忽視
(如下表)
有的人就喜歡掰開了揉碎了去比較:閉青VS開青,開青VS繼發,青年VS老年,blabla
爲求p值,也是拼了...
3.重複測量資料,多個時間點的比較
4.SNP位點
等等,凡是對“同一個數據集”進行多次檢驗,腦袋裏都要有“校正”的這根弦!
就是這麼喜歡分享~