การถดถอยองค์ประกอบหลักใน r (ทีละขั้นตอน)


เมื่อกำหนดชุดของตัวแปรทำนาย p และตัวแปร ตอบสนอง การถดถอยเชิงเส้นพหุคูณ จะใช้วิธีที่เรียกว่า กำลังสองน้อยที่สุด เพื่อลดผลรวมที่เหลือของกำลังสอง (RSS):

RSS = Σ(ฉัน ฉัน – ŷ ฉัน ) 2

ทอง:

  • Σ : สัญลักษณ์กรีกหมายถึง ผลรวม
  • y i : ค่าตอบสนองจริงสำหรับการสังเกต ครั้งที่ 3
  • ŷ i : ค่าตอบสนองที่คาดการณ์ไว้ตามแบบจำลองการถดถอยเชิงเส้นพหุคูณ

อย่างไรก็ตาม เมื่อตัวแปรทำนายมีความสัมพันธ์กันสูง ความเป็นหลายคอลลิเนียร์ อาจกลายเป็นปัญหาได้ ซึ่งอาจทำให้การประมาณค่าสัมประสิทธิ์แบบจำลองไม่น่าเชื่อถือและแสดงความแปรปรวนสูง

วิธีหนึ่งที่จะหลีกเลี่ยงปัญหานี้คือการใช้ การถดถอยองค์ประกอบหลัก ซึ่งจะค้นหาชุดค่าผสมเชิงเส้น M (เรียกว่า “ส่วนประกอบหลัก”) ของตัวทำนาย p ดั้งเดิม จากนั้นใช้กำลังสองน้อยที่สุดเพื่อให้พอดีกับแบบจำลองการถดถอยเชิงเส้นโดยใช้ส่วนประกอบหลักเป็นตัวทำนาย

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

ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น

วิธีที่ง่ายที่สุดในการดำเนินการถดถอยส่วนประกอบหลักใน R คือการใช้ฟังก์ชันในแพ็คเกจ pls

 #install pls package (if not already installed)
install.packages(" pls ")

load pls package
library(pls)

ขั้นตอนที่ 2: ปรับโมเดล PCR

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล R ในตัวที่เรียกว่า mtcars ซึ่งมีข้อมูลเกี่ยวกับรถยนต์ประเภทต่างๆ:

 #view first six rows of mtcars dataset
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

สำหรับตัวอย่างนี้ เราจะปรับโมเดลการถดถอยส่วนประกอบหลัก (PCR) โดยใช้ hp เป็น ตัวแปรการตอบสนอง และตัวแปรต่อไปนี้เป็นตัวแปรทำนาย:

  • mpg
  • แสดง
  • อึ
  • น้ำหนัก
  • คิววินาที

รหัสต่อไปนี้แสดงวิธีปรับโมเดล PCR ให้พอดีกับข้อมูลนี้ สังเกตข้อโต้แย้งต่อไปนี้:

  • scale=TRUE : สิ่งนี้จะบอก R ว่าตัวแปรทำนายแต่ละตัวควรได้รับการปรับขนาดให้มีค่าเฉลี่ยเป็น 0 และค่าเบี่ยงเบนมาตรฐานเป็น 1 สิ่งนี้ทำให้แน่ใจได้ว่าไม่มีตัวแปรตัวทำนายใดที่มีอิทธิพลมากเกินไปในแบบจำลองหากวัดในหน่วยที่แตกต่างกัน .
  • validation=”CV” : สิ่งนี้จะบอก R ให้ใช้ การตรวจสอบข้าม k-fold เพื่อประเมินประสิทธิภาพของโมเดล โปรดทราบว่าสิ่งนี้ใช้ k=10 เท่าเป็นค่าเริ่มต้น โปรดทราบว่าคุณสามารถระบุ “LOOCV” แทนเพื่อทำการ ตรวจสอบข้ามแบบ Leave-One-Out
 #make this example reproducible
set.seed(1)

#fit PCR model
model <- pcr(hp~mpg+disp+drat+wt+qsec, data=mtcars, scale= TRUE , validation=" CV ")

ขั้นตอนที่ 3: เลือกจำนวนส่วนประกอบหลัก

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

ในการดำเนินการนี้ เพียงดูที่ค่าความคลาดเคลื่อนกำลังสองเฉลี่ยของรูทการทดสอบ (ทดสอบ RMSE) ที่คำนวณโดยการตรวจสอบความถูกต้องของ k-cross:

 #view summary of model fitting
summary(model)

Data: 
	Y dimension: 32 1
Fit method: svdpc
Number of components considered: 5

VALIDATION: RMSEP
Cross-validated using 10 random segments.
       (Intercept) 1 comp 2 comps 3 comps 4 comps 5 comps
CV 69.66 44.56 35.64 35.83 36.23 36.67
adjCV 69.66 44.44 35.27 35.43 35.80 36.20

TRAINING: % variance explained
    1 comp 2 comps 3 comps 4 comps 5 comps
X 69.83 89.35 95.88 98.96 100.00
hp 62.38 81.31 81.96 81.98 82.03

ผลลัพธ์มีตารางที่น่าสนใจสองตาราง:

1. การตรวจสอบความถูกต้อง: RMSEP

ตารางนี้บอกเราถึงการทดสอบ RMSE ที่คำนวณโดยการตรวจสอบข้าม k-fold เราสามารถเห็นสิ่งต่อไปนี้:

  • หากเราใช้เฉพาะคำดั้งเดิมในโมเดล RMSE ของการทดสอบคือ 69.66
  • หากเราเพิ่มองค์ประกอบหลักแรก การทดสอบ RMSE จะลดลงเหลือ 44.56
  • หากเราเพิ่มองค์ประกอบหลักตัวที่สอง การทดสอบ RMSE จะลดลงเหลือ 35.64

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

2. การฝึกอบรม: อธิบาย % ของความแปรปรวน

ตารางนี้บอกเราถึงเปอร์เซ็นต์ของความแปรปรวนในตัวแปรตอบสนองที่อธิบายโดยองค์ประกอบหลัก เราสามารถเห็นสิ่งต่อไปนี้:

  • การใช้เพียงองค์ประกอบหลักแรกเท่านั้น เราสามารถอธิบายความแปรผันของตัวแปรตอบสนองได้ 69.83%
  • ด้วยการเพิ่มองค์ประกอบหลักที่สอง เราสามารถอธิบายความแปรผันของตัวแปรตอบสนองได้ 89.35%

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

นอกจากนี้เรายังสามารถเห็นภาพการทดสอบ RMSE (พร้อมกับการทดสอบ MSE และ R-squared) ที่เป็นฟังก์ชันของจำนวนส่วนประกอบหลักโดยใช้ฟังก์ชัน validationplot()

 #visualize cross-validation plots
validationplot(model)
validationplot(model, val.type="MSEP")
validationplot(model, val.type="R2") 

การถดถอยองค์ประกอบหลักใน R

พล็อตการตรวจสอบความถูกต้องข้ามการถดถอยองค์ประกอบหลักใน R

การถดถอยองค์ประกอบหลัก R-squared ใน R

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

ดังนั้นแบบจำลองที่เหมาะสมที่สุดจึงมีเพียงองค์ประกอบหลักสองส่วนแรกเท่านั้น

ขั้นตอนที่ 4: ใช้แบบจำลองสุดท้ายเพื่อคาดการณ์

เราสามารถใช้แบบจำลอง PCR ส่วนประกอบสองหลักสุดท้ายเพื่อคาดการณ์เกี่ยวกับการสังเกตใหม่

รหัสต่อไปนี้แสดงวิธีแยกชุดข้อมูลดั้งเดิมออกเป็นชุดการฝึกและชุดทดสอบ และใช้แบบจำลอง PCR ที่มีองค์ประกอบหลักสองส่วนเพื่อคาดการณ์ชุดทดสอบ

 #define training and testing sets
train <- mtcars[1:25, c("hp", "mpg", "disp", "drat", "wt", "qsec")]
y_test <- mtcars[26: nrow (mtcars), c("hp")]
test <- mtcars[26: nrow (mtcars), c("mpg", "disp", "drat", "wt", "qsec")]
    
#use model to make predictions on a test set
model <- pcr(hp~mpg+disp+drat+wt+qsec, data=train, scale= TRUE , validation=" CV ")
pcr_pred <- predict(model, test, ncomp= 2 )

#calculate RMSE
sqrt ( mean ((pcr_pred - y_test)^2))

[1] 56.86549

เราจะเห็นว่า RMSE ของการทดสอบกลายเป็น 56.86549 นี่คือค่าเบี่ยงเบนเฉลี่ยระหว่างค่า HP ที่คาดการณ์ไว้กับค่า HP ที่สังเกตได้สำหรับการสังเกตชุดทดสอบ

การใช้งานโค้ด R อย่างเต็มรูปแบบในตัวอย่างนี้สามารถพบได้ ที่นี่

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

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