R 에서 부트스트랩 함수 사용하는 법
개요
R 에서 부트스트랩을 시행하는 코드를 직접 짜볼 수도 있지만, 기본적으로 제공되는 함수를 이용할 수도 있다. 그 과정은 아래와 같이 단순하지만 다른 함수들과 사용법에 다른 점이 많아서 처음엔 많이 낯설 것이다.
가이드
Step 1.
구하고 싶은 통계량을 반환하는 함수 boot.fn()을 정의한다. 당연히 여기서 함수의 이름은 어찌되든 상관 없다. 이때 인수 중엔 boot.fn<-function(dataset, index)
와 같이 두번째 옵션 index
가 있어야한다.
Step 2.
boot()
함수에 옵션 data, Statistic, R
을 설정하고 실행한다.
data
는 데이터셋,Statistic
은 Step 1. 에서 정의한 함수R
에는 반복할 횟수를 넣어준다.
예제
예제를 보면서 차근차근 따라해보도록 하자.
Default
는 채무불이행 여부와 그에 대한 조건들의 데이터셋이다. 당연히 default
변수가 종속변수고, 실제로 채무불이행까지 이어지는지의 예측문제이므로 로지스틱 회귀분석이 적절하다.
로지스틱 회귀분석의 결과는 위와 같다.
우리는 여기서 회귀계수에 대해 부트스트랩을 사용해볼 것이다.
부트스트랩에 쓰이는 함수는 위와 같이 dataset
과 index
라는 두 개의 인수가 필수적이다. dataset
은 오리지널 데이터를 받아주고, index
는 부트스트랩을 통한 재표본추출의 튜플을 받아줄 것이다.
return()
을 보면 알겠지만 해당 함수가 돌려주는 것은 모델이나 요약 전체가 아니라 회귀계수로 이루어진 벡터 뿐이다. 이렇게 함수를 포멀하게 정의할 필요가 있다보니 R에 대한 기초가 부족하면 부트스트랩 함수를 이해하기 어려울 것이다. 부트스트랩을 쓸 정도로 통계학에 숙달된 학습자라면 큰 문제는 없겠지만, 조금 어렵게 느껴져도 정상이니 자책하지 말자.
boot()
함수는 data
에 데이터셋을 받고 R에 실행 횟수를 받는다.Statistic
옵션이 받아주는 것은 boot.fn()
이 반환하는 ‘벡터’가 아니라 ‘함수 그 자체’인 boot.fn
라는 부분에서 많이 실수한다.
계속해서 에러가 난다면 대부분은 여기가 문제다. 실행 결과를 보면 첫번째 회귀계수부터 t1, t2, t3, t4로 나타나고 계수나 표준오차가 처음에 했던 로지스틱 회귀분석의 결과와 상당히 비슷하게 구해졌음을 확인할 수 있다. 여기서 부트스트랩을 통해 얻어내고자 하는 것은 점추정값인 original이 아니라 std. error라는 점에 주의하도록 하자. 잘 비교해보면 알겠지만 original이란 그냥 전체 데이터에서 얻은 회귀계수로써 부트스트랩 그 자체와는 하등 상관없고 필요없다.
코드
아래는 예제코드다. 부트스트랩같은 경우엔 너무 사용법이 특이해서 이해가 잘 안가면 그냥 예제를 자기 케이스에 맞게 바꿔 쓰기만해도 된다.
library(ISLR)
library(boot)
set.seed(150421)
data("Default")
head(Default)
summary(glm(default~.,family=binomial(),data=Default))
coef(glm(default~.,family=binomial(),data=dataset,subset=index))
boot.fn<-function(dataset,index)
{
return(coef(glm(default~.,family=binomial(),data=dataset,subset=index)))
}
boot.result<-boot(data=Default,Statistic=boot.fn,R=1000); boot.result