自举是一种重采样方法,用于估计回归系数的采样分布,从而计算回归系数的标准误差/置信区间。这篇文章有一个很好的解释。有关所需复制数量的讨论,请参阅这篇文章。
- 非参数引导程序会重复采样并随机替换您的观察值(即,某些观察值仅绘制一次,其他观察值绘制多次,而有些则根本没有绘制),然后计算逻辑回归并存储系数。重复ñ次。因此,您最终将得到1万个不同的回归系数。然后可以使用这1万个系数来计算其置信度。使用伪随机数生成器时,您可以将种子设置为任意数字,以确保每次都获得完全相同的结果(请参见下面的示例)。为了真正有一个稳定的估计,我建议进行1000多次重复,也许是1万次。您可以运行多次引导程序,然后查看估算值是否发生了很大的变化(无论您执行1000还是10,000次复制)。用简单的英语来说:您应该进行复制,直到达到收敛为止。如果您的引导估计值在估计值与观察到的单个模型之间有所不同,则可能表明观察到的模型不能正确反映样本的结构。
boot
R
,例如,得出“偏差”,即单个模型的回归系数与自举样本平均值之间的差。
- 执行引导程序时,您对单个引导程序样本不感兴趣,但对例如10'000个引导程序样本的统计信息(例如回归系数)的分布感兴趣。
- 我想说10 000比1000好。对于现代计算机,这应该不成问题。在下面的示例中,我的PC花了大约45秒钟来绘制1万个样本。当然,这取决于您的样本量。样本量越大,应确保考虑到每个观察值的迭代次数就越高。
- 您是什么意思,“结果每次都不同”?回想一下,在每个引导步骤中,观察值都是用替换新绘制的。因此,由于观察结果不同,最终的回归系数可能会略有不同。但是正如我已经说过的:您对单个引导程序样本的结果并不真正感兴趣。当您的复制次数足够多时,引导程序将每次产生非常相似的置信区间和点估计。
这是一个示例R
:
library(boot)
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
head(mydata)
mydata$rank <- factor(mydata$rank)
my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# Set up the non-parametric bootstrap
logit.bootstrap <- function(data, indices) {
d <- data[indices, ]
fit <- glm(admit ~ gre + gpa + rank, data = d, family = "binomial")
return(coef(fit))
}
set.seed(12345) # seed for the RNG to ensure that you get exactly the same results as here
logit.boot <- boot(data=mydata, statistic=logit.bootstrap, R=10000) # 10'000 samples
logit.boot
Bootstrap Statistics :
original bias std. error
t1* -3.989979073 -7.217244e-02 1.165573039
t2* 0.002264426 4.054579e-05 0.001146039
t3* 0.804037549 1.440693e-02 0.354361032
t4* -0.675442928 -8.845389e-03 0.329099277
t5* -1.340203916 -1.977054e-02 0.359502576
t6* -1.551463677 -4.720579e-02 0.444998099
# Calculate confidence intervals (Bias corrected ="bca") for each coefficient
boot.ci(logit.boot, type="bca", index=1) # intercept
95% (-6.292, -1.738 )
boot.ci(logit.boot, type="bca", index=2) # gre
95% ( 0.0000, 0.0045 )
boot.ci(logit.boot, type="bca", index=3) # gpa
95% ( 0.1017, 1.4932 )
boot.ci(logit.boot, type="bca", index=4) # rank2
95% (-1.3170, -0.0369 )
boot.ci(logit.boot, type="bca", index=5) # rank3
95% (-2.040, -0.629 )
boot.ci(logit.boot, type="bca", index=6) # rank4
95% (-2.425, -0.698 )
引导输出显示原始回归系数(“原始”)及其偏差,即原始系数与自举系数之间的差。它还给出了标准错误。请注意,它们比原始标准误差大一些。
从置信区间来看,通常优选进行偏差校正(“ bca”)。它给出了原始标度上的置信区间。对于几率的置信区间,只需对置信限取幂。