Permutation test 可以稱作是置換檢驗(yàn),F(xiàn)isher于20世紀(jì)30年代提出的一種基于大量計(jì)算(computationally intensive),利用樣本數(shù)據(jù)的全(或隨機(jī))排列,進(jìn)行統(tǒng)計(jì)推斷的方法,因其對(duì)總體分布自由,應(yīng)用較為廣泛,特別適用于總體分布未知的小樣本資料,以及某些難以用常規(guī)方法分析資料的假設(shè)檢驗(yàn)問題。在具體使用上它和Bootstrap Methods類似,通過對(duì)樣本進(jìn)行順序上的置換,重新計(jì)算統(tǒng)計(jì)檢驗(yàn)量,構(gòu)造經(jīng)驗(yàn)分布,然后在此基礎(chǔ)上求出P-value進(jìn)行推斷。
總體上其實(shí)就是重新采樣增加小樣本的整體樣本量,然后看其的概率分布來預(yù)測假設(shè)是否成立。這個(gè)基于t-test的,類似于與t-test,但是我覺的在樣本量非常少的情況下,用置換檢驗(yàn)可以更好的說明問題。這個(gè)p-value主要是sobs值在置換經(jīng)驗(yàn)中均值的分布概率,最終也是利用p-value的值來判斷假設(shè)是否成立的,看p值的大小,p值小于0.05時(shí),是說明拒絕H0,大于0.05.則是說明服從0假設(shè)。
下面說一下,置換檢驗(yàn)在R中應(yīng)用。
1.先舉R中帶的例子。
排列測試在實(shí)驗(yàn)研究中特別相關(guān),我們常常對(duì)治療組之間無差異的拒絕零假設(shè)感興趣。在這些情況下,置換檢驗(yàn)很好的地代表了我們的推理過程,因?yàn)槲覀兊牧慵僭O(shè)是兩個(gè)治療組在結(jié)果上沒有差異(即,結(jié)果是獨(dú)立于治療分配而觀察到的)。當(dāng)我們在測試期間置換結(jié)果值時(shí),因此我們看到我們可能具有的所有可能的替代治療分配排列以及我們觀察到的數(shù)據(jù)的平均差異(相對(duì)于我們可以看到的結(jié)果是獨(dú)立的所有差異的治療任務(wù)的位置)。雖然排列測試要求我們看到數(shù)據(jù)的所有可能排列(可能變得非常大),通過簡單地進(jìn)行大量的重采樣,我們可以輕松地進(jìn)行“近似置換測試”。在期望中,該過程應(yīng)該近似于排列分布。假設(shè)我們的研究中有20個(gè)單位那么他的排列的數(shù)量是:
> factorial(20)
[1] 2.432902e+18
這個(gè)時(shí)候,數(shù)字完全超出了我們合理計(jì)算的數(shù)字,但是我們可以從該排列分布中隨機(jī)抽樣以獲得近似排列分布,只需運(yùn)行大量重新采樣即可。讓我們看一下使用一些組成數(shù)據(jù)的例子:
> set.seed(1)
> n <- 100tr <- rbinom(100, 1, 0.5)
> y <- 1 + tr + rnorm(n, 0, 3)
> diff(by(y, tr, mean))? ?#得到差異的結(jié)果 1.341
> s <- sample(tr, length(tr), FALSE)
> diff(by(y, s, mean))? #-0.2612
當(dāng)我們重新取樣而無需替換再次重新計(jì)算差異:為-0.2612
在這里,我們使用置換處理向量s計(jì)算差異并找到非常小的差異而不是用tr。如果我們重復(fù)這個(gè)過程很多次,我們可以建立我們的近似置換分布(即均值差的采樣分布)。我們將使用replicatedo重復(fù)我們的排列過程。結(jié)果將是每個(gè)排列(即我們的分布)的差異向量:
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函數(shù)看一下這個(gè)分布然后畫一個(gè)直方圖來看它的差異

然后我們可以量化這個(gè)結(jié)果,也就是生成一個(gè)p-value值,通過p-value來更直觀的觀測結(jié)果:
> 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
單邊檢驗(yàn)和雙邊檢驗(yàn)的結(jié)果是不同的,但是這個(gè)結(jié)果差異不可能是由于改變治療與結(jié)果無關(guān)的變量集中可觀測變量相關(guān)的。
2:在R中我們不可能每次都要構(gòu)造自己的置換檢驗(yàn)的分布集,R那我們可以這用coin包中的independence_test函數(shù),但是一個(gè)問題是實(shí)際問題考慮的可能只是單側(cè)的置換檢驗(yàn)的結(jié)果:下面是這個(gè)函數(shù)針對(duì)于上述例子的應(yīng)用。
library(coin)
independence_test(y ~ tr, alternative = "greater") # one-tailed
independence_test(y ~ tr) # two-tailed? ? # two-tailed,默認(rèn)就是
結(jié)果顯示### ## Asymptotic General Independence Test
## ## data: y by tr
## Z = 2.315, p-value = 0.01029
## alternative hypothesis: greater
對(duì)于這個(gè)函數(shù)的應(yīng)用,它的具體的參數(shù)及應(yīng)用如下
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計(jì)算的默認(rèn)是雙側(cè)的P值,這時(shí)的計(jì)算最好是用Deducer包中的perm.t.test函數(shù)
這個(gè)函數(shù)的可以很簡單的設(shè)置是單邊的還是雙邊的,簡單的例子使用如下
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) #進(jìn)行1000次置換檢驗(yàn)
下面簡單介紹下perm.t.test的 參數(shù)
如下所示
perm.t.test(x,y,statistic=c("t","mean"),alternative=c("two.sided", "less", "greater"), midp=TRUE, B=10000)
Arguments
x? 第一個(gè)參數(shù)向量(數(shù)字類型)
y? ?第二個(gè)參數(shù)向量(數(shù)字類型)
statistic 統(tǒng)計(jì)用的標(biāo)準(zhǔn),t或者均值
alternative 進(jìn)行統(tǒng)計(jì)排列的方式,主要有三種,如上面所示
midp?確定p-value是否應(yīng)用
B? ? 進(jìn)行隨機(jī)置換取樣的次數(shù)
這就是置換檢驗(yàn)在R中的簡單介紹