This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
# --- ĐOẠN 1: THIẾT LẬP MÔI TRƯỜNG (ĐÃ SỬA LỖI) ---
# Sử dụng dấu $ thay vì dấu _
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'ggplot2' was built under R version 4.5.2
## Warning: package 'tibble' was built under R version 4.5.2
## Warning: package 'tidyr' was built under R version 4.5.2
## Warning: package 'readr' was built under R version 4.5.2
## Warning: package 'purrr' was built under R version 4.5.2
## Warning: package 'dplyr' was built under R version 4.5.2
## Warning: package 'stringr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.2
## Warning: package 'lubridate' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── 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
library(gtsummary)
## Warning: package 'gtsummary' was built under R version 4.5.3
ICON_OCCLUSION_OMES = read.csv2("D:\\TAM DAN NON-ORTHO\\205 SV\\ICON + OCCLUSION+ OMES.csv")
#1 Tóm tắt dữ liệu
summary(ICON_OCCLUSION_OMES)
## No ID Class Gender
## Min. : 1 Length:205 Length:205 Min. :0.0000
## 1st Qu.: 52 Class :character Class :character 1st Qu.:0.0000
## Median :103 Mode :character Mode :character Median :1.0000
## Mean :103 Mean :0.5659
## 3rd Qu.:154 3rd Qu.:1.0000
## Max. :205 Max. :1.0000
##
## ICQ38 ICQ38_Score ICQ39 ICQ39_Score
## Length:205 Min. :0.0000 Length:205 Min. :0.000
## Class :character 1st Qu.:0.0000 Class :character 1st Qu.:0.000
## Mode :character Median :0.0000 Mode :character Median :1.000
## Mean :0.8049 Mean :1.078
## 3rd Qu.:2.0000 3rd Qu.:2.000
## Max. :4.0000 Max. :5.000
##
## Cq10 eQ13 ICQ40 ICQ41
## Min. :0.0000 Min. :0.000 Min. :0.00 Min. :0.00000
## 1st Qu.:0.0000 1st Qu.:0.000 1st Qu.:1.00 1st Qu.:0.00000
## Median :0.0000 Median :1.000 Median :2.00 Median :0.00000
## Mean :0.4293 Mean :1.561 Mean :1.62 Mean :0.06829
## 3rd Qu.:1.0000 3rd Qu.:3.000 3rd Qu.:2.00 3rd Qu.:0.00000
## Max. :1.0000 Max. :5.000 Max. :4.00 Max. :2.00000
##
## Q42 Q43 Q42_Q43 Q44
## Min. :1.000 Min. :1.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:0.0000 1st Qu.:1.0000
## Median :4.000 Median :4.000 Median :1.0000 Median :1.0000
## Mean :3.141 Mean :3.234 Mean :0.7366 Mean :0.8244
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :5.000 Max. :5.000 Max. :1.0000 Max. :1.0000
##
## Q45 Q45_Maxi Q45_Mandi Q46
## Min. :0.0000 Length:205 Length:205 Min. :0.0000
## 1st Qu.:0.0000 Class :character Class :character 1st Qu.:0.0000
## Median :1.0000 Mode :character Mode :character Median :0.0000
## Mean :0.5122 Mean :0.3756
## 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000
##
## Q46_Maxi Q46_Mandi Torus FA20
## Length:205 Length:205 Min. :0 Length:205
## Class :character Class :character 1st Qu.:0 Class :character
## Mode :character Mode :character Median :0 Mode :character
## Mean :0
## 3rd Qu.:0
## Max. :0
##
## Q47R_1 Q47R_2 Q47R_3 Q47L_1
## Min. :0.0000 Min. :0.00000 Min. :0.000000 Min. :0.0000
## 1st Qu.:1.0000 1st Qu.:0.00000 1st Qu.:0.000000 1st Qu.:1.0000
## Median :1.0000 Median :0.00000 Median :0.000000 Median :1.0000
## Mean :0.9805 Mean :0.01463 Mean :0.004878 Mean :0.9707
## 3rd Qu.:1.0000 3rd Qu.:0.00000 3rd Qu.:0.000000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.00000 Max. :1.000000 Max. :1.0000
##
## Q47L_2 Q47L_3 Q47Shape Q48R_1
## Min. :0.000000 Min. :0.00000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.000000 1st Qu.:0.00000 1st Qu.:0.0000 1st Qu.:1.0000
## Median :0.000000 Median :0.00000 Median :0.0000 Median :1.0000
## Mean :0.009756 Mean :0.01951 Mean :0.6049 Mean :0.9902
## 3rd Qu.:0.000000 3rd Qu.:0.00000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :1.000000 Max. :1.00000 Max. :4.0000 Max. :1.0000
##
## Q48R_2 Q48R_3 Q48L_1 Q48L_2
## Min. :0.000000 Min. :0.000000 Min. :0.0000 Min. :0.000000
## 1st Qu.:0.000000 1st Qu.:0.000000 1st Qu.:1.0000 1st Qu.:0.000000
## Median :0.000000 Median :0.000000 Median :1.0000 Median :0.000000
## Mean :0.004878 Mean :0.004878 Mean :0.9951 Mean :0.004878
## 3rd Qu.:0.000000 3rd Qu.:0.000000 3rd Qu.:1.0000 3rd Qu.:0.000000
## Max. :1.000000 Max. :1.000000 Max. :1.0000 Max. :1.000000
##
## Q48L_3 Q48Shape Q49R_1 Q49R_2 Q49R_3
## Min. :0 Min. :0.0000 Min. :0.0000 Min. :0.000000 Min. :0
## 1st Qu.:0 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.000000 1st Qu.:0
## Median :0 Median :0.0000 Median :0.0000 Median :0.000000 Median :0
## Mean :0 Mean :0.6293 Mean :0.1805 Mean :0.009756 Mean :0
## 3rd Qu.:0 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:0.000000 3rd Qu.:0
## Max. :0 Max. :4.0000 Max. :1.0000 Max. :1.000000 Max. :0
##
## Q49R_4 Q49R_5 Q49L_1 Q49L_2
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.00000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00000
## Median :1.0000 Median :1.0000 Median :0.0000 Median :0.00000
## Mean :0.5073 Mean :0.5463 Mean :0.1854 Mean :0.01463
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:0.00000
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.00000
##
## Q49L_3 Q49L_4 Q49L_5 Q50R_1
## Min. :0 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:1.0000
## Median :0 Median :1.0000 Median :1.0000 Median :1.0000
## Mean :0 Mean :0.5463 Mean :0.5268 Mean :0.9951
## 3rd Qu.:0 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :0 Max. :1.0000 Max. :1.0000 Max. :1.0000
##
## Q50R_2 Q50R_3 Q50L_1 Q50L_2 Q50L_3
## Min. :0.000000 Min. :0 Min. :0.0000 Min. :0.000000 Min. :0
## 1st Qu.:0.000000 1st Qu.:0 1st Qu.:1.0000 1st Qu.:0.000000 1st Qu.:0
## Median :0.000000 Median :0 Median :1.0000 Median :0.000000 Median :0
## Mean :0.004878 Mean :0 Mean :0.9951 Mean :0.004878 Mean :0
## 3rd Qu.:0.000000 3rd Qu.:0 3rd Qu.:1.0000 3rd Qu.:0.000000 3rd Qu.:0
## Max. :1.000000 Max. :0 Max. :1.0000 Max. :1.000000 Max. :0
##
## Q51R_1 Q51R_2 Q51R_3 Q51R_4 Q51R_5
## Min. :0.0000 Min. :0 Min. :0 Min. :0 Min. :0.0000
## 1st Qu.:1.0000 1st Qu.:0 1st Qu.:0 1st Qu.:0 1st Qu.:0.0000
## Median :1.0000 Median :0 Median :0 Median :0 Median :0.0000
## Mean :0.7756 Mean :0 Mean :0 Mean :0 Mean :0.0878
## 3rd Qu.:1.0000 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0.0000
## Max. :1.0000 Max. :0 Max. :0 Max. :0 Max. :1.0000
##
## Q51R_6 Q51R_7 Q51L_1 Q51L_2 Q51L_3
## Min. :0.00000 Min. :0.0000 Min. :0.0000 Min. :0 Min. :0
## 1st Qu.:0.00000 1st Qu.:0.0000 1st Qu.:1.0000 1st Qu.:0 1st Qu.:0
## Median :0.00000 Median :0.0000 Median :1.0000 Median :0 Median :0
## Mean :0.03415 Mean :0.1024 Mean :0.7902 Mean :0 Mean :0
## 3rd Qu.:0.00000 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:0 3rd Qu.:0
## Max. :1.00000 Max. :1.0000 Max. :1.0000 Max. :0 Max. :0
## NA's :1 NA's :1
## Q51L_4 Q51L_5 Q51L_6 Q51L_7
## Min. :0 Min. :0.00000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0 1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.:0.00000
## Median :0 Median :0.00000 Median :0.00000 Median :0.00000
## Mean :0 Mean :0.06373 Mean :0.04902 Mean :0.09314
## 3rd Qu.:0 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
## Max. :0 Max. :1.00000 Max. :1.00000 Max. :1.00000
## NA's :1 NA's :1 NA's :1 NA's :1
analysis_data <- ICON_OCCLUSION_OMES %>%
mutate(
# Mã hóa Gender: 0 = Male, 1 = Female (theo chuẩn quốc tế)
Gender = factor(Gender,
levels = c(0, 1),
labels = c("Male", "Female"))
)
#--- THANG ĐIỂM ICON ---
analysis_data <- analysis_data %>%
mutate(
# 1. Khoảng chen chúc hàm trên (Upper arch crowding score)
ICQ38_Score = factor(ICQ38_Score,
levels = c(0, 1, 2, 3, 4, 5, 6),
labels = c("None", "<2mm", "2-5mm", "5-9mm", "9-13mm", "13-17mm", ">17mm")),
# 2. Khoảng chen chúc hàm dưới (Lower arch crowding score)
ICQ39_Score = factor(ICQ39_Score,
levels = c(0, 1, 2, 3, 4, 5, 6),
labels = c("None", "<2mm", "2-5mm", "5-9mm", "9-13mm", "13-17mm", ">17mm")),
# 3. Cắn chéo (Crossbite)
Cq10 = factor(Cq10,
levels = c(0, 1),
labels = c("None", "Have")),
# 4. Cắn hở (Openbite)
eQ13 = factor(eQ13,
levels = c(0, 1, 2, 3, 4, 5),
labels = c("None", "Confrontation", "<1mm", "1-2mm", "2-4mm", ">4mm")),
# 5. Cắn phủ (Overbite)
ICQ40 = factor(ICQ40,
levels = c(0, 1, 2, 3, 4),
labels = c("None", "<1/3", "1/3-2/3", "2/3 to the end of the teeth", "Cover all teeth")),
# 6. Tương quan răng mặt má chiều trước - sau (Buccal segment A-P)
ICQ41 = factor(ICQ41,
levels = c(0, 1, 2),
labels = c("Class I/II/III", "Any, none confrontation", "Confrontation"))
)
# --- OCCLUSAL CHARACTERISTICS ---
# Chú thích: Chuyển đổi các đặc điểm khớp cắn sang dạng Factor
analysis_data <- analysis_data %>%
mutate(
# 1. Phân loại Angle (Biến gộp Q42_Q43 bạn đã mã hóa lại: 0-Class II, 1-Class III)
# Đây là biến phân nhóm chính (Grouping variable)
Angle_Class = factor(Q42_Q43,
levels = c(0, 1),
labels = c("Class II", "Class III")),
# 2. Phân loại Angle chi tiết cho từng bên (Right/Left)
across(c(Q42, Q43),
~factor(.x, levels = c(1, 2, 3, 4, 5),
labels = c("Class I", "Class II div 1", "Class II div 2", "Class III", "N/A"))),
# 3. Lệch đường giữa (Midline shift - Q44)
Q44 = factor(Q44,
levels = c(0, 1),
labels = c("None", "Have")),
# 4. Lệch sang phải/trái (To right side, To left side - Q45, Q46)
across(c(Q45, Q46),
~factor(.x,
levels = c(0, 1),
labels = c("None", "Have"))),
# 5. Lồi xương hàm dưới (Mandibular Torus)
Torus = factor(Torus,
levels = c(0, 1),
labels = c("None", "Have"))
)
# Lưu ý: Các biến như Q45_Maxi, Q45_Mandi (đo mm) và FA20 (The Mew Indicator line)
# là biến số liên tục (Continuous) nên chúng ta giữ nguyên dạng Numeric, không chuyển sang Factor.
# --- MÃ HÓA CHI TIẾT MỤC OMES ---
# Chú thích: Mã hóa các biến vận động hàm và khớp thái dương hàm
# --- 1.1. Các triệu chứng khi Há miệng - OPENING RIGHT/LEFT (0: None, 1: Have) ---
analysis_data <- analysis_data %>%
mutate(
Q47R_1 = factor(Q47R_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (R)
Q47R_2 = factor(Q47R_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (R)
Q47R_3 = factor(Q47R_3, levels = c(0, 1), labels = c("None", "Have")), # Midline deviation (R)
Q47L_1 = factor(Q47L_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (L)
Q47L_2 = factor(Q47L_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (L)
Q47L_3 = factor(Q47L_3, levels = c(0, 1), labels = c("None", "Have")) # Midline deviation (L)
)
# --- 1.2. Hình thái đường vận động Há miệng ---
analysis_data <- analysis_data %>%
mutate(
Q47Shape = factor(Q47Shape,
levels = c(0, 1, 2, 3, 4),
labels = c("Normal", "Zigzag on the right", "Zigzag on the left", "Lean to the right", "Lean to the left"))
)
# --- 2.1. Các triệu chứng khi Đóng miệng - CLOSING RIGHT/LEFT (0: None, 1: Have) ---
analysis_data <- analysis_data %>%
mutate(
Q48R_1 = factor(Q48R_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (R)
Q48R_2 = factor(Q48R_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (R)
Q48R_3 = factor(Q48R_3, levels = c(0, 1), labels = c("None", "Have")), # Midline deviation (R)
Q48L_1 = factor(Q48L_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (L)
Q48L_2 = factor(Q48L_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (L)
Q48L_3 = factor(Q48L_3, levels = c(0, 1), labels = c("None", "Have")) # Midline deviation (L)
)
# --- 2.2. Hình thái đường vận động Đóng miệng ---
analysis_data <- analysis_data %>%
mutate(
Q48Shape = factor(Q48Shape,
levels = c(0, 1, 2, 3, 4),
labels = c("Normal", "Zigzag on the right", "Zigzag on the left", "Lean to the right", "Lean to the left"))
)
# --- 3.1 Mã hóa vận động TRƯỢT SANG BÊN ---
analysis_data <- analysis_data %>%
mutate(
# Sang Phải (Right)
Q49R_1 = factor(Q49R_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (R)
Q49R_2 = factor(Q49R_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (R)
Q49R_3 = factor(Q49R_3, levels = c(0, 1), labels = c("None", "Have")), # Midline deflection (R)
Q49R_4 = factor(Q49R_4, levels = c(0, 1), labels = c("None", "Have")), # Obstruct working side (R)
Q49R_5 = factor(Q49R_5, levels = c(0, 1), labels = c("None", "Have")), # None obstruct working side (R)
# Sang Trái (Left)
Q49L_1 = factor(Q49L_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (L)
Q49L_2 = factor(Q49L_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (L)
Q49L_3 = factor(Q49L_3, levels = c(0, 1), labels = c("None", "Have")), # Midline deflection (L)
Q49L_4 = factor(Q49L_4, levels = c(0, 1), labels = c("None", "Have")), # Obstruct working side (L)
Q49L_5 = factor(Q49L_5, levels = c(0, 1), labels = c("None", "Have")) # None obstruct working side (L)
)
# --- 3.2 Mã hóa vận động RA TRƯỚC ---
analysis_data <- analysis_data %>%
mutate(
# Đưa trước bên Phải- Protrusion Right
Q50R_1 = factor(Q50R_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (R)
Q50R_2 = factor(Q50R_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (R)
Q50R_3 = factor(Q50R_3, levels = c(0, 1), labels = c("None", "Have")), # Midline deflection (R)
# Đưa trước bên Trái- Protrusion Left
Q50L_1 = factor(Q50L_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (L)
Q50L_2 = factor(Q50L_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (L)
Q50L_3 = factor(Q50L_3, levels = c(0, 1), labels = c("None", "Have")) # Midline deflection (L)
)
# --- Tiếng kêu khớp bên PHẢI (TMJ noises Right) ---
analysis_data <- analysis_data %>%
mutate(
Q51R_1 = factor(Q51R_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (R)
Q51R_2 = factor(Q51R_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (R)
Q51R_3 = factor(Q51R_3, levels = c(0, 1), labels = c("None", "Have")), # Right laterality (R)
Q51R_4 = factor(Q51R_4, levels = c(0, 1), labels = c("None", "Have")), # Left laterality (R)
Q51R_5 = factor(Q51R_5, levels = c(0, 1), labels = c("None", "Have")), # Jaw open (R)
Q51R_6 = factor(Q51R_6, levels = c(0, 1), labels = c("None", "Have")), # Jaw close (R)
Q51R_7 = factor(Q51R_7, levels = c(0, 1), labels = c("None", "Have")) # Jaw open and close (R)
)
# --- Tiếng kêu khớp bên TRÁI (TMJ noises Left) ---
analysis_data <- analysis_data %>%
mutate(
Q51L_1 = factor(Q51L_1, levels = c(0, 1), labels = c("None", "Have")), # Normal (L)
Q51L_2 = factor(Q51L_2, levels = c(0, 1), labels = c("None", "Have")), # Pain (L)
Q51L_3 = factor(Q51L_3, levels = c(0, 1), labels = c("None", "Have")), # Right laterality (L)
Q51L_4 = factor(Q51L_4, levels = c(0, 1), labels = c("None", "Have")), # Left laterality (L)
Q51L_5 = factor(Q51L_5, levels = c(0, 1), labels = c("None", "Have")), # Jaw open (L)
Q51L_6 = factor(Q51L_6, levels = c(0, 1), labels = c("None", "Have")), # Jaw close (L)
Q51L_7 = factor(Q51L_7, levels = c(0, 1), labels = c("None", "Have")) # Jaw open and close (L)
)