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