ตัวอย่าง Linear Regression ใน R แบบง่ายๆ [พร้อมโค้ดและคำอธิบาย]

By Leonard Cucosth
สถิติR Programmingวิธีวิจัย

ในตัวอย่าง Linear Regression ใน R แบบปฏิบัติจริงนี้ เราจะมาเรียนรู้วิธีทำนายประสิทธิภาพการใช้เชื้อเพลิงของรถยนต์จากน้ำหนัง เราจะเริ่มต้นด้วยการนำเข้าข้อมูล (dataset) การคำนวณ Linear Regression ด้วยฟังก์ชัน lm() การทำนายผลลัพธ์ด้วยฟังก์ชัน predict() และการเรียนรู้วิธีแปลผลการวิเคราะห์ Linear Regression ใน R

แม้ว่าเราจะใช้ข้อมูลตัวอย่าง mtcars ที่มีอยู่ใน R เพื่อสาธิตวิธีคำนวณ Linear Regression แต่คุณสามารถใช้ R datasets ใดก็ได้ที่มีตัวแปรอิสระและตัวแปรตาม

มาเริ่มกันเลย เปิดโปรแกรม R หรือ R Studio บนคอมพิวเตอร์ของคุณ

ขั้นตอนที่ 1: นำเข้าข้อมูล (Dataset) ใน R

ในการเริ่มต้น เราต้องมีชุดข้อมูลสำหรับการวิเคราะห์ เราจะใช้ชุดข้อมูล mtcars ซึ่งประกอบด้วยน้ำหนักและประสิทธิภาพการใช้เชื้อเพลิง (วัดเป็น miles per gallon) ของรถยนต์แต่ละรุ่น ชุดข้อมูลนี้มีอยู่แล้วใน R และสามารถโหลดได้ด้วยฟังก์ชัน data() พิมพ์คำสั่งต่อไปนี้ใน R shell:

data(mtcars)

คุณสามารถดูข้อมูลได้โดยใช้ฟังก์ชัน head() ซึ่งจะแสดงแถวแรกๆ ของชุดข้อมูล:

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, cyl, disp, hp, drat, wt, qsec, vs, am, gear และ carb ของรถยนต์แต่ละยี่ห้อ

ขั้นตอนที่ 2: คำนวณ Linear Regression ใน R

เมื่อโหลดข้อมูลเรียบร้อยแล้ว เราสามารถเริ่มทำ Linear Regression ได้ โดยใช้ฟังก์ชัน lm()

model <- lm(mpg ~ wt, data = mtcars)

Argument แรกของฟังก์ชันคือ formula ที่ระบุโมเดล ในกรณีนี้ โมเดลกำลังทำนาย mpg (ประสิทธิภาพการใช้เชื้อเพลิง) โดยใช้ wt (น้ำหนัก) ส่วน argument data = mtcars ระบุว่าชุดข้อมูลที่จะใช้คือ mtcars

ขั้นตอนที่ 3: ดูสรุปผลของ Regression Model

เมื่อ fit โมเดลเสร็จแล้ว คุณสามารถดูสรุปผลของโมเดลได้โดยใช้ฟังก์ชัน summary() การสรุปนี้จะรวมข้อมูลเกี่ยวกับ residuals, coefficients, R-squared value, F-statistic และ p-value

นี่คือตัวอย่างวิธีดูสรุปผลของโมเดล:

summary(model)

สรุปผลของ Linear Regression Model จะมีลักษณะดังนี้:

Call:
lm(formula = mpg ~ wt, data = mtcars)

Residuals:
    Min        1Q      Median        3Q       Max
-4.5275   -2.3279   -0.4826    1.2975   6.8724

Coefficients:
              Estimate   Std. Error   t value   Pr(>|t|)
(Intercept)   37.2853      1.8245     20.527    < 2e-16 ***
wt            -5.3445      0.5534     -9.659    1.29e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.576 on 30 degrees of freedom
Multiple R-squared:  0.7528      Adjusted R-squared:  0.7448
F-statistic: 93.59 on 1 and 30 DF,  p-value: 1.294e-10

ขั้นตอนที่ 4: การอ่านค่าและแปลผล Linear Regression

เมื่อได้ผลลัพธ์แล้ว มาทำความเข้าใจวิธีการแปลผล Linear Regression สำหรับตัวอย่างของเรา:

  • ผลลัพธ์แสดงว่า coefficient สำหรับ wt (น้ำหนัก) มีค่า -5.34447 และค่า intercept คือ 37.28536

  • P-value มีค่าน้อยกว่า 0.05 แสดงว่าความสัมพันธ์ระหว่างน้ำหนักและประสิทธิภาพการใช้เชื้อเพลิงมีนัยสำคัญทางสถิติ

  • ค่า R-squared ซึ่งวัดสัดส่วนของความแปรปรวนในตัวแปรตามที่ถูกอธิบายโดยตัวแปรอิสระ มีค่า 0.7528 นี่หมายความว่าน้ำหนักของรถยนต์สามารถอธิบาย75.28% ของความแปรปรวนในประสิทธิภาพการใช้เชื้อเพลิง

ขั้นตอนที่ 5: พล็อต Regression Line ในกราฟ

การใช้เพียงตัวเลขโดยไม่มีกราฟภาพดูไม่น่าสนใจ คุณสามารถพล็อต Regression Line ในกราฟโดยใช้ package ggplot2 ใน R นี่คือคู่มือเกี่ยวกับวิธีติดตั้ง packages ใน R หากคุณต้องการ

library(ggplot2)

# Create a scatterplot
ggplot(mtcars, aes(x=wt, y=mpg)) +
 geom_point() +
 geom_smooth(method='lm', se=FALSE) +
 ggtitle("Linear Regression of mpg vs wt")

Scatterplot แสดงความสัมพันธ์ระหว่างน้ำหนัก (wt) และประสิทธิภาพการใช้เชื้อเพลิง (mpg) เส้นตรงแสดง Regression Line ซึ่งเป็นเส้นที่พอดีที่สุดกับข้อมูล (best fit line)

เส้นนี้มาจาก coefficients ของ Linear Regression Model ที่เรา fit ไว้ก่อนหน้านี้ Scatterplot ให้ภาพแสดงความสัมพันธ์ระหว่างตัวแปรอิสระและตัวแปรตาม และ Regression Line สรุปความสัมพันธ์นั้น

ขั้นตอนที่ 6: ใช้ Linear Regression ใน R เพื่อทำนายผลลัพธ์

เมื่อเรามี Linear Regression Model ใน R แล้ว ก็ถึงเวลาใช้มันเพื่อทำนายผลลัพธ์โดยใช้ syntax ต่อไปนี้:

predictions <- predict(lm_fit, newdata=data.frame(wt=c(3,4)))
predictions

ผลลัพธ์ของโค้ดนี้จะเป็นค่าที่ทำนายของ mpg สำหรับค่าสองค่าของ wt โดยที่:

  • predict คือฟังก์ชันใน R ที่ใช้สำหรับทำนายผลลัพธ์จาก Linear Regression Model

  • lm_fit คือ object ที่เก็บ fitted Linear Regression Model ในตัวอย่างนี้ lm_fit คือ object ที่สร้างจากการวิเคราะห์ Linear Regression โดยใช้ฟังก์ชัน lm

  • newdata คือ argument ที่ระบุค่าของตัวแปรอิสระ (ในกรณีนี้คือ wt) ที่คุณต้องการทำนายผลลัพธ์ ค่าต่างๆ ถูกส่งผ่านเป็น data frame โดยใช้ฟังก์ชัน data.frame ค่าของ wt ในตัวอย่างนี้คือ c(3,4) หมายความว่าการทำนายจะทำสำหรับรถยนต์ที่มีน้ำหนัก 3,000 และ 4,000 ปอนด์ตามลำดับ

ผลลัพธ์ของโค้ดนี้จะเป็นค่าที่ทำนายของตัวแปรตาม (ในกรณีนี้คือ mpg) โดยอิงจากค่าของตัวแปรอิสระที่ระบุใน newdata

และนี่คือผลลัพธ์สำหรับการทำนายโดยใช้ฟังก์ชันข้างต้น:

       1         2
22.56687  20.80958

ตัวเลขเหล่านี้แสดงค่าที่ทำนายของ mpg สำหรับรถยนต์สองคันที่มีน้ำหนัก 3,000 ปอนด์และ 4,000 ปอนด์ตามลำดับ ค่าที่ทำนายสามารถแปลความหมายได้ดังนี้:

  • สำหรับรถยนต์ที่มีน้ำหนัก 3,000 ปอนด์ Linear Regression Model ทำนายค่า 22.57 mpg

  • สำหรับรถยนต์ที่มีน้ำหนัก 4,000 ปอนด์ Linear Regression Model ทำนายค่า 20.81 mpg

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

หากจำเป็น คุณสามารถเปรียบเทียบค่าที่ทำนายกับค่าจริงได้โดยใช้ฟังก์ชัน cbind() เพื่อรวมค่าที่ทำนายและค่าจริงเข้าไว้ใน data frame เดียวกันด้วย syntax ต่อไปนี้:

results <- cbind(predictions, mtcars$mpg)

คำถามที่พบบ่อย

ฟังก์ชัน lm() ใน R ใช้สำหรับสร้างโมเดล Linear Regression ย่อมาจาก 'linear model' และคำนวณความสัมพันธ์ระหว่าง Dependent Variable (ตัวแปรตาม) และ Independent Variables (ตัวแปรอิสระ) หนึ่งตัวขึ้นไป รูปแบบพื้นฐานคือ lm(y ~ x, data = dataset) โดย y คือตัวแปรตามและ x คือตัวแปรอิสระ ฟังก์ชันจะส่งกลับวัตถุโมเดลที่มี Coefficients, Residuals, Fitted Values และข้อมูลทางสถิติอื่นๆ ที่จำเป็นสำหรับการวิเคราะห์และการทำนาย
ค่า R-squared (หรือที่เรียกว่า Coefficient of Determination) วัดว่าโมเดล Linear Regression ของคุณเหมาะสมกับข้อมูลได้ดีเพียงใด มีค่าตั้งแต่ 0 ถึง 1 โดย 0 หมายความว่าโมเดลไม่สามารถอธิบายความแปรปรวนได้เลย และ 1 หมายความว่าอธิบายได้ทั้งหมด ตัวอย่างเช่น R-squared ที่ 0.75 หมายความว่า 75% ของความแปรปรวนในตัวแปรตามถูกอธิบายโดยตัวแปรอิสระ โดยทั่วไปค่า R-squared ที่สูงกว่าบอกว่าโมเดลเหมาะสมกว่า แต่ค่าที่ยอมรับได้ขึ้นอยู่กับสาขาของคุณ - สังคมศาสตร์มักยอมรับ 0.50+ ในขณะที่วิทยาศาสตร์กายภาพอาจต้องการ 0.90+
Coefficient ที่เป็นลบใน Linear Regression บอกว่ามีความสัมพันธ์แบบผกผันระหว่างตัวแปรอิสระและตัวแปรตาม ตัวอย่างเช่น ในตัวอย่างน้ำหนักรถของเรา Coefficient สำหรับน้ำหนักคือ -5.34 ซึ่งหมายความว่าสำหรับทุกการเพิ่มขึ้น 1 หน่วยในน้ำหนัก (1000 ปอนด์) ประสิทธิภาพการใช้เชื้อเพลิง (mpg) จะลดลง 5.34 ไมล์ต่อแกลลอน Coefficients ที่เป็นลบแสดงว่าเมื่อตัวแปรหนึ่งเพิ่มขึ้น อีกตัวจะลดลง ขนาดของ Coefficient บอกคุณถึงความแข็งแกร่งของความสัมพันธ์นี้
เพื่อทำนายด้วยโมเดล Linear Regression ของคุณใน R ให้ใช้ฟังก์ชัน predict() ขั้นแรกสร้างโมเดลของคุณด้วย lm() จากนั้นใช้ predict(model, newdata) โดย newdata เป็น Data Frame ที่มีค่าตัวแปรอิสระ ตัวอย่างเช่น: model <- lm(mpg ~ wt, data = mtcars) จากนั้น predictions <- predict(model, newdata = data.frame(wt = c(2.5, 3.0, 3.5))) นี่จะส่งกลับค่า mpg ที่ทำนายสำหรับรถที่มีน้ำหนัก 2.5, 3.0 และ 3.5 พันปอนด์ คุณยังสามารถเพิ่ม interval = 'confidence' หรือ interval = 'prediction' เพื่อรับ Confidence Intervals หรือ Prediction Intervals
P-value ใน Linear Regression ทดสอบว่าความสัมพันธ์ระหว่างตัวแปรอิสระและตัวแปรตามของคุณมีนัยสำคัญทางสถิติหรือไม่ P-value ที่น้อยกว่า 0.05 (ระดับนัยสำคัญ 5%) มักบอกว่าความสัมพันธ์มีนัยสำคัญทางสถิติและไม่ได้เกิดจากความบังเอิญ ใน Summary Output คุณจะเห็น P-values สำหรับแต่ละ Coefficient ตัวอย่างเช่น Pr(>|t|) = 1.29e-10 (ซึ่งคือ 0.000000000129) มีนัยสำคัญสูงมาก หมายความว่าคุณสามารถปฏิเสธ Null Hypothesis ที่ว่าไม่มีความสัมพันธ์ระหว่างตัวแปรได้อย่างมั่นใจ
คอลัมน์ Estimate ใน Regression Output แสดงค่า Coefficient สำหรับโมเดลของคุณ Intercept Estimate คือค่าที่ทำนายของตัวแปรตามเมื่อตัวแปรอิสระทั้งหมดเป็นศูนย์ สำหรับตัวแปรอิสระ Estimate แสดงว่าตัวแปรตามเปลี่ยนแปลงเท่าไรสำหรับการเพิ่มขึ้นหนึ่งหน่วยในตัวแปรนั้น โดยคงตัวแปรอื่นไว้ ตัวอย่างเช่น ถ้าน้ำหนักมี Estimate เป็น -5.34 หมายความว่า mpg ลดลง 5.34 สำหรับทุกการเพิ่มขึ้น 1 หน่วยในน้ำหนัก Estimates เหล่านี้สร้างสมการ Regression ของคุณ: y = Intercept + (Estimate × x)
Linear Regression มี Assumptions หลัก 4 ข้อที่คุณควรตรวจสอบ: (1) Linearity - ความสัมพันธ์ระหว่างตัวแปรเป็นเส้นตรง; (2) Independence - การสังเกตเป็นอิสระ; (3) Homoscedasticity - Residuals มี Variance คงที่; (4) Normality - Residuals แจกแจงแบบปกติ ใน R ใช้กราฟวินิจฉัยด้วย plot(model) เพื่อตรวจสอบ กราฟแรก (Residuals vs Fitted) ตรวจสอบ Linearity และ Homoscedasticity, กราฟ Q-Q ตรวจสอบ Normality และคุณสามารถใช้ Durbin-Watson Test สำหรับ Independence การละเมิด Assumptions เหล่านี้อาจต้องมีการแปลงข้อมูลหรือวิธีการสร้างโมเดลทางเลือก
ได้ ฟังก์ชัน lm() จัดการทั้ง Simple และ Multiple Linear Regression สำหรับตัวแปรอิสระหลายตัว เพียงเพิ่มเข้าไปในสูตรของคุณด้วยเครื่องหมาย +: lm(y ~ x1 + x2 + x3, data = dataset) ตัวอย่างเช่น เพื่อทำนาย mpg โดยใช้ทั้งน้ำหนักและแรงม้า: model <- lm(mpg ~ wt + hp, data = mtcars) Summary Output จะแสดง Coefficients สำหรับแต่ละ Predictor ทำให้คุณเข้าใจว่าแต่ละตัวแปรส่งผลต่อ Response อย่างไรอย่างอิสระ คุณยังสามารถรวม Interaction Terms โดยใช้ * (เช่น wt * hp) เพื่อทดสอบว่าผลของตัวแปรหนึ่งขึ้นอยู่กับอีกตัวหรือไม่

สรุป

การทำ Linear Regression ใน R เป็นวิธีที่มีประสิทธิภาพในการทำความเข้าใจความสัมพันธ์ระหว่างตัวแปรและการทำนายผลลัพธ์ ในบทความนี้ เราได้แสดงวิธีการทำ Linear Regression ใน R โดยใช้ฟังก์ชัน lm() วิธีการทำนายผลลัพธ์โดยใช้ฟังก์ชัน predict() และวิธีการแปลผลลัพธ์

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Linear Regression สามารถศึกษาการวิเคราะห์ Linear Regression ใน SPSS หรือเรียนรู้เกี่ยวกับตัวแปรอิสระและตัวแปรตาม เพื่อทำความเข้าใจพื้นฐานที่สำคัญของการวิเคราะห์ Regression