시작하기무료로 시작하기

회귀의 부트스트래핑

이번에는 회귀 분석에서 부트스트래핑이 어떻게 동작하는지 살펴보겠습니다. 부트스트래핑은 비표준 추정량의 불확실성을 추정하는 데 도움이 됩니다. 회귀에 연결된 \(R^{2}\) 통계량을 생각해 봅시다. 단순 최소제곱 회귀를 실행하면 \(R^{2}\) 값을 얻을 수 있죠. 그렇다면 $R^2$의 95% 신뢰구간(CI)은 어떻게 구할 수 있을까요?

종속 변수 $y$와 두 개의 독립 변수 \(X1\), $X2$를 가진 DataFrame dfdf.head()로 살펴보세요. 이 회귀는 이미 statsmodels(sm)로 다음과 같이 적합해 두었습니다:

reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()

reg_fit.summary()로 결과를 확인하면 $R^{2}=0.3504$임을 알 수 있어요. 부트스트래핑을 사용해 95% CI를 계산해 보세요.

이 연습은 강의의 일부입니다

Python으로 하는 통계 시뮬레이션

강의 보기

연습 안내

  • pandas DataFrame의 sample() 메서드를 사용해 원본 데이터셋에서 부트스트랩 표본을 추출하세요. 행의 개수는 원본 DataFrame과 동일해야 합니다.
  • sm.OLS()reg_fit()과 유사한 회귀를 적합하고, rsquared 속성을 사용해 \(R^{2}\) 통계량을 추출하세요.
  • 리스트 rsquared_boot에 \(R^{2}\) 값을 추가하세요.
  • np.percentile()을 사용해 rsquared_boot의 95% CI를 r_sq_95_ci로 계산하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

rsquared_boot, coefs_boot, sims = [], [], 1000
reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()

# Run 1K iterations
for i in range(sims):
    # First create a bootstrap sample with replacement with n=df.shape[0]
    bootstrap = ____
    # Fit the regression and append the r square to rsquared_boot
    rsquared_boot.append(____(bootstrap['y'],bootstrap.iloc[:,1:]).fit().rsquared)

# Calculate 95% CI on rsquared_boot
r_sq_95_ci = ____
print("R Squared 95% CI = {}".format(r_sq_95_ci))
코드 편집 및 실행