置換檢驗--coin包(獨立樣本t檢驗、單因素精確檢驗、Wilcoxon秩和檢驗、K樣本置換檢驗)


1 置換檢驗

置換方法和參數方法都計算了相同的t統計量。但置換方法並不是將統計量與理論分布進行比較,而是將其與置換觀測數據后獲得的經驗分布進行比較,根據統計量值的極端性判斷

是否有足夠的理由拒絕零假設。

R目前有一些非常全面而復雜的軟件包可以用來做置換檢驗。本節剩余部分將關注兩個有用

的包:coinlmPerm包。coin包對於獨立性問題提供了一個非常全面的置換檢驗的框架,而lmPerm包則專門用來做方差分析和回歸分析的置換檢驗。

2 coin 包做置換檢驗

對於獨立性問題,coin包提供了一個進行置換檢驗的一般性框架。通過該包,你可以回答

如下問題

q 響應值與組的分配獨立嗎?

q 兩個數值變量獨立嗎?

q 兩個類別型變量獨立嗎?

相對於傳統檢驗,提供可選置換檢驗的coin函數

 

coin函數中,yx是數值變量,AB是分類因子,C是類別型區組變量,DE是有序因子,y1y2是相匹配的數值變量。

上表中列出來的每個函數都是如下形式:

function_name( formula, data, distribution= )

formula描述的是要檢驗變量間的關系; q

data是一個數據框;

distribution指定經驗分布在零假設條件下的形式,可能值有exactasymptoticapproximate。若distribution="exact",那么在零假設條件下,分布的計算是精確的(即依據所有可能的排列組合)。當然,也可以根據它的漸進分布(distribution="asymptotic")或蒙特卡洛重抽樣(distribution="approxiamate(B=#)")來做近似計算,其中#指所需重復的次數。distribution="exact"當前僅可用於兩樣本問題。

2.1 獨立兩樣本和 K 樣本檢驗

1)獨立樣本傳統t檢驗

install.packages("coin")

library(coin)

score <- c(40, 57, 45, 55, 58, 57, 64, 55, 62, 65)  #生成10個向量

treatment <- factor(c(rep("A",5), rep("B",5)))  #函數 factor 用於將一個向量編碼為一個因子

mydata <- data.frame(treatment, score)  #將上面向量和標簽的組合成一個數據框

t.test(score~treatment, data=mydata, var.equal=TRUE)  

#t.test()對數據向量進行單樣本和雙樣本t檢驗。var.equal是一個邏輯變量,表示是否將兩個方差視為相等,如果是TRUE,則使用集合方差來估計方差,否則就使用Welch(或Satterthwaite)自由度的近似值。

 

2)單因素精確檢驗

oneway_test(score~treatment, data=mydata, distribution="exact")

#oneway_test()是兩樣本和K樣本置換檢驗,若distribution="exact",那么在零假設條件下,分布的計算是精確的(即依據所有可能的排列組合)。

 

結果分析:傳統t檢驗表明存在顯著性差異(p<0.05),而精確檢驗卻表明差異並不顯著(p>0.072)。由於只有10個觀測,可能更傾向於相信置換檢驗的結果,在做出最后結論之前,還要多收集些數據。

(3)Wilcoxon-Mann-Whitney U檢驗(Wilcoxon秩和檢驗)

本例子是檢驗美國南部監禁概率與非南部間的差異

library(MASS)

UScrime <- transform(UScrime, So = factor(So))

wilcox_test(Prob ~ So, data=UScrime, distribution="exact")

 

 結果分析:p-value值小於0.05,所以美國南部監禁概率與非南部監禁概率差異非常顯著,即監禁在南部可能更多,數值變量So被轉化為因子,因為coin包規定所有的類別型變量都必須以因子形式編碼。

4K樣本置換檢驗

library(multcomp)

set.seed(1234)  #設置隨機種子,是為了可以讓結果重現

oneway_test(response~trt, data=cholesterol,distribution=approximate(nresample=9999))

#response~trt是用來分析評價五種葯物療法對降低膽固醇的效果,蒙特卡洛重抽樣(distribution="approxiamate(nresample=#)")來做近似計算,其中#指所需重復的次數

 

結果分析:p-value值小於0.05,即表明各組間病人的響應值顯著不同。

2.2  數值變量間的獨立性

spearman_test()函數提供了兩數值變量的獨立性置換檢驗。我們檢驗美國文

盲率與謀殺率間的相關性如下代碼可進行相關性的置換檢驗:

states <- as.data.frame(state.x77)

set.seed(1234)

spearman_test(Illiteracy~Murder, data=states,distribution=approximate(nresample=9999))

 

結果分析:基於9999次重復的近似置換檢驗可知:獨立性假設並不被滿足。注意,state.x77是一個矩陣,在coin包中,必須將其轉化為一個數據框。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM