ob = read.csv("/Users/admin/Desktop/Lớp PTSL 8.9.2024/obesity_data.csv")
library(table1)
##
## Attaching package: 'table1'
## The following objects are masked from 'package:base':
##
## units, units<-
table1(~ age + gender + bmi + WBBMC + wbbmd + fat + lean + hypertension + diabetes, data = ob)
| Overall (N=1217) |
|
|---|---|
| age | |
| Mean (SD) | 47.2 (17.3) |
| Median [Min, Max] | 48.0 [13.0, 88.0] |
| gender | |
| F | 862 (70.8%) |
| M | 355 (29.2%) |
| bmi | |
| Mean (SD) | 22.4 (3.06) |
| Median [Min, Max] | 22.2 [14.5, 37.1] |
| WBBMC | |
| Mean (SD) | 1720 (363) |
| Median [Min, Max] | 1710 [695, 3040] |
| wbbmd | |
| Mean (SD) | 1.01 (0.113) |
| Median [Min, Max] | 1.01 [0.650, 1.35] |
| fat | |
| Mean (SD) | 17300 (5210) |
| Median [Min, Max] | 17000 [4280, 40800] |
| lean | |
| Mean (SD) | 35500 (7030) |
| Median [Min, Max] | 33600 [19100, 63100] |
| hypertension | |
| Mean (SD) | 0.507 (0.500) |
| Median [Min, Max] | 1.00 [0, 1.00] |
| diabetes | |
| Mean (SD) | 0.111 (0.314) |
| Median [Min, Max] | 0 [0, 1.00] |
table1(~ age + bmi + WBBMC + wbbmd + fat + lean + as.factor(hypertension) + as.factor(diabetes) | gender, data = ob)
| F (N=862) |
M (N=355) |
Overall (N=1217) |
|
|---|---|---|---|
| age | |||
| Mean (SD) | 48.6 (16.4) | 43.7 (18.8) | 47.2 (17.3) |
| Median [Min, Max] | 49.0 [14.0, 85.0] | 44.0 [13.0, 88.0] | 48.0 [13.0, 88.0] |
| bmi | |||
| Mean (SD) | 22.3 (3.05) | 22.7 (3.04) | 22.4 (3.06) |
| Median [Min, Max] | 22.1 [15.2, 37.1] | 22.5 [14.5, 34.7] | 22.2 [14.5, 37.1] |
| WBBMC | |||
| Mean (SD) | 1600 (293) | 2030 (336) | 1720 (363) |
| Median [Min, Max] | 1610 [695, 2660] | 2030 [1190, 3040] | 1710 [695, 3040] |
| wbbmd | |||
| Mean (SD) | 0.988 (0.111) | 1.06 (0.101) | 1.01 (0.113) |
| Median [Min, Max] | 0.990 [0.650, 1.35] | 1.06 [0.780, 1.34] | 1.01 [0.650, 1.35] |
| fat | |||
| Mean (SD) | 18200 (4950) | 15000 (5110) | 17300 (5210) |
| Median [Min, Max] | 17700 [6220, 40800] | 15100 [4280, 29900] | 17000 [4280, 40800] |
| lean | |||
| Mean (SD) | 32000 (3970) | 43800 (5820) | 35500 (7030) |
| Median [Min, Max] | 31500 [19100, 53400] | 43400 [28600, 63100] | 33600 [19100, 63100] |
| as.factor(hypertension) | |||
| 0 | 430 (49.9%) | 170 (47.9%) | 600 (49.3%) |
| 1 | 432 (50.1%) | 185 (52.1%) | 617 (50.7%) |
| as.factor(diabetes) | |||
| 0 | 760 (88.2%) | 322 (90.7%) | 1082 (88.9%) |
| 1 | 102 (11.8%) | 33 (9.3%) | 135 (11.1%) |
table1(~ age + gender + bmi + WBBMC + wbbmd + fat + lean + hypertension + diabetes, data = ob, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]"))
| Overall (N=1217) |
|
|---|---|
| age | |
| Mean (SD) | 47.2 (17.3) |
| Median [Q1, Q3] | 48.0 [35.0, 58.0] |
| gender | |
| F | 862 (70.8%) |
| M | 355 (29.2%) |
| bmi | |
| Mean (SD) | 22.4 (3.06) |
| Median [Q1, Q3] | 22.2 [20.2, 24.3] |
| WBBMC | |
| Mean (SD) | 1720 (363) |
| Median [Q1, Q3] | 1710 [1480, 1950] |
| wbbmd | |
| Mean (SD) | 1.01 (0.113) |
| Median [Q1, Q3] | 1.01 [0.930, 1.09] |
| fat | |
| Mean (SD) | 17300 (5210) |
| Median [Q1, Q3] | 17000 [13800, 20300] |
| lean | |
| Mean (SD) | 35500 (7030) |
| Median [Q1, Q3] | 33600 [30300, 39800] |
| hypertension | |
| Mean (SD) | 0.507 (0.500) |
| Median [Q1, Q3] | 1.00 [0, 1.00] |
| diabetes | |
| Mean (SD) | 0.111 (0.314) |
| Median [Q1, Q3] | 0 [0, 0] |
library(compareGroups)
createTable(compareGroups(gender ~ age + bmi + WBBMC + wbbmd + fat + lean + hypertension + diabetes, data = ob))
##
## --------Summary descriptives table by 'gender'---------
##
## ________________________________________________
## F M p.overall
## N=862 N=355
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
## age 48.6 (16.4) 43.7 (18.8) <0.001
## bmi 22.3 (3.05) 22.7 (3.04) 0.013
## WBBMC 1599 (293) 2030 (336) <0.001
## wbbmd 0.99 (0.11) 1.06 (0.10) <0.001
## fat 18240 (4954) 14978 (5113) <0.001
## lean 32045 (3966) 43762 (5819) <0.001
## hypertension 0.50 (0.50) 0.52 (0.50) 0.527
## diabetes 0.12 (0.32) 0.09 (0.29) 0.181
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ob$hypert = as.factor(ob$hypertension)
ob$dm = as.factor(ob$diabetes)
createTable(compareGroups(gender ~ age + bmi + WBBMC + wbbmd + fat + lean + hypert + dm, data = ob))
##
## --------Summary descriptives table by 'gender'---------
##
## ___________________________________________
## F M p.overall
## N=862 N=355
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
## age 48.6 (16.4) 43.7 (18.8) <0.001
## bmi 22.3 (3.05) 22.7 (3.04) 0.013
## WBBMC 1599 (293) 2030 (336) <0.001
## wbbmd 0.99 (0.11) 1.06 (0.10) <0.001
## fat 18240 (4954) 14978 (5113) <0.001
## lean 32045 (3966) 43762 (5819) <0.001
## hypert: 0.569
## 0 430 (49.9%) 170 (47.9%)
## 1 432 (50.1%) 185 (52.1%)
## dm: 0.238
## 0 760 (88.2%) 322 (90.7%)
## 1 102 (11.8%) 33 (9.30%)
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
library(ggplot2)
library(gridExtra)
p = ggplot(data = ob, aes(x = pcfat))
p1 = p + geom_histogram()
p2 = p + geom_histogram(fill = "blue", col = "white") + labs(x = "Tỉ trọng mỡ (%)", y = "Số người", title = "Phân bố tỉ trọng mỡ")
grid.arrange(p1, p2, ncol = 2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
lệnh này (grid.arrange(p1, p2, ncol = 2)) là để kết hợp 2 biểu đồ trong 1 hàng; nếu không có lệnh này thì 1 biểu đồ ở trên và 1 biểu đồ ở dưới.
p = ggplot(data = ob, aes(x = pcfat, fill = gender))
p1 = p + geom_histogram(col="white") + labs(x = "Tỉ trọng mỡ", y = "Số người", title = "Phân bố tỉ trọng mỡ")
p2 = p + geom_density(alpha = 0.3) + labs(x = "Tỉ trọng mỡ", y = "Số người", title = "Phân bố tỉ trọng mỡ")
grid.arrange(p1, p2, ncol = 2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
lưu ý biến số OB khác với ob, và biến OB là biến phân loại
ob$OB[ob$bmi< 18.5] = "Underweight"
ob$OB[ob$bmi>= 18.5 & ob$bmi< 25] = "Normal"
ob$OB[ob$bmi>= 25 & ob$bmi< 30] = "Overweight"
ob$OB[ob$bmi>= 30] = "Obese"
p = ggplot(data = ob, aes(x = OB, fill = OB, col = OB))
p + geom_bar(position = "dodge")
p = ggplot(data = ob, aes(x = OB, y = pcfat, fill = gender, group = gender))
p + geom_bar(stat = "identity", position = "dodge")
biểu đồ trên sắp xếp không theo trình tự mong muốn, mà chương trình tự động hiểu sắp xếp theo ABC
women = subset(ob, gender == "F")
dim(women)
## [1] 862 16
p = ggplot(data = women, aes(x = OB, y = pcfat, fill = OB, col = OB))
p1 = p + geom_boxplot(col = "black") + geom_jitter(alpha = 0.3) + labs(x = "Tình trạng béo phì", y = "Tỉ trọng mỡ (%)") + ggtitle("Tỉ trọng mỡ theo tình trạng béo phì ở nữ")
p1
Sắp xếp lại thứ tự các biến theo mong muốn: biến “women\(OB.n" là 1 biến mới, biến phân loại, xuất phát từ biến women\)OB, được sắp xếp …
women$OB.n = factor(women$OB, levels = c("Underweight", "Normal", "Overweight", "Obese"))
p = ggplot(data = women, aes(x = OB.n, y = pcfat, fill = OB.n, col = OB.n))
p2 = p + geom_boxplot(col = "black") + geom_jitter(alpha = 0.1) + labs(x = "Tình trạng béo phì", y = "Tỉ trọng mỡ (%)") + ggtitle("Tỉ trọng mỡ theo tình trạng béo phì ở nữ")
p2
grid.arrange(p1, p2)
grid.arrange(p1, p2, ncol = 2)
ob$OB.n = factor(ob$OB, levels = c("Underweight", "Normal", "Overweight", "Obese"))
p = ggplot(data = ob, aes(x = OB.n, y = pcfat, fill = gender, col = gender))
p1 = p + geom_boxplot(col = "blue") + geom_jitter(alpha = 0.1) + labs(x = "Tình trạng béo phì", y = "Tỉ trọng mỡ (%)") + ggtitle("Tỉ trọng mỡ theo tình trạng béo phì và giới tính")
p1
p = ggplot(data = ob, aes(x = bmi, y = pcfat))
p1 = p + geom_point()
p2 = p + geom_point() + geom_smooth()
grid.arrange(p1, p2, ncol = 2)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
p = ggplot(data = ob, aes(x = bmi, y = pcfat))
p1 = p + geom_point()
p2 = p + geom_point() + geom_smooth()
grid.arrange(p1, p2)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
(Đường viền màu xám là khoảng tin cậy 95%)
p = ggplot(data = ob, aes(x = bmi, y = pcfat, fill = gender, col = gender))
p1 = p + geom_point() + geom_smooth() + labs(x = "Chỉ số khối cơ thể (kg/m2)", y = "Tỉ trọng mỡ (%)") + ggtitle("Liên quan giữa chỉ số khối cơ thể và tỉ trọng mỡ theo giới tính")
p1
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
đường cong ở nam giới theo các dữ liệu, là phương trình bậc 3 trở lên, hơi phức tạp khi diễn giải
p = ggplot(data = ob, aes(x = bmi, y = pcfat, fill = gender, col = gender))
p2 = p + geom_point() + geom_smooth(method = "lm", formula = y ~ x + I(x^2)) + labs(x = "Chỉ số khối cơ thể (kg/m2)", y = "Tỉ trọng mỡ (%)") + ggtitle("Liên quan giữa chỉ số khối cơ thể và tỉ trọng mỡ theo giới tính")
p2
chuyển các đường cong thành phương trình bậc 2 (dạng parabol) (method = “lm” là “linear model”)
grid.arrange(p1, p2, ncol = 2)
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
DO NGOC THE