赞
踩
bootstrap自采样目前广泛应用与统计学中,其原理很简单就是通过自身原始数据抽取一定量的样本(也就是取子集),通过对抽取的样本进行统计学分析,然后继续重新抽取样本进行分析,不断的重复这一过程N(大于500次以上)次,然后得到N个统计结果,然后进行区间分析,得到最终结果。
bootstrap自采样对于小样本数据计算效果较好,也可以在线性方程中通过bootstrap自采样计算并绘制出可信区间。本期我们将通过R语言演示BOOT重抽样进行回归方程系数的可信区间计算。
我们先导入数据和R包
library(boot)
bc<-read.csv("E:/r/test/zaochan.csv",sep=',',header=TRUE)
bc <- na.omit(bc)
这是一个关于早产低体重儿的数据(公众号回复:早产数据,可以获得该数据),低于2500g被认为是低体重儿。数据解释如下:low 是否是小于2500g早产儿,age 母亲的年龄,lwt 末次月经体重,race 种族,smoke 孕期抽烟,ptl 早产史(计数),ht 有高血压病史,ui 子宫过敏,ftv 早孕时看医生的次数
bwt 新生儿体重数值。
先把分类变量转成因子
bc$race<-ifelse(bc$race=="black",1,ifelse(bc$race=="white",2,3))
bc$smoke<-ifelse(bc$smoke=="nonsmoker",0,1)
bc$low<-factor(bc$low)
bc$race<-factor(bc$race)
bc$ht<-factor(bc$ht)
bc$ui<-factor(bc$ui)
建立回归方程
fit<-glm(low ~ age + lwt + race + smoke + ptl + ht + ui + ftv,
family = binomial("logit"),
data = bc)
summary(fit)
在这里R已经把标准误计算出来了,我们等会使用BOOT计算和它进行个比较。进行BOOT之前要先写个简单的function,非常简单就是用function包住回归方程就可以了
model_coef <- function(data,index){
coef(glm(low ~ age + lwt + race + smoke + ptl + ht + ui + ftv,
family = binomial("logit"),
data =bc,subset =index))
}
写好以后我们要调试一下function看写得对不对,写不对的话重抽样不可能成功。我们对代码取了一个子集,其实也相当于1次重抽样
model_coef(bc,1:100)
OK,写得function没问题后就可以重抽样了。Data为抽样的数据,statistic为抽样的函数,R为抽样的次数,我这里抽500次。
results <- boot(data=bc, statistic=model_coef, R=500)
把结果导出,它这里是按1-10排序的,自己对照一下就可以了,t2是age这个变量,有了标准误就可以轻易计算可信区间了。
print(results)
还可以查看它的抽样分布
plot(results)
本章先介绍一个简单的抽样模型,再慢慢深入,BOOT重抽样内容预计3个章节介绍完。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。