# Cài đặt các thư viện cần thiết (nếu chưa có)
#install.packages("tidyverse")
#install.packages("caTools")
#install.packages("pROC")
# Load thư viện
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(caTools)
## Warning: package 'caTools' was built under R version 4.4.3
library(pROC)
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
##
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
# Đọc dữ liệu
data_path <- "C:/Users/ADMIN/Documents"
iris_data <- read.csv(file.path(data_path, "iris.csv"))
heart_data <- read.csv(file.path(data_path, "framingham.csv"))
# Hồi quy tuyến tính trên tập Iris
model_lm <- lm(Petal.Length ~ Sepal.Length + Sepal.Width, data = iris_data)
# Hệ số R² và R² hiệu chỉnh
summary_lm <- summary(model_lm)
r_squared <- summary_lm$r.squared
adj_r_squared <- summary_lm$adj.r.squared
# In kết quả
cat("\nHồi quy tuyến tính:\n")
##
## Hồi quy tuyến tính:
cat(" R²:", round(r_squared, 4), "\n")
## R²: 0.867
cat(" Adjusted R²:", round(adj_r_squared, 4), "\n")
## Adjusted R²: 0.8652
# Hồi quy logistic trên tập Heart
# Loại bỏ giá trị NA
heart_data <- na.omit(heart_data)
# Tạo tập train/test (70% train, 30% test)
set.seed(42)
split <- sample.split(heart_data$TenYearCHD, SplitRatio = 0.7)
train_data <- subset(heart_data, split == TRUE)
test_data <- subset(heart_data, split == FALSE)
# Huấn luyện mô hình hồi quy logistic
model_logistic <- glm(TenYearCHD ~ ., data = train_data, family = binomial)
# Dự đoán xác suất trên tập test
y_probs <- predict(model_logistic, test_data, type = "response")
# Tính toán ROC Curve
roc_curve <- roc(test_data$TenYearCHD, y_probs)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_score <- auc(roc_curve)
# In kết quả AUC
cat("\nHồi quy Logistic:\n")
##
## Hồi quy Logistic:
cat(" AUC Score:", round(auc_score, 4), "\n")
## AUC Score: 0.715
# Vẽ ROC Curve
plot(roc_curve, col = "blue", main = "ROC Curve for Heart Disease Prediction", lwd = 2)
abline(a = 0, b = 1, col = "gray", lty = 2)
legend("bottomright", legend = paste("AUC =", round(auc_score, 2)), col = "blue", lwd = 2)
