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