คู่มือฉบับสมบูรณ์เกี่ยวกับการถดถอยแบบทีละขั้นตอนใน r


การถดถอยแบบขั้นตอน เป็นขั้นตอนที่เราสามารถใช้สร้าง แบบจำลองการถดถอย จากชุดตัวแปรตัวทำนายโดยการป้อนและลบตัวทำนายในลักษณะทีละขั้นตอนในแบบจำลองจนกระทั่งไม่มีเหตุผลที่ถูกต้องทางสถิติอีกต่อไปในการป้อนหรือ ลบเพิ่มเติม

เป้าหมายของการถดถอยแบบขั้นตอนคือการสร้างแบบจำลองการถดถอยที่รวมตัวแปรทำนายทั้งหมดที่มีความเกี่ยวข้องอย่างมีนัยสำคัญทางสถิติกับ ตัวแปรตอบสนอง

บทช่วยสอนนี้จะอธิบายวิธีการดำเนินการขั้นตอนการถดถอยทีละขั้นตอนต่อไปนี้ใน R:

  • การเลือกไปข้างหน้าทีละขั้นตอน
  • การเลือกแบบย้อนกลับทีละขั้นตอน
  • การเลือกทีละขั้นตอนในทั้งสองทิศทาง

สำหรับแต่ละตัวอย่าง เราจะใช้ชุดข้อมูล mtcars ในตัว:

 #view first six rows of mtcars
head(mtcars)

                   mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1

เราจะปรับโมเดลการถดถอยเชิงเส้นหลายตัวให้เหมาะสมโดยใช้ mpg (ไมล์ต่อแกลลอน) เป็นตัวแปรตอบสนอง และตัวแปรอีก 10 ตัวในชุดข้อมูลเป็นตัวแปรทำนายที่เป็นไปได้

สำหรับแต่ละตัวอย่าง เราจะใช้ฟังก์ชัน step() ในตัวของแพ็คเกจสถิติเพื่อทำการเลือกแบบขั้นตอน ซึ่งใช้ไวยากรณ์ต่อไปนี้:

เวที (เฉพาะแบบจำลองการสกัดกั้น, ทิศทาง, พิสัย)

ทอง:

  • รุ่นเดิมเท่านั้น : สูตรเฉพาะรุ่นเดิมเท่านั้น
  • ทิศทาง: โหมดการค้นหาขั้นตอนอาจเป็น “ทั้งสอง”, “ย้อนกลับ” หรือ “ไปข้างหน้า”
  • ขอบเขต: สูตรที่ระบุตัวทำนายที่เราอยากจะพยายามป้อนลงในโมเดล

ตัวอย่างที่ 1: การเลือกไปข้างหน้าทีละขั้นตอน

รหัสต่อไปนี้แสดงวิธีการเลือกทีละขั้นตอน:

 #define intercept-only model
intercept_only <- lm(mpg ~ 1, data=mtcars)

#define model with all predictors
all <- lm(mpg ~ ., data=mtcars)

#perform forward stepwise regression
forward <- step(intercept_only, direction=' forward ', scope= formula (all), trace=0)

#view results of forward stepwise regression
forward$anova

   Step Df Deviance Resid. Df Resid. Dev AIC
1 NA NA 31 1126.0472 115.94345
2 + wt -1 847.72525 30 278.3219 73.21736
3 + cyl -1 87.14997 29 191.1720 63.19800
4 + hp -1 14.55145 28 176.6205 62.66456

#view final model
forward$coefficients

(Intercept) wt cyl hp 
 38.7517874 -3.1669731 -0.9416168 -0.0180381 

หมายเหตุ: อาร์กิวเมนต์การติดตาม=0 บอกให้ R ไม่ต้องแสดงผลลัพธ์ทั้งหมดของการเลือกทีละขั้นตอน ซึ่งอาจใช้พื้นที่มากหากมีตัวแปรทำนายจำนวนมาก

ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:

  • ขั้นแรก เราปรับให้เหมาะกับโมเดลแบบสกัดกั้นเท่านั้น โมเดลนี้มี AIC เท่ากับ 115.94345
  • จากนั้นเราจะปรับโมเดลที่เป็นไปได้ทั้งหมดให้เข้ากับตัวทำนาย แบบจำลองที่สร้าง AIC ต่ำสุดและมีการลดลงอย่างมีนัยสำคัญใน AIC เมื่อเปรียบเทียบกับแบบจำลองพื้นฐานเท่านั้นที่ใช้ตัวทำนาย น้ำหนัก โมเดลนี้มี AIC เท่ากับ 73.21736
  • ต่อไป เราจะปรับโมเดลที่เป็นไปได้ทั้งหมดให้พอดีกับตัวทำนายสองตัว แบบจำลองที่สร้าง AIC ต่ำสุดและยังมีการลดลงที่มีนัยสำคัญทางสถิติใน AIC เมื่อเปรียบเทียบกับแบบจำลองตัวทำนายเดี่ยวที่เพิ่มตัวทำนาย แบบทรงกระบอก โมเดลนี้มี AIC เท่ากับ 63.19800
  • ต่อไป เราจะปรับโมเดลที่เป็นไปได้ทั้งหมดให้เข้ากับตัวทำนายสามตัว แบบจำลองที่สร้าง AIC ต่ำที่สุดและมีการลดลงอย่างมีนัยสำคัญใน AIC เมื่อเปรียบเทียบกับแบบจำลองตัวทำนายสองตัวที่เพิ่มตัวทำนาย hp โมเดลนี้มี AIC เท่ากับ 62.66456
  • ต่อไป เราจะปรับโมเดลที่เป็นไปได้ทั้งหมดให้เข้ากับตัวทำนายสี่ตัว ปรากฎว่าไม่มีโมเดลใดที่ทำให้ AIC ลดลงอย่างมีนัยสำคัญ ดังนั้นเราจึงหยุดขั้นตอนนี้

โมเดลสุดท้ายกลายเป็น:

mpg ~ 38.75 – 3.17*น้ำหนัก – 0.94*สูบ – 0.02*hyp

ตัวอย่างที่ 2: การเลือกแบบย้อนกลับทีละขั้นตอน

รหัสต่อไปนี้แสดงวิธีการถอยหลัง:

 #define intercept-only model
intercept_only <- lm(mpg ~ 1, data=mtcars)

#define model with all predictors
all <- lm(mpg ~ ., data=mtcars)

#perform backward stepwise regression
backward <- step(all, direction=' backward ', scope= formula (all), trace=0)

#view results of backward stepwise regression
backward$anova

    Step Df Deviance Resid. Df Resid. Dev AIC
1 NA NA 21 147.4944 70.89774
2 - cyl 1 0.07987121 22 147.5743 68.91507
3 - vs 1 0.26852280 23 147.8428 66.97324
4 - carb 1 0.68546077 24 148.5283 65.12126
5 - gear 1 1.56497053 25 150.0933 63.45667
6 - drat 1 3.34455117 26 153.4378 62.16190
7 - available 1 6.62865369 27 160.0665 61.51530
8 - hp 1 9.21946935 28 169.2859 61.30730

#view final model
backward$coefficients

(Intercept) wt qsec am 
   9.617781 -3.916504 1.225886 2.935837

ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:

  • ขั้นแรก เราปรับโมเดลโดยใช้ตัวทำนาย p ทั้งหมด กำหนดสิ่งนี้เป็น M p
  • จากนั้น สำหรับ k = p, p-1,…1 เราจะใส่โมเดล k ทั้งหมดที่มีตัวทำนายทั้งหมดยกเว้นตัวทำนายเดียวใน M k เพื่อให้ได้ตัวแปรตัวทำนาย k-1 ทั้งหมด จากนั้นเลือกสิ่งที่ดีที่สุดจากรุ่น k เหล่านี้แล้วเรียกมันว่า M k-1
  • สุดท้ายเราเลือกรุ่นที่ดีที่สุดจาก M 0 … M p โดยใช้ AIC

โมเดลสุดท้ายกลายเป็น:

mpg ~ 9.62 – 3.92*น้ำหนัก + 1.23*qsec + 2.94*น.

ตัวอย่างที่ 3: การเลือกทีละขั้นตอนในทั้งสองทิศทาง

รหัสต่อไปนี้แสดงวิธีการเลือกทีละขั้นตอนในทั้งสองทิศทาง:

 #define intercept-only model
intercept_only <- lm(mpg ~ 1, data=mtcars)

#define model with all predictors
all <- lm(mpg ~ ., data=mtcars)

#perform backward stepwise regression
both <- step(intercept_only, direction=' both ', scope= formula (all), trace=0)

#view results of backward stepwise regression
both$anova

   Step Df Deviance Resid. Df Resid. Dev AIC
1 NA NA 31 1126.0472 115.94345
2 + wt -1 847.72525 30 278.3219 73.21736
3 + cyl -1 87.14997 29 191.1720 63.19800
4 + hp -1 14.55145 28 176.6205 62.66456

#view final model
both$coefficients

(Intercept) wt cyl hp 
 38.7517874 -3.1669731 -0.9416168 -0.0180381 

ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:

  • ขั้นแรก เราปรับให้เหมาะกับโมเดลแบบสกัดกั้นเท่านั้น
  • ต่อไป เราได้เพิ่มตัวทำนายให้กับโมเดลตามลำดับ เช่นเดียวกับที่เราทำกับการเลือกทีละขั้นตอน อย่างไรก็ตาม หลังจากเพิ่มตัวทำนายแต่ละตัวแล้ว เรายังลบตัวทำนายใดๆ ที่ไม่ได้ให้การปรับปรุงความพอดีของแบบจำลองอีกต่อไป
  • เราทำซ้ำขั้นตอนนี้จนกว่าเราจะได้แบบจำลองขั้นสุดท้าย

โมเดลสุดท้ายกลายเป็น:

mpg ~ 9.62 – 3.92*น้ำหนัก + 1.23*qsec + 2.94*น.

โปรดทราบว่าการเลือกขั้นไปข้างหน้าและการเลือกขั้นในทั้งสองทิศทางจะสร้างรูปแบบสุดท้ายที่เหมือนกัน ในขณะที่การเลือกขั้นถอยหลังจะสร้างรูปแบบที่แตกต่างกัน

แหล่งข้อมูลเพิ่มเติม

วิธีทดสอบความสำคัญของความชันการถดถอย
วิธีอ่านและตีความตารางการถดถอย
คู่มือ Multicollinearity ในการถดถอย

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *