# câu 1:
# Sử dụng dataset có sẵn trong R
data("airquality")

# Xem trước dữ liệu
head(airquality)
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6
# Xử lý dữ liệu: Xóa hàng chứa NA
df <- na.omit(airquality)

# Chia tập dữ liệu thành train (80%) và test (20%)
set.seed(42)
train_index <- sample(seq_len(nrow(df)), size = 0.8 * nrow(df))
train_data <- df[train_index, ]
test_data  <- df[-train_index, ]

# Xây dựng mô hình hồi quy tuyến tính để dự đoán Ozone
model <- lm(Ozone ~ ., data = train_data)

# Dự đoán trên tập kiểm tra
y_pred <- predict(model, test_data)

# Tính Mean Absolute Error (MAE)
mae <- mean(abs(y_pred - test_data$Ozone))

# In kết quả MAE
print(paste("Mean Absolute Error (MAE):", round(mae, 2)))
## [1] "Mean Absolute Error (MAE): 15.39"
# câu 2
library(mlbench)  # Chứa dataset PimaIndiansDiabetes
## Warning: package 'mlbench' was built under R version 4.4.3
library(pROC)     # Để tính ROC-AUC
## 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
library(caret)    # Để chia dữ liệu
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: ggplot2
## Loading required package: lattice
# Tải dataset Pima Indians Diabetes
data(PimaIndiansDiabetes)

# Xem trước dữ liệu
head(PimaIndiansDiabetes)
##   pregnant glucose pressure triceps insulin mass pedigree age diabetes
## 1        6     148       72      35       0 33.6    0.627  50      pos
## 2        1      85       66      29       0 26.6    0.351  31      neg
## 3        8     183       64       0       0 23.3    0.672  32      pos
## 4        1      89       66      23      94 28.1    0.167  21      neg
## 5        0     137       40      35     168 43.1    2.288  33      pos
## 6        5     116       74       0       0 25.6    0.201  30      neg
# Chia tập dữ liệu thành train (80%) và test (20%)
set.seed(42)
train_index <- createDataPartition(PimaIndiansDiabetes$diabetes, p = 0.8, list = FALSE)
train_data <- PimaIndiansDiabetes[train_index, ]
test_data  <- PimaIndiansDiabetes[-train_index, ]

# Xây dựng mô hình hồi quy logistic
model <- glm(diabetes ~ ., data = train_data, family = binomial)

# Dự đoán xác suất trên tập kiểm tra
y_prob <- predict(model, test_data, type = "response")

# Tính ROC-AUC
roc_curve <- roc(test_data$diabetes, y_prob)
## Setting levels: control = neg, case = pos
## Setting direction: controls < cases
auc_value <- auc(roc_curve)
print(paste("ROC-AUC:", round(auc_value, 2)))
## [1] "ROC-AUC: 0.79"
# Vẽ đường cong ROC
plot(roc_curve, col = "blue", main = "ROC Curve for Logistic Regression")

```