Bước 1: Tạo Bộ Dữ Liệu Mẫu

# Tạo bộ dữ liệu mẫu
set.seed(123)
data <- data.frame(
  BMI = c(rnorm(98, mean = 25, sd = 5), 55, 60), # Thêm giá trị ngoại lệ
  FastingBloodSugar = c(rnorm(98, mean = 90, sd = 10), 200, 250), # Thêm giá trị ngoại lệ
  Cholesterol = c(rnorm(98, mean = 200, sd = 30), 350, 400) # Thêm giá trị ngoại lệ
)

# Xem dữ liệu
head(data)
##        BMI FastingBloodSugar Cholesterol
## 1 22.19762          87.64300    218.0213
## 2 23.84911          79.73579    162.4619
## 3 32.79354          82.89593    181.6650
## 4 25.35254          92.56884    164.4356
## 5 25.64644          87.53308    265.9643
## 6 33.57532          86.52457    239.3724

Bước 2: Kiểm Tra Giá Trị Ngoại Lệ Sử Dụng Boxplot

# Cài đặt và tải gói cần thiết
# install.packages("ggplot2")
library(ggplot2)

# Vẽ boxplot để kiểm tra giá trị ngoại lệ cho mỗi biến số
boxplot(data$BMI, main = "Boxplot for BMI", ylab = "BMI")

boxplot(data$FastingBloodSugar, main = "Boxplot for Fasting Blood Sugar", ylab = "Fasting Blood Sugar")

boxplot(data$Cholesterol, main = "Boxplot for Cholesterol", ylab = "Cholesterol")

Bước 3: Kiểm Tra Giá Trị Ngoại Lệ Sử Dụng IQR

# Hàm để xác định giá trị ngoại lệ sử dụng IQR
is_outlier <- function(x) {
  q1 <- quantile(x, 0.25)
  q3 <- quantile(x, 0.75)
  iqr <- q3 - q1
  lower_bound <- q1 - 1.5 * iqr
  upper_bound <- q3 + 1.5 * iqr
  x < lower_bound | x > upper_bound
}

# Áp dụng hàm is_outlier cho mỗi biến số trong data
outliers_iqr_BMI <- is_outlier(data$BMI)
outliers_iqr_FastingBloodSugar <- is_outlier(data$FastingBloodSugar)
outliers_iqr_Cholesterol <- is_outlier(data$Cholesterol)

# In ra các giá trị ngoại lệ
data[outliers_iqr_BMI, ]
##     BMI FastingBloodSugar Cholesterol
## 99   55               200         350
## 100  60               250         400
data[outliers_iqr_FastingBloodSugar, ]
##          BMI FastingBloodSugar Cholesterol
## 66  26.51764          122.4104    185.3039
## 99  55.00000          200.0000    350.0000
## 100 60.00000          250.0000    400.0000
data[outliers_iqr_Cholesterol, ]
##     BMI FastingBloodSugar Cholesterol
## 99   55               200         350
## 100  60               250         400

Bước 4: Loại Bỏ Giá Trị Ngoại Lệ

# Loại bỏ các giá trị ngoại lệ khỏi dữ liệu
clean_data <- data[!outliers_iqr_BMI & !outliers_iqr_FastingBloodSugar & !outliers_iqr_Cholesterol, ]

# Xem lại dữ liệu sau khi loại bỏ giá trị ngoại lệ
head(clean_data)
##        BMI FastingBloodSugar Cholesterol
## 1 22.19762          87.64300    218.0213
## 2 23.84911          79.73579    162.4619
## 3 32.79354          82.89593    181.6650
## 4 25.35254          92.56884    164.4356
## 5 25.64644          87.53308    265.9643
## 6 33.57532          86.52457    239.3724

Bước 5: Kiểm Tra Lại Dữ Liệu Sau Khi Loại Bỏ Giá Trị Ngoại Lệ

# Vẽ lại boxplot để kiểm tra dữ liệu sau khi loại bỏ giá trị ngoại lệ
boxplot(clean_data$BMI, main = "Boxplot for BMI (Cleaned)", ylab = "BMI")

boxplot(clean_data$FastingBloodSugar, main = "Boxplot for Fasting Blood Sugar (Cleaned)", ylab = "Fasting Blood Sugar")

boxplot(clean_data$Cholesterol, main = "Boxplot for Cholesterol (Cleaned)", ylab = "Cholesterol")

Bước 6: Trực Quan Hóa Giá Trị Ngoại Lệ Bằng Scatter Plot

# Vẽ scatter plot để trực quan hóa giá trị ngoại lệ trước khi loại bỏ
plot(data$BMI, data$FastingBloodSugar, 
     main = "Scatter Plot of BMI vs. Fasting Blood Sugar (Original Data)",
     xlab = "BMI", ylab = "Fasting Blood Sugar", pch = 19, col = ifelse(outliers_iqr_BMI | outliers_iqr_FastingBloodSugar, "red", "blue"))

plot(data$BMI, data$Cholesterol, 
     main = "Scatter Plot of BMI vs. Cholesterol (Original Data)",
     xlab = "BMI", ylab = "Cholesterol", pch = 19, col = ifelse(outliers_iqr_BMI | outliers_iqr_Cholesterol, "red", "blue"))

plot(data$FastingBloodSugar, data$Cholesterol, 
     main = "Scatter Plot of Fasting Blood Sugar vs. Cholesterol (Original Data)",
     xlab = "Fasting Blood Sugar", ylab = "Cholesterol", pch = 19, col = ifelse(outliers_iqr_FastingBloodSugar | outliers_iqr_Cholesterol, "red", "blue"))

# Vẽ scatter plot để trực quan hóa dữ liệu sau khi loại bỏ giá trị ngoại lệ
plot(clean_data$BMI, clean_data$FastingBloodSugar, 
     main = "Scatter Plot of BMI vs. Fasting Blood Sugar (Cleaned Data)",
     xlab = "BMI", ylab = "Fasting Blood Sugar", pch = 19, col = "blue")

plot(clean_data$BMI, clean_data$Cholesterol, 
     main = "Scatter Plot of BMI vs. Cholesterol (Cleaned Data)",
     xlab = "BMI", ylab = "Cholesterol", pch = 19, col = "blue")

plot(clean_data$FastingBloodSugar, clean_data$Cholesterol, 
     main = "Scatter Plot of Fasting Blood Sugar vs. Cholesterol (Cleaned Data)",
     xlab = "Fasting Blood Sugar", ylab = "Cholesterol", pch = 19, col = "blue")

# Vẽ scatter plot với đường hồi quy trước khi loại bỏ giá trị ngoại lệ
ggplot(data, aes(x = BMI, y = FastingBloodSugar)) +
  geom_point(aes(color = ifelse(outliers_iqr_BMI | outliers_iqr_FastingBloodSugar, "Outlier", "Normal"))) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Scatter Plot of BMI vs. Fasting Blood Sugar (Original Data)", x = "BMI", y = "Fasting Blood Sugar") +
  scale_color_manual(values = c("Outlier" = "red", "Normal" = "black"))
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data, aes(x = BMI, y = Cholesterol)) +
  geom_point(aes(color = ifelse(outliers_iqr_BMI | outliers_iqr_Cholesterol, "Outlier", "Normal"))) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Scatter Plot of BMI vs. Cholesterol (Original Data)", x = "BMI", y = "Cholesterol") +
  scale_color_manual(values = c("Outlier" = "red", "Normal" = "black"))
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data, aes(x = FastingBloodSugar, y = Cholesterol)) +
  geom_point(aes(color = ifelse(outliers_iqr_FastingBloodSugar | outliers_iqr_Cholesterol, "Outlier", "Normal"))) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Scatter Plot of Fasting Blood Sugar vs. Cholesterol (Original Data)", x = "Fasting Blood Sugar", y = "Cholesterol") +
  scale_color_manual(values = c("Outlier" = "red", "Normal" = "black"))
## `geom_smooth()` using formula = 'y ~ x'

# Vẽ scatter plot với đường hồi quy sau khi loại bỏ giá trị ngoại lệ
ggplot(clean_data, aes(x = BMI, y = FastingBloodSugar)) +
  geom_point(color = "black") +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Scatter Plot of BMI vs. Fasting Blood Sugar (Cleaned Data)", x = "BMI", y = "Fasting Blood Sugar")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(clean_data, aes(x = BMI, y = Cholesterol)) +
  geom_point(color = "black") +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Scatter Plot of BMI vs. Cholesterol (Cleaned Data)", x = "BMI", y = "Cholesterol")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(clean_data, aes(x = FastingBloodSugar, y = Cholesterol)) +
  geom_point(color = "black") +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Scatter Plot of Fasting Blood Sugar vs. Cholesterol (Cleaned Data)", x = "Fasting Blood Sugar", y = "Cholesterol")
## `geom_smooth()` using formula = 'y ~ x'

Tạo Grid Plot để So Sánh Trước và Sau Khi Loại Bỏ Giá Trị Ngoại Lệ

# Cài đặt và tải gói cần thiết
#install.packages("ggplot2")
#install.packages("gridExtra")
#library(ggplot2)
library(gridExtra)


# Scatter plot trước khi loại bỏ giá trị ngoại lệ
p1 <- ggplot(data, aes(x = BMI, y = FastingBloodSugar)) +
  geom_point(aes(color = ifelse(outliers_iqr_BMI | outliers_iqr_FastingBloodSugar, "Outlier", "Normal")), size = 1.5) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "BMI vs. Fasting Blood Sugar (Original)", x = "BMI", y = "Fasting Blood Sugar") +
  scale_color_manual(values = c("Outlier" = "red", "Normal" = "black")) +
  theme(plot.title = element_text(size = 12, face = "bold"))

p2 <- ggplot(data, aes(x = BMI, y = Cholesterol)) +
  geom_point(aes(color = ifelse(outliers_iqr_BMI | outliers_iqr_Cholesterol, "Outlier", "Normal")), size = 1.5) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "BMI vs. Cholesterol (Original)", x = "BMI", y = "Cholesterol") +
  scale_color_manual(values = c("Outlier" = "red", "Normal" = "black")) +
  theme(plot.title = element_text(size = 12, face = "bold"))

p3 <- ggplot(data, aes(x = FastingBloodSugar, y = Cholesterol)) +
  geom_point(aes(color = ifelse(outliers_iqr_FastingBloodSugar | outliers_iqr_Cholesterol, "Outlier", "Normal")), size = 1.5) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Fasting Blood Sugar vs. Cholesterol (Original)", x = "Fasting Blood Sugar", y = "Cholesterol") +
  scale_color_manual(values = c("Outlier" = "red", "Normal" = "black")) +
  theme(plot.title = element_text(size = 12, face = "bold"))
# Scatter plot sau khi loại bỏ giá trị ngoại lệ
p4 <- ggplot(clean_data, aes(x = BMI, y = FastingBloodSugar)) +
  geom_point(color = "black", size = 1.5) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "BMI vs. Fasting Blood Sugar (Cleaned)", x = "BMI", y = "Fasting Blood Sugar") +
  theme(plot.title = element_text(size = 12, face = "bold"))

p5 <- ggplot(clean_data, aes(x = BMI, y = Cholesterol)) +
  geom_point(color = "black", size = 1.5) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "BMI vs. Cholesterol (Cleaned)", x = "BMI", y = "Cholesterol") +
  theme(plot.title = element_text(size = 12, face = "bold"))

p6 <- ggplot(clean_data, aes(x = FastingBloodSugar, y = Cholesterol)) +
  geom_point(color = "black", size = 1.5) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Fasting Blood Sugar vs. Cholesterol (Cleaned)", x = "Fasting Blood Sugar", y = "Cholesterol") +
  theme(plot.title = element_text(size = 12, face = "bold"))
# Tạo grid plot để so sánh trước và sau khi loại bỏ giá trị ngoại lệ cho từng cặp biến số
grid.arrange(
  p1, p4, 
  top = "Comparison of Scatter Plots Before and After Removing Outliers"
)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

grid.arrange(
  p2, p5, 
  top = "Comparison of Scatter Plots Before and After Removing Outliers"
)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

grid.arrange(
  p3, p6, 
  top = "Comparison of Scatter Plots Before and After Removing Outliers"
)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'