2022 Ilze SDF RCT data analysis

Author

Ilze Maldupa, Sergio Uribe

Packages

pacman::p_load(tidyverse, 
               here, 
               gtsummary, 
               janitor, 
               sjPlot)
here::here()
[1] "/home/sergiouribe/Insync/sergio.uribe@gmail.com/Google Drive/Research Drive/2022_ilze_sdf_fluoride_non_invasive_rct/data_analysis_2022_rct_sdf_ilze"

Dataset

data_baseline <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vTtuaGor2bwSwHbFTXPPBzzcXWCXhvU5O-6gPr_Fne9dxYr1gKCrQJSu7cUeDhhycfUQUb_ss7IOBmV/pub?gid=1016017385&single=true&output=csv")

data_codes <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vS6lfWKoICLdJ59Z4ri5cz2wC2UXM9XHSCdrCkKuZq9VEGk6Y_sfiSrOyCeFY_mO--WiDVFm51ocLfQ/pub?gid=1282333714&single=true&output=csv")

data_final <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vRC47LTIwUcGHdtzjLDaLgmyKELs1qhvce-YOJSrIvgBe5HOayMBhUHndZE5TFsu_jhwR3SSdj5Zyb8/pub?gid=40656487&single=true&output=csv")

Save a copy of the data, for offline

write_csv(data_baseline, here("data", "data_baseline.csv"))
write_csv(data_codes, here("data", "data_codes.csv"))
write_csv(data_final, here("data", "data_final.csv"))

Add a column with the moment for later join

data_baseline$Time <- "baseline"
data_final$Time <- "final"

Cleaning with janitor

data_baseline <- data_baseline %>%
  janitor::clean_names(case = "snake") %>%
  remove_empty(c("rows", "cols"))

data_codes <- data_codes %>% 
  janitor::clean_names(case = "snake") %>%
  remove_empty(c("rows", "cols")) 

data_final <- data_final %>% 
  janitor::clean_names(case = "snake") %>%
  remove_empty(c("rows", "cols")) 

Data cleaning

Create new columns with the age

data_baseline <- data_baseline %>% 
  mutate(berna_kods = as.double(berna_kods)) %>% 
  mutate(izmeklesanas_datums = lubridate::mdy(izmeklesanas_datums)) %>% 
  mutate(berna_dzimsanas_datums = lubridate::mdy(berna_dzimsanas_datums)) %>% 
  mutate(across(5:61, as.character))

data_final <- data_final %>% 
  mutate(berna_kods = as.double(berna_kods)) %>% 
  mutate(beigu_izmeklesanas_datums = lubridate::mdy(beigu_izmeklesanas_datums)) %>% 
  mutate(across(6:64, as.character))

===todo: remove the patients with kode zero from baseline

data_baseline <- data_baseline %>% 
  filter(berna_kods > 0)

Merge both datasets: baseline and final

data_consolidated <- data_baseline %>% full_join(data_final)
# rm(data_baseline, data_final)

create new variable pain experience

two new columns

firstly, will codify if any pain, then yes,

data_consolidated <- data_consolidated %>% 
  mutate(pain_experience_all = case_when(
    sudzibas_par_zobiem == "Nav" ~ "No", 
    TRUE ~ "Yes"
  )) %>% 
    mutate(pain_experience_final = case_when(
    time == "baseline" ~ "NA", 
    sudzibas_par_zobiem == "Nav" ~ "No experience", 
    TRUE ~ "Pain experience"
  ))

Move the time column to the beginning

data_consolidated <- data_consolidated %>% relocate(time, .before = "timestamp")

Remove the columns grupa_4 and grupa_63

data_consolidated <- data_consolidated %>% 
  select(-c(grupa_4, grupa_63))

Add the codes from the data_codes

Convert the kods in data_codes to numeric

data_codes <- data_codes %>% 
  mutate(kods = as.numeric(kods))

remove all the innecesary columns from the codes data

data_codes <- data_codes %>% 
  select(kods, grupas_krasa)

add the codes as a new variable called group

data_consolidated <- left_join(data_consolidated, data_codes, by = c("berna_kods" = "kods")) %>% 
  relocate(grupas_krasa, .after = time)

Create AGE column

data_consolidated <- data_consolidated %>%
  mutate(age_years = trunc(as.numeric(
    difftime(izmeklesanas_datums, berna_dzimsanas_datums, units = "weeks")
  ) / 52.25)) %>%
  mutate(age_months = lubridate::interval(berna_dzimsanas_datums, izmeklesanas_datums) %/% months(1)) %>%
  relocate(age_years, .after = "grupas_krasa") %>%
  relocate(age_months, .after = "grupas_krasa")

extract the age from the data to add it to the final children

data_age <- data_consolidated %>% 
  filter(time == "baseline") %>% 
  select(berna_kods, 
         age_months, 
         age_years, 
         dzimums)

now added to the data consolidate

data_consolidated <- full_join(data_consolidated, data_age, by = "berna_kods") %>% 
  select(-c(age_months.x, age_years.x, dzimums.x)) %>% 
  rename(age_months = age_months.y) %>% 
  rename(age_years = age_years.y) %>% 
  rename(dzimums = dzimums.y) %>% 
  relocate(age_months:dzimums, .before = timestamp)

Check the attrition per group

data_consolidated %>% 
  tabyl(grupas_krasa, time) %>%
  # adorn_totals(where = "col") %>% 
  #adorn_percentages(denominator = "col") %>% 
  #adorn_pct_formatting() %>% 
  adorn_totals(where = "row")
 grupas_krasa baseline final
        Balta       70    55
     Dzeltena       67    52
        Lillā       75    58
         Rozā       71    63
         Zaļa       77    65
         Zila       75    66
         <NA>        2     1
        Total      437   360

== removed NA, FIX THIS

data_consolidated <- data_consolidated %>% 
  filter(!is.na(grupas_krasa))

ABSTRACT IADPH

Table 1 abstract IADPH

data_iadph <- data_consolidated %>% 
  filter(time == "final") %>% 
  select(
         Group = grupas_krasa, 
         Gender = dzimums, 
         "Age (months)"= age_months, 
         age_years, 
         Plaque = aplikums, 
         "Parents satisfaction" = cik_apmierinats_a_jus_esat_ar_sava_berna_zobu_izskatu, 
         "Acceptable to continue with the treatment" = vai_jus_piekristu_turpinat_zobu_arstesanu_ar_petijuma_izmantoto_metodi, 
         "Minor complications"= komplikacijas_minimalas, 
         "Major complications"= komplikacijas_nopietnas, 
         "Pain experience"= pain_experience_final  
         )

Recode the levels

data_iadph <- data_iadph %>%
  mutate(Gender = recode(Gender , "Meitene" = "Girl", "Zēns" = "Boy")) %>%
  mutate(Plaque = recode(Plaque, "Redzams" = "Visible", "Nav redzams" = "No visible"))  %>% 
  mutate(`Minor complications` = recode(`Minor complications`, "Jā" = "Minor complications", "Nē" = "No")) %>% 
  mutate(`Major complications` = recode(`Major complications`, "Jā" = "Major complications", "Nē" = "No"))

Relevel the factors

data_iadph <- data_iadph %>% 
  mutate(Plaque = fct_relevel(Plaque, "Visible")) 
data_iadph %>% 
  select(-age_years) %>% 
  gtsummary::tbl_summary(by = Group, missing = "no")  %>% 
  gtsummary::bold_labels() %>% 
  gtsummary::add_overall()
Characteristic Overall, N = 3591 Balta, N = 551 Dzeltena, N = 521 Lillā, N = 581 Rozā, N = 631 Zaļa, N = 651 Zila, N = 661
Gender
Boy 200 (56%) 29 (53%) 28 (55%) 29 (50%) 36 (60%) 38 (58%) 40 (61%)
Girl 155 (44%) 26 (47%) 23 (45%) 29 (50%) 24 (40%) 27 (42%) 26 (39%)
Age (months) 45 (35, 55) 44 (34, 54) 47 (39, 58) 44 (34, 56) 45 (39, 52) 45 (30, 53) 45 (32, 54)
Plaque
Visible 195 (54%) 31 (56%) 29 (56%) 31 (53%) 38 (60%) 42 (65%) 24 (36%)
No visible 164 (46%) 24 (44%) 23 (44%) 27 (47%) 25 (40%) 23 (35%) 42 (64%)
Parents satisfaction
1 13 (3.6%) 3 (5.5%) 2 (3.8%) 2 (3.4%) 1 (1.6%) 3 (4.6%) 2 (3.0%)
2 17 (4.7%) 1 (1.8%) 0 (0%) 1 (1.7%) 6 (9.5%) 6 (9.2%) 3 (4.5%)
3 81 (23%) 15 (27%) 11 (21%) 17 (29%) 19 (30%) 9 (14%) 10 (15%)
4 64 (18%) 10 (18%) 13 (25%) 6 (10%) 16 (25%) 9 (14%) 10 (15%)
5 184 (51%) 26 (47%) 26 (50%) 32 (55%) 21 (33%) 38 (58%) 41 (62%)
Acceptable to continue with the treatment
Iespējams 11 (3.1%) 0 (0%) 3 (5.8%) 3 (5.2%) 2 (3.2%) 1 (1.5%) 2 (3.0%)
Neesmu pārliecināts/a 1 (0.3%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%)
Noteikti 345 (96%) 55 (100%) 49 (94%) 55 (95%) 60 (95%) 62 (95%) 64 (97%)
Visticamāk, ka nē 2 (0.6%) 0 (0%) 0 (0%) 0 (0%) 1 (1.6%) 1 (1.5%) 0 (0%)
Minor complications
Minor complications 270 (75%) 45 (82%) 43 (83%) 46 (79%) 48 (76%) 36 (55%) 52 (79%)
No 89 (25%) 10 (18%) 9 (17%) 12 (21%) 15 (24%) 29 (45%) 14 (21%)
Major complications
Major complications 119 (33%) 23 (42%) 23 (44%) 24 (41%) 15 (24%) 13 (20%) 21 (32%)
No 240 (67%) 32 (58%) 29 (56%) 34 (59%) 48 (76%) 52 (80%) 45 (68%)
Pain experience
No experience 322 (90%) 51 (93%) 42 (81%) 51 (88%) 59 (94%) 60 (92%) 59 (89%)
Pain experience 37 (10%) 4 (7.3%) 10 (19%) 7 (12%) 4 (6.3%) 5 (7.7%) 7 (11%)

1 n (%); Median (IQR)

Which factors explain parents satisfaction?

Dicho the response variable 1-3 = 0

data_iadph <- data_iadph %>% 
  mutate(satisfaction = case_when(
    `Parents satisfaction` < 4 ~ 0, 
    TRUE ~ 1
  ))
m1 <-
  glm(
    satisfaction ~ Group + Gender + `Age (months)` + Plaque + `Minor complications` + `Major complications` + `Pain experience`,
    family = binomial,
    data = data_iadph
  )
m1 %>% 
  gtsummary::tbl_regression(exponentiate = T)
Characteristic OR1 95% CI1 p-value
Group
Balta — —
Dzeltena 1.24 0.52, 3.01 0.6
Lillā 0.93 0.41, 2.10 0.9
Rozā 0.63 0.28, 1.39 0.3
Zaļa 1.28 0.56, 2.97 0.6
Zila 1.55 0.67, 3.63 0.3
Gender
Boy — —
Girl 1.10 0.68, 1.79 0.7
Age (months) 1.03 1.02, 1.05 <0.001
Plaque
Visible — —
No visible 1.79 1.05, 3.07 0.033
Minor complications
Minor complications — —
No 1.05 0.57, 1.95 0.9
Major complications
Major complications — —
No 1.80 1.03, 3.18 0.041
Pain experience
No experience — —
Pain experience 2.02 0.87, 5.09 0.12

1 OR = Odds Ratio, CI = Confidence Interval

sjPlot::plot_model(m1, 
                   title = "Regression model explaining satisfaction")

Column’s name

[1] “timestamp”
[2] “ejected”
[3] “berna code”
[4] “date of investigation”
[5] “date of birth”.
[6] “sex”
[7] “medical history”
[8] “thickness of the tooth eruption”
[9] “toothpaste”
[10] “whether there is an improvement in the knowledge of tooth eruption at the time of the peday”
[11] “daily or almost daily drinking of juice, tea, cocoa milk etc.” [12] “sweets every day”
[13] “neck candy and or syrups thick”
[14] “is there an improvement in the peday time diet”
[15] “complaints about teeth”
[16] “experience of dental treatment in the past only recognized heavy tooth loss”
[17] “plaque”

[58] “bottle of the year”
[59] “duration of feeding in months”
[60] “mouth breathing”
[61] “time”
[62] “quantity”
[63] “group 4”
[64] “end date of consumption”
[65] “medical history or history of systemic illnesses during the year”
[66] “how satisfied are you with the appearance of your child’s teeth”
[67] “would you agree to continue with the method used by the petitioner”
[68] “complications are minimal”
[69] “complications serious”
[70] “let the patient know how satisfied you are with the appearance of their teeth”
[71] “a year ago, did you take a look at the boy’s teeth”
[72] “do you now partirate your son’s teeth”
[73] “group 63