Cargue de la base de datos

Se carga la base de datos ya filtrada y compactada. En esta base

En esta base se inclyeron un total de 494 registros

Ajuste de variables para el analisis

  1. Dolor
  2. Ingreso por tamizaje o sintomas
  3. Indice de Charlson
  4. Afiliacion al sistema de salud
  5. Edad (ajuste de NA)
  6. Intervalo entre Radioterapia y braquiterapia (Ajuste NA)
  7. Nivel educativo
  8. Grupo etnico
  9. Estado FIGO
  10. Antecedente tabaquismo
#Ajuste de variables inicial (dolor + sintomas/tamizaje + Charlson)
library(dplyr)  
  BASE$dolor <- ifelse(
  apply(BASE[, c(76,81, 82)] == "Checked", 1, any),  # Verificar si hay algún "Checked" en cada fila
  "Sí", 
  "No")


BASE$ingreso <- ifelse(BASE$`¿Cuenta con estudios previos de tamizaje para cáncer de cuello uterino?`== "Si", "tamizaje", "sintomas")
BASE$ingreso[is.na(BASE$ingreso)] <- "sintomas"
  
  BASE <- BASE %>%
  mutate(charls_cat= cut(`Índice de Charlson`, 
                           breaks = c(-Inf, 2, 4, Inf), 
                           right = T, 
                           labels = c("<=2","3-4", ">=5")))  

#table(BASE$`Régimen Afiliación Salud (Colombia)`)
#table(BASE$`Régimen afiliación salud (Guatemala)`)    

    BASE <- BASE %>%
    mutate(AFILIACION = case_when(
    `Régimen Afiliación Salud (Colombia)` %in% c("Contributivo", "Particular/Prepagada") |
    `Régimen afiliación salud (Guatemala)` %in% c("Privado/Seguro médico") ~ "Contributivo/Privado",
     `Régimen Afiliación Salud (Colombia)` %in% c("Subsidiado") |
     `Régimen afiliación salud (Guatemala)` %in% c("Sector público", "Seguro social") ~ "Subsidiado/Público",
     TRUE ~ NA_character_  # Para los casos que no cumplen ninguna condición
    )) 

BASE$AFILIACION <- factor(BASE$AFILIACION, levels = c("Subsidiado/Público", "Contributivo/Privado")) #REORDENANDO LAS CATEGORIAS


#summary(BASE$`Edad a la fecha de diagnóstico`)
# se convierten en NA los mayores o iguales a 100
BASE$`Edad a la fecha de diagnóstico`[BASE$`Edad a la fecha de diagnóstico` >= 100] <- NA

#summary(BASE$`Intervalo entre Radioterapia Externa y Braquiterapia`)
BASE$`Intervalo entre Radioterapia Externa y Braquiterapia`[BASE$`Intervalo entre Radioterapia Externa y Braquiterapia` >= 1000] <- NA

#table(BASE$`Máximo nivel de educación alcanzado`)
    
BASE$EDUCACION <- ifelse(BASE$`Máximo nivel de educación alcanzado` %in% c("No sabe leer/escribir", "Primaria"), "Primaria <",
ifelse(BASE$`Máximo nivel de educación alcanzado` %in% c("Secundaria", "Técnico"), "Secundaria + tecnico", ifelse(BASE$`Máximo nivel de educación alcanzado` %in% c("Profesional", "Posgrado (maestría, doctorado)"), "Profesional + posgrado", BASE$`Máximo nivel de educación alcanzado`)))

BASE$EDUCACION <- factor(BASE$EDUCACION, levels = c("Primaria <", "Secundaria + tecnico", "Profesional + posgrado") ) #REORDENANDO LAS CATEGORIAS

#table(BASE$`Grupo étnico`)
BASE$GRUPO_ET <- ifelse(BASE$`Grupo étnico` %in% c("Afroamericano", "Gitanos o romanos", "Latino", "Mestizo", "Otros", "No aplica"), "Sin etnia especifica", ifelse(BASE$`Grupo étnico` %in% c("Indígena (etnias)"), "Indigena", BASE$`Grupo étnico`))


BASE$GRUPO_ET <- factor(BASE$GRUPO_ET, levels = c("Indigena", "Sin etnia especifica")) #REORDENANDO LAS CATEGORIAS

BASE$EST_clin_FIGO<- factor(recode(BASE$`Estadio clínico según clasificación FIGO`, "IB3: Tumor confinado al cuello uterino que mide 4 cm o más de ancho." = "IB3,II,IIA", "II: Cáncer se ha diseminado más allá del útero hacia la vagina o tejido cercano al cuello uterino y esta dentro del área pélvica." = "IB3,II,IIA",
"IIA: Tumor limitado a los dos tercios superiores de la vagina." = "IB3,II,IIA", 
"IIB: Tumor diseminado a región parametrial sin llegar a la pared pélvica." = "IIB, III, IIIA, IIIB, IIIC, IVA", "III: Tumor compromete tercio inferior de vagina y/o se ha diseminado a la pared pélvica y/o causa hidronefrosis y/o compromete ganglios linfáticos regionales, sin desiminación a distancia." = "IIB, III, IIIA, IIIB, IIIC, IVA", "IIIA: Tumor compromete tercio inferior de la vagina, no ha crecido hasta interior de la pared pélvica." = "IIB, III, IIIA, IIIB, IIIC, IVA", "IIIB: Tumor ha crecido dentro de la pared pélvica y/o afecta un riñón." = "IIB, III, IIIA, IIIB, IIIC, IVA", "IIIC: Tumor compromete ganglios linfáticos regionales (pelvis y paraaórticos)." = "IIB, III, IIIA, IIIB, IIIC, IVA", 
"IVA: Cáncer se ha diseminado a vejiga o recto, pero no hay metástasis a distancia." = "IIB, III, IIIA, IIIB, IIIC, IVA"))

BASE$EST_clin_FIGO <- factor(BASE$EST_clin_FIGO, levels = c("IB3,II,IIA", "IIB, III, IIIA, IIIB, IIIC, IVA")) #REORDENANDO LAS CATEGORIAS


BASE$TABAQUISMO <- ifelse(BASE$Tabaquismo %in% c("Fumadora al momento del diagnóstico 1 paquete año o menos", "Fumadora al momento del diagnóstico 2 paquetes año o más"), "Fumadora", ifelse(BASE$Tabaquismo %in% c("Fumó hasta menos de 15 años previos al diagnóstico (al momento del diagnóstico sin consumo)"), "Ex-Fumadora", ifelse(BASE$Tabaquismo %in% c("Nunca o dejó de fumar 15 años o más antes del diagnóstico"), "No fumadora", BASE$Tabaquismo)))

BASE$TABAQUISMO <- factor(BASE$TABAQUISMO, levels = c("No fumadora","Ex-Fumadora", "Fumadora"))

BASE$ECOG <- factor(recode(BASE$ECOG, "0 Asintomático, sin restricciones para realización de la actividad física" = "ECOG0", "1 Sintomático con limitación para actividades arduas. Logra desempeñar sin asistencia trabajos ligeros y actividades cotidianas. Permanece en cama solo en las horas de sueño" = "ECOG1",
"2 Paciente encamado menos del 50% del día.  Satisface la mayoría de sus necesidades solo" = "ECOG2", 
"3 Paciente encamado más del 50% del día. Necesita ayuda para satisfacer la mayoría de las actividades diarias" = "ECOG3", "6 Sin dato" = "SIN DATO"))

BASE$ECOG[BASE$ECOG == "SIN DATO"] <- NA

Analisis estadistico

#Numero de casos por intitucion (verificados en calidad)

País Centro n
Colombia HUSI 132
Colombia COAJ 122
Guatemala ANGELES 121
Guatemala MIRARI 119
Total 488

Analisis de datos sociodemografico

myVars1 <- c("Edad a la fecha de diagnóstico", "EDUCACION", "GRUPO_ET", "Estado civil",               "AFILIACION","tipo_residencia") 
catVars1 <- c("EDUCACION", "GRUPO_ET", "Estado civil", "AFILIACION","tipo_residencia")  
# Reordenando las categorias para la tabla 1 PENDIENTES

BASE$`Estado civil` <- factor(BASE$`Estado civil`, levels = c("Soltero", "Casado o en pareja", "Divorciado o viudo")) #REORDENANDO LAS CATEGORIAS

library(tableone)
tab1 <- CreateTableOne(vars = myVars1, factorVars= catVars1, strata = "Procedencia", data = BASE, includeNA = F, test = T,addOverall = T, testNonNormal = T)
table1 <- as.data.frame(print(tab1, showAllLevels= TRUE, printToggle = FALSE, noSpaces = TRUE))
rownames(table1) <- gsub("\\.{3,}", "", rownames(table1))  # Quita puntos suspensivos "..."
rownames(table1) <- gsub("\\.{1,}", "_", rownames(table1))  # Quita puntos suspensivos "..."
rownames(table1) <- gsub("\\_{1,}", " ", rownames(table1))  # Quita puntos suspensivos "..."


library(knitr)
library(kableExtra)

kable(table1, format = "html", caption = "Variable sociodemograficas") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "#D7261E") %>%
  column_spec(2, border_left = T, background = "#F3E6E3")
Variable sociodemograficas
level Overall Colombia Guatemala p test
n 494 254 240
Edad a la fecha de diagnóstico mean SD 51.25 (13.39) 51.77 (14.65) 50.71 (11.91) 0.379
EDUCACION Primaria < 144 (37.0) 47 (30.1) 97 (41.6) 0.001
X Secundaria + tecnico 209 (53.7) 85 (54.5) 124 (53.2)
X 1 Profesional + posgrado 36 (9.3) 24 (15.4) 12 (5.2)
GRUPO ET Indigena 35 (7.1) 3 (1.2) 32 (13.3) <0.001
X 2 Sin etnia especifica 459 (92.9) 251 (98.8) 208 (86.7)
Estado civil Soltero 110 (24.4) 58 (26.9) 52 (22.2) 0.043
X 3 Casado o en pareja 254 (56.4) 127 (58.8) 127 (54.3)
X 4 Divorciado o viudo 86 (19.1) 31 (14.4) 55 (23.5)
AFILIACION Subsidiado/Público 197 (39.9) 131 (51.6) 66 (27.5) <0.001
X 5 Contributivo/Privado 297 (60.1) 123 (48.4) 174 (72.5)
library(openxlsx)
 write.xlsx(table1, "tablasocio_dm_Junio.xlsx", rowNames = TRUE)

Antecedentes

#cambiando nombres variables y niveles para mejor visualizacion de la tabla 1 

colnames(BASE)[colnames(BASE) == "Número de gestaciones (incluyendo abortos, ectópicos y nacimientos vivos previos al ingreso al estudio)"] <- "N.de gestaciones"

colnames(BASE)[colnames(BASE) == "Número de partos vaginales"] <- "N. partos 
vaginales"

colnames(BASE)[colnames(BASE) == "Tipo de estudio de tamizaje (choice=Citología)"] <- "Citologia"

colnames(BASE)[colnames(BASE) == "Tipo de estudio de tamizaje (choice=Pruebas moleculares VPH)"] <- "P. molecular VPH"

colnames(BASE)[colnames(BASE) == "Antecedente de procedimientos en cérvix (choice=Conización cervical)"] <- "Conización cervical"

colnames(BASE)[colnames(BASE) == "Antecedente de procedimientos en cérvix (choice=Crioterapia)"] <- "Crioterapia"

colnames(BASE)[colnames(BASE) == "Antecedente de procedimientos en cérvix (choice=Ablación térmica)"] <- "Ablación térmica"

colnames(BASE)[colnames(BASE) == "Antecedente de procedimientos en cérvix (choice=Biopsia exocervical o endocervical)"] <- "Biopsia exocervical o endocervical"

colnames(BASE)[colnames(BASE) == "Antecedente de procedimientos en cérvix (choice=Ninguno)"] <- "Ningun procedimiento cervix previo"

#names(BASE) 35:37, 45:49
BASE <- BASE %>%
  mutate(across(c(35:37, 45:49), ~ recode(., "Checked" = "Si", "Unchecked" = "No")))


BASE$`Historia de lesiones premalignas` <- ifelse(BASE$`Historia de lesiones premalignas` %in% c("NIC 1 (displasia leve) - Lesión escamosa intraepitelial de bajo grado"), "NIC 1", ifelse(BASE$`Historia de lesiones premalignas` %in% c("NIC 2 (displasia moderada - Lesión escamosa intraepitelial de alto grado", "NIC 3 (displasia grave) - Lesión escamosa intraepitelial de alto grado"), "NIC 2 - 3", BASE$`Historia de lesiones premalignas`))

BASE$`Historia de lesiones premalignas` <- factor(BASE$`Historia de lesiones premalignas`, levels = c("NIC 2 - 3", "NIC 1", "Carcinoma in situ", "Nunca")) #REORDENANDO LAS CATEGORIAS
BASE <- BASE %>%
  mutate(
    # Contar cuántas respuestas "Sí" hay
    n_procedimientos = (`Ningun procedimiento cervix previo` == "Si") + 
      (`Biopsia exocervical o endocervical` == "Si") + 
      (`Ablación térmica`== "Si") + 
      (`Conización cervical` == "Si") + 
      (`Crioterapia` == "Si"),
    
    # Crear la columna con la clasificación
    Procedimiento_Cervix = case_when(
      `Ningun procedimiento cervix previo` == "Si" ~ "NINGUNA",
      `Biopsia exocervical o endocervical` == "Si" ~ "BIOPSIA",
      `Ablación térmica` == "Si" | `Crioterapia` == "Si" ~ "TRAT. ABLATIVO",
      `Conización cervical` == "Si" ~ "CONIZACION",
      TRUE ~ NA_character_
    )
  )

# Ver casos con múltiples respuestas
casos_multiples <- BASE %>% 
  filter(n_procedimientos > 1) %>% 
  select(contains("cervix"), contains("Ablación"), contains("Crioterapia"), 
         contains("Biopsia"), contains("Conización"), Procedimiento_Cervix)

BASE$Procedimiento_Cervix <- factor(BASE$Procedimiento_Cervix, levels = c("NINGUNA", "BIOPSIA", "TRAT. ABLATIVO", "CONIZACION")) #REORDENANDO LAS CATEGORIAS

print(casos_multiples)
## # A tibble: 7 × 7
##   Ningun procedimiento cer…¹ Procedimiento_Cervix `Ablación térmica` Crioterapia
##   <chr>                      <chr>                <chr>              <chr>      
## 1 No                         BIOPSIA              No                 No         
## 2 No                         BIOPSIA              No                 No         
## 3 Si                         NINGUNA              No                 No         
## 4 No                         BIOPSIA              No                 No         
## 5 No                         BIOPSIA              No                 Si         
## 6 No                         BIOPSIA              No                 No         
## 7 No                         BIOPSIA              No                 No         
## # ℹ abbreviated name: ¹​`Ningun procedimiento cervix previo`
## # ℹ 3 more variables: `Biopsia exocervical o endocervical` <chr>,
## #   `Especifique el tipo histologico reportado en biopsia de diagnóstico` <chr>,
## #   `Conización cervical` <chr>
myVars2<-c("TABAQUISMO", "N.de gestaciones",  "N. partos vaginales", "Citologia", "P. molecular VPH", "Historia de lesiones premalignas", "Procedimiento_Cervix", "charls_cat")
    
catVars2<-c("TABAQUISMO", "Citologia", "P. molecular VPH", "Historia de lesiones premalignas", "Conización cervical", "Crioterapia", "Procedimiento_Cervix", "charls_cat")
    
tab2 <- CreateTableOne(vars = myVars2, factorVars= catVars2, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)

table2 <- as.data.frame(print(tab2, showAllLevels= TRUE, printToggle = FALSE, noSpaces = TRUE))


rownames(table2) <- gsub("\\.{3,}", "", rownames(table2))  # Quita 3 puntos suspensivos
rownames(table2) <- gsub("\\.{2,}", " ", rownames(table2))  # Quita 2 puntos suspensivos
rownames(table2) <- gsub("\\.{1,}", " ", rownames(table2))  # Quita 1 punto

kable(table2, format = "html", caption = "Antecedentes") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "#698B22") %>%
  column_spec(2, border_left = T, background = "#98FB98")
Antecedentes
level Overall Colombia Guatemala p test
n 494 254 240
TABAQUISMO No fumadora 422 (90.9) 210 (87.9) 212 (94.2) 0.032
X Ex-Fumadora 17 (3.7) 10 (4.2) 7 (3.1)
X 1 Fumadora 25 (5.4) 19 (7.9) 6 (2.7)
N de gestaciones mean SD 3.73 (2.67) 3.84 (3.06) 3.62 (2.18) 0.357
Citologia No 373 (75.5) 163 (64.2) 210 (87.5) <0.001
X 2 Si 121 (24.5) 91 (35.8) 30 (12.5)
P molecular VPH No 485 (98.2) 245 (96.5) 240 (100.0) 0.009
X 3 Si 9 (1.8) 9 (3.5) 0 (0.0)
Historia de lesiones premalignas NIC 2 - 3 17 (5.8) 7 (3.8) 10 (9.2) <0.001
X 4 NIC 1 9 (3.1) 3 (1.6) 6 (5.5)
X 5 Carcinoma in situ 9 (3.1) 1 (0.5) 8 (7.3)
X 6 Nunca 259 (88.1) 174 (94.1) 85 (78.0)
Procedimiento_Cervix NINGUNA 319 (64.6) 196 (77.2) 123 (51.2) <0.001
X 7 BIOPSIA 157 (31.8) 53 (20.9) 104 (43.3)
X 8 TRAT. ABLATIVO 6 (1.2) 0 (0.0) 6 (2.5)
X 9 CONIZACION 12 (2.4) 5 (2.0) 7 (2.9)
charls_cat <=2 200 (40.5) 117 (46.1) 83 (34.6) 0.008
X 10 3-4 189 (38.3) 95 (37.4) 94 (39.2)
X 11 >=5 105 (21.3) 42 (16.5) 63 (26.2)
write.xlsx(table2, "tabla_antc_jun_2025.xlsx", rowNames = TRUE)

Deteccion

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=TC tórax)"] <- "TC TORAX"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=TC abdomen)"] <- "TC ABDOMEN"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=TC pelvis)"] <- "TC PELVIS"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=RMN pelvis)"] <- "RMN PELVIS"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=PET-CT)"] <- "PET-CT"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=Rayos X tórax)"] <- "RAYOS X TORAX"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=Laparoscopia exploratoria)"] <- "Laparoscopia exploratoria"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=Cistoscopia)"] <- "Cistoscopia"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=Ultrasonido transvaginal)"] <- "Ultrasonido transvaginal"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=Ultrasonido de renal y de vías urinarias)"] <- "Ultrasonido de renal y de vías urinaria"

colnames(BASE)[colnames(BASE) == "Estudios de extensión (choice=Otro ¿Cuál?)"] <- "Otro estudio de extension"


#names(BASE) 119:129
BASE <- BASE %>%
  mutate(across(c(119:129), ~ recode(., "Checked" = "Si", "Unchecked" = "No")))

myVars3<-c("ingreso", "dolor", "Subtipo histológico", "Grado de diferenciación",  "TC TORAX", "TC ABDOMEN", "TC PELVIS", "RMN PELVIS", "PET-CT", "RAYOS X TORAX", "Laparoscopia exploratoria", "Cistoscopia","Ultrasonido transvaginal",  "Ultrasonido de renal y de vías urinaria","Otro estudio de extension")

catVars3<-c("ingreso", "dolor", "Subtipo histológico", "Grado de diferenciación",  "TC TORAX", "TC ABDOMEN", "TC PELVIS", "RMN PELVIS", "PET-CT", "RAYOS X TORAX", "Laparoscopia exploratoria", "Cistoscopia","Ultrasonido transvaginal",  "Ultrasonido de renal y de vías urinaria","Otro estudio de extension")
    

tab3 <- CreateTableOne(vars = myVars3, factorVars= catVars3, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)

table3 <- as.data.frame(print(tab3, showAllLevels= TRUE, printToggle = FALSE))

rownames(table3) <- gsub("\\.{3,}", "", rownames(table3))  # Quita 3 puntos

rownames(table3) <- gsub("\\.{1,}", " ", rownames(table3))  # Quita 1 puntos

kable(table3, format = "html", caption = "Deteccion - estudios de extension") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "#FFB90F") %>%
  column_spec(2, border_left = T, background = "#FFFFE0")
Deteccion - estudios de extension
level Overall Colombia Guatemala p test
n 494 254 240
ingreso sintomas 368 (74.5) 161 (63.4) 207 ( 86.2) <0.001
X tamizaje 126 (25.5) 93 (36.6) 33 ( 13.8)
dolor No 403 (95.3) 177 (94.7) 226 ( 95.8) 0.761
X 1 20 ( 4.7) 10 ( 5.3) 10 ( 4.2)
Subtipo histológico Adenocarcinoma 59 (11.9) 22 ( 8.7) 37 ( 15.4) 0.025
X 2 Carcinoma adenoescamoso 2 ( 0.4) 0 ( 0.0) 2 ( 0.8)
X 3 Carcinoma escamocelular 429 (86.8) 228 (89.8) 201 ( 83.8)
X 4 Carcinoma neuroendocrino de células pequeñas 1 ( 0.2) 1 ( 0.4) 0 ( 0.0)
X 5 Otro, ¿Cuál? 3 ( 0.6) 3 ( 1.2) 0 ( 0.0)
Grado de diferenciación Bien diferenciado 112 (25.4) 59 (28.5) 53 ( 22.6) 0.271
X 6 Mal diferenciado o Indiferenciado 71 (16.1) 29 (14.0) 42 ( 17.9)
X 7 Moderadamente diferenciado 258 (58.5) 119 (57.5) 139 ( 59.4)
TC TORAX No 134 (27.1) 54 (21.3) 80 ( 33.3) 0.004
X 8 Si 360 (72.9) 200 (78.7) 160 ( 66.7)
TC ABDOMEN No 37 ( 7.5) 28 (11.0) 9 ( 3.8) 0.004
X 9 Si 457 (92.5) 226 (89.0) 231 ( 96.2)
TC PELVIS No 134 (27.1) 58 (22.8) 76 ( 31.7) 0.035
X 10 Si 360 (72.9) 196 (77.2) 164 ( 68.3)
RMN PELVIS No 353 (71.5) 187 (73.6) 166 ( 69.2) 0.319
X 11 Si 141 (28.5) 67 (26.4) 74 ( 30.8)
PET CT No 456 (92.3) 239 (94.1) 217 ( 90.4) 0.172
X 12 Si 38 ( 7.7) 15 ( 5.9) 23 ( 9.6)
RAYOS X TORAX No 394 (79.8) 192 (75.6) 202 ( 84.2) 0.024
X 13 Si 100 (20.2) 62 (24.4) 38 ( 15.8)
Laparoscopia exploratoria No 490 (99.2) 251 (98.8) 239 ( 99.6) 0.656
X 14 Si 4 ( 0.8) 3 ( 1.2) 1 ( 0.4)
Cistoscopia No 483 (97.8) 245 (96.5) 238 ( 99.2) 0.083
X 15 Si 11 ( 2.2) 9 ( 3.5) 2 ( 0.8)
Ultrasonido transvaginal No 397 (80.4) 174 (68.5) 223 ( 92.9) <0.001
X 16 Si 97 (19.6) 80 (31.5) 17 ( 7.1)
Ultrasonido de renal y de vías urinaria No 483 (97.8) 248 (97.6) 235 ( 97.9) 1.000
X 17 Si 11 ( 2.2) 6 ( 2.4) 5 ( 2.1)
Otro estudio de extension No 457 (92.5) 217 (85.4) 240 (100.0) <0.001
X 18 Si 37 ( 7.5) 37 (14.6) 0 ( 0.0)
write.xlsx(table3, "tabla_dx.xlsx", rowNames = TRUE)

Detallado estudio de extension

#if (!require("BiocManager", quietly = TRUE))
#    install.packages("BiocManager")
#BiocManager::install("limma")
library(limma)
library(UpSetR)

BASE_UPSET <- BASE %>% select(`TC TORAX`, `TC ABDOMEN`, `TC PELVIS`,  `RMN PELVIS`, `RAYOS X TORAX`,`PET-CT`,`Ultrasonido transvaginal`)

BASE_UPSET <- BASE_UPSET %>%
  mutate(across(c(1:7), ~ recode(., "Si" = 1, "No" = 0)))
BASE_UPSET<- as.data.frame(BASE_UPSET)

upset(BASE_UPSET, order.by = "freq", nsets = 9, nintersects = 25, matrix.color = "#2F4F4F",  main.bar.color = "#5F9EA0", sets.bar.color = "skyblue", mainbar.y.label = "Cuidado soporte",  sets.x.label = "Estudios de extension", point.size = 2, line.size = 0.5, number.angles = 0, group.by = "degree", shade.alpha = 1, matrix.dot.alpha = 1, scale.intersections = "identity", scale.sets = "identity", text.scale = 1, set_size.show = T)

Revisando combinaciones concretas

#estudios de extension; las tres al tiempo
BASE <- BASE %>%
  mutate(ext_TO_AD_PE3 = ifelse(`TC TORAX` == "Si" & `TC ABDOMEN` == "Si" & `TC PELVIS` == "Si", "Si", "No"))

BASE <- BASE %>%
  mutate(ext_TO_AD_2 = ifelse(`TC TORAX` == "Si" & `TC ABDOMEN` == "Si" & `TC PELVIS` != "Si", "Si", "No"))

BASE <- BASE %>%
  mutate(ext_TO_PE_2 = ifelse(`TC TORAX` == "Si" & `TC ABDOMEN` != "Si" & `TC PELVIS` == "Si", "Si", "No"))


BASE <- BASE %>%
  mutate(ext_AD_PE_2 = ifelse(`TC TORAX` != "Si" & `TC ABDOMEN` == "Si" & `TC PELVIS` == "Si", "Si", "No"))


#, `RMN PELVIS`, `RAYOS X TORAX`,`PET-CT`,`Laparoscopia exploratoria`, `Cistoscopia`, `Ultrasonido transvaginal`, `Ultrasonido de renal y de vías urinaria`, `Otro estudio de extension`)

#Se verifican los cruces 

#install.packages("summarytools")
library(summarytools)
freq(BASE$ext_TO_AD_PE3)
## Frequencies  
## BASE$ext_TO_AD_PE3  
## Type: Character  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##          No    236     47.77          47.77     47.77          47.77
##          Si    258     52.23         100.00     52.23         100.00
##        <NA>      0                               0.00         100.00
##       Total    494    100.00         100.00    100.00         100.00

253 PACIENTES TUVIERON los tres estudios de extensión (TC TORAX, ABDOMEN, PELVIS)

ctable(BASE$ext_TO_AD_2, BASE$`Ultrasonido transvaginal`)
## Cross-Tabulation, Row Proportions  
## ext_TO_AD_2 * `Ultrasonido transvaginal`  
## Data Frame: BASE  
## 
## ------------- -------------------------- ------------- ------------ --------------
##                 Ultrasonido transvaginal            No           Si          Total
##   ext_TO_AD_2                                                                     
##            No                              324 (78.6%)   88 (21.4%)   412 (100.0%)
##            Si                               73 (89.0%)    9 (11.0%)    82 (100.0%)
##         Total                              397 (80.4%)   97 (19.6%)   494 (100.0%)
## ------------- -------------------------- ------------- ------------ --------------

Pacientes que les realizaron TC torax + abdomen (392), a 9 les realizaron ultrasonido vaginal

ctable(BASE$ext_TO_AD_2, BASE$`RMN PELVIS`)
## Cross-Tabulation, Row Proportions  
## ext_TO_AD_2 * `RMN PELVIS`  
## Data Frame: BASE  
## 
## ------------- ------------ ------------- ------------- --------------
##                 RMN PELVIS            No            Si          Total
##   ext_TO_AD_2                                                        
##            No                298 (72.3%)   114 (27.7%)   412 (100.0%)
##            Si                 55 (67.1%)    27 (32.9%)    82 (100.0%)
##         Total                353 (71.5%)   141 (28.5%)   494 (100.0%)
## ------------- ------------ ------------- ------------- --------------
ctable(BASE$ext_TO_AD_2, BASE$`Otro estudio de extension`)
## Cross-Tabulation, Row Proportions  
## ext_TO_AD_2 * `Otro estudio de extension`  
## Data Frame: BASE  
## 
## ------------- --------------------------- ------------- ----------- --------------
##                 Otro estudio de extension            No          Si          Total
##   ext_TO_AD_2                                                                     
##            No                               381 (92.5%)   31 (7.5%)   412 (100.0%)
##            Si                                76 (92.7%)    6 (7.3%)    82 (100.0%)
##         Total                               457 (92.5%)   37 (7.5%)   494 (100.0%)
## ------------- --------------------------- ------------- ----------- --------------

Pacientes que les realizaron TC torax + abdomen (392), a 27 les realizaRON rmn pelvis

ctable(BASE$ext_AD_PE_2, BASE$`RAYOS X TORAX`)
## Cross-Tabulation, Row Proportions  
## ext_AD_PE_2 * `RAYOS X TORAX`  
## Data Frame: BASE  
## 
## ------------- --------------- ------------- ------------- --------------
##                 RAYOS X TORAX            No            Si          Total
##   ext_AD_PE_2                                                           
##            No                   343 (87.1%)    51 (12.9%)   394 (100.0%)
##            Si                    51 (51.0%)    49 (49.0%)   100 (100.0%)
##         Total                   394 (79.8%)   100 (20.2%)   494 (100.0%)
## ------------- --------------- ------------- ------------- --------------

A pacientes que les realizaron TC abdomen y pelvis a 49 les realizaron rayos x.

ctable(BASE$ext_TO_PE_2, BASE$`Ultrasonido de renal y de vías urinaria`)
## Cross-Tabulation, Row Proportions  
## ext_TO_PE_2 * `Ultrasonido de renal y de vías urinaria`  
## Data Frame: BASE  
## 
## ------------- ----------------------------------------- ------------- ----------- --------------
##                 Ultrasonido de renal y de vías urinaria            No          Si          Total
##   ext_TO_PE_2                                                                                   
##            No                                             483 (97.8%)   11 (2.2%)   494 (100.0%)
##         Total                                             483 (97.8%)   11 (2.2%)   494 (100.0%)
## ------------- ----------------------------------------- ------------- ----------- --------------

Ningun paciente tuvo solammente TORAX Y PELVIS

Variables clinicas

BASE$`Tamaño tumoral clínico` <- factor(BASE$`Tamaño tumoral clínico`, levels=c("tumor microscópico", "≤ 2 cm", ">2 cm  - ≤ 4cm", ">4 cm"))

BASE$`Especialidad que realizó la primera consulta` <- ifelse(BASE$`Especialidad que realizó la primera consulta` %in% c("Cuidados Paliativos", "Oncología clínica", "Otra ¿Cuál?", "Radioterapia"), "Otra", BASE$`Especialidad que realizó la primera consulta`)

myVars4<-c("Especialidad que realizó la primera consulta","Diagnóstico CIE-10 registrado", "Tamaño tumoral clínico",  "EST_clin_FIGO", "ECOG")
    
catVars4<-c("Especialidad que realizó la primera consulta","Diagnóstico CIE-10 registrado", "Tamaño tumoral clínico", "EST_clin_FIGO", "ECOG")
    
tab4 <- CreateTableOne(vars = myVars4, factorVars= catVars4, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)

table4 <- as.data.frame(print(tab4, showAllLevels= TRUE, printToggle = FALSE))

rownames(table4) <- gsub("\\.{3,}", "", rownames(table4))  # Quita 3 puntos

rownames(table4) <- gsub("\\.{1,}", " ", rownames(table4))  # Quita 1 puntos

kable(table4, format = "html", caption = "Variables clinicas") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "blue") %>%
  column_spec(2, border_left = T, background = "#ADD8E6")
Variables clinicas
level Overall Colombia Guatemala p test
n 494 254 240
Especialidad que realizó la primera consulta Ginecología Oncológica 399 (80.9) 200 (79.1) 199 (82.9) 0.328
X Otra 94 (19.1) 53 (20.9) 41 (17.1)
Diagnóstico CIE 10 registrado C530 Tumor maligno del endocérvix 91 (18.4) 50 (19.7) 41 (17.1) <0.001
X 1 C531 Tumor maligno del exocérvix 292 (59.1) 103 (40.6) 189 (78.8)
X 2 C539 Tumor maligno del cuello del útero, sin otra especificación 103 (20.9) 97 (38.2) 6 ( 2.5)
X 3 C55X Tumor maligno del útero, parte no especificada 8 ( 1.6) 4 ( 1.6) 4 ( 1.7)
Tamaño tumoral clínico tumor microscópico 5 ( 1.1) 5 ( 2.1) 0 ( 0.0) 0.001
X 4 ≤ 2 cm 2 ( 0.4) 2 ( 0.9) 0 ( 0.0)
X 5 >2 cm - ≤ 4cm 89 (18.8) 31 (13.3) 58 (24.2)
X 6 >4 cm 377 (79.7) 195 (83.7) 182 (75.8)
EST_clin_FIGO IB3,II,IIA 61 (12.3) 17 ( 6.7) 44 (18.3) <0.001
X 7 IIB, III, IIIA, IIIB, IIIC, IVA 433 (87.7) 237 (93.3) 196 (81.7)
ECOG ECOG0 181 (37.1) 147 (59.3) 34 (14.2) <0.001
X 8 ECOG1 240 (49.2) 92 (37.1) 148 (61.7)
X 9 ECOG2 63 (12.9) 9 ( 3.6) 54 (22.5)
X 10 ECOG3 4 ( 0.8) 0 ( 0.0) 4 ( 1.7)
write.xlsx(table4, "tabla_clinica.xlsx", rowNames = TRUE)

Tratamiento

colnames(BASE)[colnames(BASE) == "Tratamiento instaurado como primera línea  (si selecciona quimiorradiación no debe seleccionar ni terapia sistémica adyuvante ni radiación adyuvante) (choice=Quimio-radiación concomitante)"] <- "Quimio-radiación concomitante"

colnames(BASE)[colnames(BASE) == "Tratamiento instaurado como primera línea  (si selecciona quimiorradiación no debe seleccionar ni terapia sistémica adyuvante ni radiación adyuvante) (choice=Cirugía)"] <- "Cirugía"

colnames(BASE)[colnames(BASE) == "Tratamiento instaurado como primera línea  (si selecciona quimiorradiación no debe seleccionar ni terapia sistémica adyuvante ni radiación adyuvante) (choice=Terapia sistémica adyuvante)"] <- "Terapia sistémica adyuvante"

colnames(BASE)[colnames(BASE) =="Tratamiento instaurado como primera línea  (si selecciona quimiorradiación no debe seleccionar ni terapia sistémica adyuvante ni radiación adyuvante) (choice=Radiación adyuvante)"] <- "Radiación adyuvante"

colnames(BASE)[colnames(BASE) =="Tratamiento instaurado como primera línea  (si selecciona quimiorradiación no debe seleccionar ni terapia sistémica adyuvante ni radiación adyuvante) (choice=Cuidado de soporte)"] <- "Cuidado soporte"

colnames(BASE)[colnames(BASE) =="Tratamiento instaurado como primera línea  (si selecciona quimiorradiación no debe seleccionar ni terapia sistémica adyuvante ni radiación adyuvante) (choice=No recibió tratamiento)"] <- "No recibio tratamiento"


colnames(BASE)[colnames(BASE) =="Esquema de terapia sistémica en quimio-radiación concomitante (primera línea) (choice=Quimioterapia)"] <- "Esquema:Quimioterapia)"

colnames(BASE)[colnames(BASE) =="Esquema de terapia sistémica en quimio-radiación concomitante (primera línea) (choice=Terapias de blanco molecular)"] <- "Esquema:Terapias de blanco molecular)"


colnames(BASE)[colnames(BASE) =="Esquema de terapia sistémica en quimio-radiación concomitante (primera línea) (choice=Terapias de blanco molecular)"] <- "Esquema:Terapias de blanco molecular)"

colnames(BASE)[colnames(BASE) =="¿La terapia sistémica prescrita se administró en su totalidad? (Primera Línea)"] <- "Esquema completo t sistemica"

colnames(BASE)[colnames(BASE) =="¿Prescripción de Radioterapia Externa (Primera Línea)"] <- "Prescripcion radio externa"

colnames(BASE)[colnames(BASE) =="¿¿Completo en su totalidad el tratamiento por radioterapia externa?"] <- "Esquema completo radioterapia"

colnames(BASE)[colnames(BASE) =="¿Completo en su totalidad el tratamiento por radioterapia externa?"] <- "Esquema completo radioterapia"

colnames(BASE)[colnames(BASE) =="Prescripción de Braquiterapia"] <- "Prescripcion braquiterapia"

colnames(BASE)[colnames(BASE) =="¿Finalizo regimen de braquiterapia prescrito?"] <- "Esquema completo braquiterapia"

colnames(BASE)[colnames(BASE) =="Cirugía (choice=Histerectomía extrafascial)"] <- "Histerectomía extrafascial"

colnames(BASE)[colnames(BASE) =="Cirugía (choice=Histerectomía radical modificada)"] <- "Histerectomía radical modificada"
               
colnames(BASE)[colnames(BASE) =="Cirugía (choice=Histerectomía radical)"] <- "Histerectomía radical"

colnames(BASE)[colnames(BASE) =="Cirugía (choice=Salpingooforectomía bilateral)"] <- "Salpingooforectomía bilateral"

colnames(BASE)[colnames(BASE) =="Cirugía (choice=Linfadenectomía pélvica)"] <- "Linfadenectomía pélvica"

colnames(BASE)[colnames(BASE) =="Cirugía (choice=Otro)"] <- "Otra cirugia"

BASE$`Esquema completo t sistemica` <- factor(recode(BASE$`Esquema completo t sistemica`, "Desconocido" = "No"))

myVars5<-c("Quimio-radiación concomitante", "Cirugía", "Terapia sistémica adyuvante", "Radiación adyuvante", "Cuidado soporte", "No recibio tratamiento", 
"Esquema:Quimioterapia)", "Esquema:Terapias de blanco molecular)",  "Esquema completo t sistemica", "Prescripcion radio externa", "Esquema completo radioterapia", 
"Prescripcion braquiterapia", "Intervalo entre Radioterapia Externa y Braquiterapia", "Prescripcion braquiterapia", "Esquema completo braquiterapia",  "Histerectomía extrafascial", "Histerectomía radical modificada", "Histerectomía radical", 
"Salpingooforectomía bilateral", "Linfadenectomía pélvica", "Otra cirugia")
    
catVars5<-c("Quimio-radiación concomitante", "Cirugía", "Terapia sistémica adyuvante", "Radiación adyuvante", "Cuidado soporte", "No recibio tratamiento", 
"Esquema:Quimioterapia)", "Esquema:Terapias de blanco molecular)",  "Esquema completo t sistemica", "Prescripcion radio externa", "Esquema completo radioterapia", 
"Prescripcion braquiterapia", "Prescripcion braquiterapia", "Esquema completo braquiterapia",  "Histerectomía extrafascial", "Histerectomía radical modificada", "Histerectomía radical", "Salpingooforectomía bilateral", "Linfadenectomía pélvica", "Otra cirugia")

#names(BASE) 154, 155, 156, 157, 158, 159, 161, 162, 194, 195, 196, 197, 198, 199
BASE <- BASE %>%
  mutate(across(c(154, 155, 156, 157, 158, 159, 161, 162, 194, 195, 196, 197, 198, 199), ~ recode(., "Checked" = "Si", "Unchecked" = "No")))
    
    
tab5 <- CreateTableOne(vars = myVars5, factorVars= catVars5, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)
table5 <- as.data.frame(print(tab5, showAllLevels= TRUE, printToggle = FALSE))

rownames(table5) <- gsub("\\.{3,}", "", rownames(table5))  # Quita 3 puntos

rownames(table5) <- gsub("\\.{1,}", " ", rownames(table5))  # Quita 1 puntos

kable(table5, format = "html", caption = "Tratamiento") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "#8B475D") %>%
  column_spec(2, border_left = T, background = "#FFC0CB")
Tratamiento
level Overall Colombia Guatemala p test
n 494 254 240
Quimio radiación concomitante No 19 ( 3.8) 15 ( 5.9) 4 ( 1.7) 0.027
X Si 475 ( 96.2) 239 ( 94.1) 236 ( 98.3)
Cirugía No 468 ( 94.7) 234 ( 92.1) 234 ( 97.5) 0.013
X 1 Si 26 ( 5.3) 20 ( 7.9) 6 ( 2.5)
Terapia sistémica adyuvante No 490 ( 99.2) 250 ( 98.4) 240 (100.0) 0.147
X 2 Si 4 ( 0.8) 4 ( 1.6) 0 ( 0.0)
Radiación adyuvante No 480 ( 97.2) 241 ( 94.9) 239 ( 99.6) 0.004
X 3 Si 14 ( 2.8) 13 ( 5.1) 1 ( 0.4)
Cuidado soporte No 494 (100.0) 254 (100.0) 240 (100.0) NA
No recibio tratamiento No 494 (100.0) 254 (100.0) 240 (100.0) NA
Esquema Quimioterapia No 20 ( 4.0) 16 ( 6.3) 4 ( 1.7) 0.017
X 4 Si 474 ( 96.0) 238 ( 93.7) 236 ( 98.3)
Esquema Terapias de blanco molecular No 492 ( 99.6) 252 ( 99.2) 240 (100.0) 0.504
X 5 Si 2 ( 0.4) 2 ( 0.8) 0 ( 0.0)
Esquema completo t sistemica No 36 ( 7.5) 27 ( 11.1) 9 ( 3.8) 0.004
X 6 Si 443 ( 92.5) 216 ( 88.9) 227 ( 96.2)
Esquema completo radioterapia No 13 ( 2.7) 6 ( 2.4) 7 ( 3.0) 0.916
X 7 Si 473 ( 97.3) 244 ( 97.6) 229 ( 97.0)
Prescripcion braquiterapia No 52 ( 10.7) 10 ( 4.0) 42 ( 17.7) <0.001
X 8 Si 436 ( 89.3) 241 ( 96.0) 195 ( 82.3)
Intervalo entre Radioterapia Externa y Braquiterapia mean SD 20.76 (20.28) 21.52 (19.76) 19.84 (20.90) 0.392
Esquema completo braquiterapia No 18 ( 4.2) 10 ( 4.1) 8 ( 4.2) 1.000
X 9 Si 414 ( 95.8) 231 ( 95.9) 183 ( 95.8)
Histerectomía extrafascial No 491 ( 99.4) 254 (100.0) 237 ( 98.8) 0.227
X 10 Si 3 ( 0.6) 0 ( 0.0) 3 ( 1.2)
Histerectomía radical modificada No 487 ( 98.6) 249 ( 98.0) 238 ( 99.2) 0.493
X 11 Si 7 ( 1.4) 5 ( 2.0) 2 ( 0.8)
Histerectomía radical No 482 ( 97.6) 242 ( 95.3) 240 (100.0) 0.002
X 12 Si 12 ( 2.4) 12 ( 4.7) 0 ( 0.0)
Salpingooforectomía bilateral No 481 ( 97.4) 241 ( 94.9) 240 (100.0) 0.001
X 13 Si 13 ( 2.6) 13 ( 5.1) 0 ( 0.0)
Linfadenectomía pélvica No 482 ( 97.6) 242 ( 95.3) 240 (100.0) 0.002
X 14 Si 12 ( 2.4) 12 ( 4.7) 0 ( 0.0)
Otra cirugia No 491 ( 99.4) 252 ( 99.2) 239 ( 99.6) 1.000
X 15 Si 3 ( 0.6) 2 ( 0.8) 1 ( 0.4)
write.xlsx(table5, "tabla_tratamiento.xlsx", rowNames = TRUE)

Analisis tiempos

#momento adicional 
BASE$dif_quim_braq <- round(as.numeric(BASE$`Fecha de finalización de braquiterapia` - BASE$`Fecha de inicio de tratamiento sistémico (día de primera aplicación de terapia)`
) / 30, 3)
    
    
myVars6<-c("M_quim", "M_quim0", "M_rad0", "M_rad", "M_braq", "M_braq0",            "dif_dx_primtrat", "dif_quim_braq", "Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año", "Frecuencia de seguimiento por Oncología Clínica: Número de visitas en el Primer Año", "Frecuencia de seguimiento por Ginecología Oncológica: Número de visitas en el Primer Año")

tab6 <- CreateTableOne(vars = myVars6, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)

table6 <- as.data.frame(print(tab6, showAllLevels= TRUE, printToggle = FALSE))

rownames(table6) <- gsub("\\.{3,}", "", rownames(table6))  # Quita 3 puntos

rownames(table6) <- gsub("\\.{1,}", " ", rownames(table6))  # Quita 1 puntos

kable(table6, format = "html", caption = "Tiempo tratamientos") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "#B03060")
Tiempo tratamientos
level Overall Colombia Guatemala p test
n 494 254 240
M_quim (mean (SD)) 1.33 (2.44) 1.47 (2.42) 1.19 (2.47) 0.215
M_quim0 (mean (SD)) 0.85 (1.81) 1.09 (2.47) 0.61 (0.61) 0.004
M_rad0 (mean (SD)) 0.77 (0.62) 0.95 (0.60) 0.59 (0.59) <0.001
M_rad (mean (SD)) 1.45 (2.04) 1.44 (0.50) 1.46 (2.86) 0.942
M_braq (mean (SD)) 0.55 (1.88) 0.64 (2.52) 0.44 (0.29) 0.264
M_braq0 (mean (SD)) 1.56 (1.23) 1.85 (1.39) 1.21 (0.89) <0.001
dif_dx_primtrat (mean (SD)) 3.03 (2.87) 3.40 (3.38) 2.64 (2.16) 0.003
dif_quim_braq (mean (SD)) 2.53 (2.03) 2.73 (2.64) 2.30 (0.85) 0.029
Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año (mean (SD)) 1.66 (1.63) 2.45 (1.81) 0.84 (0.84) <0.001
Frecuencia de seguimiento por Oncología Clínica: Número de visitas en el Primer Año (mean (SD)) 3.33 (2.17) 3.30 (2.11) 3.72 (2.78) 0.428
Frecuencia de seguimiento por Ginecología Oncológica: Número de visitas en el Primer Año (mean (SD)) 3.02 (1.17) 2.58 (1.35) 3.46 (0.72) <0.001
write.xlsx(table6, "tabla_tiempo.xlsx", rowNames = TRUE)

Cuidado de soporte

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Cuidados paliativos)"] <- "Cuidado paliativo"

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Nutrición)"] <- "Nutricion"

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Patología oral)"] <- "Patologia oral"

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Psicología)"] <- "Psicologia"

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Fertilidad/Sexualidad)"] <- "Fertilidad/sexualidad"

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Otro, ¿Cuál?)"] <- "Otro cuidado de soporte"

colnames(BASE)[colnames(BASE) =="Cuidado de soporte (choice=Ninguno)"] <- "Ningun cuidado de soporte"

#names(BASE) 242, 243, 244, 245, 246, 247, 248
BASE <- BASE %>%
  mutate(across(c(242, 243, 244, 245, 246, 247, 248), ~ recode(., "Checked" = "Si", "Unchecked" = "No")))

myVars7<-c("Ningun cuidado de soporte", "Cuidado paliativo","Nutricion", "Patologia oral", "Psicologia", "Fertilidad/sexualidad", "Otro cuidado de soporte" )
    
catVars7<-c("Ningun cuidado de soporte", "Cuidado paliativo","Nutricion", "Patologia oral", "Psicologia", "Fertilidad/sexualidad", "Otro cuidado de soporte")
    
tab7 <- CreateTableOne(vars = myVars7, factorVars= catVars7, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)
table7 <- as.data.frame(print(tab7, showAllLevels= TRUE, printToggle = FALSE))

rownames(table7) <- gsub("\\.{3,}", "", rownames(table7))  # Quita 3 puntos

rownames(table7) <- gsub("\\.{1,}", " ", rownames(table7))  # Quita 1 puntos

kable(table7, format = "html", caption = "Cuidado de soporte") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "purple") %>%
  column_spec(2, border_left = T, background = "#CD96CD")
Cuidado de soporte
level Overall Colombia Guatemala p test
n 494 254 240
Ningun cuidado de soporte No 216 (43.7) 186 (73.2) 30 (12.5) <0.001
X Si 278 (56.3) 68 (26.8) 210 (87.5)
Cuidado paliativo No 339 (68.6) 110 (43.3) 229 (95.4) <0.001
X 1 Si 155 (31.4) 144 (56.7) 11 ( 4.6)
Nutricion No 399 (80.8) 167 (65.7) 232 (96.7) <0.001
X 2 Si 95 (19.2) 87 (34.3) 8 ( 3.3)
Patologia oral No 426 (86.2) 187 (73.6) 239 (99.6) <0.001
X 3 Si 68 (13.8) 67 (26.4) 1 ( 0.4)
Psicologia No 422 (85.4) 186 (73.2) 236 (98.3) <0.001
X 4 Si 72 (14.6) 68 (26.8) 4 ( 1.7)
Fertilidad sexualidad No 489 (99.0) 253 (99.6) 236 (98.3) 0.336
X 5 Si 5 ( 1.0) 1 ( 0.4) 4 ( 1.7)
Otro cuidado de soporte No 463 (93.7) 225 (88.6) 238 (99.2) <0.001
X 6 Si 31 ( 6.3) 29 (11.4) 2 ( 0.8)
write.xlsx(table7, "tabla_cuidadosoporte_junio.xlsx", rowNames = TRUE)

Revision combinaciones cuidado de soporte

BASE_VENN2 <- BASE %>% select(`Cuidado paliativo`, Nutricion, `Patologia oral`,  Psicologia, `Otro cuidado de soporte`)

BASE_VENN2 <- BASE_VENN2 %>%
  mutate(across(c(1:5), ~ recode(., "Si" = 1, "No" = 0)))

PLOT_venn2 <- vennCounts(BASE_VENN2)

vennDiagram(PLOT_venn2, cex = 1, circle.col = c("black", "#8B7E66","#CDAA7D", "skyblue", "#FFD39B"),counts.col = "black", show.include = T)

# Diagrama sankey

#se codificia las nuevas variables

#1 Completitud del tratamiento Quimio + Radio + Braqui

BASE <- BASE %>%
mutate(trat_complete2 = ifelse(coalesce(`Esquema completo t sistemica`, "No") == "Si" & coalesce(`Esquema completo radioterapia`, "No") == "Si" & coalesce(`Esquema completo braquiterapia`, "No") == "Si", "+compl", "-compl"))

#2 Ingreso:sintomas o tamizaje
BASE$ingreso <- as.factor(BASE$ingreso)

#3 Atencion por ginecooncologia

BASE$gineco <- factor(ifelse(grepl("Ginecología Oncológica", BASE$`Especialidad que realizó la primera consulta`), "+gineco", "-gineco"))


#Tratamientos--------------------------------------------------------------

#Cirugia
BASE$cirugia <- factor(ifelse(!is.na(BASE$`Fecha de cirugía`), "+cir", "-cir"))

#Quimioterapia
BASE$quimio <- factor(ifelse(
!is.na(BASE$`Fecha de inicio de tratamiento sistémico (día de primera aplicación de terapia)`) | !is.na(BASE$`Fecha de aplicación de finalización de tratamiento sistémico`) | 
BASE$`Esquema completo t sistemica` == "Si", "+quim", "-quim"))
BASE$quimio[is.na(BASE$quimio)] <- "-quim"


#Radioterapia
BASE$radio <- factor(ifelse(
!is.na(BASE$`Fecha de inicio de radioterapia (primera sesión)`) | 
!is.na(BASE$`Fecha de finalización de radioterapia (última sesión)`) | 
BASE$`Esquema completo radioterapia` == "Si", "+rad", "-rad"))

BASE$radio <- as.character(BASE$radio)
BASE$radio[is.na(BASE$radio)] <- "-rad"
BASE$radio <- factor(BASE$radio)  



#Braquiterapia
BASE$braqu <- factor(ifelse(
!is.na(BASE$`Fecha de primera aplicación de braquiterapia`) |
!is.na(BASE$`Fecha de finalización de braquiterapia`) |
BASE$`Esquema completo braquiterapia` == "Si", "+braq", "-braq"))
BASE$braqu[is.na(BASE$braqu)] <- "-braq"


BASE_AL <- BASE %>% select(AFILIACION,Procedencia, ingreso, gineco, cirugia, quimio, radio, braqu, trat_complete2)

#levels(BASE_AL$AFILIACION)
library(dplyr)
BASE_AL <- BASE_AL %>%
  mutate(AFILIACION = recode(AFILIACION, "Subsidiado/Público" = "Público", "Contributivo/Privado" = "Privado"))


BASE_transformado <- BASE_AL %>% group_by(AFILIACION, Procedencia, ingreso, gineco, cirugia,quimio, radio, braqu, trat_complete2) %>% 
  summarise(Freq = n()) %>% ungroup() %>% rename(Afiliacion = AFILIACION, Procedencia = Procedencia, Ingreso = ingreso, Gineco = gineco, Cirugia = cirugia, Quimio = quimio, 
Radio = radio, Braq = braqu, Complete =  trat_complete2)


library(easyalluvial) 

alluvial_wide( data = BASE_AL, 
               max_variables = 8, fill_by = 'first_variable',
               col_vector_flow = c("skyblue", "salmon"))

conteo de los “trayectos

library(gt)
BASE_transformado %>%
  gt() %>%
  tab_header(title = "Conteo trayectos") %>%
  cols_label_with(fn = toupper)  
Conteo trayectos
AFILIACION PROCEDENCIA INGRESO GINECO CIRUGIA QUIMIO RADIO BRAQ COMPLETE FREQ
Público Colombia sintomas -gineco -cir -quim +rad +braq -compl 1
Público Colombia sintomas -gineco -cir +quim -rad -braq -compl 1
Público Colombia sintomas -gineco -cir +quim +rad +braq +compl 13
Público Colombia sintomas -gineco -cir +quim +rad +braq -compl 1
Público Colombia sintomas +gineco -cir -quim -rad -braq -compl 1
Público Colombia sintomas +gineco -cir -quim +rad +braq -compl 3
Público Colombia sintomas +gineco -cir +quim +rad -braq -compl 1
Público Colombia sintomas +gineco -cir +quim +rad +braq +compl 62
Público Colombia sintomas +gineco -cir +quim +rad +braq -compl 6
Público Colombia sintomas +gineco +cir -quim +rad +braq -compl 1
Público Colombia sintomas +gineco +cir +quim +rad +braq +compl 1
Público Colombia tamizaje -gineco -cir +quim +rad +braq +compl 4
Público Colombia tamizaje +gineco -cir +quim +rad +braq +compl 30
Público Colombia tamizaje +gineco -cir +quim +rad +braq -compl 4
Público Colombia tamizaje +gineco +cir -quim +rad +braq -compl 2
Público Guatemala sintomas -gineco -cir +quim +rad +braq +compl 10
Público Guatemala sintomas +gineco -cir +quim +rad -braq -compl 3
Público Guatemala sintomas +gineco -cir +quim +rad +braq +compl 40
Público Guatemala sintomas +gineco -cir +quim +rad +braq -compl 5
Público Guatemala sintomas +gineco +cir +quim +rad +braq +compl 1
Público Guatemala tamizaje +gineco -cir +quim +rad -braq -compl 1
Público Guatemala tamizaje +gineco -cir +quim +rad +braq +compl 6
Privado Colombia sintomas -gineco -cir -quim +rad +braq -compl 2
Privado Colombia sintomas -gineco -cir +quim +rad +braq +compl 18
Privado Colombia sintomas -gineco -cir +quim +rad +braq -compl 3
Privado Colombia sintomas -gineco +cir +quim +rad -braq -compl 1
Privado Colombia sintomas -gineco +cir +quim +rad +braq +compl 3
Privado Colombia sintomas +gineco -cir +quim +rad -braq -compl 6
Privado Colombia sintomas +gineco -cir +quim +rad +braq +compl 29
Privado Colombia sintomas +gineco -cir +quim +rad +braq -compl 3
Privado Colombia sintomas +gineco +cir +quim +rad +braq +compl 3
Privado Colombia sintomas +gineco +cir +quim +rad +braq -compl 2
Privado Colombia tamizaje -gineco -cir +quim +rad +braq +compl 6
Privado Colombia tamizaje -gineco -cir +quim +rad +braq -compl 1
Privado Colombia tamizaje +gineco -cir -quim +rad +braq -compl 2
Privado Colombia tamizaje +gineco -cir +quim +rad -braq -compl 4
Privado Colombia tamizaje +gineco -cir +quim +rad +braq +compl 29
Privado Colombia tamizaje +gineco -cir +quim +rad +braq -compl 5
Privado Colombia tamizaje +gineco +cir -quim -rad -braq -compl 1
Privado Colombia tamizaje +gineco +cir +quim +rad +braq +compl 4
Privado Colombia tamizaje +gineco +cir +quim +rad +braq -compl 1
Privado Guatemala sintomas -gineco -cir -quim +rad +braq -compl 1
Privado Guatemala sintomas -gineco -cir +quim +rad -braq -compl 5
Privado Guatemala sintomas -gineco -cir +quim +rad +braq +compl 19
Privado Guatemala sintomas -gineco -cir +quim +rad +braq -compl 1
Privado Guatemala sintomas -gineco +cir -quim -rad -braq -compl 1
Privado Guatemala sintomas +gineco -cir +quim +rad -braq -compl 29
Privado Guatemala sintomas +gineco -cir +quim +rad +braq +compl 80
Privado Guatemala sintomas +gineco -cir +quim +rad +braq -compl 8
Privado Guatemala sintomas +gineco +cir -quim -rad -braq -compl 2
Privado Guatemala sintomas +gineco +cir +quim +rad +braq +compl 2
Privado Guatemala tamizaje -gineco -cir +quim +rad -braq -compl 1
Privado Guatemala tamizaje -gineco -cir +quim +rad +braq +compl 3
Privado Guatemala tamizaje +gineco -cir +quim +rad -braq -compl 3
Privado Guatemala tamizaje +gineco -cir +quim +rad +braq +compl 17
Privado Guatemala tamizaje +gineco -cir +quim +rad +braq -compl 2
write.xlsx(BASE_transformado, "SANKEY1.xlsx", rowNames = TRUE)

Segundo diagrama Sankey

¿Cuántos fallecieron?

table(BASE$Procedencia, BASE$`¿La pérdida en el seguimiento fue debido a fallecimiento?`)
##            
##              No No data Yes
##   Colombia  184      36  26
##   Guatemala 146      30  63
BASE <- BASE %>%
  mutate(retiro = ifelse(rowSums(across(c(`Motivo por el cuál no se completó la terapia sistémica (Primera Línea)`, `Causa de suspender tratamiento radioterapia`,                              `Causa de suspender braquiterapia`), ~ . == "Contraindicación médica"), 
na.rm = TRUE) > 0, "+cont.m", "-cont.m"))

BASE$rta1 <- factor(recode(BASE$`Respuesta a Primera Línea de Tratamiento`,
                           "Completa" = "+rta_trat",
                           "Parcial" = "+rta_trat",
                           "Sin dato" = "-rta_trat",
                           "Sin respuesta" = "-rta_trat"))

BASE$seg_onco_cli <- factor(recode(BASE$`Especialista de seguimiento (choice=Oncología clínica)`, "Checked" = "+seg_onco",
                            "Unchecked" = "-seg_onco"))

BASE$linea_2 <- factor(recode(BASE$`¿Recibió segunda línea de tratamiento?`,
                              "Yes" = "Si",
                              "No" = "No"))

BASE$linea_3 <- factor(recode(BASE$`Recibio tercera línea de tratamiento`,
                              "Yes" = "Si",
                              "No" = "No"))

BASE$fall <- factor(recode(BASE$`¿La pérdida en el seguimiento fue debido a fallecimiento?`,
                           "Yes" = "+fall",
                           "No" = "-fall",
                           "No data" = "-fall"))
table(is.na(BASE$fall))
## 
## FALSE  TRUE 
##   485     9
BASE$fall[is.na(BASE$fall)] <- "-fall"

BASE$linea_2[is.na(BASE$linea_2)] <- "No"
BASE$linea_3[is.na(BASE$linea_3)] <- "No"
BASE$rta1[is.na(BASE$rta1)] <- "-rta_trat"


BASE$retiro <- as.factor(BASE$retiro)
BASE$retiro <- relevel(BASE$retiro, ref = "+cont.m")

BASE_AL_pos <- BASE %>% select(trat_complete2, retiro, rta1, seg_onco_cli, linea_2, linea_3, fall)

BASE_transformado2 <- BASE_AL_pos %>% group_by(trat_complete2, retiro, rta1, seg_onco_cli, linea_2, linea_3, fall) %>% 
summarise(Freq = n()) %>% ungroup() %>% rename(Trat_completo=trat_complete2, retiro = retiro, Rta_1liena = rta1,  seg_onco_clinica=seg_onco_cli, linea_trat_2=linea_2, linea_trat_3=linea_3, fallecimiento = fall)


alluvial_wide( data = BASE_AL_pos, 
               max_variables = 8, fill_by = 'last_variable',
               col_vector_flow = c("mediumseagreen", "darkorange"))

library(gt)
BASE_transformado2 %>%
  gt() %>%
  tab_header(title = "Conteo trayectos") %>%
  cols_label_with(fn = toupper)  
Conteo trayectos
TRAT_COMPLETO RETIRO RTA_1LIENA SEG_ONCO_CLINICA LINEA_TRAT_2 LINEA_TRAT_3 FALLECIMIENTO FREQ
+compl -cont.m -rta_trat -seg_onco No No -fall 7
+compl -cont.m -rta_trat -seg_onco No No +fall 1
+compl -cont.m -rta_trat -seg_onco Si No -fall 1
+compl -cont.m -rta_trat -seg_onco Si No +fall 2
+compl -cont.m -rta_trat +seg_onco No No -fall 5
+compl -cont.m -rta_trat +seg_onco No No +fall 1
+compl -cont.m -rta_trat +seg_onco Si No -fall 4
+compl -cont.m -rta_trat +seg_onco Si No +fall 4
+compl -cont.m -rta_trat +seg_onco Si Si -fall 2
+compl -cont.m -rta_trat +seg_onco Si Si +fall 1
+compl -cont.m +rta_trat -seg_onco No No -fall 158
+compl -cont.m +rta_trat -seg_onco No No +fall 5
+compl -cont.m +rta_trat -seg_onco Si No -fall 18
+compl -cont.m +rta_trat -seg_onco Si No +fall 21
+compl -cont.m +rta_trat -seg_onco Si Si +fall 1
+compl -cont.m +rta_trat +seg_onco No No -fall 127
+compl -cont.m +rta_trat +seg_onco No No +fall 11
+compl -cont.m +rta_trat +seg_onco Si No -fall 5
+compl -cont.m +rta_trat +seg_onco Si No +fall 1
+compl -cont.m +rta_trat +seg_onco Si Si -fall 4
+compl -cont.m +rta_trat +seg_onco Si Si +fall 1
-compl +cont.m -rta_trat -seg_onco No No -fall 3
-compl +cont.m -rta_trat -seg_onco No No +fall 1
-compl +cont.m -rta_trat -seg_onco Si No +fall 1
-compl +cont.m -rta_trat +seg_onco Si No -fall 4
-compl +cont.m -rta_trat +seg_onco Si No +fall 1
-compl +cont.m +rta_trat -seg_onco No No -fall 5
-compl +cont.m +rta_trat -seg_onco No No +fall 1
-compl +cont.m +rta_trat +seg_onco No No -fall 13
-compl +cont.m +rta_trat +seg_onco Si No -fall 4
-compl +cont.m +rta_trat +seg_onco Si No +fall 1
-compl -cont.m -rta_trat -seg_onco No No -fall 5
-compl -cont.m -rta_trat -seg_onco No No +fall 8
-compl -cont.m -rta_trat -seg_onco Si No -fall 1
-compl -cont.m -rta_trat -seg_onco Si No +fall 1
-compl -cont.m -rta_trat -seg_onco Si Si +fall 1
-compl -cont.m -rta_trat +seg_onco No No -fall 3
-compl -cont.m -rta_trat +seg_onco No No +fall 1
-compl -cont.m -rta_trat +seg_onco Si No -fall 3
-compl -cont.m -rta_trat +seg_onco Si No +fall 2
-compl -cont.m +rta_trat -seg_onco No No -fall 17
-compl -cont.m +rta_trat -seg_onco No No +fall 3
-compl -cont.m +rta_trat -seg_onco Si No -fall 5
-compl -cont.m +rta_trat -seg_onco Si No +fall 17
-compl -cont.m +rta_trat -seg_onco Si Si -fall 1
-compl -cont.m +rta_trat -seg_onco Si Si +fall 1
-compl -cont.m +rta_trat +seg_onco No No -fall 10
-compl -cont.m +rta_trat +seg_onco No No +fall 1
write.xlsx(BASE_transformado2, "SANKEY2.xlsx", rowNames = TRUE)

Regresion logistica

#modelo de asociacion 
BASE$fall_reg <- ifelse(BASE$fall == "+fall", 1, 0)
 
BASE$`Subtipo histológico` <- as.character(BASE$`Subtipo histológico`)
BASE$`Subtipo histológico`[!(BASE$`Subtipo histológico` %in% c("Adenocarcinoma", "Carcinoma escamocelular"))] <- "Otro"
BASE$`Subtipo histológico` <- factor(BASE$`Subtipo histológico`)


#m1 <- glm (fall_reg ~ AFILIACION + EDUCACION + Procedencia + GRUPO_ET+ `Estado civil`+ EST_clin_FIGO + TABAQUISMO + Citologia + `Historia de lesiones premalignas` + `Biopsia exocervical o endocervical` + `Ningun procedimiento cervix previo` + + charls_cat + ingreso + `Subtipo histológico` + `TC ABDOMEN` + `TC PELVIS` + `RAYOS X TORAX` + `Ultrasonido transvaginal` + `Tamaño tumoral clínico` + ECOG + `Quimio-radiación concomitante` + Cirugía + `Radiación adyuvante` + `Prescripcion braquiterapia` + linea_2 + linea_3 + rta1 + trat_complete2 + M_rad0 + dif_dx_primtrat + `Ningun cuidado de soporte` + `Frecuencia de seguimiento por Ginecología Oncológica: Número de visitas en el Primer Año` + braqu + quimio, family = "binomial", data= BASE)
#summary(m1)




m2 <- glm (fall_reg ~ charls_cat + ECOG + linea_2 + braqu, family = "binomial", data= BASE)
summary(m2)
## 
## Call:
## glm(formula = fall_reg ~ charls_cat + ECOG + linea_2 + braqu, 
##     family = "binomial", data = BASE)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -1.6327     0.4783  -3.414 0.000640 ***
## charls_cat3-4  -0.7461     0.3344  -2.231 0.025660 *  
## charls_cat>=5  -0.5011     0.3718  -1.348 0.177811    
## ECOGECOG1       0.7204     0.3641   1.978 0.047883 *  
## ECOGECOG2       1.4418     0.4483   3.216 0.001299 ** 
## ECOGECOG3       2.8195     1.2355   2.282 0.022485 *  
## linea_2Si       2.2758     0.2885   7.890 3.03e-15 ***
## braqu+braq     -1.2263     0.3590  -3.416 0.000636 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 460.56  on 487  degrees of freedom
## Residual deviance: 329.98  on 480  degrees of freedom
##   (6 observations deleted due to missingness)
## AIC: 345.98
## 
## Number of Fisher Scoring iterations: 5
library(sjPlot)
tab_model(m2, transform = "exp")
  fall_reg
Predictors Odds Ratios CI p
(Intercept) 0.20 0.07 – 0.49 0.001
charls_cat3-4 0.47 0.24 – 0.90 0.026
charls cat [>=5] 0.61 0.29 – 1.24 0.178
ECOG [ECOG1] 2.06 1.03 – 4.31 0.048
ECOG [ECOG2] 4.23 1.77 – 10.34 0.001
ECOG [ECOG3] 16.77 1.12 – 189.37 0.022
linea 2 [Si] 9.74 5.58 – 17.33 <0.001
braqu [+braq] 0.29 0.14 – 0.59 0.001
Observations 488
R2 Tjur 0.300
#install.packages("sjPlot")
library(sjPlot)
#install.packages("sjmisc")
library(sjmisc)
#install.packages("sjlabelled")
library(sjlabelled)

library(gtsummary)
tbl_regression(m2, exponentiate = TRUE, add_estimate_to_reference_rows=TRUE)  %>% add_global_p()
Characteristic OR 95% CI p-value
charls_cat

0.067
    <=2 1.00
    3-4 0.47 0.24, 0.90
    >=5 0.61 0.29, 1.24
ECOG

0.004
    ECOG0 1.00
    ECOG1 2.06 1.03, 4.31
    ECOG2 4.23 1.77, 10.3
    ECOG3 16.8 1.12, 189
linea_2

<0.001
    No 1.00
    Si 9.74 5.58, 17.3
braqu

<0.001
    -braq 1.00
    +braq 0.29 0.14, 0.59
Abbreviations: CI = Confidence Interval, OR = Odds Ratio
library(ResourceSelection)
hoslem.test(m2$y, fitted(m2), g=10)
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  m2$y, fitted(m2)
## X-squared = 12.31, df = 6, p-value = 0.0554

El modelo ajusta bien a los datos

library(performance)
check_model(m2)

Perfiles de tiempos por paciente

Se incluyen las variables de tiempo a analizar

Se usan dos bases de datos: Eliminado NA (n = 415) e imputando datos ( n = 494)

PROFILES <- BASE %>% select(ID_merge, Procedencia, dif_dx_primtrat, M_quim0, M_quim, M_rad0, M_rad, M_braq0, M_braq, dif_quim_braq)

colnames(PROFILES)[colnames(PROFILES) == "M_quim"]     <- "Inicio - fin quim"
colnames(PROFILES)[colnames(PROFILES) == "M_quim0"]    <- "Pres - Inicio quim"
colnames(PROFILES)[colnames(PROFILES) == "M_rad0"]     <- "Pres - Inicio rad"
colnames(PROFILES)[colnames(PROFILES) == "M_rad"]      <- "Inicio - Fin rad"
colnames(PROFILES)[colnames(PROFILES) == "M_braq0"]    <- "Pres - Inicio Braq"
colnames(PROFILES)[colnames(PROFILES) == "M_braq"]     <- "Inicio - Fin Braq"
colnames(PROFILES)[colnames(PROFILES) == "dif_dx_primtrat"] <- "Dx - Trat"
colnames(PROFILES)[colnames(PROFILES) == "dif_quim_braq"]   <- "Inicio quim - Fin braq"

PROFILES2 <- PROFILES %>% 
  filter(if_all(3:10, ~ !is.na(.)))


library(VIM)
PROFILESimp <- kNN(PROFILES, 
                   variable = 3:10, 
                   k = 5, 
                   imp_var = FALSE)

Se revisan cuantos posibles perfiles pueden existir

library(mclust)
p1 <-mclustBIC(PROFILES2[,3:10]) # 6 perfiles
summary(p1) 
## Best BIC values:
##              VVV,6       VVV,5     VVV,7
## BIC      -4457.057 -4517.25982 -4579.967
## BIC diff     0.000   -60.20266  -122.910
p1.1<-Mclust(PROFILES2[,3:10])
library(factoextra)
fviz_mclust_bic(p1.1)

p2 <-mclustBIC(PROFILESimp[,3:10]) # 6 perfiles
summary(p2) 
## Best BIC values:
##              VVI,9       VVI,8      VVI,7
## BIC      -6531.775 -6582.41966 -6632.0291
## BIC diff     0.000   -50.64427  -100.2537
p2.1<-Mclust(PROFILESimp[,3:10])
fviz_mclust_bic(p2.1)

Se selecciona solucion con 6 componentes con la base imputada, no hay diferencia al imputar la base y no hacerlo.

model <- Mclust(PROFILESimp[,3:10], modelNames = "VVV", G = 6)
summary(model)
## ---------------------------------------------------- 
## Gaussian finite mixture model fitted by EM algorithm 
## ---------------------------------------------------- 
## 
## Mclust VVV (ellipsoidal, varying volume, shape, and orientation) model with 6
## components: 
## 
##  log-likelihood   n  df       BIC       ICL
##       -2728.713 494 269 -7125.909 -7167.027
## 
## Clustering table:
##   1   2   3   4   5   6 
## 125 111  27 101  57  73

#Graficando la solucion

library(tibble)
library(tidyr)
means <- data.frame(model$parameters$mean) %>%
  rownames_to_column() %>%
  rename(PROFILESimp = rowname) %>%
  pivot_longer(cols = c(X1, X2, X3, X4, X5, X6), names_to = "Profile", values_to = "Mean") %>%
  mutate(
    Mean = round(Mean, 2),
    # Estandarización Z (normalización usando media y desviación estándar)
    Mean = (Mean - mean(Mean)) / sd(Mean)
  )
means
## # A tibble: 48 × 3
##    PROFILESimp        Profile   Mean
##    <chr>              <chr>    <dbl>
##  1 Dx - Trat          X1       2.78 
##  2 Dx - Trat          X2       0.523
##  3 Dx - Trat          X3       2.50 
##  4 Dx - Trat          X4       0.484
##  5 Dx - Trat          X5       0.290
##  6 Dx - Trat          X6      -0.230
##  7 Pres - Inicio quim X1      -0.323
##  8 Pres - Inicio quim X2      -0.773
##  9 Pres - Inicio quim X3       0.919
## 10 Pres - Inicio quim X4      -0.657
## # ℹ 38 more rows
p <- means %>%
  mutate(Profile = recode(Profile, 
                          X1 = "Prof 1",
                          X2 = "Prof 2", 
                          X3 = "Prof 3", 
                          X4 = "Prof 4", 
                          X5 = "Prof 5",
                          X6 = "Prof 6",)) %>%
  ggplot(aes(PROFILESimp, Mean, group = Profile, color = Profile)) +
  geom_point(size = 2.25) +
  geom_line(size = 1.25) +
  scale_x_discrete(limits = c("Inicio - fin quim", "Pres - Inicio quim", "Pres - Inicio rad", "Inicio - Fin rad", "Pres - Inicio Braq", "Inicio - Fin Braq","Dx - Trat", "Inicio quim - Fin braq" )) +
  labs(x = "Diferencia momentos", y = "Standardized means") +
  theme_bw(base_size = 14) +
  theme(
    axis.text.x = element_text(angle = 90, hjust = 1, size = 10, face = "bold"),   # Letras eje X más grandes y en negrita
    axis.text.y = element_text(size = 14, face = "bold"),                         # Letras eje Y más grandes y en negrita
    axis.title.x = element_text(size = 16, face = "bold"),                       # Aumentar tamaño de la etiqueta del eje X
    axis.title.y = element_text(size = 16, face = "bold"),                       # Aumentar tamaño de la etiqueta del eje Y
    legend.position = "top", 
    legend.text = element_text(size = 14, face = "bold"),                        # Aumentar el tamaño de la leyenda y ponerla en negrita
    legend.title = element_text(size = 16, face = "bold")                       # Aumentar tamaño del título de la leyenda
  )
p

#Se revisa por país, ya que puede ser dificil caracterizar los 6 grupos de pacientes.

Colombia

PROFILESimp_COL <- PROFILESimp %>% filter(Procedencia == "Colombia")
PROFILESimp_GUAT <- PROFILESimp %>% filter(Procedencia == "Guatemala")

p1_Col <-mclustBIC(PROFILESimp_COL[,3:10]) # 4 perfiles
summary(p1_Col)
## Best BIC values:
##              VVV,4      VVV,5      VVV,6
## BIC      -3285.687 -3475.3044 -3580.4457
## BIC diff     0.000  -189.6176  -294.7588
p1_Col_2<-Mclust(PROFILESimp_COL[,3:10])
fviz_mclust_bic(p1_Col_2)

Para Colombia hay 4 perfiles.

model_Col <- Mclust(PROFILESimp_COL[,3:10], modelNames = "VVV", G = 4)
summary(model_Col)
## ---------------------------------------------------- 
## Gaussian finite mixture model fitted by EM algorithm 
## ---------------------------------------------------- 
## 
## Mclust VVV (ellipsoidal, varying volume, shape, and orientation) model with 4
## components: 
## 
##  log-likelihood   n  df       BIC       ICL
##       -1147.252 254 179 -3285.687 -3289.871
## 
## Clustering table:
##  1  2  3  4 
## 79 82 12 81

Graficando perfiles Colombia

means_Col <- data.frame(model_Col$parameters$mean) %>%
  rownames_to_column() %>%
  rename(PROFILESimp_Col = rowname) %>%
  pivot_longer(cols = c(X1, X2, X3, X4), names_to = "Profile", values_to = "Mean") %>%
  mutate(
    Mean = round(Mean, 2),
    # Estandarización Z (normalización usando media y desviación estándar)
    Mean = (Mean - mean(Mean)) / sd(Mean)
  )


p_Col <- means_Col %>%
  mutate(Profile = recode(Profile, 
                          X1 = "Prof 1",
                          X2 = "Prof 2", 
                          X3 = "Prof 3", 
                          X4 = "Prof 4")) %>%
  ggplot(aes(PROFILESimp_Col, Mean, group = Profile, color = Profile)) +
  geom_point(size = 2.25) +
  geom_line(size = 1.25) +
  scale_x_discrete(limits = c("Inicio - fin quim", "Pres - Inicio quim", "Pres - Inicio rad", "Inicio - Fin rad", "Pres - Inicio Braq", "Inicio - Fin Braq","Dx - Trat", "Inicio quim - Fin braq" )) +
  labs(x = "Diferencia momentos", y = "Standardized means", title = "Perfiles Colombia") +
  theme_bw(base_size = 14) +
  theme(
    axis.text.x = element_text(angle = 90, hjust = 1, size = 10, face = "bold"),   # Letras eje X más grandes y en negrita
    axis.text.y = element_text(size = 14, face = "bold"),                         # Letras eje Y más grandes y en negrita
    axis.title.x = element_text(size = 16, face = "bold"),                       # Aumentar tamaño de la etiqueta del eje X
    axis.title.y = element_text(size = 16, face = "bold"),                       # Aumentar tamaño de la etiqueta del eje Y
    legend.position = "top", 
    legend.text = element_text(size = 14, face = "bold"),                        # Aumentar el tamaño de la leyenda y ponerla en negrita
    legend.title = element_text(size = 16, face = "bold")                       # Aumentar tamaño del título de la leyenda
  )
p_Col

Perfiles Guatemala

p1_Guat <-mclustBIC(PROFILESimp_GUAT[,3:10]) # 7 perfiles en guatemala
summary(p1_Guat)
## Best BIC values:
##              VVI,7       VVI,6       VVI,5
## BIC      -2303.739 -2312.71795 -2341.24225
## BIC diff     0.000    -8.97875   -37.50305
p1_Guat_2<-Mclust(PROFILESimp_GUAT[,3:10])
fviz_mclust_bic(p1_Guat_2)

Se consolida el modelo

model_Guat <- Mclust(PROFILESimp_GUAT[,3:10], modelNames = "VVI", G = 7)
summary(model_Guat)
## ---------------------------------------------------- 
## Gaussian finite mixture model fitted by EM algorithm 
## ---------------------------------------------------- 
## 
## Mclust VVI (diagonal, varying volume and shape) model with 7 components: 
## 
##  log-likelihood   n  df       BIC       ICL
##       -828.5119 240 118 -2303.739 -2318.197
## 
## Clustering table:
##  1  2  3  4  5  6  7 
## 45  9 33 55 26 49 23

Graficando los perfiles

means_Guat <- data.frame(model_Guat$parameters$mean) %>%
  rownames_to_column() %>%
  rename(PROFILESimp_GUAT = rowname) %>%
  pivot_longer(cols = c(X1, X2, X3, X4, X5, X6, X7), names_to = "Profile", values_to = "Mean") %>%
  mutate(
    Mean = round(Mean, 2),
    # Estandarización Z (normalización usando media y desviación estándar)
    Mean = (Mean - mean(Mean)) / sd(Mean)
  )


p_Guat <- means_Guat %>%
  mutate(Profile = recode(Profile, 
                          X1 = "Prof 1",
                          X2 = "Prof 2", 
                          X3 = "Prof 3", 
                          X4 = "Prof 4",
                          X5 = "Prof 5",
                          X6 = "Prof 6",
                          X7 = "Prof 7")) %>%
  ggplot(aes(PROFILESimp_GUAT, Mean, group = Profile, color = Profile)) +
  geom_point(size = 2.25) +
  geom_line(size = 1.25) +
  scale_x_discrete(limits = c("Inicio - fin quim", "Pres - Inicio quim", "Pres - Inicio rad", "Inicio - Fin rad", "Pres - Inicio Braq", "Inicio - Fin Braq","Dx - Trat", "Inicio quim - Fin braq" )) +
  labs(x = "Diferencia momentos", y = "Standardized means", title = "Perfiles Guatemala") +
  theme_bw(base_size = 14) +
  theme(
    axis.text.x = element_text(angle = 90, hjust = 1, size = 10, face = "bold"),   # Letras eje X más grandes y en negrita
    axis.text.y = element_text(size = 14, face = "bold"),                         # Letras eje Y más grandes y en negrita
    axis.title.x = element_text(size = 16, face = "bold"),                       # Aumentar tamaño de la etiqueta del eje X
    axis.title.y = element_text(size = 16, face = "bold"),                       # Aumentar tamaño de la etiqueta del eje Y
    legend.position = "top", 
    legend.text = element_text(size = 14, face = "bold"),                        # Aumentar el tamaño de la leyenda y ponerla en negrita
    legend.title = element_text(size = 16, face = "bold")                       # Aumentar tamaño del título de la leyenda
  )
p_Guat