参考资料:R语言实战【第2版】
所谓自助法,即从初始样本重复随机替换抽样,生成一个或一系列待检验统计量的经验分布。无需假设一个特定的理论分布,便可生成统计量的置信区间,并能检验统计假设。
举个例子:
我们想计算一个样本均值95%的置信区间。样本现有10个观测值,均值为40,标准差为5。如果假设均值的样本分布为正态分布,那么(1-α/2)%的置信区间计算如下:
其中,t是自由度为n-1的t分布的1-α上界值。对于95%的置信区间,可得40-2.262(5/3.163)<μ<40+2.262(5/3.162)或者3.424<μ<43.577。以这种方式创建的95%置信区间将会是包含真实的总体均值。
倘若我们假设均值的样本不是正态分布,该怎么办呢?可使用自助法:
(1)从样本中随机选择10个观测,抽样后再放回。有些观测可能会被抽中多测,有些可能一直都不会被抽中。
(2)计算并记录样本均值。
(3)重复(1)和(2)两个步骤1000次。
(4)将1000个样本均值从小到大排序。
(5)找出样本均值2.5%和97.5%的分位点。此时即初始位置和最末位置的第25个数,它们就限定了95%的置信区间。
本例中,样本均值很可能服从正态分布,自助法优势不太明显。单在其他许多案例中,自助法优势十分明显。比如,我们想估计样本中位数的置信区间,或者两样本中位数之差,该怎么做?正态理论没有现成的公式可套用,而自助法此时却是不错的选择。即使潜在分布未知,或出现了离群点,或者样本量过小,再或者没有可供选择的参数方法,自助法将是生成置信区间和做假设检验的一个利器。
R语言中可以通过boot包使用自助法
boot包扩展了自助法和重抽样的相关用途。我们可以对一个统计量(如中位数)或一个统计量向量(如一系列回归系数)使用自助法。使用自助法前请确保下载并安装了boot包:
install.packages("boot")
一般来说自助法有三个主要步骤:
(1)写一个能返回待研究统计量值的函数。如果只有单个统计量,函数应该返回一个数值;如果有一列统计量,函数应该返回一个向量。
(2)为生成R中自助法所需的有效统计量重复数,使用boot()函数对上面所写的函数进行处理。
(3)使用boot.ci()函数获取步骤(2)生成的统计量的置信区间。
主要的自助法函数是boot()函数,它的格式为:
bootobject<-boot(data=,statistic=,R=,...)
具体参数解释如下:
参数 | 描述 |
data | 向量、矩阵或数据框 |
statistic | 生成k个统计量以供自举的函数(k=1时对单个统计量进行自助抽样)。函数需包括indices参数,以便boot()函数用它从每个重复中选择实例 |
R | 自助抽样的次数 |
... | 其他对生成待研究统计量有用的参数,可在函数中传输 |
boot()函数调用统计量函数R次,每次都从整数1:nrow(data)中生成一列有放回的随机指标,这些指标被统计量函数用来选择样本。统计量将根据所选样本进行计算,计算结果存储在bootobject对象中。bootobject结构的描述如下:
元素 | 描述 |
t0 | 从原始数据得到的k个统计量的观测值 |
t | 一个R×k矩阵,每行即k个统计量的自助重复值 |
我们可以如bootobject$t0和bootobject$t这样获取这些元素。
一旦生成了自助样本,可通过print()和plot()来检查结果。如果结果看起来还算合理,使用boot.ci()函数获取统计量的置信区间。格式如下:
boot.ci(bootobject,conf=,type=)
参数解释如下:
参数 | 描述 |
bootobject | boot()函数返回的对象 |
conf | 预期的置信区间(默认:conf=0.95) |
type | 返回的置信区间类型。可能值为norm、basic、stud、perc、bca和all,默认type="all" |
type参数设定了获取置信区间的方法。perc方法(分位数)展示的样本均值,bca将根据偏差对区间做简单调整。多数情况下,bca的结果是可取的。