本文對應《R語言實戰》第12章:重抽樣與自助法
之前學習的基本統計分析、回歸分析、方差分析,是假定觀測數據抽樣自正態分布或者其他性質較好的理論分布,進而進行的假設檢驗和總體參數的置信區間估計等方法。但在許多實際情況中統計假設並不一定滿足,比如抽樣於未知或混合分布、樣本量過小、存在離群點、基於理論分布設計合適的統計檢驗過於復雜且數學上難以處理等情況,這時基於隨機化和重抽樣的統計方法就可派上用場。
本章探究兩種應用廣泛的依據隨機化思想的統計方法:置換檢驗和自助法。
=====================================================================
置換檢驗:
也稱隨機化檢驗或重隨機化檢驗。置換方法和參數方法都計算了相同的t統計量。但置換方法並不是將統計量與理論分布進行比較,而是將其與置換觀測后獲得的經驗分布進行比較,根據統計量值的極端性判斷是否有足夠理由拒絕零假設。這種邏輯可以延伸到大部分經典統計檢驗和線性模型上來。
常用的置換檢驗包有兩個:coin包和lmPerm包。coin包對於獨立性問題提供了一個非常全面的置換檢驗框架,而lmPerm包則專門用來做方差分析和回歸分析的置換檢驗。
coin包:
提供了一個進行置換檢驗的一般性框架,判斷響應值與組的分配是否獨立;兩個數值變量是否獨立;兩個類別型變量是否獨立。
主要函數:
檢驗 |
coin函數 |
兩樣本和K樣本置換檢驗 |
oneway_test(y ~ A) |
含一個分層(區組)因子的兩樣本和K樣本置換檢驗 |
oneway_test(y ~ A | C) |
Wilcoxon-Mann-Whitney秩和檢驗 |
wilcox_test(y ~ A) |
Kruskal-Wallis檢驗 |
kruskal_test(y ~ A) |
Person卡方檢驗 |
chisq_test(A ~ B) |
Cochran-Mantel-Haenszel檢驗 |
cmh_test(A ~ B | C) |
線性關聯檢驗 |
lbl_test(D ~ E) |
Spearman檢驗 |
spearman_test(y ~ x) |
Friedman檢驗 |
friedman_test(y ~ A | C) |
Wilcoxon符號秩檢驗 |
wilcoxsign_test(y1 ~ y2) |
在coin函數中,y和x是數值變量,A和B是分類因子,C是類別型區組變量,D和E是有序因子,y1和y2是相匹配的數值變量
函數形式:
function_name(formula, data, distribution = )
data是數據框formula描述的是要檢驗變量間的關系
distribution指定經驗分布在零假設條件下的形式,可能值有exact, asymptotic, approximate
其中,exact: 在零假設條件下,分布的計算是精確的(依據所有的排列組合)
asymptotic: 根據漸進分布重抽樣
distribution = approximate(B = #): 根據蒙特卡洛重抽樣,其中#指所需重復的次數
lmPerm包:線性模型的置換檢驗(回歸與方差分析)
lmp()函數、aovp()函數的參數與lm()和aov()函數類似,只額外添加了perm = 參數:可選項有Exact, Prob, SPR
Exact: 精確檢驗
Prob: 從所有可能的排列中不斷抽樣,直至估計的標准差在估計的p值0.1之下,判停准則由可選的Ca參數控制
SPR: 使用貫序概率比檢驗來判斷何時停止抽樣
注意:若觀測數大於10,perm = “Exact” 將自動默認轉為 perm = “Prob”因為精確檢驗只適用於小樣本問題。
其他置換檢驗相關的包:
perm包能實現coin包中的部分功能,可作為coin包所得結果的驗證;
corrperm包提供了有重復測量的相關性的置換檢驗;
logregperm包提供了Logistic回歸的置換檢驗;
glmperm包涵蓋了廣義線性模型的置換檢驗。
置換檢驗發揮功用的地方是處理非正態數據(如分布偏倚很大)、存在離群點、樣本很小或無法做參數檢驗等情況。不過,如果初始樣本對感興趣的總體情況代表性很差,即使是置換檢驗也無法提高推斷效果。
置換檢驗主要用於生成檢驗零假設的p值,有助於回答“效應是否存在”這樣的問題。不過,置換方法對於獲取置信區間和估計測量精度是比較困難的。而自助法可以解決這個問題。
====================================================================
自助法:
從初始樣本重復隨機替換抽樣,生成一個或一系列待檢驗統計量的經驗分布。無需假設一個特定的理論分布,便可生成統計量的置信區間,並能檢驗統計假設。
boot包:擴展了自助法和重抽樣的相關用途。可以對一個統計量(如中位數)或一個統計向量(如一系列回歸系數)使用自助法。
自助法有三個步驟:
1. 寫一個能返回待研究統計量值的函數。如果只有單個統計量(如中位數),函數應該返回一個數值;如果有一列統計量(如一列回歸系數),函數應該返回一個向量。
2. 為生成R中自助法所需的有效統計量重復數,使用boot()函數對上面所寫的函數進行處理。
3. 使用boot.ci()函數獲取第2步生成的統計量的置信區間。
#生成boot對象 bootobject <- boot(data = , statistic = , R = , …) #data為向量、矩陣或數據框 #statistic生成k個統計量以供自舉的函數(k=1時對單個統計量進行自助抽樣) # 函數需要包括indices參數,以便boot()函數用它從每個重復中選擇實例 #R為自助抽樣的次數 #獲取統計量的置信區間 boot.ci(bootobject, conf = , type = ) #conf 預期的置信區間,默認conf = 0.95 #type 返回置信區間的類型,可能為norm, basic, stud, perc, bca, all(默認為all)
本章主要解決的問題:無需理論分布的知識便能夠進行假設檢驗、獲得置信區間。當數據來自未知分布,或者存在嚴重的離群點,或者樣本量過小,又或者沒有參數方法可以回答感興趣的假設問題時,這些方法是非常實用的。但是置換檢驗和自助法不是萬能的,當初始樣本對於總體情況的代表性不佳,或者樣本量過小而無法准確地反應總體情況,這些方法也愛莫能助。