本文对应《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)
本章主要解决的问题:无需理论分布的知识便能够进行假设检验、获得置信区间。当数据来自未知分布,或者存在严重的离群点,或者样本量过小,又或者没有参数方法可以回答感兴趣的假设问题时,这些方法是非常实用的。但是置换检验和自助法不是万能的,当初始样本对于总体情况的代表性不佳,或者样本量过小而无法准确地反应总体情况,这些方法也爱莫能助。