#3. Đọc dữ liệu "Obesity data.csv" vào R và gọi dữ liệu là "ob" (dùng hàm read.csv)
library(readr)
Obesity_data <- read_csv("D:/5. NCKH 2025-2026/Obesity data.csv")
## Rows: 1217 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): gender
## dbl (12): id, height, weight, bmi, age, WBBMC, wbbmd, fat, lean, pcfat, hype...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
ob=Obesity_data
#4. Thông tin về dữ liệu ob này
#4.1 Có bao nhiêu biến số (variable) và quan sát (observation)
dim(ob)
## [1] 1217   13
#4.2 Liệt kê 6 quan sát đầu tiên của dữ liệu
head(ob, n = 6)
## # A tibble: 6 × 13
##      id gender height weight   bmi   age WBBMC wbbmd   fat  lean pcfat
##   <dbl> <chr>   <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1     1 F         150     49  21.8    53  1312  0.88 17802 28600  37.3
## 2     2 M         165     52  19.1    65  1309  0.84  8381 40229  16.8
## 3     3 F         157     57  23.1    64  1230  0.84 19221 36057  34  
## 4     4 F         156     53  21.8    56  1171  0.8  17472 33094  33.8
## 5     5 M         160     51  19.9    54  1681  0.98  7336 40621  14.8
## 6     6 F         153     47  20.1    52  1358  0.91 14904 30068  32.2
## # ℹ 2 more variables: hypertension <dbl>, diabetes <dbl>
#4.3 Liệt kê 6 quan sát cuối cùng của dữ liệu
tail(ob, 6)
## # A tibble: 6 × 13
##      id gender height weight   bmi   age WBBMC wbbmd   fat  lean pcfat
##   <dbl> <chr>   <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  1222 F         153     50  21.4    59  1309  0.87 18328 29147  37.6
## 2  1223 F         150     44  19.6    44  1474  0.95 12906 28534  30.1
## 3  1224 F         148     51  23.3    58  1522  0.97 14938 33931  29.6
## 4  1225 F         149     50  22.5    57  1409  0.93 16777 30598  34.4
## 5  1226 F         144     49  23.6    67  1266  0.9  20094 27272  41.3
## 6  1227 F         141     45  22.6    58  1228  0.91 14567 28111  33.2
## # ℹ 2 more variables: hypertension <dbl>, diabetes <dbl>
#4.4 Tóm tắt dữ liệu bằng hàm summary()
summary(ob)
##        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
#5. Biên tập dữ liệu
#5.1 Mã hoá biến gender (F/M) thành biến sex với giá trị 0/1 (0= M; 1= F)
ob$sex <- ifelse(ob$gender == "F", 1, 0)
ob$sex[ob$gender == "F"] = 1
ob$sex[ob$gender == "M"] = 0
table(ob$sex, ob$gender)
##    
##       F   M
##   0   0 355
##   1 862   0
#5.2 Mã hoá biến bmi thành biến obese với 4 nhóm như sau:
ob$obese[ob$bmi< 18.5] = "Underweight"
## Warning: Unknown or uninitialised column: `obese`.
ob$obese[ob$bmi>= 18.5 & ob$bmi< 25] = "Normal"
ob$obese[ob$bmi>= 25 & ob$bmi< 30] = "Overweight"
ob$obese[ob$bmi>= 30] = "Obese"
#5.3 Tạo biến số mới [lean.kg](http://lean.kg/) và [fat.kg](http://fat.kg/) tính toán lượng cơ (lean) và mỡ (fat) bằng đơn vị kg
men.overweight = subset(ob, gender == "M" & bmi>= 25)
dim(men.overweight)
## [1] 85 15
table(men.overweight$obese)
## 
##      Obese Overweight 
##          4         81
#5.4 Tạo 1 tập dữ liệu men.overweight gồm nam giới quá cân (25.0 kg/m2 BMI< 30.0 kg/m2) và béo phì (BMI  30.0 kg/m2). Có bao nhiêu biến số và quan sát trong tập dữ liệu này?
Demo = subset(ob, select = c(id, age, gender, weight, height, pcfat))
dim(Demo)
## [1] 1217    6
#5.5 tạo 1 tập dữ liệu Demo chỉ bao gồm 6 biến số là id, age, gender, height, weight và pcfat.
Demo <- ob[, c("id", "age", "gender", "height", "weight", "pcfat")]
Demo.2 = ob[, c("id", "age", "gender", "weight", "height", "pcfat")]
head(Demo.2)
## # A tibble: 6 × 6
##      id   age gender weight height pcfat
##   <dbl> <dbl> <chr>   <dbl>  <dbl> <dbl>
## 1     1    53 F          49    150  37.3
## 2     2    65 M          52    165  16.8
## 3     3    64 F          57    157  34  
## 4     4    56 F          53    156  33.8
## 5     5    54 M          51    160  14.8
## 6     6    52 F          47    153  32.2