R Markdown

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

Including Plots

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)
  )