Bootstrap กับการถดถอย
มาดูกันว่า bootstrapping ทำงานร่วมกับการถดถอยอย่างไร Bootstrap ช่วยประมาณความไม่แน่นอนของตัวประมาณที่ไม่ได้เป็นมาตรฐานทั่วไป ลองพิจารณาค่าสถิติ \(R^{2}\) ที่ได้จากการถดถอย เมื่อรันการถดถอยกำลังสองน้อยที่สุด (least squares) จะได้ค่า \(R^{2}\) ค่าหนึ่ง แต่เราจะหาช่วงความเชื่อมั่น 95% สำหรับ \(R^2\) ได้อย่างไร?
ตรวจสอบ DataFrame df ที่มีตัวแปรตาม \(y\) และตัวแปรอิสระสองตัวคือ \(X1\) และ \(X2\) โดยใช้ df.head() เราได้ fit การถดถอยนี้ด้วย statsmodels (sm) ไว้แล้วด้วยโค้ดต่อไปนี้:
reg_fit = sm.OLS(df['y'], df.iloc[:,1:]).fit()
ตรวจสอบผลลัพธ์ด้วย reg_fit.summary() จะพบว่า \(R^{2}=0.3504\) จากนั้นใช้ bootstrapping เพื่อคำนวณช่วงความเชื่อมั่น 95%
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การจำลองทางสถิติด้วย Python
คำแนะนำการฝึกหัด
- สุ่ม bootstrap sample จากชุดข้อมูลเดิมโดยใช้เมธอด
sample()ของ pandas DataFrame โดยให้จำนวนแถวเท่ากับ DataFrame ต้นฉบับ - Fit การถดถอยในลักษณะเดียวกับ
reg_fit()โดยใช้sm.OLS()แล้วดึงค่าสถิติ \(R^{2}\) ออกมาด้วยพารามิเตอร์rsquared - เพิ่มค่า \(R^{2}\) ที่ได้ลงในลิสต์
rsquared_boot - คำนวณช่วงความเชื่อมั่น 95% ของ
rsquared_bootเป็นr_sq_95_ciโดยใช้np.percentile()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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))