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