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 trayectorias

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

Revisando frecuencias variables incluídas en el sankey

myVars11<-c("trat_complete2", "retiro", "rta1", "seg_onco_cli", "linea_2", "linea_3", "fall" )
    
catVars11<-c("trat_complete2", "retiro", "rta1", "seg_onco_cli", "linea_2", "linea_3", "fall" )
    
tab11 <- CreateTableOne(vars = myVars11, factorVars= catVars11, strata = "Procedencia", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)
table11 <- as.data.frame(print(tab11, showAllLevels= TRUE, printToggle = FALSE))

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

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

kable(table11, format = "html", caption = "Variables pos - 1 linea") %>%
  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")
Variables pos - 1 linea
level Overall Colombia Guatemala p test
n 494 254 240
trat_complete2 -compl 114 (23.1) 52 (20.5) 62 (25.8) 0.191
X +compl 380 (76.9) 202 (79.5) 178 (74.2)
retiro +cont.m 34 ( 6.9) 31 (12.2) 3 ( 1.2) <0.001
X 1 -cont.m 460 (93.1) 223 (87.8) 237 (98.8)
rta1 -rta_trat 63 (12.8) 44 (17.3) 19 ( 7.9) 0.003
X 2 +rta_trat 431 (87.2) 210 (82.7) 221 (92.1)
seg_onco_cli -seg_onco 285 (57.7) 63 (24.8) 222 (92.5) <0.001
X 3 +seg_onco 209 (42.3) 191 (75.2) 18 ( 7.5)
linea_2 No 386 (78.1) 213 (83.9) 173 (72.1) 0.002
X 4 Si 108 (21.9) 41 (16.1) 67 (27.9)
linea_3 No 482 (97.6) 246 (96.9) 236 (98.3) 0.437
X 5 Si 12 ( 2.4) 8 ( 3.1) 4 ( 1.7)
fall -fall 405 (82.0) 228 (89.8) 177 (73.8) <0.001
X 6 +fall 89 (18.0) 26 (10.2) 63 (26.2)
write.xlsx(table11, "tabla_post1liena.xlsx", rowNames = TRUE)

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)
library(factoextra)
p1.1<-Mclust(PROFILES2[,3:10])
fviz_mclust_bic(p1.1)

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
p2.1<-Mclust(PROFILESimp[,3:10])
fviz_mclust_bic(p2.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

Se selecciona solucion con 6 componentes con la base sin imputar, ya que cuando se imputa la base de datos aparecen mas perfiles.

model <- Mclust(PROFILES2[,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
##       -1417.725 415 269 -4457.057 -4483.249
## 
## Clustering table:
##  1  2  3  4  5  6 
## 65 98 11 95 88 58

Graficando los perfiles muestra total

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       1.05 
##  2 Dx - Trat          X2       0.625
##  3 Dx - Trat          X3       2.68 
##  4 Dx - Trat          X4       0.928
##  5 Dx - Trat          X5      -0.106
##  6 Dx - Trat          X6      -0.420
##  7 Pres - Inicio quim X1      -0.587
##  8 Pres - Inicio quim X2      -0.642
##  9 Pres - Inicio quim X3       1.69 
## 10 Pres - Inicio quim X4      -0.582
## # ℹ 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

PROFILES2_COL <- PROFILES2 %>% filter(Procedencia == "Colombia")
PROFILES2_GUAT <- PROFILES2 %>% filter(Procedencia == "Guatemala")

p1_Col_2<-Mclust(PROFILES2_COL[,3:10])
fviz_mclust_bic(p1_Col_2)

p1_Col <-mclustBIC(PROFILES2_COL [,3:10]) # 4 perfiles
summary(p1_Col)
## Best BIC values:
##              VVV,4      VVV,5      VVV,6
## BIC      -2589.678 -2737.9141 -2924.1968
## BIC diff     0.000  -148.2365  -334.5193

Para Colombia hay 4 perfiles.

Estimado el modelo de Colombia

model_Col <- Mclust(PROFILES2_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
##       -811.7032 221 179 -2589.678 -2592.425
## 
## Clustering table:
##  1  2  3  4 
## 50 79 80 12

Graficando el modelo de Colombia

means_Col <- data.frame(model_Col$parameters$mean) %>%
  rownames_to_column() %>%
  rename(PROFILES2_COL = rowname) %>%
  pivot_longer(cols = c(X1, X2, X3, X4), names_to = "Profile", values_to = "Mean") %>%
  mutate(
    Mean = round(Mean, 2)
  )


p_Col <- means_Col %>%
  mutate(Profile = recode(Profile, 
                          X1 = "Prof 1",
                          X2 = "Prof 2", 
                          X3 = "Prof 3", 
                          X4 = "Prof 4")) %>%
  ggplot(aes(PROFILES2_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 = "Promedio meses", 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 = "right", 
    legend.text = element_text(size = 10, 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_2<-Mclust(PROFILES2_GUAT[,3:10])
fviz_mclust_bic(p1_Guat_2)

p1_Guat <-mclustBIC(PROFILES2_GUAT[,3:10]) # 7 perfiles en guatemala
summary(p1_Guat)
## Best BIC values:
##              VVI,7       VVI,8       VVI,9
## BIC      -1676.212 -1706.80396 -1736.99268
## BIC diff     0.000   -30.59184   -60.78056

Se estima el modelo de Guatemala

model_Guat <- Mclust(PROFILES2_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
##       -527.3024 194 118 -1676.212 -1684.859
## 
## Clustering table:
##  1  2  3  4  5  6  7 
## 37  7 25 29 27 46 23

Se grafica el modelo de Guatemala

means_Guat <- data.frame(model_Guat$parameters$mean) %>%
  rownames_to_column() %>%
  rename(PROFILES2_GUAT = rowname) %>%
  pivot_longer(cols = c(X1, X2, X3, X4, X5, X6, X7), names_to = "Profile", values_to = "Mean") %>%
  mutate(
    Mean = round(Mean, 2)
  )


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(PROFILES2_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 = "Promedio meses", 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 = "right", 
    legend.text = element_text(size = 10, 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

Se asigna el grupo a la base de datos por país

clases_col <- model_Col$classification
clases_guat <- model_Guat$classification

# Agregar las clases al data frame por pais

PROFILES2_COL <- PROFILES2_COL %>%
  mutate(Perfil = clases_col)

PROFILES2_GUAT <- PROFILES2_GUAT %>%
  mutate(Perfil = clases_guat)

# Unir los data frame 

BASE_PERF_COL <- merge(PROFILES2_COL, BASE, by = "ID_merge", all.x = TRUE)
BASE_PERF_GUAT <- merge(PROFILES2_GUAT, BASE, by = "ID_merge", all.x = TRUE)

Identificando a los sujetos por perfil Colombia

Nombrando los perfiles por los promedios de tiempo

myVars8<-c("Pres - Inicio quim", "Inicio - fin quim", "Pres - Inicio rad", "Inicio - Fin rad", "Pres - Inicio Braq", "Inicio - Fin Braq","Dx - Trat", "Inicio quim - Fin braq")
    
tab8 <- CreateTableOne(vars = myVars8, strata = "Perfil", data = BASE_PERF_COL, includeNA = F, test = T, addOverall = T, testNonNormal = T)

table8 <- as.data.frame(print(tab8, showAllLevels= TRUE, printToggle = FALSE))

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

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

kable(table8, format = "html", caption = "Promedio diferencia momentos - perfil Colombia") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "black") %>%
  column_spec(2, border_left = T, background = "grey")
Promedio diferencia momentos - perfil Colombia
level Overall 1 2 3 4 p test
n 221 50 79 80 12
Pres - Inicio quim (mean (SD)) 1.11 (2.55) 0.90 (0.57) 0.89 (0.46) 0.86 (0.46) 5.18 (10.30) <0.001
Inicio - fin quim (mean (SD)) 1.44 (2.48) 1.32 (0.57) 1.26 (0.19) 1.30 (0.28) 4.16 (10.58) 0.001
Pres - Inicio rad (mean (SD)) 0.93 (0.56) 0.94 (0.62) 0.95 (0.43) 0.88 (0.41) 1.06 (1.40) 0.664
Inicio - Fin rad (mean (SD)) 1.41 (0.40) 1.55 (0.49) 1.30 (0.15) 1.37 (0.26) 1.86 (1.04) <0.001
Pres - Inicio Braq (mean (SD)) 1.89 (1.40) 1.92 (1.40) 0.87 (0.56) 2.66 (0.52) 3.32 (3.54) <0.001
Inicio - Fin Braq (mean (SD)) 0.66 (2.61) 0.52 (0.36) 0.21 (0.11) 0.63 (0.23) 4.46 (10.88) <0.001
Dx - Trat (mean (SD)) 3.38 (3.47) 3.86 (3.41) 2.79 (1.12) 3.35 (2.30) 5.43 (11.57) 0.058
Inicio quim - Fin braq (mean (SD)) 2.73 (2.66) 2.90 (0.92) 2.32 (0.57) 2.41 (0.39) 6.91 (10.65) <0.001
write.xlsx(table8, "tabla_perfiles_col_tiempo.xlsx", rowNames = TRUE)

PERFIL 2: Pacientes con menores promedios de tiempo en la mayoría de momentos PERFIL 4: Pacientes con los mayores promedios de tiempo en la mayoria de momentos PERFIL 1: Pacientes “promedio” con mayores tiempos en el radoiterapia, desde el dx hasta el inicio del tratamiento y todo el tratamiento. Mayor variabilidad en los tiempos comparados con el perfil 3 PERFIL 3: Pacientes menores al promedio, excepto en los tiempos de braquiterapia (precripcion - inicio, inicio - fin), y con menor variabilidad en todos los tiempos comparado con el perfil 1.

Caracterizando perfiles de Colombia

myVars9<-c("Edad a la fecha de diagnóstico", "EDUCACION", "GRUPO_ET", "Estado civil",               "AFILIACION","tipo_residencia", "TABAQUISMO", "N.de gestaciones",  "N. partos vaginales", "Citologia", "P. molecular VPH", "Historia de lesiones premalignas", "Procedimiento_Cervix", "charls_cat", "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", "Especialidad que realizó la primera consulta","Diagnóstico CIE-10 registrado", "Tamaño tumoral clínico",  "EST_clin_FIGO", "ECOG", "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", "Ningun cuidado de soporte", "Cuidado paliativo","Nutricion", "Patologia oral", "Psicologia", "Fertilidad/sexualidad", "Otro cuidado de soporte", "trat_complete2", "retiro", "rta1", "trat_complete2", "seg_onco_cli", "linea_2", "linea_3", "fall" )
    
catVars9<-c("EDUCACION", "GRUPO_ET", "Estado civil", "AFILIACION","tipo_residencia", "TABAQUISMO", "Citologia", "P. molecular VPH", "Historia de lesiones premalignas", "Conización cervical", "Crioterapia", "Procedimiento_Cervix", "charls_cat", "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", "Especialidad que realizó la primera consulta","Diagnóstico CIE-10 registrado", "Tamaño tumoral clínico", "EST_clin_FIGO", "ECOG","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", "Ningun cuidado de soporte", "Cuidado paliativo","Nutricion", "Patologia oral", "Psicologia", "Fertilidad/sexualidad", "Otro cuidado de soporte", "trat_complete2", "retiro", "rta1", "trat_complete2", "seg_onco_cli", "linea_2", "linea_3", "fall")
    
tab9 <- CreateTableOne(vars = myVars9, factorVars= catVars9, strata = "Perfil", data = BASE_PERF_COL, includeNA = F, test = T, addOverall = T, testNonNormal = T)
table9 <- as.data.frame(print(tab9, showAllLevels= TRUE, printToggle = FALSE))

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

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

kable(table9, format = "html", caption = "Caracterizacion perfiles Colombia") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "black") %>%
  column_spec(2, border_left = T, background = "grey")
Caracterizacion perfiles Colombia
level Overall 1 2 3 4 p test
n 221 50 79 80 12
Edad a la fecha de diagnóstico mean SD 50.65 (13.58) 51.54 (13.72) 49.81 (12.68) 50.58 (13.98) 53.00 (17.10) 0.833
EDUCACION Primaria < 37 ( 27.2) 5 ( 17.9) 10 ( 24.4) 17 ( 28.8) 5 ( 62.5) 0.001
X Secundaria + tecnico 77 ( 56.6) 18 ( 64.3) 31 ( 75.6) 26 ( 44.1) 2 ( 25.0)
X 1 Profesional + posgrado 22 ( 16.2) 5 ( 17.9) 0 ( 0.0) 16 ( 27.1) 1 ( 12.5)
GRUPO_ET Indigena 3 ( 1.4) 0 ( 0.0) 0 ( 0.0) 2 ( 2.5) 1 ( 8.3) 0.075
X 2 Sin etnia especifica 218 ( 98.6) 50 (100.0) 79 (100.0) 78 ( 97.5) 11 ( 91.7)
Estado civil Soltero 56 ( 29.5) 14 ( 33.3) 15 ( 20.0) 24 ( 38.1) 3 ( 30.0) 0.109
X 3 Casado o en pareja 110 ( 57.9) 24 ( 57.1) 51 ( 68.0) 28 ( 44.4) 7 ( 70.0)
X 4 Divorciado o viudo 24 ( 12.6) 4 ( 9.5) 9 ( 12.0) 11 ( 17.5) 0 ( 0.0)
AFILIACION Subsidiado/Público 120 ( 54.3) 26 ( 52.0) 74 ( 93.7) 13 ( 16.2) 7 ( 58.3) <0.001
X 5 Contributivo/Privado 101 ( 45.7) 24 ( 48.0) 5 ( 6.3) 67 ( 83.8) 5 ( 41.7)
TABAQUISMO No fumadora 182 ( 87.5) 40 ( 83.3) 66 ( 91.7) 67 ( 84.8) 9 (100.0) 0.521
X 6 Ex-Fumadora 10 ( 4.8) 4 ( 8.3) 1 ( 1.4) 5 ( 6.3) 0 ( 0.0)
X 7 Fumadora 16 ( 7.7) 4 ( 8.3) 5 ( 6.9) 7 ( 8.9) 0 ( 0.0)
N de gestaciones mean SD 3.63 (2.67) 3.22 (2.38) 4.30 (2.86) 3.11 (2.44) 4.33 (3.11) 0.017
Citologia No 142 ( 64.3) 33 ( 66.0) 57 ( 72.2) 45 ( 56.2) 7 ( 58.3) 0.201
X 8 Si 79 ( 35.7) 17 ( 34.0) 22 ( 27.8) 35 ( 43.8) 5 ( 41.7)
P molecular VPH No 213 ( 96.4) 50 (100.0) 79 (100.0) 72 ( 90.0) 12 (100.0) 0.002
X 9 Si 8 ( 3.6) 0 ( 0.0) 0 ( 0.0) 8 ( 10.0) 0 ( 0.0)
Historia de lesiones premalignas NIC 2 - 3 5 ( 3.0) 1 ( 2.8) 1 ( 2.4) 2 ( 2.5) 1 ( 10.0) 0.124
X 10 NIC 1 2 ( 1.2) 0 ( 0.0) 1 ( 2.4) 0 ( 0.0) 1 ( 10.0)
X 11 Carcinoma in situ 1 ( 0.6) 1 ( 2.8) 0 ( 0.0) 0 ( 0.0) 0 ( 0.0)
X 12 Nunca 158 ( 95.2) 34 ( 94.4) 39 ( 95.1) 77 ( 97.5) 8 ( 80.0)
Procedimiento_Cervix NINGUNA 171 ( 77.4) 36 ( 72.0) 47 ( 59.5) 78 ( 97.5) 10 ( 83.3) <0.001
X 13 BIOPSIA 46 ( 20.8) 14 ( 28.0) 30 ( 38.0) 0 ( 0.0) 2 ( 16.7)
X 14 CONIZACION 4 ( 1.8) 0 ( 0.0) 2 ( 2.5) 2 ( 2.5) 0 ( 0.0)
charls_cat <=2 107 ( 48.4) 20 ( 40.0) 42 ( 53.2) 39 ( 48.8) 6 ( 50.0) 0.431
X 15 3-4 85 ( 38.5) 21 ( 42.0) 31 ( 39.2) 30 ( 37.5) 3 ( 25.0)
X 16 >=5 29 ( 13.1) 9 ( 18.0) 6 ( 7.6) 11 ( 13.8) 3 ( 25.0)
ingreso sintomas 141 ( 63.8) 33 ( 66.0) 57 ( 72.2) 44 ( 55.0) 7 ( 58.3) 0.149
X 17 tamizaje 80 ( 36.2) 17 ( 34.0) 22 ( 27.8) 36 ( 45.0) 5 ( 41.7)
dolor No 156 ( 95.7) 33 ( 84.6) 62 (100.0) 54 ( 98.2) 7 (100.0) 0.001
X 18 7 ( 4.3) 6 ( 15.4) 0 ( 0.0) 1 ( 1.8) 0 ( 0.0)
Subtipo histológico Adenocarcinoma 18 ( 8.1) 3 ( 6.0) 2 ( 2.5) 11 ( 13.8) 2 ( 16.7) 0.051
X 19 Carcinoma escamocelular 200 ( 90.5) 45 ( 90.0) 77 ( 97.5) 68 ( 85.0) 10 ( 83.3)
X 20 Carcinoma neuroendocrino de células pequeñas 1 ( 0.5) 0 ( 0.0) 0 ( 0.0) 1 ( 1.2) 0 ( 0.0)
X 21 Otro, ¿Cuál? 2 ( 0.9) 2 ( 4.0) 0 ( 0.0) 0 ( 0.0) 0 ( 0.0)
Grado de diferenciación Bien diferenciado 52 ( 29.1) 14 ( 33.3) 23 ( 33.3) 12 ( 20.3) 3 ( 33.3) 0.282
X 22 Mal diferenciado o Indiferenciado 25 ( 14.0) 7 ( 16.7) 6 ( 8.7) 12 ( 20.3) 0 ( 0.0)
X 23 Moderadamente diferenciado 102 ( 57.0) 21 ( 50.0) 40 ( 58.0) 35 ( 59.3) 6 ( 66.7)
TC TORAX No 47 ( 21.3) 11 ( 22.0) 18 ( 22.8) 15 ( 18.8) 3 ( 25.0) 0.913
X 24 Si 174 ( 78.7) 39 ( 78.0) 61 ( 77.2) 65 ( 81.2) 9 ( 75.0)
TC ABDOMEN No 21 ( 9.5) 2 ( 4.0) 7 ( 8.9) 10 ( 12.5) 2 ( 16.7) 0.341
X 25 Si 200 ( 90.5) 48 ( 96.0) 72 ( 91.1) 70 ( 87.5) 10 ( 83.3)
TC PELVIS No 47 ( 21.3) 7 ( 14.0) 15 ( 19.0) 23 ( 28.7) 2 ( 16.7) 0.199
X 26 Si 174 ( 78.7) 43 ( 86.0) 64 ( 81.0) 57 ( 71.2) 10 ( 83.3)
RMN PELVIS No 165 ( 74.7) 42 ( 84.0) 51 ( 64.6) 64 ( 80.0) 8 ( 66.7) 0.042
X 27 Si 56 ( 25.3) 8 ( 16.0) 28 ( 35.4) 16 ( 20.0) 4 ( 33.3)
PET CT No 209 ( 94.6) 46 ( 92.0) 74 ( 93.7) 79 ( 98.8) 10 ( 83.3) 0.092
X 28 Si 12 ( 5.4) 4 ( 8.0) 5 ( 6.3) 1 ( 1.2) 2 ( 16.7)
RAYOS X TORAX No 163 ( 73.8) 37 ( 74.0) 66 ( 83.5) 52 ( 65.0) 8 ( 66.7) 0.060
X 29 Si 58 ( 26.2) 13 ( 26.0) 13 ( 16.5) 28 ( 35.0) 4 ( 33.3)
Laparoscopia exploratoria No 218 ( 98.6) 48 ( 96.0) 79 (100.0) 80 (100.0) 11 ( 91.7) 0.027
X 30 Si 3 ( 1.4) 2 ( 4.0) 0 ( 0.0) 0 ( 0.0) 1 ( 8.3)
Cistoscopia No 214 ( 96.8) 48 ( 96.0) 76 ( 96.2) 79 ( 98.8) 11 ( 91.7) 0.528
X 31 Si 7 ( 3.2) 2 ( 4.0) 3 ( 3.8) 1 ( 1.2) 1 ( 8.3)
Ultrasonido transvaginal No 149 ( 67.4) 27 ( 54.0) 54 ( 68.4) 58 ( 72.5) 10 ( 83.3) 0.091
X 32 Si 72 ( 32.6) 23 ( 46.0) 25 ( 31.6) 22 ( 27.5) 2 ( 16.7)
Ultrasonido de renal y de vías urinaria No 216 ( 97.7) 48 ( 96.0) 77 ( 97.5) 79 ( 98.8) 12 (100.0) 0.716
X 33 Si 5 ( 2.3) 2 ( 4.0) 2 ( 2.5) 1 ( 1.2) 0 ( 0.0)
Otro estudio de extension No 192 ( 86.9) 44 ( 88.0) 77 ( 97.5) 62 ( 77.5) 9 ( 75.0) 0.001
X 34 Si 29 ( 13.1) 6 ( 12.0) 2 ( 2.5) 18 ( 22.5) 3 ( 25.0)
Especialidad que realizó la primera consulta Ginecología Oncológica 176 ( 80.0) 39 ( 78.0) 69 ( 87.3) 60 ( 75.9) 8 ( 66.7) 0.177
X 35 Otra 44 ( 20.0) 11 ( 22.0) 10 ( 12.7) 19 ( 24.1) 4 ( 33.3)
Diagnóstico CIE 10 registrado C530 Tumor maligno del endocérvix 40 ( 18.1) 9 ( 18.0) 2 ( 2.5) 28 ( 35.0) 1 ( 8.3) <0.001
X 36 C531 Tumor maligno del exocérvix 94 ( 42.5) 23 ( 46.0) 25 ( 31.6) 43 ( 53.8) 3 ( 25.0)
X 37 C539 Tumor maligno del cuello del útero, sin otra especificación 85 ( 38.5) 17 ( 34.0) 52 ( 65.8) 9 ( 11.2) 7 ( 58.3)
X 38 C55X Tumor maligno del útero, parte no especificada 2 ( 0.9) 1 ( 2.0) 0 ( 0.0) 0 ( 0.0) 1 ( 8.3)
Tamaño tumoral clínico tumor microscópico 5 ( 2.4) 0 ( 0.0) 0 ( 0.0) 4 ( 5.5) 1 ( 8.3) 0.032
X 39 ≤ 2 cm 1 ( 0.5) 0 ( 0.0) 0 ( 0.0) 1 ( 1.4) 0 ( 0.0)
X 40 >2 cm - ≤ 4cm 23 ( 11.1) 6 ( 13.0) 3 ( 3.9) 11 ( 15.1) 3 ( 25.0)
X 41 >4 cm 179 ( 86.1) 40 ( 87.0) 74 ( 96.1) 57 ( 78.1) 8 ( 66.7)
EST_clin_FIGO IB3,II,IIA 14 ( 6.3) 2 ( 4.0) 4 ( 5.1) 7 ( 8.8) 1 ( 8.3) 0.673
X 42 IIB, III, IIIA, IIIB, IIIC, IVA 207 ( 93.7) 48 ( 96.0) 75 ( 94.9) 73 ( 91.2) 11 ( 91.7)
ECOG ECOG0 134 ( 62.0) 31 ( 63.3) 63 ( 84.0) 33 ( 41.2) 7 ( 58.3) <0.001
X 43 ECOG1 78 ( 36.1) 17 ( 34.7) 9 ( 12.0) 47 ( 58.8) 5 ( 41.7)
X 44 ECOG2 4 ( 1.9) 1 ( 2.0) 3 ( 4.0) 0 ( 0.0) 0 ( 0.0)
Quimio radiación concomitante No 3 ( 1.4) 2 ( 4.0) 0 ( 0.0) 1 ( 1.2) 0 ( 0.0) 0.276
X 45 Si 218 ( 98.6) 48 ( 96.0) 79 (100.0) 79 ( 98.8) 12 (100.0)
Cirugía No 206 ( 93.2) 46 ( 92.0) 79 (100.0) 71 ( 88.8) 10 ( 83.3) 0.017
X 46 Si 15 ( 6.8) 4 ( 8.0) 0 ( 0.0) 9 ( 11.2) 2 ( 16.7)
Terapia sistémica adyuvante No 218 ( 98.6) 48 ( 96.0) 79 (100.0) 79 ( 98.8) 12 (100.0) 0.276
X 47 Si 3 ( 1.4) 2 ( 4.0) 0 ( 0.0) 1 ( 1.2) 0 ( 0.0)
Radiación adyuvante No 217 ( 98.2) 48 ( 96.0) 78 ( 98.7) 79 ( 98.8) 12 (100.0) 0.606
X 48 Si 4 ( 1.8) 2 ( 4.0) 1 ( 1.3) 1 ( 1.2) 0 ( 0.0)
Cuidado soporte No 221 (100.0) 50 (100.0) 79 (100.0) 80 (100.0) 12 (100.0) NA
No recibio tratamiento No 221 (100.0) 50 (100.0) 79 (100.0) 80 (100.0) 12 (100.0) NA
Esquema Quimioterapia No 4 ( 1.8) 3 ( 6.0) 0 ( 0.0) 1 ( 1.2) 0 ( 0.0) 0.080
X 49 Si 217 ( 98.2) 47 ( 94.0) 79 (100.0) 79 ( 98.8) 12 (100.0)
Esquema Terapias de blanco molecular No 220 ( 99.5) 49 ( 98.0) 79 (100.0) 80 (100.0) 12 (100.0) 0.329
X 50 Si 1 ( 0.5) 1 ( 2.0) 0 ( 0.0) 0 ( 0.0) 0 ( 0.0)
Esquema completo t sistemica No 22 ( 10.0) 6 ( 12.0) 4 ( 5.1) 9 ( 11.2) 3 ( 25.0) 0.137
X 51 Si 199 ( 90.0) 44 ( 88.0) 75 ( 94.9) 71 ( 88.8) 9 ( 75.0)
Esquema completo radioterapia No 4 ( 1.8) 1 ( 2.0) 1 ( 1.3) 2 ( 2.5) 0 ( 0.0) 0.902
X 52 Si 217 ( 98.2) 49 ( 98.0) 78 ( 98.7) 78 ( 97.5) 12 (100.0)
Prescripcion braquiterapia Si 221 (100.0) 50 (100.0) 79 (100.0) 80 (100.0) 12 (100.0) NA
Intervalo entre Radioterapia Externa y Braquiterapia mean SD 21.64 (20.03) 28.76 (26.05) 24.19 (16.63) 12.45 (8.63) 36.50 (37.00) <0.001
Esquema completo braquiterapia No 6 ( 2.7) 2 ( 4.0) 1 ( 1.3) 3 ( 3.8) 0 ( 0.0) 0.659
X 53 Si 215 ( 97.3) 48 ( 96.0) 78 ( 98.7) 77 ( 96.2) 12 (100.0)
Histerectomía extrafascial No 221 (100.0) 50 (100.0) 79 (100.0) 80 (100.0) 12 (100.0) NA
Histerectomía radical modificada No 218 ( 98.6) 48 ( 96.0) 79 (100.0) 79 ( 98.8) 12 (100.0) 0.276
X 54 Si 3 ( 1.4) 2 ( 4.0) 0 ( 0.0) 1 ( 1.2) 0 ( 0.0)
Histerectomía radical No 211 ( 95.5) 48 ( 96.0) 79 (100.0) 73 ( 91.2) 11 ( 91.7) 0.058
X 55 Si 10 ( 4.5) 2 ( 4.0) 0 ( 0.0) 7 ( 8.8) 1 ( 8.3)
Salpingooforectomía bilateral No 210 ( 95.0) 46 ( 92.0) 79 (100.0) 74 ( 92.5) 11 ( 91.7) 0.091
X 56 Si 11 ( 5.0) 4 ( 8.0) 0 ( 0.0) 6 ( 7.5) 1 ( 8.3)
Linfadenectomía pélvica No 211 ( 95.5) 46 ( 92.0) 79 (100.0) 75 ( 93.8) 11 ( 91.7) 0.107
X 57 Si 10 ( 4.5) 4 ( 8.0) 0 ( 0.0) 5 ( 6.2) 1 ( 8.3)
Otra cirugia No 219 ( 99.1) 50 (100.0) 79 (100.0) 78 ( 97.5) 12 (100.0) 0.313
X 58 Si 2 ( 0.9) 0 ( 0.0) 0 ( 0.0) 2 ( 2.5) 0 ( 0.0)
Ningun cuidado de soporte No 163 ( 73.8) 32 ( 64.0) 51 ( 64.6) 74 ( 92.5) 6 ( 50.0) <0.001
X 59 Si 58 ( 26.2) 18 ( 36.0) 28 ( 35.4) 6 ( 7.5) 6 ( 50.0)
Cuidado paliativo No 94 ( 42.5) 23 ( 46.0) 45 ( 57.0) 17 ( 21.2) 9 ( 75.0) <0.001
X 60 Si 127 ( 57.5) 27 ( 54.0) 34 ( 43.0) 63 ( 78.8) 3 ( 25.0)
Nutricion No 145 ( 65.6) 39 ( 78.0) 48 ( 60.8) 48 ( 60.0) 10 ( 83.3) 0.072
X 61 Si 76 ( 34.4) 11 ( 22.0) 31 ( 39.2) 32 ( 40.0) 2 ( 16.7)
Patologia oral No 164 ( 74.2) 38 ( 76.0) 79 (100.0) 37 ( 46.2) 10 ( 83.3) <0.001
X 62 Si 57 ( 25.8) 12 ( 24.0) 0 ( 0.0) 43 ( 53.8) 2 ( 16.7)
Psicologia No 164 ( 74.2) 37 ( 74.0) 66 ( 83.5) 50 ( 62.5) 11 ( 91.7) 0.010
X 63 Si 57 ( 25.8) 13 ( 26.0) 13 ( 16.5) 30 ( 37.5) 1 ( 8.3)
Fertilidad sexualidad No 220 ( 99.5) 50 (100.0) 79 (100.0) 79 ( 98.8) 12 (100.0) 0.621
X 64 Si 1 ( 0.5) 0 ( 0.0) 0 ( 0.0) 1 ( 1.2) 0 ( 0.0)
Otro cuidado de soporte No 200 ( 90.5) 47 ( 94.0) 75 ( 94.9) 67 ( 83.8) 11 ( 91.7) 0.079
X 65 Si 21 ( 9.5) 3 ( 6.0) 4 ( 5.1) 13 ( 16.2) 1 ( 8.3)
trat_complete2 -compl 26 ( 11.8) 7 ( 14.0) 6 ( 7.6) 10 ( 12.5) 3 ( 25.0) 0.304
X 66 +compl 195 ( 88.2) 43 ( 86.0) 73 ( 92.4) 70 ( 87.5) 9 ( 75.0)
retiro +cont.m 20 ( 9.0) 6 ( 12.0) 3 ( 3.8) 8 ( 10.0) 3 ( 25.0) 0.073
X 67 -cont.m 201 ( 91.0) 44 ( 88.0) 76 ( 96.2) 72 ( 90.0) 9 ( 75.0)
rta1 -rta_trat 27 ( 12.2) 9 ( 18.0) 7 ( 8.9) 11 ( 13.8) 0 ( 0.0) 0.237
X 68 +rta_trat 194 ( 87.8) 41 ( 82.0) 72 ( 91.1) 69 ( 86.2) 12 (100.0)
seg_onco_cli -seg_onco 47 ( 21.3) 12 ( 24.0) 14 ( 17.7) 16 ( 20.0) 5 ( 41.7) 0.275
X 69 +seg_onco 174 ( 78.7) 38 ( 76.0) 65 ( 82.3) 64 ( 80.0) 7 ( 58.3)
linea_2 No 190 ( 86.0) 42 ( 84.0) 72 ( 91.1) 69 ( 86.2) 7 ( 58.3) 0.023
X 70 Si 31 ( 14.0) 8 ( 16.0) 7 ( 8.9) 11 ( 13.8) 5 ( 41.7)
linea_3 No 214 ( 96.8) 49 ( 98.0) 78 ( 98.7) 76 ( 95.0) 11 ( 91.7) 0.380
X 71 Si 7 ( 3.2) 1 ( 2.0) 1 ( 1.3) 4 ( 5.0) 1 ( 8.3)
fall -fall 201 ( 91.0) 42 ( 84.0) 72 ( 91.1) 76 ( 95.0) 11 ( 91.7) 0.209
X 72 +fall 20 ( 9.0) 8 ( 16.0) 7 ( 8.9) 4 ( 5.0) 1 ( 8.3)
write.xlsx(table9, "tabla_perfiles_col.xlsx", rowNames = TRUE)

Perfil 2 (menores tiempos), la mayoría de pacientes tienen una afiliación al sistema como subsidiado. Este perfil y el 4 (mayores tiempos) tuvieron un promedio similar y mayor a la muestra total en número de gestaciones. Este perfil tuvo la menor cantidad de citologías. El perfil el 72.2% fue detectado por sintomas (mayor entre los perfiles). Este perfil el 96% tuvieron un tamaño tumoral mayor a 4cm, fue el más alto entre los demás perfiles, además el 84% tuvo un ECOG de 0.

Perfil 3, mayoría de pacientes con educacion posgradual y afiliacion al sistema contributivo, además tuvieron la mayor cantidad de citología y pruebas moleculares de VPH. Este perfil tuvo el menor procetaje de mujeres con ningun procedimiento previo de cervix. La mayoría de pacientes su dx fue detectado por tamizaje (45%). El 59% tuvo un ECOG de 2. Tuvo el mayor porentaje de cuidado de soporte (92.5%) y sus especialidades.

En el perfil 4 (mayores tiempos), el 25% tuvi un índice de Charlson mayor o igual a 5 (el mayor entre los perfiles). En este perfil hubo un mayor porcentaje de cirugía. Menor procentaje de cuidado de de soporte (50%). 3 pacietes (25%) no culminaron el tratamiento por contraindicacion medica. A pesar de lo anterior, el 100% tuvo respuesta al tratamiento, pero el 41% de las pacientes tuvieron recaida ( recibieron segunda linea de tratamiento), patron no presentado en ningun otro perfil.

Perfil 1: Mayor cantida de ultrasonida vaginal (46%), hubo mayor porcentajde fallecimientos (16%)

Identificando a los sujetos por perfil Guatemala

Nombrando los perfiles por los promedios de tiempo

tab10 <- CreateTableOne(vars = myVars8, strata = "Perfil", data = BASE_PERF_GUAT, includeNA = F, test = T, addOverall = T, testNonNormal = T)

table10 <- as.data.frame(print(tab10, showAllLevels= TRUE, printToggle = FALSE))

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

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

kable(table10, format = "html", caption = "Promedio diferencia momentos - perfil Colombia") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "black") %>%
  column_spec(2, border_left = T, background = "grey")
Promedio diferencia momentos - perfil Colombia
level Overall 1 2 3 4 5 6 7 p test
n 194 37 7 25 29 27 46 23
Pres - Inicio quim (mean (SD)) 0.56 (0.57) 0.87 (0.72) 0.92 (0.68) 0.41 (0.19) 0.25 (0.24) 0.52 (0.21) 0.11 (0.07) 1.46 (0.24) <0.001
Inicio - fin quim (mean (SD)) 1.21 (2.72) 1.07 (0.45) 6.80 (14.06) 0.87 (0.20) 0.88 (0.25) 1.21 (0.08) 0.90 (0.10) 1.16 (0.14) <0.001
Pres - Inicio rad (mean (SD)) 0.55 (0.59) 0.99 (0.63) 1.44 (1.67) 0.43 (0.19) 0.24 (0.19) 0.43 (0.17) 0.13 (0.08) 1.09 (0.35) <0.001
Inicio - Fin rad (mean (SD)) 1.38 (2.64) 1.15 (0.35) 6.88 (13.66) 1.13 (0.05) 1.15 (0.08) 1.28 (0.11) 1.14 (0.07) 1.27 (0.11) <0.001
Pres - Inicio Braq (mean (SD)) 1.20 (0.89) 1.13 (0.99) 1.40 (2.27) 2.27 (0.47) 0.46 (0.23) 0.54 (0.29) 1.74 (0.22) 0.74 (0.19) <0.001
Inicio - Fin Braq (mean (SD)) 0.44 (0.29) 0.44 (0.21) 0.59 (0.28) 0.26 (0.11) 0.32 (0.14) 0.67 (0.26) 0.23 (0.08) 0.89 (0.32) <0.001
Dx - Trat (mean (SD)) 2.49 (2.15) 2.93 (1.54) 4.16 (1.67) 1.67 (0.61) 0.92 (0.42) 3.45 (3.33) 1.25 (0.79) 5.54 (1.25) <0.001
Inicio quim - Fin braq (mean (SD)) 2.30 (0.85) 2.40 (0.83) 4.54 (2.51) 2.16 (0.52) 1.84 (0.46) 2.61 (0.36) 1.89 (0.22) 2.61 (0.40) <0.001
write.xlsx(table10, "tabla_perfiles_GUAT_tiempo.xlsx", rowNames = TRUE)

La caracterización con 7 perfiles se complejiza.

PERFIL 2: Pacientes con mayores tiempo en la mayoría de momentos PERFIL 6: Pacientes con menores tiempos en la mayoría de momentos

Pendiente por caracterizar acorde a lo que el Dr. Murillo indique

Modelos multivariados base completa

Se toma como desenlace el fallecimiento

Analisis bi-variado

Se incluirán variables con un p valor igual o menor a 0.1

myVars12<-c("Procedencia", "Edad a la fecha de diagnóstico", "EDUCACION", "GRUPO_ET", "Estado civil",               "AFILIACION","tipo_residencia", "TABAQUISMO", "N.de gestaciones",  "N. partos vaginales", "Citologia", "P. molecular VPH", "Historia de lesiones premalignas", "Procedimiento_Cervix", "charls_cat", "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", "Especialidad que realizó la primera consulta","Diagnóstico CIE-10 registrado", "Tamaño tumoral clínico",  "EST_clin_FIGO", "ECOG", "Quimio-radiación concomitante", "Cirugía", "Terapia sistémica adyuvante", "Radiación adyuvante", "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",  "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",
"Ningun cuidado de soporte", "Cuidado paliativo","Nutricion", "Patologia oral", "Psicologia",  "Fertilidad/sexualidad", "Otro cuidado de soporte", "trat_complete2", "retiro", "rta1", "seg_onco_cli", "linea_2", "linea_3" )
    
catVars12<-c("Procedencia", "EDUCACION", "GRUPO_ET", "Estado civil", "AFILIACION","tipo_residencia", "TABAQUISMO", "Citologia", "P. molecular VPH", "Historia de lesiones premalignas", "Conización cervical", "Crioterapia", "Procedimiento_Cervix", "charls_cat", "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", "Especialidad que realizó la primera consulta","Diagnóstico CIE-10 registrado", "Tamaño tumoral clínico", "EST_clin_FIGO", "ECOG","Quimio-radiación concomitante", "Cirugía", "Terapia sistémica adyuvante", "Radiación adyuvante", 
"Esquema:Quimioterapia)", "Esquema:Terapias de blanco molecular)",  "Esquema completo t sistemica", "Prescripcion radio externa", "Esquema completo radioterapia", 
"Prescripcion braquiterapia", "Prescripcion braquiterapia", "Esquema completo braquiterapia", "Ningun cuidado de soporte", "Cuidado paliativo","Nutricion", "Patologia oral", "Psicologia", "Fertilidad/sexualidad", "Otro cuidado de soporte", "trat_complete2", "retiro", "rta1", "seg_onco_cli", "linea_2", "linea_3")
    
tab12 <- CreateTableOne(vars = myVars12, factorVars= catVars12, strata = "fall", data = BASE, includeNA = F, test = T, addOverall = T, testNonNormal = T)
table12 <- as.data.frame(print(tab12, showAllLevels= TRUE, printToggle = FALSE))

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

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

kable(table12, format = "html", caption = "Caracterizacion fallecimiento") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F,position = "center") %>%
  column_spec(1, bold = T, color = "white", background = "black") %>%
  column_spec(2, border_left = T, background = "grey")
Caracterizacion fallecimiento
level Overall -fall +fall p test
n 494 405 89
Procedencia Colombia 254 (51.4) 228 (56.3) 26 ( 29.2) <0.001
X Guatemala 240 (48.6) 177 (43.7) 63 ( 70.8)
Edad a la fecha de diagnóstico mean SD 51.25 (13.39) 51.25 (13.42) 51.27 (13.32) 0.990
EDUCACION Primaria < 144 (37.0) 111 (35.6) 33 ( 42.9) 0.145
X 1 Secundaria + tecnico 209 (53.7) 168 (53.8) 41 ( 53.2)
X 2 Profesional + posgrado 36 ( 9.3) 33 (10.6) 3 ( 3.9)
GRUPO_ET Indigena 35 ( 7.1) 29 ( 7.2) 6 ( 6.7) 1.000
X 3 Sin etnia especifica 459 (92.9) 376 (92.8) 83 ( 93.3)
Estado civil Soltero 110 (24.4) 95 (26.0) 15 ( 17.6) 0.263
X 4 Casado o en pareja 254 (56.4) 201 (55.1) 53 ( 62.4)
X 5 Divorciado o viudo 86 (19.1) 69 (18.9) 17 ( 20.0)
AFILIACION Subsidiado/Público 197 (39.9) 174 (43.0) 23 ( 25.8) 0.004
X 6 Contributivo/Privado 297 (60.1) 231 (57.0) 66 ( 74.2)
TABAQUISMO No fumadora 422 (90.9) 348 (90.9) 74 ( 91.4) 0.981
X 7 Ex-Fumadora 17 ( 3.7) 14 ( 3.7) 3 ( 3.7)
X 8 Fumadora 25 ( 5.4) 21 ( 5.5) 4 ( 4.9)
N de gestaciones mean SD 3.73 (2.67) 3.81 (2.80) 3.40 (2.00) 0.198
Citologia No 373 (75.5) 298 (73.6) 75 ( 84.3) 0.047
X 9 Si 121 (24.5) 107 (26.4) 14 ( 15.7)
P molecular VPH No 485 (98.2) 398 (98.3) 87 ( 97.8) 1.000
X 10 Si 9 ( 1.8) 7 ( 1.7) 2 ( 2.2)
Historia de lesiones premalignas NIC 2 - 3 17 ( 5.8) 13 ( 5.5) 4 ( 7.0) 0.229
X 11 NIC 1 9 ( 3.1) 5 ( 2.1) 4 ( 7.0)
X 12 Carcinoma in situ 9 ( 3.1) 8 ( 3.4) 1 ( 1.8)
X 13 Nunca 259 (88.1) 211 (89.0) 48 ( 84.2)
Procedimiento_Cervix NINGUNA 319 (64.6) 254 (62.7) 65 ( 73.0) 0.001
X 14 BIOPSIA 157 (31.8) 137 (33.8) 20 ( 22.5)
X 15 TRAT. ABLATIVO 6 ( 1.2) 2 ( 0.5) 4 ( 4.5)
X 16 CONIZACION 12 ( 2.4) 12 ( 3.0) 0 ( 0.0)
charls_cat <=2 200 (40.5) 157 (38.8) 43 ( 48.3) 0.180
X 17 3-4 189 (38.3) 162 (40.0) 27 ( 30.3)
X 18 >=5 105 (21.3) 86 (21.2) 19 ( 21.3)
ingreso sintomas 368 (74.5) 294 (72.6) 74 ( 83.1) 0.053
X 19 tamizaje 126 (25.5) 111 (27.4) 15 ( 16.9)
dolor No 403 (95.3) 327 (96.5) 76 ( 90.5) 0.043
X 20 20 ( 4.7) 12 ( 3.5) 8 ( 9.5)
Subtipo histológico Adenocarcinoma 59 (11.9) 51 (12.6) 8 ( 9.0) 0.675
X 21 Carcinoma adenoescamoso 2 ( 0.4) 2 ( 0.5) 0 ( 0.0)
X 22 Carcinoma escamocelular 429 (86.8) 348 (85.9) 81 ( 91.0)
X 23 Carcinoma neuroendocrino de células pequeñas 1 ( 0.2) 1 ( 0.2) 0 ( 0.0)
X 24 Otro, ¿Cuál? 3 ( 0.6) 3 ( 0.7) 0 ( 0.0)
Grado de diferenciación Bien diferenciado 112 (25.4) 90 (25.5) 22 ( 25.0) 0.992
X 25 Mal diferenciado o Indiferenciado 71 (16.1) 57 (16.1) 14 ( 15.9)
X 26 Moderadamente diferenciado 258 (58.5) 206 (58.4) 52 ( 59.1)
TC TORAX No 134 (27.1) 119 (29.4) 15 ( 16.9) 0.023
X 27 Si 360 (72.9) 286 (70.6) 74 ( 83.1)
TC ABDOMEN No 37 ( 7.5) 32 ( 7.9) 5 ( 5.6) 0.604
X 28 Si 457 (92.5) 373 (92.1) 84 ( 94.4)
TC PELVIS No 134 (27.1) 102 (25.2) 32 ( 36.0) 0.053
X 29 Si 360 (72.9) 303 (74.8) 57 ( 64.0)
RMN PELVIS No 353 (71.5) 294 (72.6) 59 ( 66.3) 0.288
X 30 Si 141 (28.5) 111 (27.4) 30 ( 33.7)
PET CT No 456 (92.3) 377 (93.1) 79 ( 88.8) 0.244
X 31 Si 38 ( 7.7) 28 ( 6.9) 10 ( 11.2)
RAYOS X TORAX No 394 (79.8) 316 (78.0) 78 ( 87.6) 0.058
X 32 Si 100 (20.2) 89 (22.0) 11 ( 12.4)
Laparoscopia exploratoria No 490 (99.2) 401 (99.0) 89 (100.0) 0.773
X 33 Si 4 ( 0.8) 4 ( 1.0) 0 ( 0.0)
Cistoscopia No 483 (97.8) 395 (97.5) 88 ( 98.9) 0.702
X 34 Si 11 ( 2.2) 10 ( 2.5) 1 ( 1.1)
Ultrasonido transvaginal No 397 (80.4) 319 (78.8) 78 ( 87.6) 0.078
X 35 Si 97 (19.6) 86 (21.2) 11 ( 12.4)
Ultrasonido de renal y de vías urinaria No 483 (97.8) 398 (98.3) 85 ( 95.5) 0.228
X 36 Si 11 ( 2.2) 7 ( 1.7) 4 ( 4.5)
Otro estudio de extension No 457 (92.5) 375 (92.6) 82 ( 92.1) 1.000
X 37 Si 37 ( 7.5) 30 ( 7.4) 7 ( 7.9)
Especialidad que realizó la primera consulta Ginecología Oncológica 399 (80.9) 326 (80.7) 73 ( 82.0) 0.889
X 38 Otra 94 (19.1) 78 (19.3) 16 ( 18.0)
Diagnóstico CIE 10 registrado C530 Tumor maligno del endocérvix 91 (18.4) 78 (19.3) 13 ( 14.6) 0.289
X 39 C531 Tumor maligno del exocérvix 292 (59.1) 232 (57.3) 60 ( 67.4)
X 40 C539 Tumor maligno del cuello del útero, sin otra especificación 103 (20.9) 89 (22.0) 14 ( 15.7)
X 41 C55X Tumor maligno del útero, parte no especificada 8 ( 1.6) 6 ( 1.5) 2 ( 2.2)
Tamaño tumoral clínico tumor microscópico 5 ( 1.1) 5 ( 1.3) 0 ( 0.0) 0.660
X 42 ≤ 2 cm 2 ( 0.4) 2 ( 0.5) 0 ( 0.0)
X 43 >2 cm - ≤ 4cm 89 (18.8) 73 (18.9) 16 ( 18.6)
X 44 >4 cm 377 (79.7) 307 (79.3) 70 ( 81.4)
EST_clin_FIGO IB3,II,IIA 61 (12.3) 55 (13.6) 6 ( 6.7) 0.110
X 45 IIB, III, IIIA, IIIB, IIIC, IVA 433 (87.7) 350 (86.4) 83 ( 93.3)
ECOG ECOG0 181 (37.1) 167 (41.8) 14 ( 15.9) <0.001
X 46 ECOG1 240 (49.2) 195 (48.8) 45 ( 51.1)
X 47 ECOG2 63 (12.9) 36 ( 9.0) 27 ( 30.7)
X 48 ECOG3 4 ( 0.8) 2 ( 0.5) 2 ( 2.3)
Quimio radiación concomitante No 19 ( 3.8) 16 ( 4.0) 3 ( 3.4) 1.000
X 49 Si 475 (96.2) 389 (96.0) 86 ( 96.6)
Cirugía No 468 (94.7) 381 (94.1) 87 ( 97.8) 0.252
X 50 Si 26 ( 5.3) 24 ( 5.9) 2 ( 2.2)
Terapia sistémica adyuvante No 490 (99.2) 401 (99.0) 89 (100.0) 0.773
X 51 Si 4 ( 0.8) 4 ( 1.0) 0 ( 0.0)
Radiación adyuvante No 480 (97.2) 392 (96.8) 88 ( 98.9) 0.471
X 52 Si 14 ( 2.8) 13 ( 3.2) 1 ( 1.1)
Esquema Quimioterapia No 20 ( 4.0) 17 ( 4.2) 3 ( 3.4) 0.951
X 53 Si 474 (96.0) 388 (95.8) 86 ( 96.6)
Esquema Terapias de blanco molecular No 492 (99.6) 403 (99.5) 89 (100.0) 1.000
X 54 Si 2 ( 0.4) 2 ( 0.5) 0 ( 0.0)
Esquema completo t sistemica No 36 ( 7.5) 28 ( 7.1) 8 ( 9.3) 0.640
X 55 Si 443 (92.5) 365 (92.9) 78 ( 90.7)
Esquema completo radioterapia No 13 ( 2.7) 6 ( 1.5) 7 ( 8.1) 0.002
X 56 Si 473 (97.3) 394 (98.5) 79 ( 91.9)
Prescripcion braquiterapia No 52 (10.7) 24 ( 6.0) 28 ( 32.2) <0.001
X 57 Si 436 (89.3) 377 (94.0) 59 ( 67.8)
Intervalo entre Radioterapia Externa y Braquiterapia mean SD 20.76 (20.28) 20.58 (20.72) 21.93 (17.26) 0.637
Esquema completo braquiterapia No 18 ( 4.2) 12 ( 3.2) 6 ( 10.5) 0.026
X 58 Si 414 (95.8) 363 (96.8) 51 ( 89.5)
M_quim mean SD 1.33 (2.44) 1.36 (2.69) 1.15 (0.39) 0.476
M_quim0 mean SD 0.85 (1.81) 0.86 (1.98) 0.83 (0.62) 0.900
M_rad0 mean SD 0.77 (0.62) 0.76 (0.61) 0.83 (0.70) 0.318
M_rad mean SD 1.45 (2.04) 1.41 (1.87) 1.64 (2.68) 0.334
M_braq mean SD 0.55 (1.88) 0.55 (2.02) 0.54 (0.31) 0.979
M_braq0 mean SD 1.56 (1.23) 1.57 (1.20) 1.51 (1.41) 0.742
dif_dx_primtrat mean SD 3.03 (2.87) 2.99 (2.99) 3.24 (2.25) 0.459
dif_quim_braq mean SD 2.53 (2.03) 2.52 (2.16) 2.58 (0.71) 0.838
Frecuencia del seguimiento imagenológico Número de imágenes en el Primer Año mean SD 1.66 (1.63) 1.67 (1.65) 1.58 (1.56) 0.668
Frecuencia de seguimiento por Oncología Clínica Número de visitas en el Primer Año mean SD 3.33 (2.17) 3.24 (1.99) 4.00 (3.21) 0.102
Frecuencia de seguimiento por Ginecología Oncológica Número de visitas en el Primer Año mean SD 3.02 (1.17) 3.04 (1.15) 2.92 (1.25) 0.449
Ningun cuidado de soporte No 216 (43.7) 187 (46.2) 29 ( 32.6) 0.026
X 59 Si 278 (56.3) 218 (53.8) 60 ( 67.4)
Cuidado paliativo No 339 (68.6) 268 (66.2) 71 ( 79.8) 0.017
X 60 Si 155 (31.4) 137 (33.8) 18 ( 20.2)
Nutricion No 399 (80.8) 323 (79.8) 76 ( 85.4) 0.283
X 61 Si 95 (19.2) 82 (20.2) 13 ( 14.6)
Patologia oral No 426 (86.2) 348 (85.9) 78 ( 87.6) 0.799
X 62 Si 68 (13.8) 57 (14.1) 11 ( 12.4)
Psicologia No 422 (85.4) 343 (84.7) 79 ( 88.8) 0.412
X 63 Si 72 (14.6) 62 (15.3) 10 ( 11.2)
Fertilidad sexualidad No 489 (99.0) 401 (99.0) 88 ( 98.9) 1.000
X 64 Si 5 ( 1.0) 4 ( 1.0) 1 ( 1.1)
Otro cuidado de soporte No 463 (93.7) 378 (93.3) 85 ( 95.5) 0.600
X 65 Si 31 ( 6.3) 27 ( 6.7) 4 ( 4.5)
trat_complete2 -compl 114 (23.1) 74 (18.3) 40 ( 44.9) <0.001
X 66 +compl 380 (76.9) 331 (81.7) 49 ( 55.1)
retiro +cont.m 34 ( 6.9) 29 ( 7.2) 5 ( 5.6) 0.772
X 67 -cont.m 460 (93.1) 376 (92.8) 84 ( 94.4)
rta1 -rta_trat 63 (12.8) 38 ( 9.4) 25 ( 28.1) <0.001
X 68 +rta_trat 431 (87.2) 367 (90.6) 64 ( 71.9)
seg_onco_cli -seg_onco 285 (57.7) 221 (54.6) 64 ( 71.9) 0.004
X 69 +seg_onco 209 (42.3) 184 (45.4) 25 ( 28.1)
linea_2 No 386 (78.1) 353 (87.2) 33 ( 37.1) <0.001
X 70 Si 108 (21.9) 52 (12.8) 56 ( 62.9)
linea_3 No 482 (97.6) 398 (98.3) 84 ( 94.4) 0.075
X 71 Si 12 ( 2.4) 7 ( 1.7) 5 ( 5.6)
write.xlsx(table12, "tabla_fallecimiento.xlsx", rowNames = TRUE)

Regresion logistica

Se excluyo “esquema completo braqui” por no tener suficiente variabilidad

BASE$fall_reg <- ifelse(BASE$fall == "+fall", 1, 0)
m1 <- glm (fall_reg ~ Procedencia + AFILIACION +  Citologia + Procedimiento_Cervix +ingreso + dolor + `Grado de diferenciación` + `TC PELVIS` +`RAYOS X TORAX` +  ECOG + `Esquema completo radioterapia` + `Prescripcion braquiterapia` + `Ningun cuidado de soporte` + `Cuidado paliativo` + trat_complete2 + rta1  + seg_onco_cli + linea_2 + linea_3 , family = "binomial", data= BASE) 


m2 <- glm (fall_reg ~ dolor +  `Prescripcion braquiterapia` + `Cuidado paliativo` + rta1  + linea_2, family = "binomial", data= BASE) 

summary(m2)
## 
## Call:
## glm(formula = fall_reg ~ dolor + `Prescripcion braquiterapia` + 
##     `Cuidado paliativo` + rta1 + linea_2, family = "binomial", 
##     data = BASE)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     -0.1523     0.4524  -0.337  0.73637    
## dolorSí                          1.5610     0.5871   2.659  0.00784 ** 
## `Prescripcion braquiterapia`Si  -1.2518     0.3957  -3.164  0.00156 ** 
## `Cuidado paliativo`Si           -0.9623     0.4100  -2.347  0.01891 *  
## rta1+rta_trat                   -1.0901     0.4124  -2.644  0.00820 ** 
## linea_2Si                        2.2858     0.3035   7.532    5e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 413.86  on 417  degrees of freedom
## Residual deviance: 296.06  on 412  degrees of freedom
##   (76 observations deleted due to missingness)
## AIC: 308.06
## 
## Number of Fisher Scoring iterations: 5

Se seleccionaron las variables por su significancia estadistica

#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
dolor

0.011
    No 1.00
    Sí 4.76 1.45, 14.8
Prescripcion braquiterapia

0.002
    No 1.00
    Si 0.29 0.13, 0.62
Cuidado paliativo

0.013
    No 1.00
    Si 0.38 0.16, 0.82
rta1

0.009
    -rta_trat 1.00
    +rta_trat 0.34 0.15, 0.76
linea_2

<0.001
    No 1.00
    Si 9.83 5.48, 18.1
Abbreviations: CI = Confidence Interval, OR = Odds Ratio
library(performance)
check_model(m2)

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 = 3.9135, df = 3, p-value = 0.271

Fue neesario eliminar el ECOG para tener una mejor bondad de ajuste.

vars_usadas <- c("fall_reg", 
                 "Procedencia", "AFILIACION", "Citologia", "Procedimiento_Cervix", "ingreso", "dolor",
                 "Grado de diferenciación", "TC PELVIS", "RAYOS X TORAX", "ECOG",
                 "Esquema completo radioterapia", "Prescripcion braquiterapia",
                 "Ningun cuidado de soporte", "Cuidado paliativo",
                 "trat_complete2", "rta1", "seg_onco_cli", "linea_2", "linea_3")

BASE_completa <- BASE[complete.cases(BASE[, vars_usadas]), ]

# 2. Ajustar los modelos sobre la base depurada
m1 <- glm(fall_reg ~ Procedencia + AFILIACION + Citologia + Procedimiento_Cervix +
            ingreso + dolor + `Grado de diferenciación` + `TC PELVIS` + `RAYOS X TORAX` +
            ECOG + `Esquema completo radioterapia` + `Prescripcion braquiterapia` +
            `Ningun cuidado de soporte` + `Cuidado paliativo` +
            trat_complete2 + rta1 + seg_onco_cli + linea_2 + linea_3,
          family = "binomial", data = BASE_completa)

m2 <- glm(fall_reg ~ dolor + `Prescripcion braquiterapia` +
            `Cuidado paliativo` + rta1 + linea_2,
          family = "binomial", data = BASE_completa)
# 3. Comparar
library(lmtest)
lrtest(m1, m2)
## Likelihood ratio test
## 
## Model 1: fall_reg ~ Procedencia + AFILIACION + Citologia + Procedimiento_Cervix + 
##     ingreso + dolor + `Grado de diferenciación` + `TC PELVIS` + 
##     `RAYOS X TORAX` + ECOG + `Esquema completo radioterapia` + 
##     `Prescripcion braquiterapia` + `Ningun cuidado de soporte` + 
##     `Cuidado paliativo` + trat_complete2 + rta1 + seg_onco_cli + 
##     linea_2 + linea_3
## Model 2: fall_reg ~ dolor + `Prescripcion braquiterapia` + `Cuidado paliativo` + 
##     rta1 + linea_2
##   #Df  LogLik  Df  Chisq Pr(>Chisq)
## 1  25 -131.03                      
## 2   6 -137.82 -19 13.572      0.808

Las variables de m1 no aporta significativamente al modelo 2

Arbol de clasificacion

Se prueban las variables significativas en el modelo bi-variado con un arbol de clasificacion,

  • Primero se particiona la base de datos en entrenamiento (60%) y de validacion (40%)
  • Se realiza un muestreo estratificado (por la variable desenlace)
#install.packages("caret")
library(caret)
set.seed(2025)

index <- createDataPartition(BASE$fall, p = 0.60, list = FALSE)

train_data <- BASE[index, ]   # 60% de los datos
test_data  <- BASE[-index, ]  # 40% restante


#install.packages("table1")
library(table1)
table1(  ~ fall , data = BASE, rowlabelhead = "Base Completa")
Base Completa Overall
(N=494)
fall
-fall 405 (82.0%)
+fall 89 (18.0%)
table1(  ~ fall , data = train_data , rowlabelhead = "Base entrenamiento")
Base entrenamiento Overall
(N=297)
fall
-fall 243 (81.8%)
+fall 54 (18.2%)
table1(  ~ fall , data = test_data, rowlabelhead = "Base validacion")
Base validacion Overall
(N=197)
fall
-fall 162 (82.2%)
+fall 35 (17.8%)

Teniendo en cuenta las particiones que hacen los arboles para las variables cuantitativas, se incluyen dichas variables, además de las variables categoricas con un p valor igual o menos a 0.1 en el analisis bivariado.

Arbol inicial

# Ver si hay nombres con un salto de línea real
grep("\n", names(train_data), value = TRUE)
## [1] "N. partos \nvaginales"
names(train_data) <- gsub("\n", " ", names(train_data))
# Limpiar espacios extra al inicio y final
names(train_data) <- trimws(names(train_data))
# Verificar
grep("partos", names(train_data), value = TRUE, ignore.case = TRUE)
## [1] "N. partos  vaginales"
library(rpart)
library(rpart.plot)

arbolcomp <- rpart(formula = fall ~ Procedencia + `Edad a la fecha de diagnóstico` + `Lugar de residencia` + EDUCACION +  GRUPO_ET + `Estado civil` + AFILIACION + TABAQUISMO + `N.de gestaciones` + `N. partos  vaginales`+ Citologia + `P. molecular VPH` + `Historia de lesiones premalignas` +  Procedimiento_Cervix + charls_cat + ingreso + dolor + `Grado de diferenciación` + `TC TORAX` + `TC ABDOMEN` + `TC PELVIS` + `RMN PELVIS` + `PET-CT` + `RAYOS X TORAX`+ `Especialidad que realizó la primera consulta` + `Tamaño tumoral clínico` +   EST_clin_FIGO + ECOG + `Quimio-radiación concomitante` + `Esquema completo t sistemica` + `Prescripción de Radioterapia Externa (Primera Línea)` + `Esquema completo radioterapia` + `Intervalo entre Radioterapia Externa y Braquiterapia` + `Prescripcion braquiterapia` +   `Esquema completo braquiterapia`+  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` + `Ningun cuidado de soporte` + `Cuidado paliativo` + Nutricion+ `Patologia oral` + `Psicologia`+ `Fertilidad/sexualidad` + trat_complete2+ retiro + rta1+ seg_onco_cli +linea_2+ linea_3 + `Especialista de seguimiento (choice=Ginecología oncológica)`, data = train_data , parms = list(split = "gini"), method="class", cp= 0.008)

printcp(arbolcomp)
## 
## Classification tree:
## rpart(formula = fall ~ Procedencia + `Edad a la fecha de diagnóstico` + 
##     `Lugar de residencia` + EDUCACION + GRUPO_ET + `Estado civil` + 
##     AFILIACION + TABAQUISMO + `N.de gestaciones` + `N. partos  vaginales` + 
##     Citologia + `P. molecular VPH` + `Historia de lesiones premalignas` + 
##     Procedimiento_Cervix + charls_cat + ingreso + dolor + `Grado de diferenciación` + 
##     `TC TORAX` + `TC ABDOMEN` + `TC PELVIS` + `RMN PELVIS` + 
##     `PET-CT` + `RAYOS X TORAX` + `Especialidad que realizó la primera consulta` + 
##     `Tamaño tumoral clínico` + EST_clin_FIGO + ECOG + `Quimio-radiación concomitante` + 
##     `Esquema completo t sistemica` + `Prescripción de Radioterapia Externa (Primera Línea)` + 
##     `Esquema completo radioterapia` + `Intervalo entre Radioterapia Externa y Braquiterapia` + 
##     `Prescripcion braquiterapia` + `Esquema completo braquiterapia` + 
##     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` + 
##     `Ningun cuidado de soporte` + `Cuidado paliativo` + Nutricion + 
##     `Patologia oral` + Psicologia + `Fertilidad/sexualidad` + 
##     trat_complete2 + retiro + rta1 + seg_onco_cli + linea_2 + 
##     linea_3 + `Especialista de seguimiento (choice=Ginecología oncológica)`, 
##     data = train_data, method = "class", parms = list(split = "gini"), 
##     cp = 0.008)
## 
## Variables actually used in tree construction:
## [1] Edad a la fecha de diagnóstico linea_2                       
## [3] M_quim0                        M_rad                         
## [5] N. partos  vaginales           seg_onco_cli                  
## 
## Root node error: 54/297 = 0.18182
## 
## n= 297 
## 
##         CP nsplit rel error  xerror    xstd
## 1 0.175926      0   1.00000 1.00000 0.12309
## 2 0.055556      2   0.64815 0.68519 0.10539
## 3 0.024691      3   0.59259 0.68519 0.10539
## 4 0.008000      6   0.51852 0.85185 0.11546

Las variables realmente usadas para el arbol fueron: Edad a la fecha de diagnóstico, el haber recibido segunda linea, tiempo entre prescripcion e inicio de quimioterapia, (M_quim0), tiempo de inicio y fin de radio (M_rad), número de partos vaginales (N. partos vaginales) y el haber tenido seguimiento por oncologia clinica (seg_onco_cli).

#install.packages("rattle")
library(rattle)
rpart.plot(
  arbolcomp, 
  extra = 104,        # muestra counts, prob, etc.
  under = TRUE,       # pone las categorías debajo
  faclen = 0,         # no acorta nombres
  cex = 0.7, 
  tweak = 1.3,
  space = 0.8         # aumenta espacio entre título y divisiones
)

fancyRpartPlot(
  arbolcomp,
  sub = "Árbol Inicial",
  cex = 0.5,
  tweak = 1.3,
  palettes = c("Blues", "Greens"),
  main = "Árbol de Clasificación",
  cex.main = 1.4  # cambia tamaño del título principal
)

Extraer las tablas de decision (brinda la misma información que el arbol pero en tabla)

#install.packages("partykit")
library("partykit")
as.party(arbolcomp)
## 
## Model formula:
## fall ~ Procedencia + `Edad a la fecha de diagnóstico` + `Lugar de residencia` + 
##     EDUCACION + GRUPO_ET + `Estado civil` + AFILIACION + TABAQUISMO + 
##     `N.de gestaciones` + `N. partos  vaginales` + Citologia + 
##     `P. molecular VPH` + `Historia de lesiones premalignas` + 
##     Procedimiento_Cervix + charls_cat + ingreso + dolor + `Grado de diferenciación` + 
##     `TC TORAX` + `TC ABDOMEN` + `TC PELVIS` + `RMN PELVIS` + 
##     `PET-CT` + `RAYOS X TORAX` + `Especialidad que realizó la primera consulta` + 
##     `Tamaño tumoral clínico` + EST_clin_FIGO + ECOG + `Quimio-radiación concomitante` + 
##     `Esquema completo t sistemica` + `Prescripción de Radioterapia Externa (Primera Línea)` + 
##     `Esquema completo radioterapia` + `Intervalo entre Radioterapia Externa y Braquiterapia` + 
##     `Prescripcion braquiterapia` + `Esquema completo braquiterapia` + 
##     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` + 
##     `Ningun cuidado de soporte` + `Cuidado paliativo` + Nutricion + 
##     `Patologia oral` + Psicologia + `Fertilidad/sexualidad` + 
##     trat_complete2 + retiro + rta1 + seg_onco_cli + linea_2 + 
##     linea_3 + `Especialista de seguimiento (choice=Ginecología oncológica)`
## 
## Fitted party:
## [1] root
## |   [2] linea_2 in No
## |   |   [3] M_rad >= 0.9165: -fall (n = 229, err = 6.1%)
## |   |   [4] M_rad < 0.9165: +fall (n = 7, err = 28.6%)
## |   [5] linea_2 in Si
## |   |   [6] seg_onco_cli in +seg_onco: -fall (n = 18, err = 22.2%)
## |   |   [7] seg_onco_cli in -seg_onco
## |   |   |   [8] M_quim0 < 1.3665
## |   |   |   |   [9] Edad a la fecha de diagnóstico < 59.5
## |   |   |   |   |   [10] N. partos  vaginales >= 3.5: -fall (n = 10, err = 30.0%)
## |   |   |   |   |   [11] N. partos  vaginales < 3.5: +fall (n = 13, err = 30.8%)
## |   |   |   |   [12] Edad a la fecha de diagnóstico >= 59.5: +fall (n = 10, err = 10.0%)
## |   |   |   [13] M_quim0 >= 1.3665: +fall (n = 10, err = 0.0%)
## 
## Number of inner nodes:    6
## Number of terminal nodes: 7

Se verifica la importancia de las variables

arbolcomp$variable.importance
##                                                                       linea_2 
##                                                                    23.5868928 
##                                                                  seg_onco_cli 
##                                                                     6.3115178 
##                                                                         M_rad 
##                                                                     6.1309245 
##                                                                   Procedencia 
##                                                                     2.8051190 
##                                                                       M_quim0 
##                                                                     2.6715295 
##                                                             Cuidado paliativo 
##                                                                     2.4544791 
##                                                          N. partos  vaginales 
##                                                                     2.1386926 
##                                                                        retiro 
##                                                                     2.1038393 
##                                                                          rta1 
##                                                                     2.1038393 
##                                                Edad a la fecha de diagnóstico 
##                                                                     1.9944664 
##                                                              N.de gestaciones 
##                                                                     1.9647127 
##                                                     Ningun cuidado de soporte 
##                                                                     1.7531994 
##                                                                        M_rad0 
##                                                                     1.6195008 
##                                                                       linea_3 
##                                                                     1.5466815 
##                                                          Procedimiento_Cervix 
##                                                                     1.2340244 
##                                                                     TC PELVIS 
##                                                                     0.8780488 
## Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año 
##                                                                     0.6959197 
##                          Prescripción de Radioterapia Externa (Primera Línea) 
##                                                                     0.6959197 
##                                                               dif_dx_primtrat 
##                                                                     0.6585366 
##                                                                    charls_cat 
##                                                                     0.3988933 
##                                                                  Estado civil 
##                                                                     0.2195122 
##                                                                Patologia oral 
##                                                                     0.2195122
cp <- arbolcomp$cptable[which.min(arbolcomp$cptable[,"xerror"]),"CP"]
plotcp(arbolcomp)

El grafico muestra la busqueda del valor minimo del error de validación cruzada (xerror). Extrae el parámetro de complejidad (CP) asociado a ese mínimo. Con 7 nodos es lo máximo con lo que arbol “funciona” (una complejidad de 7 nodos)

Se procede a podar el arbol

arbolpod <- prune(arbolcomp, cp=cp)
fancyRpartPlot(arbolpod, sub='Árbol Podado')

Al podar el arbol (disminuir posile sobreajuste), se eliminan porpiamente las ramas (mas que las variables).

as.party(arbolpod)
## 
## Model formula:
## fall ~ Procedencia + `Edad a la fecha de diagnóstico` + `Lugar de residencia` + 
##     EDUCACION + GRUPO_ET + `Estado civil` + AFILIACION + TABAQUISMO + 
##     `N.de gestaciones` + `N. partos  vaginales` + Citologia + 
##     `P. molecular VPH` + `Historia de lesiones premalignas` + 
##     Procedimiento_Cervix + charls_cat + ingreso + dolor + `Grado de diferenciación` + 
##     `TC TORAX` + `TC ABDOMEN` + `TC PELVIS` + `RMN PELVIS` + 
##     `PET-CT` + `RAYOS X TORAX` + `Especialidad que realizó la primera consulta` + 
##     `Tamaño tumoral clínico` + EST_clin_FIGO + ECOG + `Quimio-radiación concomitante` + 
##     `Esquema completo t sistemica` + `Prescripción de Radioterapia Externa (Primera Línea)` + 
##     `Esquema completo radioterapia` + `Intervalo entre Radioterapia Externa y Braquiterapia` + 
##     `Prescripcion braquiterapia` + `Esquema completo braquiterapia` + 
##     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` + 
##     `Ningun cuidado de soporte` + `Cuidado paliativo` + Nutricion + 
##     `Patologia oral` + Psicologia + `Fertilidad/sexualidad` + 
##     trat_complete2 + retiro + rta1 + seg_onco_cli + linea_2 + 
##     linea_3 + `Especialista de seguimiento (choice=Ginecología oncológica)`
## 
## Fitted party:
## [1] root
## |   [2] linea_2 in No: -fall (n = 236, err = 8.1%)
## |   [3] linea_2 in Si
## |   |   [4] seg_onco_cli in +seg_onco: -fall (n = 18, err = 22.2%)
## |   |   [5] seg_onco_cli in -seg_onco: +fall (n = 43, err = 27.9%)
## 
## Number of inner nodes:    2
## Number of terminal nodes: 3

Se revisa el desempeño del modelo sin poda y con poda

Muestra de entrenamiento

#install.packages("rpart.plot")
library(rpart.plot)
library(caret)
pred <- predict(arbolcomp, newdata = train_data, type="class")
confusionMatrix(pred, train_data$fall, positive="+fall")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction -fall +fall
##      -fall   236    21
##      +fall     7    33
##                                           
##                Accuracy : 0.9057          
##                  95% CI : (0.8666, 0.9364)
##     No Information Rate : 0.8182          
##     P-Value [Acc > NIR] : 1.864e-05       
##                                           
##                   Kappa : 0.6476          
##                                           
##  Mcnemar's Test P-Value : 0.01402         
##                                           
##             Sensitivity : 0.6111          
##             Specificity : 0.9712          
##          Pos Pred Value : 0.8250          
##          Neg Pred Value : 0.9183          
##              Prevalence : 0.1818          
##          Detection Rate : 0.1111          
##    Detection Prevalence : 0.1347          
##       Balanced Accuracy : 0.7912          
##                                           
##        'Positive' Class : +fall           
## 
  • Accuracy (0.9057) → El modelo acierta en el 90,57 % de los casos,

  • P-valor vs. tasa de acierto por azar (NIR): muy bajo, el modelo mejora mucho sobre el azar.

  • Kappa (0.6476) → Medida de acuerdo ajustada por azar, 0.64 indica un buen acuerdo.

  • Sensitivity (0.6111) → Capacidad de detectar a los +fall (verdaderos positivos), el modelo detecta correctamente un 61 % de los casos que sí tienen +fall. “Se escapan 4 de cada 10 casos positivos”.

  • Specificity (0.9712) → Capacidad de identificar correctamente a los –fall. Muy alta: 97 % → casi nunca marca positivo a alguien que no lo es.

  • PPV (0.8250) → Si el modelo predice +fall, la probabilidad real de que sea cierto es del 82,5 %.

  • NPV (0.9183) → Si predice –fall, hay un 91,8 % de probabilidad de que sea cierto.

Muestra de validacion

names(test_data) <- gsub("\n", " ", names(test_data))
# Limpiar espacios extra al inicio y final
names(test_data) <- trimws(names(test_data))

predtest <- predict(arbolcomp, newdata = test_data, type="class")
confusionMatrix(predtest, test_data$fall, positive="+fall")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction -fall +fall
##      -fall   148    22
##      +fall    14    13
##                                           
##                Accuracy : 0.8173          
##                  95% CI : (0.7561, 0.8686)
##     No Information Rate : 0.8223          
##     P-Value [Acc > NIR] : 0.6171          
##                                           
##                   Kappa : 0.3131          
##                                           
##  Mcnemar's Test P-Value : 0.2433          
##                                           
##             Sensitivity : 0.37143         
##             Specificity : 0.91358         
##          Pos Pred Value : 0.48148         
##          Neg Pred Value : 0.87059         
##              Prevalence : 0.17766         
##          Detection Rate : 0.06599         
##    Detection Prevalence : 0.13706         
##       Balanced Accuracy : 0.64250         
##                                           
##        'Positive' Class : +fall           
## 

Arbol podado

Muestra de entrenamiento

pred_pod <- predict(arbolpod , newdata = train_data, type="class")
confusionMatrix(pred_pod, train_data$fall, positive="+fall")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction -fall +fall
##      -fall   231    23
##      +fall    12    31
##                                           
##                Accuracy : 0.8822          
##                  95% CI : (0.8399, 0.9165)
##     No Information Rate : 0.8182          
##     P-Value [Acc > NIR] : 0.001786        
##                                           
##                   Kappa : 0.5698          
##                                           
##  Mcnemar's Test P-Value : 0.090969        
##                                           
##             Sensitivity : 0.5741          
##             Specificity : 0.9506          
##          Pos Pred Value : 0.7209          
##          Neg Pred Value : 0.9094          
##              Prevalence : 0.1818          
##          Detection Rate : 0.1044          
##    Detection Prevalence : 0.1448          
##       Balanced Accuracy : 0.7623          
##                                           
##        'Positive' Class : +fall           
## 

Muestra de validacion

pred_pod_test <- predict(arbolpod , newdata = test_data, type="class")
confusionMatrix(pred_pod_test, test_data$fall, positive="+fall")
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction -fall +fall
##      -fall   148    21
##      +fall    14    14
##                                          
##                Accuracy : 0.8223         
##                  95% CI : (0.7617, 0.873)
##     No Information Rate : 0.8223         
##     P-Value [Acc > NIR] : 0.5450         
##                                          
##                   Kappa : 0.3403         
##                                          
##  Mcnemar's Test P-Value : 0.3105         
##                                          
##             Sensitivity : 0.40000        
##             Specificity : 0.91358        
##          Pos Pred Value : 0.50000        
##          Neg Pred Value : 0.87574        
##              Prevalence : 0.17766        
##          Detection Rate : 0.07107        
##    Detection Prevalence : 0.14213        
##       Balanced Accuracy : 0.65679        
##                                          
##        'Positive' Class : +fall          
## 

El modelo funciona mas para predecir quienes no fallecen.

library(caret)
set.seed(2025)

index2 <- createDataPartition(BASE$rta1, p = 0.60, list = FALSE)

train_data2 <- BASE[index2, ]   # 60% de los datos
test_data2  <- BASE[-index2, ]  # 40% restante

#install.packages("table1")
library(table1)
table1(  ~ rta1 , data = BASE, rowlabelhead = "Base Completa")
Base Completa Overall
(N=494)
rta1
-rta_trat 63 (12.8%)
+rta_trat 431 (87.2%)
table1(  ~ rta1, data = train_data2 , rowlabelhead = "Base entrenamiento")
Base entrenamiento Overall
(N=297)
rta1
-rta_trat 38 (12.8%)
+rta_trat 259 (87.2%)
table1(  ~ rta1, data = test_data2, rowlabelhead = "Base validacion")
Base validacion Overall
(N=197)
rta1
-rta_trat 25 (12.7%)
+rta_trat 172 (87.3%)

Una vez creadas las bases se procede a correr el modelo

arbolcomp2 <- rpart(formula =  rta1 ~ Procedencia + `Edad a la fecha de diagnóstico` + `Lugar de residencia` + EDUCACION +  GRUPO_ET + `Estado civil` + AFILIACION + TABAQUISMO + `N.de gestaciones` + `N. partos  vaginales`+ Citologia + `P. molecular VPH` + `Historia de lesiones premalignas` +  Procedimiento_Cervix + charls_cat + ingreso + dolor + `Grado de diferenciación` + `TC TORAX` + `TC ABDOMEN` + `TC PELVIS` + `RMN PELVIS` + `PET-CT` + `RAYOS X TORAX`+  `Tamaño tumoral clínico` +   EST_clin_FIGO + ECOG + `Quimio-radiación concomitante` + `Esquema completo t sistemica` + `Prescripción de Radioterapia Externa (Primera Línea)` + `Esquema completo radioterapia` + `Intervalo entre Radioterapia Externa y Braquiterapia` + `Prescripcion braquiterapia` +   `Esquema completo braquiterapia`+  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` + `Ningun cuidado de soporte` + `Cuidado paliativo` + Nutricion+ `Patologia oral` + `Psicologia`+ `Fertilidad/sexualidad` + retiro + trat_complete2, data = train_data , parms = list(split = "gini"), method="class")

printcp(arbolcomp2)
## 
## Classification tree:
## rpart(formula = rta1 ~ Procedencia + `Edad a la fecha de diagnóstico` + 
##     `Lugar de residencia` + EDUCACION + GRUPO_ET + `Estado civil` + 
##     AFILIACION + TABAQUISMO + `N.de gestaciones` + `N. partos  vaginales` + 
##     Citologia + `P. molecular VPH` + `Historia de lesiones premalignas` + 
##     Procedimiento_Cervix + charls_cat + ingreso + dolor + `Grado de diferenciación` + 
##     `TC TORAX` + `TC ABDOMEN` + `TC PELVIS` + `RMN PELVIS` + 
##     `PET-CT` + `RAYOS X TORAX` + `Tamaño tumoral clínico` + 
##     EST_clin_FIGO + ECOG + `Quimio-radiación concomitante` + 
##     `Esquema completo t sistemica` + `Prescripción de Radioterapia Externa (Primera Línea)` + 
##     `Esquema completo radioterapia` + `Intervalo entre Radioterapia Externa y Braquiterapia` + 
##     `Prescripcion braquiterapia` + `Esquema completo braquiterapia` + 
##     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` + 
##     `Ningun cuidado de soporte` + `Cuidado paliativo` + Nutricion + 
##     `Patologia oral` + Psicologia + `Fertilidad/sexualidad` + 
##     retiro + trat_complete2, data = train_data, method = "class", 
##     parms = list(split = "gini"))
## 
## Variables actually used in tree construction:
## [1] Edad a la fecha de diagnóstico M_rad                         
## [3] trat_complete2                
## 
## Root node error: 34/297 = 0.11448
## 
## n= 297 
## 
##         CP nsplit rel error xerror    xstd
## 1 0.044118      0   1.00000 1.0000 0.16138
## 2 0.029412      2   0.91176 1.3235 0.18174
## 3 0.010000      3   0.88235 1.2941 0.18007
library(rattle)
fancyRpartPlot(arbolcomp2, sub='Árbol Inicial 2')

Podando el arbol

cp2 <- arbolcomp2$cptable[which.min(arbolcomp2$cptable[,"xerror"]),"CP"]
plotcp(arbolcomp2)

Probabelemente con 3 ramas sea suficiente, no fue posible podar el arbol ya que en este caso solo quedaria un nodo

#arbolpod2 <- prune(arbolcomp2, cp=cp2)
#fancyRpartPlot(arbolpod2, sub='Árbol Podado')
library(rpart.plot)
library(caret)
names(train_data2) <- gsub("\n", " ", names(train_data2))
names(train_data2) <- trimws(names(train_data2))
names(test_data2) <- gsub("\n", " ", names(test_data2))
names(test_data2) <- trimws(names(test_data2))

pred_2 <- predict(arbolcomp2, newdata = train_data2, type="class")
confusionMatrix(pred_2, train_data2$rta1, positive="+rta_trat")
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  -rta_trat +rta_trat
##   -rta_trat         7         4
##   +rta_trat        31       255
##                                           
##                Accuracy : 0.8822          
##                  95% CI : (0.8399, 0.9165)
##     No Information Rate : 0.8721          
##     P-Value [Acc > NIR] : 0.3385          
##                                           
##                   Kappa : 0.2422          
##                                           
##  Mcnemar's Test P-Value : 1.109e-05       
##                                           
##             Sensitivity : 0.9846          
##             Specificity : 0.1842          
##          Pos Pred Value : 0.8916          
##          Neg Pred Value : 0.6364          
##              Prevalence : 0.8721          
##          Detection Rate : 0.8586          
##    Detection Prevalence : 0.9630          
##       Balanced Accuracy : 0.5844          
##                                           
##        'Positive' Class : +rta_trat       
## 
pred_2_test <- predict(arbolcomp2, newdata = test_data2, type="class")
confusionMatrix(pred_2_test, test_data2$rta1, positive="+rta_trat")
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  -rta_trat +rta_trat
##   -rta_trat         4         2
##   +rta_trat        21       170
##                                         
##                Accuracy : 0.8832        
##                  95% CI : (0.83, 0.9245)
##     No Information Rate : 0.8731        
##     P-Value [Acc > NIR] : 0.3833334     
##                                         
##                   Kappa : 0.2197        
##                                         
##  Mcnemar's Test P-Value : 0.0001746     
##                                         
##             Sensitivity : 0.9884        
##             Specificity : 0.1600        
##          Pos Pred Value : 0.8901        
##          Neg Pred Value : 0.6667        
##              Prevalence : 0.8731        
##          Detection Rate : 0.8629        
##    Detection Prevalence : 0.9695        
##       Balanced Accuracy : 0.5742        
##                                         
##        'Positive' Class : +rta_trat     
## 

Este modelo esta sesgado hacia la clase positiva (tienen respuesta al tratamiento)