회귀의 부트스트래핑
이번에는 회귀 분석에서 부트스트래핑이 어떻게 동작하는지 살펴보겠습니다. 부트스트래핑은 비표준 추정량의 불확실성을 추정하는 데 도움이 됩니다. 회귀에 연결된 \(R^{2}\) 통계량을 생각해 봅시다. 단순 최소제곱 회귀를 실행하면 \(R^{2}\) 값을 얻을 수 있죠. 그렇다면 $R^2$의 95% 신뢰구간(CI)은 어떻게 구할 수 있을까요?
종속 변수 $y$와 두 개의 독립 변수 \(X1\), $X2$를 가진 DataFrame df를 df.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))