Alistamiento base de datos
library(readxl)
BASE <- read_excel("BASE_filt2.xlsx")
#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")))
BASE <- BASE %>%
mutate(charls_cat2= cut(`Índice de Charlson`,
breaks = c(-Inf, 5, Inf),
right = F,
labels = c("<5",">=5")))
BASE <- BASE %>%
mutate(Edad_cat = cut(`Edad a la fecha de diagnóstico`,
breaks =c(-Inf, 60, Inf),
right = F,
labels = c("Menores de 60", "Mayores de 60")))
BASE <- BASE %>%
mutate(Ngestaciones = cut(`Número de gestaciones (incluyendo abortos, ectópicos y nacimientos vivos previos al ingreso al estudio)`,
breaks =c(-Inf, 3, Inf),
right = F,
labels = c("<= 2", ">2")))
#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
#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
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"
BASE <- BASE %>%
mutate(
Estudios_completo = case_when(
`TC TORAX` == "Si" &
`TC ABDOMEN` == "Si" &
( `TC PELVIS` == "Si" | `RMN PELVIS` == "Si" ) ~ "Si",
`PET-CT` == "Si" ~ "Si",
TRUE ~ "No"
)
)
BASE <- BASE %>%
mutate(Otros_estudios_img = ifelse(`RAYOS X TORAX` == "Si" | `Laparoscopia exploratoria` == "Si" | Cistoscopia == "Si" | `Ultrasonido transvaginal` == "Si" | `Ultrasonido de renal y de vías urinaria` == "Si" | `Otro estudio de extension` == "Si", "Si", "No"))
#names(BASE) 119:129
BASE <- BASE %>%
mutate(across(c(119:129), ~ recode(., "Checked" = "Si", "Unchecked" = "No")))
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 consulta2` <- 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`)
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"))
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)"] <- "Recibio cuidado soporte"
BASE$`Recibio cuidado soporte` <- factor(BASE$`Recibio cuidado soporte`, levels = c("Checked", "Unchecked"), labels = c("No", "Si"))
#names(BASE) 243, 244, 245, 246, 247, 248
BASE <- BASE %>%
mutate(across(c(243, 244, 245, 246, 247, 248), ~ recode(., "Checked" = "Si", "Unchecked" = "No")))
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 <- 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"))
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")
library(tidyr)
#Estudios imagenes adicional
BASE$Estudios_completo_adc <- ifelse(
BASE$Estudios_completo == "Si" |
(BASE$`RAYOS X TORAX` == "Si" |
BASE$`Ultrasonido transvaginal` == "Si" |
BASE$`Otro estudio de extension` == "Si"),
"Si",
"No"
) #391
#ECOG
BASE<- BASE %>%
mutate(
ECOG_reagrupado = case_when(
ECOG %in% c("ECOG0", "ECOG1") ~ "Funcional",
ECOG %in% c("ECOG2", "ECOG3") ~ "Limitado"
)
)
#NUMERO ESPECIALISTAS SEGUIMIENTO
BASE <- BASE %>%
mutate(
n_especialistas_seg =
(ifelse(`Especialista de seguimiento (choice=Ginecología oncológica)` == "Checked", 1, 0)) +
(ifelse(`Especialista de seguimiento (choice=Oncología clínica)` == "Checked", 1, 0)) +
(ifelse(`Especialista de seguimiento (choice=Oncología Radioterápica)` == "Checked", 1, 0)) +
(ifelse(`Especialista de seguimiento (choice=Paliativista)` == "Checked", 1, 0)) +
(ifelse(`Especialista de seguimiento (choice=Otro ¿Cuál?)` == "Checked", 1, 0)) #
)
BASE <- BASE %>%
mutate(
seg_imag2anos = `Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año` + `Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año`)
summary(BASE$`Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año`)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 1.000 1.000 1.657 2.000 8.000 30
BASE <- BASE %>%
mutate(
seg_img1ano = replace_na(`Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año`, 0),
seg_img1ano_cat = case_when(
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año` == 0 ~ "0 (sin seguimiento)",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año` == 1 ~ "1",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año` >= 2 & `Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año` <= 4 ~ "2-4",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año` > 4 ~ ">4",
TRUE ~ NA_character_
),
seg_img1ano_cat = factor(
seg_img1ano_cat,
levels = c("0 (sin seguimiento)", "1", "2-4", ">4")
)
)
BASE <- BASE %>%
mutate(
seg_img2ano = replace_na(`Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año`, 0),
seg_img2ano_cat = case_when(
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año` == 0 ~ "0 (sin seguimiento)",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año` == 1 ~ "1",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año` >= 2 & `Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año` <= 4 ~ "2-4",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año` > 4 ~ ">4",
TRUE ~ NA_character_
),
seg_img2ano_cat = factor(
seg_img2ano_cat,
levels = c("0 (sin seguimiento)", "1", "2-4", ">4")
)
)
BASE <- BASE %>%
mutate(
seg_img3ano = replace_na(`Frecuencia del seguimiento imagenológico: Número de imágenes en el Tercer Año`, 0),
seg_img3ano_cat = case_when(
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Tercer Año` == 0 ~ "0 (sin seguimiento)",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Tercer Año` >= 1 & `Frecuencia del seguimiento imagenológico: Número de imágenes en el Tercer Año` <= 2 ~ "1-2",
`Frecuencia del seguimiento imagenológico: Número de imágenes en el Tercer Año` > 2 ~ ">2",
TRUE ~ NA_character_
),
seg_img3ano_cat = factor(
seg_img3ano_cat,
levels = c("0 (sin seguimiento)", "1-2", ">2")
)
)
BASE <- BASE %>%
mutate(
seg_imag2anos = replace_na(seg_imag2anos, 0),
seg_imag2anos_cat = case_when(
seg_imag2anos == 0 ~ "0 (sin seguimiento)",
seg_imag2anos >= 1 & seg_imag2anos <= 3 ~ "1-3",
seg_imag2anos >= 4 & seg_imag2anos <= 8 ~ "4-8",
seg_imag2anos > 8 ~ ">8",
TRUE ~ NA_character_
),
# Ordenar factor
seg_imag2anos_cat = factor(
seg_imag2anos_cat,
levels = c("0 (sin seguimiento)", "1-3", "4-8", ">8")
)
)
varscat <- c("ingreso", "Edad_cat", "charls_cat", "charls_cat2", "ECOG", "ECOG_reagrupado",
"EST_clin_FIGO", "EDUCACION", "GRUPO_ET", "Estudios_completo", "Estudios_completo_adc", "gineco", "Valoración inicial especializada adicional (choice=Oncología clínica)", "Quimio-radiación concomitante", "Cirugía", "Recibio cuidado soporte","trat_complete2", "seg_onco_cli", "n_especialistas_seg", "seg_img1ano_cat", "seg_img2ano_cat", "seg_img3ano_cat", "seg_imag2anos_cat" )
BASE <- BASE %>%
mutate(
across(all_of(varscat), as.factor),
AFILIACION = as.factor(AFILIACION),
Procedencia = as.factor(Procedencia)
)
library(gtsummary)
tabla <- BASE %>%
select(
ingreso, Edad_cat, charls_cat, charls_cat2, ECOG, ECOG_reagrupado, EST_clin_FIGO,
EDUCACION, GRUPO_ET, Estudios_completo, Estudios_completo_adc, gineco,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
`Quimio-radiación concomitante`,
Cirugía,
`Recibio cuidado soporte`,
trat_complete2, seg_onco_cli, n_especialistas_seg, seg_img1ano_cat, seg_img2ano_cat, seg_img3ano_cat,seg_imag2anos_cat, AFILIACION, Procedencia
) %>%
tbl_strata(
strata = Procedencia,
.tbl_fun = ~ .x %>%
tbl_summary(
by = AFILIACION,
type = all_of(varscat) ~ "categorical",
statistic = all_categorical() ~ "{n} ({p}%)", # corregido
digits = all_continuous() ~ 1,
missing = "ifany",
missing_text = "Sin dato"
) %>%
add_p(
test = all_categorical() ~ "chisq.test" # corregido
) %>%
add_overall() %>%
modify_header(label ~ "**Variable**") %>%
bold_labels()
) %>%
modify_caption("**Tabla descriptiva estratificada por Afiliación y Procedencia**")
tabla
| Variable |
Colombia
|
Guatemala
|
||||||
|---|---|---|---|---|---|---|---|---|
| Overall N = 2541 |
Subsidiado/Público N = 1311 |
Contributivo/Privado N = 1231 |
p-value2 | Overall N = 2401 |
Subsidiado/Público N = 661 |
Contributivo/Privado N = 1741 |
p-value2 | |
| ingreso | 0.052 | 0.5 | ||||||
| sintomas | 161 (63%) | 91 (69%) | 70 (57%) | 207 (86%) | 59 (89%) | 148 (85%) | ||
| tamizaje | 93 (37%) | 40 (31%) | 53 (43%) | 33 (14%) | 7 (11%) | 26 (15%) | ||
| Edad_cat | 0.048 | 0.7 | ||||||
| Menores de 60 | 179 (70%) | 100 (76%) | 79 (64%) | 180 (75%) | 51 (77%) | 129 (74%) | ||
| Mayores de 60 | 75 (30%) | 31 (24%) | 44 (36%) | 60 (25%) | 15 (23%) | 45 (26%) | ||
| charls_cat | 0.073 | <0.001 | ||||||
| <=2 | 117 (46%) | 68 (52%) | 49 (40%) | 83 (35%) | 10 (15%) | 73 (42%) | ||
| 3-4 | 95 (37%) | 47 (36%) | 48 (39%) | 94 (39%) | 22 (33%) | 72 (41%) | ||
| >=5 | 42 (17%) | 16 (12%) | 26 (21%) | 63 (26%) | 34 (52%) | 29 (17%) | ||
| charls_cat2 | 0.081 | <0.001 | ||||||
| <5 | 212 (83%) | 115 (88%) | 97 (79%) | 177 (74%) | 32 (48%) | 145 (83%) | ||
| >=5 | 42 (17%) | 16 (12%) | 26 (21%) | 63 (26%) | 34 (52%) | 29 (17%) | ||
| ECOG | <0.001 | 0.061 | ||||||
| ECOG0 | 147 (59%) | 102 (81%) | 45 (37%) | 34 (14%) | 14 (21%) | 20 (11%) | ||
| ECOG1 | 92 (37%) | 18 (14%) | 74 (61%) | 148 (62%) | 41 (62%) | 107 (61%) | ||
| ECOG2 | 9 (3.6%) | 6 (4.8%) | 3 (2.5%) | 54 (23%) | 9 (14%) | 45 (26%) | ||
| ECOG3 | 0 (0%) | 0 (0%) | 0 (0%) | 4 (1.7%) | 2 (3.0%) | 2 (1.1%) | ||
| SIN DATO | 0 (0%) | 0 (0%) | 0 (0%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| Sin dato | 6 | 5 | 1 | |||||
| ECOG_reagrupado | 0.5 | 0.13 | ||||||
| Funcional | 239 (96%) | 120 (95%) | 119 (98%) | 182 (76%) | 55 (83%) | 127 (73%) | ||
| Limitado | 9 (3.6%) | 6 (4.8%) | 3 (2.5%) | 58 (24%) | 11 (17%) | 47 (27%) | ||
| Sin dato | 6 | 5 | 1 | |||||
| EST_clin_FIGO | 0.3 | 0.2 | ||||||
| IB3,II,IIA | 17 (6.7%) | 6 (4.6%) | 11 (8.9%) | 44 (18%) | 8 (12%) | 36 (21%) | ||
| IIB, III, IIIA, IIIB, IIIC, IVA | 237 (93%) | 125 (95%) | 112 (91%) | 196 (82%) | 58 (88%) | 138 (79%) | ||
| EDUCACION | <0.001 | <0.001 | ||||||
| Primaria < | 47 (30%) | 22 (31%) | 25 (30%) | 97 (42%) | 40 (62%) | 57 (34%) | ||
| Secundaria + tecnico | 85 (54%) | 49 (68%) | 36 (43%) | 124 (53%) | 25 (38%) | 99 (59%) | ||
| Profesional + posgrado | 24 (15%) | 1 (1.4%) | 23 (27%) | 12 (5.2%) | 0 (0%) | 12 (7.1%) | ||
| Sin dato | 98 | 59 | 39 | 7 | 1 | 6 | ||
| GRUPO_ET | 0.2 | <0.001 | ||||||
| Indigena | 3 (1.2%) | 0 (0%) | 3 (2.4%) | 32 (13%) | 21 (32%) | 11 (6.3%) | ||
| Sin etnia especifica | 251 (99%) | 131 (100%) | 120 (98%) | 208 (87%) | 45 (68%) | 163 (94%) | ||
| Estudios_completo | ||||||||
| No | 254 (100%) | 131 (100%) | 123 (100%) | 240 (100%) | 66 (100%) | 174 (100%) | ||
| Estudios_completo_adc | 0.020 | <0.001 | ||||||
| No | 115 (45%) | 69 (53%) | 46 (37%) | 195 (81%) | 30 (45%) | 165 (95%) | ||
| Si | 139 (55%) | 62 (47%) | 77 (63%) | 45 (19%) | 36 (55%) | 9 (5.2%) | ||
| gineco | 0.024 | 0.8 | ||||||
| -gineco | 54 (21%) | 20 (15%) | 34 (28%) | 41 (17%) | 10 (15%) | 31 (18%) | ||
| +gineco | 200 (79%) | 111 (85%) | 89 (72%) | 199 (83%) | 56 (85%) | 143 (82%) | ||
| Valoración inicial especializada adicional (choice=Oncología clínica) | <0.001 | 0.8 | ||||||
| Checked | 163 (64%) | 105 (80%) | 58 (47%) | 193 (80%) | 52 (79%) | 141 (81%) | ||
| Unchecked | 91 (36%) | 26 (20%) | 65 (53%) | 47 (20%) | 14 (21%) | 33 (19%) | ||
| Quimio-radiación concomitante | 0.7 | 0.5 | ||||||
| Checked | 239 (94%) | 122 (93%) | 117 (95%) | 236 (98%) | 66 (100%) | 170 (98%) | ||
| Unchecked | 15 (5.9%) | 9 (6.9%) | 6 (4.9%) | 4 (1.7%) | 0 (0%) | 4 (2.3%) | ||
| Cirugía | 0.007 | 0.9 | ||||||
| Checked | 20 (7.9%) | 4 (3.1%) | 16 (13%) | 6 (2.5%) | 1 (1.5%) | 5 (2.9%) | ||
| Unchecked | 234 (92%) | 127 (97%) | 107 (87%) | 234 (98%) | 65 (98%) | 169 (97%) | ||
| Recibio cuidado soporte | <0.001 | >0.9 | ||||||
| No | 68 (27%) | 52 (40%) | 16 (13%) | 210 (88%) | 57 (86%) | 153 (88%) | ||
| Si | 186 (73%) | 79 (60%) | 107 (87%) | 30 (13%) | 9 (14%) | 21 (12%) | ||
| trat_complete2 | 0.10 | 0.013 | ||||||
| -compl | 52 (20%) | 21 (16%) | 31 (25%) | 62 (26%) | 9 (14%) | 53 (30%) | ||
| +compl | 202 (80%) | 110 (84%) | 92 (75%) | 178 (74%) | 57 (86%) | 121 (70%) | ||
| seg_onco_cli | 0.4 | 0.058 | ||||||
| -seg_onco | 63 (25%) | 29 (22%) | 34 (28%) | 222 (93%) | 65 (98%) | 157 (90%) | ||
| +seg_onco | 191 (75%) | 102 (78%) | 89 (72%) | 18 (7.5%) | 1 (1.5%) | 17 (9.8%) | ||
| n_especialistas_seg | <0.001 | 0.048 | ||||||
| 0 | 16 (6.3%) | 3 (2.3%) | 13 (11%) | 14 (5.8%) | 0 (0%) | 14 (8.0%) | ||
| 1 | 40 (16%) | 20 (15%) | 20 (16%) | 224 (93%) | 65 (98%) | 159 (91%) | ||
| 2 | 77 (30%) | 30 (23%) | 47 (38%) | 2 (0.8%) | 1 (1.5%) | 1 (0.6%) | ||
| 3 | 75 (30%) | 47 (36%) | 28 (23%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| 4 | 41 (16%) | 30 (23%) | 11 (8.9%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| 5 | 5 (2.0%) | 1 (0.8%) | 4 (3.3%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| seg_img1ano_cat | <0.001 | <0.001 | ||||||
| 0 (sin seguimiento) | 15 (6.4%) | 8 (6.1%) | 7 (6.7%) | 85 (37%) | 43 (65%) | 42 (26%) | ||
| 1 | 80 (34%) | 32 (24%) | 48 (46%) | 110 (48%) | 23 (35%) | 87 (54%) | ||
| 2-4 | 101 (43%) | 52 (40%) | 49 (47%) | 33 (14%) | 0 (0%) | 33 (20%) | ||
| >4 | 40 (17%) | 39 (30%) | 1 (1.0%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| Sin dato | 18 | 0 | 18 | 12 | 0 | 12 | ||
| seg_img2ano_cat | <0.001 | <0.001 | ||||||
| 0 (sin seguimiento) | 59 (37%) | 43 (37%) | 16 (36%) | 125 (56%) | 51 (77%) | 74 (47%) | ||
| 1 | 26 (16%) | 9 (7.8%) | 17 (39%) | 73 (33%) | 14 (21%) | 59 (38%) | ||
| 2-4 | 61 (38%) | 50 (43%) | 11 (25%) | 25 (11%) | 1 (1.5%) | 24 (15%) | ||
| >4 | 14 (8.8%) | 14 (12%) | 0 (0%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| Sin dato | 94 | 15 | 79 | 17 | 0 | 17 | ||
| seg_img3ano_cat | 0.060 | <0.001 | ||||||
| 0 (sin seguimiento) | 90 (67%) | 78 (67%) | 12 (63%) | 140 (65%) | 58 (88%) | 82 (55%) | ||
| 1-2 | 21 (16%) | 15 (13%) | 6 (32%) | 70 (32%) | 8 (12%) | 62 (41%) | ||
| >2 | 24 (18%) | 23 (20%) | 1 (5.3%) | 6 (2.8%) | 0 (0%) | 6 (4.0%) | ||
| Sin dato | 119 | 15 | 104 | 24 | 0 | 24 | ||
| seg_imag2anos_cat | <0.001 | <0.001 | ||||||
| 0 (sin seguimiento) | 103 (41%) | 21 (16%) | 82 (67%) | 91 (38%) | 36 (55%) | 55 (32%) | ||
| 1-3 | 77 (30%) | 44 (34%) | 33 (27%) | 125 (52%) | 30 (45%) | 95 (55%) | ||
| 4-8 | 42 (17%) | 34 (26%) | 8 (6.5%) | 24 (10%) | 0 (0%) | 24 (14%) | ||
| >8 | 32 (13%) | 32 (24%) | 0 (0%) | 0 (0%) | 0 (0%) | 0 (0%) | ||
| 1 n (%) | ||||||||
| 2 Pearson’s Chi-squared test | ||||||||
colnames(BASE)[colnames(BASE) =="Frecuencia de seguimiento por Oncología Clínica: Número de visitas en el Primer Año"] <- "Seguimiento Onco clínica 1 año"
colnames(BASE)[colnames(BASE) =="Frecuencia de seguimiento por Ginecología Oncológica: Número de visitas en el Primer Año"] <- "Seguimiento Gineco 1 año"
colnames(BASE)[colnames(BASE) =="Frecuencia de seguimiento por Radioterapia: Número de visitas en el Primer Año"] <- "Seguimiento Radio 1 año"
colnames(BASE)[colnames(BASE) =="Frecuencia de seguimiento por Cuidados Paliativos: Número de visitas en el Primer Año"] <- "Seguimiento Cuidado paliativo 1 año"
colnames(BASE)[colnames(BASE) =="Frecuencia del seguimiento imagenológico: Número de imágenes en el Primer Año"] <- "Seguimiento imagenes 1 año"
colnames(BASE)[colnames(BASE) =="Frecuencia del seguimiento imagenológico: Número de imágenes en el Segundo Año"] <- "Seguimiento imagenes 2 año"
colnames(BASE)[colnames(BASE) =="Frecuencia del seguimiento imagenológico: Número de imágenes en el Tercer Año"] <- "Seguimiento imagenes 3 año o mas"
colnames(BASE)[colnames(BASE) =="Frecuencia seguimiento citológico: Número de citologías Primer Año de seguimiento"] <- "Seguimiento citologia 1 año"
colnames(BASE)[colnames(BASE) =="Frecuencia seguimiento citológico: Número de citologías Segundo Año de seguimiento"] <- "Seguimiento citologia 2 año"
colnames(BASE)[colnames(BASE) =="Frecuencia seguimiento citológico: Número de citologías Tercer Año de seguimiento"] <- "Seguimiento citologia 3 año o mas"
varsnum <- c("Número de semanas prescritas (Primera línea)", "Número de semanas recibidas (Primera línea)", "Número de sesiones prescriptas", "Numero de Grays (Gy) prescritos", "Numero de Grays (Gy) prescritos por cada sesión", "Número de sesiones prescritas", "Seguimiento Onco clínica 1 año", "Seguimiento Gineco 1 año", "Seguimiento Radio 1 año", "Seguimiento Cuidado paliativo 1 año", "Seguimiento imagenes 1 año", "Seguimiento imagenes 2 año", "Seguimiento imagenes 3 año o mas", "Seguimiento citologia 1 año", "Seguimiento citologia 2 año", "Seguimiento citologia 3 año o mas")
tabla_estratificada <- BASE %>%
select(
`Número de semanas prescritas (Primera línea)`,
`Número de semanas recibidas (Primera línea)`,
`Número de sesiones prescriptas`,
`Numero de Grays (Gy) prescritos`,
`Numero de Grays (Gy) prescritos por cada sesión`,
`Número de sesiones prescritas`,
`Seguimiento Onco clínica 1 año`,
`Seguimiento Gineco 1 año`,
`Seguimiento Radio 1 año`,
`Seguimiento Cuidado paliativo 1 año`,
`Seguimiento imagenes 1 año`,
`Seguimiento imagenes 2 año`,
`Seguimiento imagenes 3 año o mas`,
`Seguimiento citologia 1 año`,
`Seguimiento citologia 2 año`,
`Seguimiento citologia 3 año o mas`,
Procedencia,
AFILIACION
) %>%
tbl_strata(
strata = Procedencia, # variable que genera los estratos
.tbl_fun = ~ .x %>%
tbl_summary(
by = AFILIACION,
type = all_of(varsnum) ~ "continuous",
statistic = all_continuous() ~ "{mean} ({sd})",
digits = all_continuous() ~ 1,
missing = "ifany",
missing_text = "Sin dato"
) %>%
add_p(
test = all_continuous() ~ "kruskal.test"
) %>%
add_overall() %>%
modify_header(label ~ "**Variable**") %>%
bold_labels()
) %>%
modify_caption("**Tabla descriptiva estratificada por Afiliación y País**")
tabla_estratificada
| Variable |
Colombia
|
Guatemala
|
||||||
|---|---|---|---|---|---|---|---|---|
| Overall N = 2541 |
Subsidiado/Público N = 1311 |
Contributivo/Privado N = 1231 |
p-value2 | Overall N = 2401 |
Subsidiado/Público N = 661 |
Contributivo/Privado N = 1741 |
p-value2 | |
| Número de semanas prescritas (Primera línea) | 5.9 (0.7) | 5.9 (0.8) | 6.0 (0.4) | 0.075 | 4.9 (0.4) | 4.8 (0.5) | 4.9 (0.3) | 0.3 |
| Sin dato | 13 | 8 | 5 | 4 | 0 | 4 | ||
| Número de semanas recibidas (Primera línea) | 5.7 (0.9) | 5.7 (1.0) | 5.7 (0.8) | 0.6 | 4.8 (0.5) | 4.8 (0.4) | 4.8 (0.5) | 0.7 |
| Sin dato | 12 | 8 | 4 | 4 | 0 | 4 | ||
| Número de sesiones prescriptas | 26.3 (2.5) | 26.2 (1.1) | 26.4 (3.5) | <0.001 | 24.9 (1.3) | 25.0 (0.0) | 24.9 (1.6) | 0.8 |
| Sin dato | 4 | 2 | 2 | 3 | 0 | 3 | ||
| Numero de Grays (Gy) prescritos | 57.7 (69.2) | 53.3 (3.3) | 62.5 (99.8) | 0.013 | 50.2 (1.0) | 50.2 (1.4) | 50.2 (0.8) | 0.2 |
| Sin dato | 4 | 1 | 3 | 3 | 0 | 3 | ||
| Numero de Grays (Gy) prescritos por cada sesión | 13.4 (63.5) | 18.3 (86.4) | 7.9 (8.4) | 0.13 | 8.2 (2.4) | 8.9 (1.6) | 7.9 (2.6) | <0.001 |
| Sin dato | 14 | 3 | 11 | 45 | 4 | 41 | ||
| Número de sesiones prescritas | 4.0 (0.6) | 3.9 (0.6) | 4.1 (0.6) | 0.4 | 3.0 (0.8) | 3.0 (0.1) | 3.0 (1.0) | 0.4 |
| Sin dato | 13 | 3 | 10 | 45 | 4 | 41 | ||
| Seguimiento Onco clínica 1 año | 3.3 (2.1) | 4.0 (2.2) | 2.5 (1.7) | <0.001 | 3.7 (2.8) | 3.0 (NA) | 3.8 (2.9) | >0.9 |
| Sin dato | 65 | 29 | 36 | 222 | 65 | 157 | ||
| Seguimiento Gineco 1 año | 2.6 (1.3) | 2.9 (1.4) | 2.2 (1.3) | <0.001 | 3.5 (0.7) | 3.9 (0.3) | 3.3 (0.8) | <0.001 |
| Sin dato | 51 | 14 | 37 | 35 | 1 | 34 | ||
| Seguimiento Radio 1 año | 4.0 (2.6) | 4.6 (2.1) | 2.2 (3.1) | <0.001 | 2.0 (1.4) | NA (NA) | 2.0 (1.4) | |
| Sin dato | 176 | 71 | 105 | 238 | 66 | 172 | ||
| Seguimiento Cuidado paliativo 1 año | 2.8 (2.6) | 2.4 (1.5) | 3.4 (3.4) | 0.4 | NA (NA) | NA (NA) | NA (NA) | |
| Sin dato | 193 | 98 | 95 | 240 | 66 | 174 | ||
| Seguimiento imagenes 1 año | 2.4 (1.8) | 3.1 (2.0) | 1.7 (1.0) | <0.001 | 0.8 (0.8) | 0.3 (0.5) | 1.0 (0.9) | <0.001 |
| Sin dato | 18 | 0 | 18 | 12 | 0 | 12 | ||
| Seguimiento imagenes 2 año | 1.7 (1.8) | 2.0 (1.9) | 0.9 (0.9) | 0.005 | 0.6 (0.8) | 0.2 (0.5) | 0.8 (0.9) | <0.001 |
| Sin dato | 94 | 15 | 79 | 17 | 0 | 17 | ||
| Seguimiento imagenes 3 año o mas | 0.9 (1.3) | 0.9 (1.4) | 0.7 (1.1) | 0.9 | 0.5 (0.8) | 0.1 (0.4) | 0.6 (0.8) | <0.001 |
| Sin dato | 119 | 15 | 104 | 24 | 0 | 24 | ||
| Seguimiento citologia 1 año | 0.9 (0.8) | 1.2 (0.8) | 0.5 (0.6) | <0.001 | 1.7 (1.0) | 1.0 (0.2) | 2.0 (1.0) | <0.001 |
| Sin dato | 53 | 2 | 51 | 10 | 0 | 10 | ||
| Seguimiento citologia 2 año | 0.9 (0.8) | 1.1 (0.8) | 0.5 (0.6) | <0.001 | 1.5 (1.0) | 0.9 (0.5) | 1.7 (1.1) | <0.001 |
| Sin dato | 120 | 30 | 90 | 16 | 0 | 16 | ||
| Seguimiento citologia 3 año o mas | 0.5 (0.7) | 0.5 (0.7) | 0.4 (0.5) | 0.9 | 0.7 (0.9) | 0.3 (0.5) | 0.9 (1.0) | <0.001 |
| Sin dato | 151 | 42 | 109 | 24 | 0 | 24 | ||
| 1 Mean (SD) | ||||||||
| 2 Kruskal-Wallis rank sum test | ||||||||
Indice charlson
myVars <- c("Número de semanas prescritas (Primera línea)", "Número de semanas recibidas (Primera línea)", "Número de sesiones prescriptas", "Número de sesiones prescritas", "Numero de Grays (Gy) prescritos", "Estudios_completo", "Estudios_completo_adc", "Recibio cuidado soporte", "seg_imag2anos_cat")
catVars <- c("Estudios_completo", "Estudios_completo_adc", "Recibio cuidado soporte", "seg_imag2anos_cat")
library(tableone)
tab <- CreateTableOne(vars = myVars, factorVars= catVars, data = BASE, includeNA = F, addOverall = T, testNonNormal = T, strata = "charls_cat2")
table1 <- as.data.frame(print(tab, showAllLevels= TRUE, printToggle = FALSE, noSpaces = TRUE))
limpiar_nombres <- function(nombres) {
nombres %>%
gsub("\\(X.*?\\)", "", .) %>% # Quitar (X%)
gsub("X", "", .) %>% # Quitar X sueltas
gsub("\\.{1,}", " ", .) %>% # Puntos a espacios
gsub("\\s+", " ", .) %>% # Múltiples espacios a uno
trimws(.) # Quitar espacios inicio/final
}
rownames(table1) <- limpiar_nombres(rownames(table1))
#library(openxlsx)
#write.xlsx(table1, "tabla1.xlsx", rowNames = TRUE, colnames = TRUE )
library(tibble)
library(reactable)
tabla_reactable <- table1 %>%
rownames_to_column("Variable") %>%
reactable(
pagination = FALSE,
defaultPageSize = nrow(table1), # Alternativa: especificar número exacto de filas
columns = list(
Variable = colDef(
style = list(backgroundColor = "#2C3E50", color = "white", fontWeight = "bold"),
width = 180, # Un poco más angosta
align = "left"
)
),
theme = reactableTheme(
headerStyle = list(
backgroundColor = "#34495E",
color = "white",
fontWeight = "bold",
fontSize = "13px"
),
cellStyle = list(fontSize = "11px"), # Texto más pequeño para que quepa mejor
stripedColor = "#F8F9FA"
),
striped = TRUE,
highlight = TRUE,
bordered = TRUE,
compact = TRUE,
wrap = FALSE, # No envolver texto
resizable = TRUE # Columnas redimensionables
)
tabla_reactable
Estadio
BASE$EST_clin_FIGO2 <- factor(
dplyr::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." = "I",
"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." = "II",
"IIA: Tumor limitado a los dos tercios superiores de la vagina." = "II",
"IIB: Tumor diseminado a región parametrial sin llegar a la pared pélvica." = "II",
"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." = "III",
"IIIA: Tumor compromete tercio inferior de la vagina, no ha crecido hasta interior de la pared pélvica." = "III",
"IIIB: Tumor ha crecido dentro de la pared pélvica y/o afecta un riñón." = "III",
"IIIC: Tumor compromete ganglios linfáticos regionales (pelvis y paraaórticos)." = "III",
"IVA: Cáncer se ha diseminado a vejiga o recto, pero no hay metástasis a distancia." = "IV"
),
levels = c("I", "II", "III", "IV")
)
tab2 <- CreateTableOne(vars = myVars, factorVars= catVars, data = BASE, includeNA = F, addOverall = T, testNonNormal = T, strata = "EST_clin_FIGO2")
table2 <- as.data.frame(print(tab2, showAllLevels= TRUE, printToggle = FALSE, noSpaces = TRUE))
rownames(table2) <- limpiar_nombres(rownames(table2))
#library(openxlsx)
#write.xlsx(table1, "tabla1.xlsx", rowNames = TRUE, colnames = TRUE )
tabla_reactable2 <- table2 %>%
rownames_to_column("Variable") %>%
reactable(
pagination = FALSE,
defaultPageSize = nrow(table2), # Alternativa: especificar número exacto de filas
columns = list(
Variable = colDef(
style = list(backgroundColor = "#2C3E50", color = "white", fontWeight = "bold"),
width = 180, # Un poco más angosta
align = "left"
)
),
theme = reactableTheme(
headerStyle = list(
backgroundColor = "#34495E",
color = "white",
fontWeight = "bold",
fontSize = "13px"
),
cellStyle = list(fontSize = "11px"), # Texto más pequeño para que quepa mejor
stripedColor = "#F8F9FA"
),
striped = TRUE,
highlight = TRUE,
bordered = TRUE,
compact = TRUE,
wrap = FALSE, # No envolver texto
resizable = TRUE # Columnas redimensionables
)
tabla_reactable2
Edad
tab3 <- CreateTableOne(vars = myVars, factorVars= catVars, data = BASE, includeNA = F, addOverall = T, testNonNormal = T, strata = "Edad_cat")
table3 <- as.data.frame(print(tab3, showAllLevels= TRUE, printToggle = FALSE, noSpaces = TRUE))
rownames(table3) <- limpiar_nombres(rownames(table3))
#library(openxlsx)
#write.xlsx(table1, "tabla1.xlsx", rowNames = TRUE, colnames = TRUE )
tabla_reactable3 <- table3 %>%
rownames_to_column("Variable") %>%
reactable(
pagination = FALSE,
defaultPageSize = nrow(table3), # Alternativa: especificar número exacto de filas
columns = list(
Variable = colDef(
style = list(backgroundColor = "#2C3E50", color = "white", fontWeight = "bold"),
width = 180, # Un poco más angosta
align = "left"
)
),
theme = reactableTheme(
headerStyle = list(
backgroundColor = "#34495E",
color = "white",
fontWeight = "bold",
fontSize = "13px"
),
cellStyle = list(fontSize = "11px"), # Texto más pequeño para que quepa mejor
stripedColor = "#F8F9FA"
),
striped = TRUE,
highlight = TRUE,
bordered = TRUE,
compact = TRUE,
wrap = FALSE, # No envolver texto
resizable = TRUE # Columnas redimensionables
)
tabla_reactable3
print("Cirugía"); table(BASE$cirugia);
## [1] "Cirugía"
##
## -cir +cir
## 469 25
print("Quimio"); table(BASE$quimio); print("Radioterapia"); table(BASE$radio);
## [1] "Quimio"
##
## -quim +quim
## 17 477
## [1] "Radioterapia"
##
## -rad +rad
## 6 488
print("Cuidado de soporte"); table(BASE$`Cuidado soporte`)
## [1] "Cuidado de soporte"
##
## Unchecked
## 494
Se revisan las intersecciones
library(limma)
BASE_VENN2<- BASE %>% select(cirugia, quimio, radio)
BASE_VENN2 <- BASE_VENN2 %>%
mutate(
cirugia = recode(cirugia, "+cir" = 1, "-cir" = 0),
quimio = recode(quimio, "+quim" = 1, "-quim" = 0),
radio = recode(radio, "+rad" = 1, "-rad" = 0)
)
PLOT_venn2 <- vennCounts(BASE_VENN2)
vennDiagram(PLOT_venn2, cex = 1, circle.col = c("#8B7E66","#CDAA7D", "#FFD39B", "black"),counts.col = "black", show.include = T)
Cruce de variables país - subsistema de salud.
Ajuste del gráfico incluyendo el n por páis y susbsistema de salud
n_por_grupo <- BASE %>%
filter(!is.na(fall) & !is.na(ECOG_reagrupado)) %>%
group_by(fall, ECOG_reagrupado) %>%
summarise(n = n(), .groups = "drop")
n_por_pais <- BASE %>%
filter(!is.na(fall)) %>%
group_by(fall) %>%
summarise(n_pais = n(), .groups = "drop")
df_proporciones2 <- df_proporciones %>%
left_join(n_por_grupo, by = c("fall", "ECOG_reagrupado")) %>%
left_join(n_por_pais, by = "fall")
ggplot(df_proporciones2, aes(x = recurso, y = proporcion, fill = fall)) +
geom_col(position = position_dodge(0.9)) +
geom_text(
aes(label = scales::percent(proporcion, accuracy = 1)),
position = position_dodge(0.9),
vjust = -0.3,
size = 3
) +
facet_grid(
fall ~ ECOG_reagrupado,
labeller = labeller(
fall = function(x) {
sapply(x, function(pais) {
n_val <- n_por_pais %>%
filter(fall == pais) %>%
pull(n_pais)
if(length(n_val) > 0) paste0(pais, "\n(n=", n_val, ")") # CAMBIO: \n para salto de línea
else pais
})
},
ECOG_reagrupado = function(x) {
sapply(x, function(afil) {
n_vals <- n_por_grupo %>%
filter(ECOG_reagrupado == afil) %>%
group_by(ECOG_reagrupado) %>%
summarise(n_total = sum(n), .groups = "drop") %>% # CAMBIO: suma total por sistema
pull(n_total)
if(length(n_vals) > 0) {
paste0(afil, "\n(n=", n_vals, ")") # CAMBIO: total en vez de fracción
} else {
afil
}
})
}
)
) +
scale_y_continuous(
labels = scales::percent_format(),
limits = c(0, 1.05),
expand = expansion(mult = c(0, 0.05))
) +
scale_fill_manual(
values = c(
"+fall" = "#1F78B4",
"-fall" = "#E31A1C"
)
) +
labs(
x = NULL,
y = "Proporción de pacientes (%)",
fill = "Estado vital",
title = "Acceso a recursos por estado vital y funcional"
) +
theme_minimal(base_size = 11) +
theme(
axis.text.x = element_text(angle = 90, hjust = 1, vjust = 1, size = 9, face = "bold"),
strip.text = element_text(face = "bold", size = 10),
strip.text.y = element_text(size = 9), # AÑADIDO: Reducir tamaño para que quepa mejor
legend.position = "bottom",
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.caption = element_text(hjust = 0.5, face = "italic", size = 8)
)
Comorbilidad - fallceimiento
df_proporciones3 <- BASE %>%
select(
fall,
charls_cat2,
ingreso,
gineco,
Estudios_completo,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
quim_rad,
`Recibio cuidado soporte`,
trat_complete2,
seg_img2ano_cat
) %>%
# Convertir SOLO los recursos a formato largo
pivot_longer(
cols = c(
ingreso,
gineco,
Estudios_completo,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
quim_rad,
`Recibio cuidado soporte`,
trat_complete2,
seg_img2ano_cat
),
names_to = "recurso",
values_to = "tiene_recurso"
) %>%
# Eliminar NAs relevantes
filter(!is.na(tiene_recurso),
!is.na(fall),
!is.na(charls_cat2)) %>%
mutate(tiene_recurso = as.character(tiene_recurso)) %>%
# Calcular proporciones
group_by(fall, charls_cat2, recurso) %>%
summarise(
n_con_recurso = sum(
tiene_recurso %in% c("tamizaje", "Si", "+compl", "+seg_onco", "Checked", "+gineco", "2-4", ">4"),
na.rm = TRUE
),
n_total = n(),
proporcion = n_con_recurso / n_total,
.groups = "drop"
) %>%
# Etiquetas bonitas
mutate(
recurso = recode(recurso,
"ingreso" = "Tamizaje",
"Estudios_completo" = "Estudios img.completos",
"Recibio cuidado soporte" = "Cuidado soporte",
"quim_rad" = "Quimio radiación",
"gineco" = "Val. ini. gineco",
"Valoración inicial especializada adicional (choice=Oncología clínica)" = "Val. ad. onco clínica",
"trat_complete2" = "Trat. completo",
"seg_img2ano_cat" = "Seg bienal img"
)
) %>%
# Orden deseado
mutate(
recurso = factor(recurso, levels = c(
"Tamizaje",
"Val. ini. gineco",
"Val. ad. onco clínica",
"Estudios img.completos",
"Quimio radiación",
"Cuidado soporte",
"Trat. completo",
"Seg bienal img"
))
)
# Gráfico
ggplot(df_proporciones3, aes(x = recurso, y = proporcion, fill = fall)) +
geom_col(position = position_dodge(0.9)) +
geom_text(
aes(label = scales::percent(proporcion, accuracy = 1)),
position = position_dodge(0.9),
vjust = -0.3,
size = 3
) +
facet_grid(fall ~ charls_cat2) +
scale_y_continuous(
labels = scales::percent_format(),
limits = c(0, 1.05),
expand = expansion(mult = c(0, 0.05))
) +
scale_fill_manual(
values = c(
"+fall" = "#1F78B4",
"-fall" = "#E31A1C"
)
) +
labs(
x = NULL,
y = "Proporción de pacientes (%)",
fill = "Estado vital",
title = "Acceso a recursos por estado vital y comorbilidad"
) +
theme_minimal(base_size = 11) +
theme(
axis.text.x = element_text(angle = 90, hjust = 1, vjust = 1, size = 9),
strip.text = element_text(face = "bold", size = 10),
legend.position = "bottom",
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.5, face = "bold")
)
Edad
df_proporciones4 <- BASE %>%
select(
fall,
Edad_cat,
ingreso,
gineco,
Estudios_completo,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
quim_rad,
`Recibio cuidado soporte`,
trat_complete2,
seg_img2ano_cat
) %>%
# Convertir SOLO los recursos a formato largo
pivot_longer(
cols = c(
ingreso,
gineco,
Estudios_completo,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
quim_rad,
`Recibio cuidado soporte`,
trat_complete2,
seg_img2ano_cat
),
names_to = "recurso",
values_to = "tiene_recurso"
) %>%
# Eliminar NAs relevantes
filter(!is.na(tiene_recurso),
!is.na(fall),
!is.na(Edad_cat)) %>%
mutate(tiene_recurso = as.character(tiene_recurso)) %>%
# Calcular proporciones
group_by(fall, Edad_cat, recurso) %>%
summarise(
n_con_recurso = sum(
tiene_recurso %in% c("tamizaje", "Si", "+compl", "+seg_onco", "Checked", "+gineco", "2-4", ">4"),
na.rm = TRUE
),
n_total = n(),
proporcion = n_con_recurso / n_total,
.groups = "drop"
) %>%
# Etiquetas bonitas
mutate(
recurso = recode(recurso,
"ingreso" = "Tamizaje",
"Estudios_completo" = "Estudios img.completos",
"Recibio cuidado soporte" = "Cuidado soporte",
"quim_rad" = "Quimio radiación",
"gineco" = "Val. ini. gineco",
"Valoración inicial especializada adicional (choice=Oncología clínica)" = "Val. ad. onco clínica",
"trat_complete2" = "Trat. completo",
"seg_img2ano_cat" = "Seg bienal img"
)
) %>%
# Orden deseado
mutate(
recurso = factor(recurso, levels = c(
"Tamizaje",
"Val. ini. gineco",
"Val. ad. onco clínica",
"Estudios img.completos",
"Quimio radiación",
"Cuidado soporte",
"Trat. completo",
"Seg bienal img"
))
)
# Gráfico
ggplot(df_proporciones4, aes(x = recurso, y = proporcion, fill = fall)) +
geom_col(position = position_dodge(0.9)) +
geom_text(
aes(label = scales::percent(proporcion, accuracy = 1)),
position = position_dodge(0.9),
vjust = -0.3,
size = 3
) +
facet_grid(fall ~ Edad_cat) +
scale_y_continuous(
labels = scales::percent_format(),
limits = c(0, 1.05),
expand = expansion(mult = c(0, 0.05))
) +
scale_fill_manual(
values = c(
"+fall" = "#1F78B4",
"-fall" = "#E31A1C"
)
) +
labs(
x = NULL,
y = "Proporción de pacientes (%)",
fill = "Estado vital",
title = "Acceso a recursos por estado vital y comorbilidad"
) +
theme_minimal(base_size = 11) +
theme(
axis.text.x = element_text(angle = 90, hjust = 1, vjust = 1, size = 9),
strip.text = element_text(face = "bold", size = 10),
legend.position = "bottom",
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.5, face = "bold")
)
Estadios
df_proporciones5 <- BASE %>%
select(
fall,
EST_clin_FIGO2,
ingreso,
gineco,
Estudios_completo,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
quim_rad,
`Recibio cuidado soporte`,
trat_complete2,
seg_img2ano_cat
) %>%
# Convertir SOLO los recursos a formato largo
pivot_longer(
cols = c(
ingreso,
gineco,
Estudios_completo,
`Valoración inicial especializada adicional (choice=Oncología clínica)`,
quim_rad,
`Recibio cuidado soporte`,
trat_complete2,
seg_img2ano_cat
),
names_to = "recurso",
values_to = "tiene_recurso"
) %>%
# Eliminar NAs relevantes
filter(!is.na(tiene_recurso),
!is.na(fall),
!is.na(EST_clin_FIGO2)) %>%
mutate(tiene_recurso = as.character(tiene_recurso)) %>%
# Calcular proporciones
group_by(fall, EST_clin_FIGO2, recurso) %>%
summarise(
n_con_recurso = sum(
tiene_recurso %in% c("tamizaje", "Si", "+compl", "+seg_onco", "Checked", "+gineco", "2-4", ">4"),
na.rm = TRUE
),
n_total = n(),
proporcion = n_con_recurso / n_total,
.groups = "drop"
) %>%
# Etiquetas bonitas
mutate(
recurso = recode(recurso,
"ingreso" = "Tamizaje",
"Estudios_completo" = "Estudios img.completos",
"Recibio cuidado soporte" = "Cuidado soporte",
"quim_rad" = "Quimio radiación",
"gineco" = "Val. ini. gineco",
"Valoración inicial especializada adicional (choice=Oncología clínica)" = "Val. ad. onco clínica",
"trat_complete2" = "Trat. completo",
"seg_img2ano_cat" = "Seg bienal img"
)
) %>%
# Orden deseado
mutate(
recurso = factor(recurso, levels = c(
"Tamizaje",
"Val. ini. gineco",
"Val. ad. onco clínica",
"Estudios img.completos",
"Quimio radiación",
"Cuidado soporte",
"Trat. completo",
"Seg bienal img"
))
)
# Gráfico
ggplot(df_proporciones5, aes(x = recurso, y = proporcion, fill = fall)) +
geom_col(position = position_dodge(0.9)) +
geom_text(
aes(label = scales::percent(proporcion, accuracy = 1)),
position = position_dodge(0.9),
vjust = -0.3,
size = 3
) +
facet_grid(fall ~ EST_clin_FIGO2) +
scale_y_continuous(
labels = scales::percent_format(),
limits = c(0, 1.05),
expand = expansion(mult = c(0, 0.05))
) +
scale_fill_manual(
values = c(
"+fall" = "#1F78B4",
"-fall" = "#E31A1C"
)
) +
labs(
x = NULL,
y = "Proporción de pacientes (%)",
fill = "Estado vital",
title = "Acceso a recursos por estado vital y estadio"
) +
theme_minimal(base_size = 11) +
theme(
axis.text.x = element_text(angle = 90, hjust = 1, vjust = 1, size = 9),
strip.text = element_text(face = "bold", size = 10),
legend.position = "bottom",
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.5, face = "bold")
)
Se recodifican algunas variables (seguimiento por gineco-oncología, seguimiento paliativista y seguimiento por radio. )
Variables incluídas iniciales - índice charlson - edad categorizada - Número de gestaciones - Procedimientos previos de cervix - Estudios de imagenes completos - completar 1 linea - Recibir 2 linea - Recibir 3 linea - Recibir cuidado de soporte - Seguimiento onco clínica - Procedencia - Afiliacion al sistema de salud - Demora hasta el primer tratamiento (<= 60, >60) - Muerte - ECOG - Recibir: quimio, radio, cirugía, braqui - Retiro por contraindicacion medica
BASE$seg_gineco <- factor(recode(BASE$`Especialista de seguimiento (choice=Ginecología oncológica)`, "Checked" = "+seg_gineco","Unchecked" = "-seg_gineco"))
BASE$seg_cuidadopa <- factor(recode(BASE$`Especialista de seguimiento (choice=Paliativista)`, "Checked" = "+seg_cuidp","Unchecked" = "-seg_cuidp"))
BASE$seg_onco_rad<- factor(recode(BASE$`Especialista de seguimiento (choice=Oncología Radioterápica)`, "Checked" = "+seg_onco_Rad","Unchecked" = "-seg_onco_Rad"))
BASE <- BASE %>%
mutate(seg_gineco1ano= cut(`Seguimiento Gineco 1 año`,
breaks = c(-Inf, 3, Inf),
right = T,
labels = c("<=3",">3")))
```