부트 스트랩 은 회귀 계수의 샘플링 분포를 추정하여 회귀 계수의 표준 오차 / 신뢰 구간을 계산하는 리샘플링 방법입니다. 이 게시물 에는 좋은 설명이 있습니다. 필요한 복제 수에 대한 내용은 이 게시물을 참조하십시오 .
- 비모수 적 부트 스트랩은 반복적으로 재 샘플링하여 관측 값 을 대체 하여 무작위로 관찰합니다 (즉, 일부 관측 값은 한 번만, 다른 관측 값은 여러 번, 일부는 전혀 생성되지 않음). 로지스틱 회귀를 계산하고 계수를 저장합니다. 이 반복엔타임스. 따라서 10,000 개의 서로 다른 회귀 계수가 생깁니다. 그런 다음이 10,000 개의 계수를 사용하여 신뢰 이너 벌을 계산할 수 있습니다. 의사 난수 생성기가 사용되므로 시드를 임의의 숫자로 설정하여 매번 정확히 동일한 결과를 얻을 수 있습니다 (아래 예 참조). 실제로 안정적인 추정값을 얻으려면 1000 회 이상의 복제, 아마도 10'000 개를 제안합니다. 부트 스트랩을 여러 번 실행하고 1000 회 복제 또는 10'000 회 복제를 수행하더라도 추정치가 크게 변경되는지 확인할 수 있습니다. 일반 영어로 : 수렴에 도달 할 때까지 복제를 수행해야합니다. 부트 스트랩 추정치가 추정치와 관측 된 단일 모형간에 다른 경우 관측 된 모형이 표본의 구조를 적절하게 반영하지 않았 음을 나타낼 수 있습니다.
boot
R
예를 들어, 단일 모델의 회귀 계수와 부트 스트랩 샘플의 평균 간의 차이 인 "바이어스"를 표시합니다.
- 부트 스트랩을 수행 할 때 단일 부트 스트랩 샘플이 아니라 10,000 개의 부트 스트랩 샘플에 대한 통계 (예 : 회귀 계수) 분포에 관심이 있습니다.
- 현대 컴퓨터에서는 10'000이 1000보다 낫습니다. 문제가되지 않습니다. 아래 예에서 10,000 개의 샘플을 그리는 데 약 45 초가 걸렸습니다. 이것은 물론 샘플 크기에 따라 다릅니다. 표본 크기가 클수록 모든 관찰이 고려되도록 반복 횟수가 높아집니다.
- "매번 결과가 다르다"는 것은 무엇을 의미합니까? 모든 부트 스트랩 단계에서 관측치가 대체로 새로 그려집니다. 따라서 관측치가 다르기 때문에 약간 다른 회귀 계수로 끝날 수 있습니다. 그러나 내가 말했듯이 : 단일 부트 스트랩 샘플의 결과에 실제로 관심이 없습니다. 복제 수가 충분히 높은 경우 부트 스트랩은 매번 매우 유사한 신뢰 구간과 포인트 추정치를 산출해야합니다.
예를 들면 다음과 같습니다 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")이 선호됩니다. 원래 스케일에 대한 신뢰 구간을 제공합니다. 승산 비에 대한 신뢰 구간의 경우 신뢰 한계를 지수화하십시오.