R - การถดถอยเชิงเส้น

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

ในการถดถอยเชิงเส้นตัวแปรทั้งสองนี้เกี่ยวข้องกันโดยใช้สมการโดยเลขชี้กำลัง (กำลัง) ของตัวแปรทั้งสองคือ 1 ในทางคณิตศาสตร์ความสัมพันธ์เชิงเส้นแสดงถึงเส้นตรงเมื่อพล็อตเป็นกราฟ ความสัมพันธ์แบบไม่เป็นเชิงเส้นที่เลขชี้กำลังของตัวแปรใด ๆ ไม่เท่ากับ 1 จะสร้างเส้นโค้ง

สมการทางคณิตศาสตร์ทั่วไปสำหรับการถดถอยเชิงเส้นคือ -

y = ax + b

ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ที่ใช้ -

  • y คือตัวแปรตอบสนอง

  • x คือตัวแปรทำนาย

  • a และ b คือค่าคงที่ซึ่งเรียกว่าสัมประสิทธิ์

ขั้นตอนในการสร้างการถดถอย

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

ขั้นตอนในการสร้างความสัมพันธ์คือ -

  • ทำการทดลองรวบรวมตัวอย่างค่าที่สังเกตได้ของความสูงและน้ำหนักที่สอดคล้องกัน

  • สร้างแบบจำลองความสัมพันธ์โดยใช้ lm() ฟังก์ชันใน R

  • ค้นหาค่าสัมประสิทธิ์จากแบบจำลองที่สร้างขึ้นและสร้างสมการทางคณิตศาสตร์โดยใช้สิ่งเหล่านี้

  • รับข้อมูลสรุปของโมเดลความสัมพันธ์เพื่อทราบค่าเฉลี่ยข้อผิดพลาดในการทำนาย เรียกอีกอย่างว่าresiduals.

  • ในการทำนายน้ำหนักของบุคคลใหม่ให้ใช้ predict() ฟังก์ชันใน R

ป้อนข้อมูล

ด้านล่างนี้เป็นข้อมูลตัวอย่างที่แสดงถึงการสังเกต -

# Values of height
151, 174, 138, 186, 128, 136, 179, 163, 152, 131

# Values of weight.
63, 81, 56, 91, 47, 57, 76, 72, 62, 48

lm () ฟังก์ชัน

ฟังก์ชันนี้สร้างแบบจำลองความสัมพันธ์ระหว่างตัวทำนายและตัวแปรตอบสนอง

ไวยากรณ์

ไวยากรณ์พื้นฐานสำหรับ lm() ฟังก์ชันในการถดถอยเชิงเส้นคือ -

lm(formula,data)

ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ที่ใช้ -

  • formula เป็นสัญลักษณ์ที่แสดงความสัมพันธ์ระหว่าง x และ y

  • data คือเวกเตอร์ที่จะนำสูตรไปใช้

สร้างแบบจำลองความสัมพันธ์และรับค่าสัมประสิทธิ์

x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)

# Apply the lm() function.
relation <- lm(y~x)

print(relation)

เมื่อเรารันโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
   -38.4551          0.6746

รับข้อมูลสรุปของความสัมพันธ์

x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)

# Apply the lm() function.
relation <- lm(y~x)

print(summary(relation))

เมื่อเรารันโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q     Median      3Q     Max 
-6.3002    -1.6629  0.0412    1.8944  3.9775 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -38.45509    8.04901  -4.778  0.00139 ** 
x             0.67461    0.05191  12.997 1.16e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.253 on 8 degrees of freedom
Multiple R-squared:  0.9548,    Adjusted R-squared:  0.9491 
F-statistic: 168.9 on 1 and 8 DF,  p-value: 1.164e-06

ทำนาย () ฟังก์ชัน

ไวยากรณ์

ไวยากรณ์พื้นฐานสำหรับการทำนาย () ในการถดถอยเชิงเส้นคือ -

predict(object, newdata)

ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ที่ใช้ -

  • object คือสูตรที่สร้างขึ้นแล้วโดยใช้ฟังก์ชัน lm ()

  • newdata คือเวกเตอร์ที่มีค่าใหม่สำหรับตัวแปรทำนาย

คาดการณ์น้ำหนักของบุคคลใหม่

# The predictor vector.
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)

# The resposne vector.
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)

# Apply the lm() function.
relation <- lm(y~x)

# Find weight of a person with height 170.
a <- data.frame(x = 170)
result <-  predict(relation,a)
print(result)

เมื่อเรารันโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -

1 
76.22869

แสดงภาพการถดถอยแบบกราฟิก

# Create the predictor and response variable.
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
relation <- lm(y~x)

# Give the chart file a name.
png(file = "linearregression.png")

# Plot the chart.
plot(y,x,col = "blue",main = "Height & Weight Regression",
abline(lm(x~y)),cex = 1.3,pch = 16,xlab = "Weight in Kg",ylab = "Height in cm")

# Save the file.
dev.off()

เมื่อเรารันโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -