เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

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))
แก้ไขและรันโค้ด