어떤 부트 스트랩 회귀 모델을 선택해야합니까?


10

DV (질병 : 예 / 아니오) 및 5 개의 예측 변수 (인구 통계 [연령, 성별, 담배 흡연 (예 / 아니오)], 의료 지수 (선거) 및 하나의 무작위 치료 [예 / 아니오]를 갖는 이항 로지스틱 회귀 모형이 있습니다. ]). 또한 모든 양방향 상호 작용 항을 모델링했습니다. 주요 변수는 중심이며 다중 공선 성의 징후가 없습니다 (모든 VIF <2.5).

질문이 몇 개 있습니다:

  1. 부트 스트랩이 단일 모델보다 유리합니까? 그렇다면,

  2. 어떤 부트 스트랩 모델을 선택해야합니까? 부트 스트래핑 알고리즘이 새로운 샘플을 생성하기 위해 임의의 방법을 따르는 지 또는 엄격한 알고리즘이 있는지 확인하고 싶었습니다. 따라서 각 시도마다 1000 번씩 리샘플링했습니다 (따라서 1000 회 시도한 부트 스트랩 모델이 여러 개 있습니다). 그러나 부트 스트랩 된 모델의 계수가 다를 때마다 (시행 횟수는 지속적으로 1000이지만). 보고서에서 어떤 것을 선택해야하는지 궁금합니다. 일부 변경 사항은 작고 계수의 중요도에 영향을 미치지 않지만 일부는 내 계수 중 일부를 중요하지 않습니다 (예 : 원래 모델에서 P 값이 0.05에 가까우면 0.06으로 변경됨).

  3. 10,000과 같이 더 높은 숫자를 선택해야합니까? 이 한계를 어떻게 확인할 수 있습니까?

  4. 다시 한 번 부트 스트랩해야합니까? 매번 결과가 다를 경우 결과에 의존 할 수 있습니까?

  5. 제 사건에 도움이 될만한 다른 아이디어가 있습니까?

많은 감사합니다.

답변:


21

부트 스트랩 은 회귀 계수의 샘플링 분포를 추정하여 회귀 계수의 표준 오차 / 신뢰 구간을 계산하는 리샘플링 방법입니다. 이 게시물 에는 좋은 설명이 있습니다. 필요한 복제 수에 대한 내용은 이 게시물을 참조하십시오 .

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

예를 들면 다음과 같습니다 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")이 선호됩니다. 원래 스케일에 대한 신뢰 구간을 제공합니다. 승산 비에 대한 신뢰 구간의 경우 신뢰 한계를 지수화하십시오.


완벽한 답변을 주셔서 감사합니다! :) 나는 이런 식으로 응답하자 : 1. 나는 그 개념에 약간 익숙했다. "바이어스"문제와 이러한 변형이 발생했음을 분명히 해 주셔서 감사합니다. 시도 횟수를 늘려야합니다. :) 2. "부트 스트래핑 된 모델"이란 하나의 리샘플링 된 모델을 의미하지 않았습니다. 그러나 나는 그 1000 반복의 평균을 의미했습니다. 실제로 나는 1000 번 반복하여 모델을 10 번 부트 스트랩했습니다. 그래서 10 개의 부트 스트랩 모델이 있습니다.
Vic

그들 각각은 "다른"결과를 보여줍니다. 그러나 10,000 개 리샘플링을 사용하는 부트 스트랩 모델 3 ~ 4 개를 반복 횟수가 10,000 개인 지 확인하고 다른 부트 스트랩 모델 (각각 10000 개)이 비슷하거나 100000 개를 더 늘려야합니까?
Vic

@Vic 귀하의 의견에 감사드립니다. 나는 각각 1000 반복으로 10 개의 부트 스트랩을하지 않지만 10'000 또는 더 많은 반복 (50'000?)으로 하나만 부트 스트랩을 수행합니다. 이를 통해 안정적인 추정값과 신뢰 구간을 얻을 수 있습니다.
COOLSerdash

3. 문제가되지 않습니다. 그 숫자를 어떤 기준으로 선택해야하는지 알고 싶습니까? 기본적으로 1000 번의 두 번의 부트 스트랩을 실행하고 각각 다른 시도를하면 다른 리샘플링 시험 (예 : 5000 또는 10000)이 필요하다는 것을 알 수 있습니다.
Vic

4. "매번 결과가 다르다"는 것은 무엇을 의미합니까? 복제 횟수가 충분히 높으면 부트 스트랩은 매번 매우 유사한 신뢰 구간과 포인트 추정치를 산출해야합니다. "
Vic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.