R - Hồi quy tuyến tính

Phân tích hồi quy là một công cụ thống kê được sử dụng rất rộng rãi để thiết lập mô hình mối quan hệ giữa hai biến. Một trong những biến này được gọi là biến dự báo có giá trị được thu thập thông qua các thử nghiệm. Biến còn lại được gọi là biến phản hồi mà giá trị của nó được lấy từ biến dự đoán.

Trong Hồi quy tuyến tính, hai biến này có quan hệ với nhau thông qua một phương trình, trong đó số mũ (lũy thừa) của cả hai biến này là 1. Về mặt toán học, một quan hệ tuyến tính biểu diễn một đường thẳng khi được vẽ dưới dạng đồ thị. Một mối quan hệ phi tuyến tính trong đó số mũ của bất kỳ biến nào không bằng 1 sẽ tạo ra một đường cong.

Phương trình toán học tổng quát cho hồi quy tuyến tính là:

y = ax + b

Sau đây là mô tả về các tham số được sử dụng:

  • y là biến phản hồi.

  • x là biến dự báo.

  • ab là các hằng số được gọi là hệ số.

Các bước thiết lập hồi quy

Một ví dụ đơn giản của hồi quy là dự đoán cân nặng của một người khi biết chiều cao của người đó. Để làm được điều này chúng ta cần có mối quan hệ giữa chiều cao và cân nặng của một người.

Các bước để tạo mối quan hệ là -

  • Thực hiện thí nghiệm thu thập mẫu các giá trị quan sát được về chiều cao và cân nặng tương ứng.

  • Tạo mô hình mối quan hệ bằng cách sử dụng lm() hàm trong R.

  • Tìm các hệ số từ mô hình đã tạo và tạo phương trình toán học bằng cách sử dụng

  • Nhận tóm tắt mô hình mối quan hệ để biết sai số trung bình trong dự đoán. Còn được gọi làresiduals.

  • Để dự đoán cân nặng của những người mới, hãy sử dụng predict() hàm trong R.

Dữ liệu đầu vào

Dưới đây là dữ liệu mẫu đại diện cho các quan sát -

# 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

Hàm lm ()

Hàm này tạo ra mô hình mối quan hệ giữa yếu tố dự đoán và biến phản hồi.

Cú pháp

Cú pháp cơ bản cho lm() hàm trong hồi quy tuyến tính là -

lm(formula,data)

Sau đây là mô tả về các tham số được sử dụng:

  • formula là một biểu tượng trình bày mối quan hệ giữa x và y.

  • data là vectơ mà công thức sẽ được áp dụng.

Tạo mô hình mối quan hệ và nhận Hệ số

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)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau:

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
   -38.4551          0.6746

Nhận bản tóm tắt mối quan hệ

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))

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau:

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

hàm dự đoán ()

Cú pháp

Cú pháp cơ bản để dự đoán () trong hồi quy tuyến tính là:

predict(object, newdata)

Sau đây là mô tả về các tham số được sử dụng:

  • object là công thức đã được tạo bằng hàm lm ().

  • newdata là vectơ chứa giá trị mới cho biến dự đoán.

Dự đoán cân nặng của người mới

# 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)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau:

1 
76.22869

Trực quan hóa hồi quy bằng đồ họa

# 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()

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau: