Permutation test(置換檢驗)以及在R中的應用

Permutation test 可以稱作是置換檢驗,Fisher于20世紀30年代提出的一種基于大量計算(computationally intensive),利用樣本數據的全(或隨機)排列,進行統計推斷的方法,因其對總體分布自由,應用較為廣泛,特別適用于總體分布未知的小樣本資料,以及某些難以用常規方法分析資料的假設檢驗問題。在具體使用上它和Bootstrap Methods類似,通過對樣本進行順序上的置換,重新計算統計檢驗量,構造經驗分布,然后在此基礎上求出P-value進行推斷。

總體上其實就是重新采樣增加小樣本的整體樣本量,然后看其的概率分布來預測假設是否成立。這個基于t-test的,類似于與t-test,但是我覺的在樣本量非常少的情況下,用置換檢驗可以更好的說明問題。這個p-value主要是sobs值在置換經驗中均值的分布概率,最終也是利用p-value的值來判斷假設是否成立的,看p值的大小,p值小于0.05時,是說明拒絕H0,大于0.05.則是說明服從0假設。


下面說一下,置換檢驗在R中應用。

1.先舉R中帶的例子。


排列測試在實驗研究中特別相關,我們常常對治療組之間無差異的拒絕零假設感興趣。在這些情況下,置換檢驗很好的地代表了我們的推理過程,因為我們的零假設是兩個治療組在結果上沒有差異(即,結果是獨立于治療分配而觀察到的)。當我們在測試期間置換結果值時,因此我們看到我們可能具有的所有可能的替代治療分配排列以及我們觀察到的數據的平均差異(相對于我們可以看到的結果是獨立的所有差異的治療任務的位置)。雖然排列測試要求我們看到數據的所有可能排列(可能變得非常大),通過簡單地進行大量的重采樣,我們可以輕松地進行“近似置換測試”。在期望中,該過程應該近似于排列分布。假設我們的研究中有20個單位那么他的排列的數量是:

> factorial(20)

[1] 2.432902e+18

這個時候,數字完全超出了我們合理計算的數字,但是我們可以從該排列分布中隨機抽樣以獲得近似排列分布,只需運行大量重新采樣即可。讓我們看一下使用一些組成數據的例子:

> set.seed(1)

> n <- 100tr <- rbinom(100, 1, 0.5)

> y <- 1 + tr + rnorm(n, 0, 3)

> diff(by(y, tr, mean))? ?#得到差異的結果 1.341

> s <- sample(tr, length(tr), FALSE)

> diff(by(y, s, mean))? #-0.2612

當我們重新取樣而無需替換再次重新計算差異:為-0.2612

在這里,我們使用置換處理向量s計算差異并找到非常小的差異而不是用tr。如果我們重復這個過程很多次,我們可以建立我們的近似置換分布(即均值差的采樣分布)。我們將使用replicatedo重復我們的排列過程。結果將是每個排列(即我們的分布)的差異向量:

dist <- replicate(2000,diff(by(y, sample(tr, length(tr), FALSE), mean)))

hist(dist, xlim = c(-3, 3), col = "black", breaks = 100)####繪制直方圖

abline(v = diff(by(y, tr, mean)), col = "blue", lwd = 2)###畫差異值的直線位置

然后我們可以用hist函數看一下這個分布然后畫一個直方圖來看它的差異


通過看這個結果,看到我們的0假設是被拒絕的,也就是說治療組之間是有差異的。

然后我們可以量化這個結果,也就是生成一個p-value值,通過p-value來更直觀的觀測結果:

> sum(dist > diff(by(y, tr, mean)))/2000?# one-tailed test 單邊檢測## 0.009

> sum(abs(dist) > abs(diff(by(y, tr, mean))))/2000 # two-tailed test 雙邊檢測##0.018

單邊檢驗和雙邊檢驗的結果是不同的,但是這個結果差異不可能是由于改變治療與結果無關的變量集中可觀測變量相關的。


2:在R中我們不可能每次都要構造自己的置換檢驗的分布集,R那我們可以這用coin包中的independence_test函數,但是一個問題是實際問題考慮的可能只是單側的置換檢驗的結果:下面是這個函數針對于上述例子的應用。

library(coin)

independence_test(y ~ tr, alternative = "greater") # one-tailed

independence_test(y ~ tr) # two-tailed? ? # two-tailed,默認就是

結果顯示### ## Asymptotic General Independence Test

## ## data: y by tr

## Z = 2.315, p-value = 0.01029

## alternative hypothesis: greater

對于這個函數的應用,它的具體的參數及應用如下



independence_test(asat ~ group, data = asat,

? ? ? ? ? ? ? ? ? ## exact null distribution

? ? ? ? ? ? ? ? ? distribution = "exact",

? ? ? ? ? ? ? ? ? ## one-sided test

? ? ? ? ? ? ? ? ? alternative = "greater",

? ? ? ? ? ? ? ? ? ## apply normal scores to asat$asat

? ? ? ? ? ? ? ? ? ytrafo = function(data)

? ? ? ? ? ? ? ? ? ? ? trafo(data, numeric_trafo = normal_trafo),

? ? ? ? ? ? ? ? ? ## indicator matrix of 1st level of asat$group

? ? ? ? ? ? ? ? ? xtrafo = function(data)

? ? ? ? ? ? ? ? ? ? ? trafo(data, factor_trafo = function(x)

? ? ? ? ? ? ? ? ? ? ? ? ? matrix(x == levels(x)[1], ncol = 1)))



除此之外,還可以用oneway_test做,效果類似。

但是oneway_test計算的默認是雙側的P值,這時的計算最好是用Deducer包中的perm.t.test函數

這個函數的可以很簡單的設置是單邊的還是雙邊的,簡單的例子使用如下

library(Deducer)

x<-c(20,34,67,53,12,13,55,89)

y<-c(23,45,12,56,23,67,22,66)

perm.t.test(x,y,alternative = "greater",midp = TRUE,B = 1000) #進行1000次置換檢驗

下面簡單介紹下perm.t.test的 參數

如下所示

perm.t.test(x,y,statistic=c("t","mean"),alternative=c("two.sided", "less", "greater"), midp=TRUE, B=10000)

Arguments

x? 第一個參數向量(數字類型)

y? ?第二個參數向量(數字類型)

statistic 統計用的標準,t或者均值

alternative 進行統計排列的方式,主要有三種,如上面所示

midp?確定p-value是否應用

B? ? 進行隨機置換取樣的次數

這就是置換檢驗在R中的簡單介紹

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容