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'
