1 Tạo function cho hồi quy đơn chưa có số liệu sẵn

hoiquydon <- function (x, y) {
  n <- length(x)
  sumX <- sum(x)
  sumY <- sum(y)
  sumXY <- sum(x * y)
  sumXX <- sum(x * x)
  
  slope <- (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX)
  intercept <- (sumY - slope * sumX) / n
  
  return(list(slope = slope, intercept = intercept))
}
# Sử dụng hàm:
x <- c(1, 2, 3, 4, 5)
y <- c(2, 4, 5, 4, 5)

result <- hoiquydon(x, y)
slope <- result$slope
intercept <- result$intercept

print(paste("slope:", slope))
## [1] "slope: 0.6"
print(paste("intercept:", intercept))
## [1] "intercept: 2.2"

Hàm hồi quy đơn nhận đầu vào là hai vector x và y, tương ứng với các giá trị của các điểm dữ liệu. Nó tính toán hệ số góc và hệ số giao của đường hồi quy và trả về dưới dạng một list chứa hai phần tử slope và intercept.

Trong ví dụ trên, giá trị slope là 0.6 và giá trị intercept là 2.2

2 Tạo function cho hồi quy tuyến tính với data có sẵn

Tiếp theo em sẽ tạo thêm một function hồi quy tuyến tính khác với data có sẵn

hoiquytuyentinh <- function(data,x, y) {
  # Chạy hồi quy tuyến tính
  fit <- lm(formula = paste(y, "~", x), data = data)
  # Trả về mô hình hồi quy tuyến tính
  options(digits = 10)
  return(summary(fit))
}

Sau tính toán hồi quy ta sẽ tạo function vẽ biểu đồ hồi quy

bieudo <- function(data, x, y) {
  library(ggplot2) 
   # Vẽ đồ thị phân tán và đường hồi quy
  ggplot(data, aes_string(x = x, y = y)) +
    geom_point() +
    geom_smooth(method = "lm", se = FALSE, color = "yellow") +
    labs(title = "Biểu đồ phân tán và đường hồi quy",
         x = x,
         y = y) +
    theme_minimal()
}
# Sử dụng hàm:
library(readr)
Salary_Data <- read_csv("~/2121001544_Ngoen/E/Salary_Data.csv")

hoiquytuyentinh(Salary_Data,"YearsExperience","Age")
## 
## Call:
## lm(formula = paste(y, "~", x), data = data)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -1.4745162 -0.7472009 -0.1221230  0.5676532  1.4893752 
## 
## Coefficients:
##                    Estimate  Std. Error  t value   Pr(>|t|)    
## (Intercept)     17.67644178  0.32823608 53.85283 < 2.22e-16 ***
## YearsExperience  1.79552539  0.05469335 32.82895 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8358509 on 28 degrees of freedom
## Multiple R-squared:  0.9746776,  Adjusted R-squared:  0.9737732 
## F-statistic:  1077.74 on 1 and 28 DF,  p-value: < 2.2204e-16
bieudo(Salary_Data,"YearsExperience","Age")

Thống kê F được lấy 2 chữ số sau dấu phẩy. Rõ ràng, nếu căn cứ theo các tiêu chuẩn truyền thống thì mô hình hồi quy của chúng ta là tốt thể hiện ở: (1) tất cả các hệ số hồi quy có ý nghĩa thống kê ở mức 5%, (2) R2 rất cao, và (3) thống kê F có giá trị lớn.

3 Tạo function cho hồi quy tuyến tính không có hệ số chặn