原標題:如何正確避開臭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位點

等等,凡是對“同一個數據集”進行多次檢驗,腦袋裏都要有“校正”的這根弦!

就是這麼喜歡分享~

相關文章