近年来,许多数理统计方法被引入到医学研究中,有些理论在大样本的条件下才能获得稳定的解,如项目反应理论、线性状态空间模型等。但是在实际中.由于成本或者现场条件的限制而无法获得大样本。在现有样本代表性好的条件下,可以通过Bootstrap再抽样方法扩大样本量.即在传统的数理统计基础上进行统计模拟。随着计算机技术的迅猛发展,这一技术已经渗透到许多科学领域.解决了无法采集到大样本的难题。目前医学中常用的统计软件还没有提供直接产生Bootstrap样本的程序。本文提供了这一方法的SAS程序.简短、通用,可以方便医学统计工作者的使用。

Bootstrap再抽样方法简介

Bootstrap方法是一种计算机模拟方法,它处理的是实际中可能发生的,但需要大样本来求出的统计量。一般的统计推断都是基于一个分布,诸如正态分布,但数据分布未知时,或者存在异常值,样本量太小的时候,统计推断的结果可信度不高,这时候用bootstrap方法将是一个很不错的选择。令X = { x1, x2,x3, x4,…,xn},为一次实际收集的样本, xi(i=1,2,… ,n)是独立同分布的随机变量服从分布F(诸如收集了n个病人的年龄X服从正态分布)。M为分布F 的一个未知数字特征,例如M为X的均值。根据经典数理统计理论,要获取M的估计的经验分布(一个样本数据只能得到一个均值,如果想知道均值的95%CI,j就需要知道均值的分布)。就需要多次重复抽样和大样本。在小样本条件下,应用Bomtmp方法对x进行模拟重抽样。就能够在某种意义上获取M的经验分布并确定其置信区间。

程序设计思想

Bootstrap过程的机制是:首先有一个实际观测到的数据集(称之为原始数据集),它含有n 个观查单位。从这个数据集中有放回地随机抽取t个组成一个新样本。称之为Bootstrap样

本。在这个随机抽样中.原始数据集中的每个观察单位每次被抽到的概率相等,为1/n.这些观察单位有的只被抽到1次,有的超过1次,也有的没有被抽到。新的样本再计算一次统计量(诸如均值),这样重复1000次抽样就有一千个样本,就可以计算1000个样本的统计量的均值(均值的均值),这样就可以计算这个统计量的95%CI等等,因计算的结果是1000次重复抽样的结果,可以说包含了样本数据的各种组合,这个组合计算出的均值比我们收集一次的样本数据更稳定,更具有说服力。

实例及SAS程序

在含有150个观察单位的原有样本中.抽出观察单位数为150的新样本。

程序步骤:

(1)产生效组(1~999)和序列号,并对数组进行随机化。

(2)以随机数除以150,取商的余数部分,(随机数小于150商的整数部分为0)。由于余数部分的变动范围在0~149之间,应再加1,与原有观察单位数相同。

(3)取序列号小于等于150的余数数字所对应的原有样本观察单位组成的新样本即为Bootstrap样本。data a;

do unit= 1 tO 999:

unitl: unit;

output;

end;

ILia ;

proe plan seed=999998888444;

factors unitl=999;/* unitl为随机数

output data= a out b:

run ;

data c;

set b;

unit2=floor(unitl/150);

unit3=(unitl—unit2*150);/* 取unitl的商作为新的随机数

unitm = unit3+ 1:

keep unit unitm ;

run ;

data one two;

se t C;

if unit< =150 then output one;/* one为新样本数据集

if unit> 150 then output two;

run ;

讨 论

1.实施Bootstrap过程需要满足的一个假设条件是:所观测到的样本能较好地反映总体。Bootstrap样本的标准差与原有样本的标准差相同。

2.Bootstrap样本数为两位数时,产生随机数为1~99。样本数为三位数时.产生随机数为1~999,依此类推。

3.改变种子数(” seed),即可得到不同的Bootstrap样本。Bootstrap样本也可以小于或等于原有样本量。

4.该方法要求样本间满足独立同分布条件,对于时序数据不能直接采用Bootstrap方法。

5. 一般情况下抽样次数至少1000次。

上面的方法只是告诉大家怎么重抽样,举得例子也仅仅是样本均值,通过重抽样让样本均值更稳定更具有说服力,这一方法适合小样本数据,当然在计算某些指标时(诸如肿瘤评分系统的C-index的95%CI)时,前提条件是通过编程等先将需要计算的统计量计算公式给出来,完了对数据进行Bootstrap,每抽样一次代入已经编写好的程序或公式里计算一次统计量,最终计算1000次个统计量的均值及95%CI,为最终的报告结果。

SPSS软件19.0以上会有Bootstrap这一方法的嵌入,诸如在计算两样本的t检验时,在对话框中会有boot这一个选项按钮,如果点击了这一按钮,在给出的t检验的统计量结果中会多出bootstrap两列的结果,分别为统计量的95%CI.

因为SPSS只能计算特定的一些统计量,它也只能对特定的一些结果做Bootsrap,使用起来有一定的局限性。

在R软件中有专门的做Bootstrap的包boot,可以实现重抽样技术。Boot包中提供了做bootstrap的两个十分好用的函数:boot(),boot.ci()。

下面简单介绍下在R中对单个统计量使用bootstrap方法:

以R中的数据集women为例说明这个问题。数据集women列出了美国妇女的平均身高和体重。以体重为响应变量,身高为协变量进行回归,获取斜率项的95%置信区间。

R可以通过以下代码告诉我们答案:library(boot)beta

输出结果:BOOTSTRAPCONFIDENCE INTERVAL CALCULATIONS

Basedon 500 bootstrap replicates

CALL:

boot.ci(boot.out= result)

Intervals:

Level Normal Basic

95% ( 3.218, 3.686 ) ( 3.231, 3.704 )

Level Percentile BCa

95% ( 3.196, 3.669 ) ( 3.199, 3.675 )

Calculationsand Intervals on Original Scale

他们与传统的估计差别大吗?我们来看看传统的区间估计:confint(lm(weight~height,data=women))

输出结果:2.5 % 97.5 %

(Intercept) -100.342655 -74.690679

height 3.253112 3.646888

可以看出,差别并不是很大,究其原因,无外乎正态性得到了很好的满足。

我们在来看一个差别较大的例子:

考虑R中的数据集faithful。以waiting为响应变量,eruptions为协变量,建立简单回归模型y=α+βx+e。考虑β的95%置信区间,重复上面的步骤。result

输出结果:BOOTSTRAPCONFIDENCE INTERVAL CALCULATIONS

Based on 500bootstrap replicates

CALL :

boot.ci(boot.out= result)

Intervals :

Level Normal Basic

95% (10.08, 11.30 ) (10.06, 11.26 )

Level Percentile BCa

95% (10.20, 11.40 ) (10.13, 11.35 )

Calculationsand Intervals on Original Scale

Some BCaintervals may be unstable

传统估计:2.5 % 97.5 %

(Intercept)31.20069 35.74810

eruptions 10.10996 11.34932

差别有些大,看qq图发现正态性不是很好。

本公众号精彩历史文章:

04:如何在R软件中求一致性指数( Harrell'concordance index:C-index)?

05:Nomogram 绘制原理及R&SAS实现.

06 :Lasso方法简要介绍及其在回归分析中的应用

07 : 最优模型选择中的交叉验证(Cross validation)方法

08 : 用R语言进行分位数回归(Quantile Regression)

09 : 样本数据中异常值(Outliers)检测方法及SPSS & R实现

10 : 原始数据中几类缺失值(Missing Data)的SPSS及R处理方法

11 : [Survival analysis]Kaplan-Meier法之SPSS实现

12 : [Survival analysis] COX比例风险回归模型在SPSS中的实现

13 : 用R绘制地图:以疾病流行趋势为例

14 :数据挖掘方法:聚类分析简要介绍 及SPSS&R实现15 :医学研究中的Logistic回归分析及R实现

更多推荐

bootstrap再抽样_Bootstrap再抽样方法简介