# Danh sách các gói cần kiểm tra
packages <- c("readxl", "tidyverse", "dplyr", "ggplot2", "gridExtra", "GGally", "DescTools", "table1", "compareGroups", "simpleboot", "epiDisplay", "Publish")

# Kiểm tra các gói đã được cài đặt hay chưa
installed <- packages %in% rownames(installed.packages())

# Hiển thị kết quả
for (i in seq_along(packages)) {
  if (installed[i]) {
    cat(paste(packages[i], "đã được cài đặt.\n"))
  } else {
    cat(paste(packages[i], "chưa được cài đặt.\n"))
  }
}
## readxl đã được cài đặt.
## tidyverse đã được cài đặt.
## dplyr đã được cài đặt.
## ggplot2 đã được cài đặt.
## gridExtra đã được cài đặt.
## GGally đã được cài đặt.
## DescTools đã được cài đặt.
## table1 đã được cài đặt.
## compareGroups đã được cài đặt.
## simpleboot đã được cài đặt.
## epiDisplay đã được cài đặt.
## Publish đã được cài đặt.
# Đọc file Obesity Data từ đường dẫn và lưu vào biến namlan2
namlan2 <- read.csv("C:/Users/dinht/OneDrive/Máy tính/Học nghiên cứu khoa học, thầy Tuấn dạy/Obesity Data.csv")
# số lượng quan sát và biến số
num_variables <- ncol(namlan2)  # Số lượng biến số (số cột)
num_observations <- nrow(namlan2)  # Số lượng quan sát (số dòng)

# In kết quả ra màn hình
cat("Số lượng biến số:", num_variables, "\n")
## Số lượng biến số: 13
cat("Số lượng quan sát:", num_observations, "\n")
## Số lượng quan sát: 1217
# Hiển thị 6 quan sát đầu tiên của dữ liệu namlan2
head(namlan2, 6)
##   id gender height weight  bmi age WBBMC wbbmd   fat  lean pcfat hypertension
## 1  1      F    150     49 21.8  53  1312  0.88 17802 28600  37.3            0
## 2  2      M    165     52 19.1  65  1309  0.84  8381 40229  16.8            1
## 3  3      F    157     57 23.1  64  1230  0.84 19221 36057  34.0            1
## 4  4      F    156     53 21.8  56  1171  0.80 17472 33094  33.8            1
## 5  5      M    160     51 19.9  54  1681  0.98  7336 40621  14.8            0
## 6  6      F    153     47 20.1  52  1358  0.91 14904 30068  32.2            1
##   diabetes
## 1        1
## 2        0
## 3        0
## 4        0
## 5        0
## 6        0
# Hiển thị 6 quan sát cuối cùng của dữ liệu namlan2
tail(namlan2, 6)
##        id gender height weight  bmi age WBBMC wbbmd   fat  lean pcfat
## 1212 1222      F    153     50 21.4  59  1309  0.87 18328 29147  37.6
## 1213 1223      F    150     44 19.6  44  1474  0.95 12906 28534  30.1
## 1214 1224      F    148     51 23.3  58  1522  0.97 14938 33931  29.6
## 1215 1225      F    149     50 22.5  57  1409  0.93 16777 30598  34.4
## 1216 1226      F    144     49 23.6  67  1266  0.90 20094 27272  41.3
## 1217 1227      F    141     45 22.6  58  1228  0.91 14567 28111  33.2
##      hypertension diabetes
## 1212            1        0
## 1213            0        1
## 1214            0        0
## 1215            1        0
## 1216            1        0
## 1217            0        0
# Tóm tắt dữ liệu namlan2
summary(namlan2)
##        id            gender              height          weight     
##  Min.   :   1.0   Length:1217        Min.   :136.0   Min.   :34.00  
##  1st Qu.: 309.0   Class :character   1st Qu.:151.0   1st Qu.:49.00  
##  Median : 615.0   Mode  :character   Median :155.0   Median :54.00  
##  Mean   : 614.5                      Mean   :156.7   Mean   :55.14  
##  3rd Qu.: 921.0                      3rd Qu.:162.0   3rd Qu.:61.00  
##  Max.   :1227.0                      Max.   :185.0   Max.   :95.00  
##       bmi            age            WBBMC          wbbmd            fat       
##  Min.   :14.5   Min.   :13.00   Min.   : 695   Min.   :0.650   Min.   : 4277  
##  1st Qu.:20.2   1st Qu.:35.00   1st Qu.:1481   1st Qu.:0.930   1st Qu.:13768  
##  Median :22.2   Median :48.00   Median :1707   Median :1.010   Median :16955  
##  Mean   :22.4   Mean   :47.15   Mean   :1725   Mean   :1.009   Mean   :17288  
##  3rd Qu.:24.3   3rd Qu.:58.00   3rd Qu.:1945   3rd Qu.:1.090   3rd Qu.:20325  
##  Max.   :37.1   Max.   :88.00   Max.   :3040   Max.   :1.350   Max.   :40825  
##       lean           pcfat       hypertension      diabetes     
##  Min.   :19136   Min.   : 9.2   Min.   :0.000   Min.   :0.0000  
##  1st Qu.:30325   1st Qu.:27.0   1st Qu.:0.000   1st Qu.:0.0000  
##  Median :33577   Median :32.4   Median :1.000   Median :0.0000  
##  Mean   :35463   Mean   :31.6   Mean   :0.507   Mean   :0.1109  
##  3rd Qu.:39761   3rd Qu.:36.8   3rd Qu.:1.000   3rd Qu.:0.0000  
##  Max.   :63059   Max.   :48.4   Max.   :1.000   Max.   :1.0000
library(tidyverse)
## ── 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.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── 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
# Thực hiện mã hóa
namlan2 <- namlan2 %>%
  mutate(sex = if_else(gender == "F", 1, 0))  # Tạo cột sex với 1 cho "F" và 0 cho "M"

# Kiểm tra kết quả
head(namlan2)
##   id gender height weight  bmi age WBBMC wbbmd   fat  lean pcfat hypertension
## 1  1      F    150     49 21.8  53  1312  0.88 17802 28600  37.3            0
## 2  2      M    165     52 19.1  65  1309  0.84  8381 40229  16.8            1
## 3  3      F    157     57 23.1  64  1230  0.84 19221 36057  34.0            1
## 4  4      F    156     53 21.8  56  1171  0.80 17472 33094  33.8            1
## 5  5      M    160     51 19.9  54  1681  0.98  7336 40621  14.8            0
## 6  6      F    153     47 20.1  52  1358  0.91 14904 30068  32.2            1
##   diabetes sex
## 1        1   1
## 2        0   0
## 3        0   1
## 4        0   1
## 5        0   0
## 6        0   1
# Mã hóa biến bmi thành biến obese
namlan2 <- namlan2 %>%
  mutate(obese = case_when(
    bmi < 18.5 ~ "Underweight",  # Nếu bmi < 18.5 thì obese = "Underweight"
    bmi >= 18.5 & bmi < 25.0 ~ "Normal",  # Nếu 18.5 ≤ bmi < 25.0 thì obese = "Normal"
    bmi >= 25.0 & bmi < 30.0 ~ "Overweight",  # Nếu 25.0 ≤ bmi < 30.0 thì obese = "Overweight"
    bmi >= 30.0 ~ "Obese"  # Nếu bmi ≥ 30.0 thì obese = "Obese"
  ))

# Kiểm tra kết quả
head(namlan2)
##   id gender height weight  bmi age WBBMC wbbmd   fat  lean pcfat hypertension
## 1  1      F    150     49 21.8  53  1312  0.88 17802 28600  37.3            0
## 2  2      M    165     52 19.1  65  1309  0.84  8381 40229  16.8            1
## 3  3      F    157     57 23.1  64  1230  0.84 19221 36057  34.0            1
## 4  4      F    156     53 21.8  56  1171  0.80 17472 33094  33.8            1
## 5  5      M    160     51 19.9  54  1681  0.98  7336 40621  14.8            0
## 6  6      F    153     47 20.1  52  1358  0.91 14904 30068  32.2            1
##   diabetes sex  obese
## 1        1   1 Normal
## 2        0   0 Normal
## 3        0   1 Normal
## 4        0   1 Normal
## 5        0   0 Normal
## 6        0   1 Normal
# Tạo biến lean.kg và fat.kg từ lean và fat (đổi từ gram sang kilogram)
namlan2 <- namlan2 %>%
  mutate(
    lean.kg = lean / 1000,  # Chuyển đổi từ gram sang kilogram
    fat.kg = fat / 1000     # Chuyển đổi từ gram sang kilogram
  )

# Kiểm tra kết quả
head(namlan2)
##   id gender height weight  bmi age WBBMC wbbmd   fat  lean pcfat hypertension
## 1  1      F    150     49 21.8  53  1312  0.88 17802 28600  37.3            0
## 2  2      M    165     52 19.1  65  1309  0.84  8381 40229  16.8            1
## 3  3      F    157     57 23.1  64  1230  0.84 19221 36057  34.0            1
## 4  4      F    156     53 21.8  56  1171  0.80 17472 33094  33.8            1
## 5  5      M    160     51 19.9  54  1681  0.98  7336 40621  14.8            0
## 6  6      F    153     47 20.1  52  1358  0.91 14904 30068  32.2            1
##   diabetes sex  obese lean.kg fat.kg
## 1        1   1 Normal  28.600 17.802
## 2        0   0 Normal  40.229  8.381
## 3        0   1 Normal  36.057 19.221
## 4        0   1 Normal  33.094 17.472
## 5        0   0 Normal  40.621  7.336
## 6        0   1 Normal  30.068 14.904
# Tạo tập dữ liệu men.overweight với điều kiện BMI và giới tính là nam giới (M)
men.overweight <- namlan2 %>%
  filter(sex == 0 & bmi >= 25.0)  # sex == 0 tương ứng với nam giới

# Kiểm tra số lượng biến số và quan sát trong tập dữ liệu mới
dim(men.overweight)  # Hiển thị số dòng (quan sát) và số cột (biến số)
## [1] 85 17
# Tạo tập dữ liệu Subset chỉ bao gồm 6 biến số id, age, gender, bmi, lean và fat
Subset <- namlan2 %>%
  select(id, age, gender, bmi, lean, fat)

# Kiểm tra kết quả
head(Subset)
##   id age gender  bmi  lean   fat
## 1  1  53      F 21.8 28600 17802
## 2  2  65      M 19.1 40229  8381
## 3  3  64      F 23.1 36057 19221
## 4  4  56      F 21.8 33094 17472
## 5  5  54      M 19.9 40621  7336
## 6  6  52      F 20.1 30068 14904