Ver código
library(readxl)
datos <- read_excel("BASE.xlsx")
library(dlookr)
overview(datos) %>%
datatable(options = list(pageLength = 16))Se descargó la base de datos y el codebook el día 18/11/2025. Primeramente se procedió a explorar la base de datos.
Se realiza una familiarización con la base de datos tal cual como se descargó del REDCap.
library(readxl)
datos <- read_excel("BASE.xlsx")
library(dlookr)
overview(datos) %>%
datatable(options = list(pageLength = 16))En este caso, no hay variables codificadas como categóricas. Ningún dato está codificado en formato fecha,
library(janitor)
library(dplyr)
cols_fecha <- grep("Fecha", names(datos), value = TRUE)
datos <- datos %>% mutate(across(all_of(cols_fecha), ~ as.Date(.x, format = "%d/%m/%Y")))
datos <- datos %>% clean_names()
datos <- datos %>%
clean_names() # Convierte todo a snake_case automáticamente
diagnose(datos) %>%
mutate(across(where(is.numeric), ~round(., 1))) %>% #redondear a 1
datatable(options = list(pageLength = 15))Notas del análisis inicial
Existe un gran número de datos pérdidos, lo cuales pueden ser de tipo estructural, explicado por la naturaleza de longitudinal del estudio.
Existen dos columnas del ID del sujeto Record.ID y ID.del.paciente
Se limpiaron los nombres de las columnas (se eliminaron tildes, mayúsculas y espacios, y signos de puntuación)
names(datos)[c(1,6)] <- paste0("Record_ID", 1:2) # se renombra las columnas
INCLUSION <- table(datos$cumple_criterios_de_inclusion)
cumplenCI <- INCLUSION["Cumple"]
EXCLUSION <- table(datos$cumplimiento_criterios)
cumplenCE <- EXCLUSION["Cumple"]Al revisar los criterios de elegibilidad
28 cumplen con los criterios de inclusión
24 no cumplen con los criterios de exclusión.
Se procede a filtrar la base de datos
BASE = datos
library(dplyr)
BASE <- BASE %>% filter(cumple_criterios_de_inclusion == "Cumple")
BASE <- BASE %>% filter(cumplimiento_criterios == "Cumple")A continuación se muesra el diagrama de depuración de la base de datos
library(DiagrammeR)
g <- DiagrammeR::grViz("
digraph PRISMA {
graph [rankdir = TB, nodesep = 0.5, ranksep = 0.8]
node [shape = box, style = 'filled,rounded', fontname = Arial, fontsize = 12]
identificacion [label = 'Identificación\n\n Pacientes iniciales\n(n = 30)', fillcolor = 'grey97', penwidth = 1, width = 2.5]
excluidos1 [label = 'n = 2\n\nNo cumplieron\ncriterios de inclusión', fillcolor = 'snow', width = 1.5]
seleccion [label = 'Selección\n\nPacientes elegibles\n(n = 28)',
fillcolor = 'grey97', penwidth = 1, width = 2.5]
excluidos2 [label = 'n = 4\n\n Cumplieron criterios de exclusión',
fillcolor = 'snow', width = 1.5]
incluidos [label = 'Incluidos\n\nPacientes análisis\n(n = 24)',
fillcolor = 'grey97', penwidth = 1, width = 2.5]
identificacion -> excluidos1 [dir = none, style = dashed]
identificacion -> seleccion
seleccion -> excluidos2 [dir = none, style = dashed]
seleccion -> incluidos
{rank = same; identificacion; excluidos1}
{rank = same; seleccion; excluidos2}
}
")
g# Exportar como PNG
library(DiagrammeRsvg)
library(rsvg)
# Exportar como PNG
g %>%
export_svg() %>%
charToRaw() %>%
rsvg_png("diagrama_consort.png")library(dplyr)
# Mantener solo los registros de 'datos' cuyo ID está en 'BASE'
datos_f <- datos %>%
semi_join(BASE, by = "Record_ID1")Se realiza el análisis univariado de las variables de antecedentes y estratíficación (solo 1 medición).
library(gtsummary)
library(dplyr)
# Primero crear dataset único por paciente
datos_tabla <- datos_f %>%
arrange(Record_ID1) %>%
group_by(Record_ID1) %>%
slice(1) %>%
ungroup()
# Crear la tabla
datos_tabla %>%
select(
edad_calculada,
sexo,
diagnostico_del_paciente_10,
sitio_metastasico_identificado,
ecog_15
) %>%
tbl_summary(
statistic = list(
all_continuous() ~ "{mean} ± {sd}",
all_categorical() ~ "{n} ({p}%)"
),
digits = list(
all_continuous() ~ 1,
all_categorical() ~ c(0, 1)
),
missing = "ifany",
missing_text = "No reportado",
label = list(
edad_calculada ~ "Edad (años)",
sexo ~ "Sexo",
diagnostico_del_paciente_10 ~ "Diagnóstico principal",
sitio_metastasico_identificado ~ "Sitio metastásico identificado",
ecog_15 ~ "ECOG"
)
) %>%
add_n() %>%
bold_labels() %>%
italicize_levels() %>%
modify_caption("**Tabla 1. Características de los pacientes incluidos en el estudio (N = 24)**")| Characteristic | N | N = 241 |
|---|---|---|
| Edad (años) | 24 | 49.4 ± 20.9 |
| Sexo | 24 | |
| Hombre | 8 (33.3%) | |
| Mujer | 16 (66.7%) | |
| Diagnóstico principal | 24 | |
| Cáncer de Colón | 1 (4.2%) | |
| Cáncer de Estómago | 5 (20.8%) | |
| Cáncer de Páncreas | 2 (8.3%) | |
| Cáncer de Vias Biliares | 1 (4.2%) | |
| Leucemia Linfoide Aguda Nuevo dx | 2 (8.3%) | |
| Leucemia Linfoide Aguda Recaída | 6 (25.0%) | |
| Leucemia Mieloide Aguda Nuevo dx | 6 (25.0%) | |
| Leucemia Mieloide Aguda Recaída | 1 (4.2%) | |
| Sitio metastásico identificado | 24 | |
| No | 1 (4.2%) | |
| No aplica | 14 (58.3%) | |
| Si | 9 (37.5%) | |
| ECOG | 24 | |
| ECOG 1 | 6 (25.0%) | |
| ECOG 2 | 3 (12.5%) | |
| No aplica | 14 (58.3%) | |
| No Disponible | 1 (4.2%) | |
| 1 Mean ± SD; n (%) | ||
library(gtsummary)
library(dplyr)
# Primero convertir blastos a numérico en el dataframe original
datos_f <- datos_f %>%
mutate(
blastos_en_cuadro_hematico_percent = as.numeric(blastos_en_cuadro_hematico_percent)
)
# Crear dataset priorizando registros CON información
datos_tabla1 <- datos_f %>%
group_by(Record_ID1) %>%
# Contar cuántos NAs tiene cada registro en las variables de interés
mutate(
na_count = rowSums(is.na(across(c(
metastasis,
numero_de_metastasis_274,
blastos_por_mielograma_dx,
blastos_por_citometria_de_flujo,
blastos_en_cuadro_hematico_percent
))))
) %>% # FALTABA ESTE %>%
# Ordenar: los que tienen MENOS NAs primero
arrange(Record_ID1, na_count) %>%
# Tomar el registro con más información
slice(1) %>%
ungroup() %>%
select(-na_count)
# Verificar cuántos datos quedaron
cat("Datos disponibles:\n")Datos disponibles:
datos_tabla1 %>%
summarise(
total = n(),
metastasis_disponible = sum(!is.na(metastasis)),
numero_metastasis_disponible = sum(!is.na(numero_de_metastasis_274)),
blastos_mielograma = sum(!is.na(blastos_por_mielograma_dx)),
blastos_citometria = sum(!is.na(blastos_por_citometria_de_flujo)),
blastos_hematico = sum(!is.na(blastos_en_cuadro_hematico_percent))
) %>%
print()# A tibble: 1 × 6
total metastasis_disponible numero_metastasis_disponible blastos_mielograma
<int> <int> <int> <int>
1 24 22 9 11
# ℹ 2 more variables: blastos_citometria <int>, blastos_hematico <int>
# Crear la tabla
datos_tabla1 %>%
select(
metastasis,
numero_de_metastasis_274,
blastos_por_mielograma_dx,
blastos_por_citometria_de_flujo,
blastos_en_cuadro_hematico_percent
) %>%
tbl_summary(
type = list(
metastasis ~ "categorical",
numero_de_metastasis_274 ~ "continuous", # Forzar como continua
blastos_por_mielograma_dx ~ "continuous",
blastos_por_citometria_de_flujo ~ "continuous",
blastos_en_cuadro_hematico_percent ~ "continuous"
),
statistic = list(
all_continuous() ~ "{mean} ± {sd}",
all_categorical() ~ "{n} ({p}%)"
),
digits = list(
all_continuous() ~ 1,
all_categorical() ~ c(0, 1)
),
missing = "ifany",
missing_text = "No reportado",
label = list(
metastasis ~ "Presencia de metástasis",
numero_de_metastasis_274 ~ "Número de metástasis",
blastos_por_mielograma_dx ~ "Blastos mielograma (%)",
blastos_por_citometria_de_flujo ~ "Blastos citometría (%)",
blastos_en_cuadro_hematico_percent ~ "Blastos hemograma (%)"
)
) %>%
add_n() %>%
bold_labels() %>%
italicize_levels() %>%
modify_caption("**Tabla 2. Características pacientes (sin n completo)**") %>%
modify_footnote(all_stat_cols() ~ "N varía según disponibilidad de datos para cada variable")| Characteristic | N | N = 241 |
|---|---|---|
| Presencia de metástasis | 22 | |
| No | 3 (13.6%) | |
| No aplica | 10 (45.5%) | |
| Si | 9 (40.9%) | |
| No reportado | 2 | |
| Número de metástasis | 9 | 1.3 ± 1.0 |
| No reportado | 15 | |
| Blastos mielograma (%) | 11 | 46.6 ± 36.4 |
| No reportado | 13 | |
| Blastos citometría (%) | 8 | 33.4 ± 33.9 |
| No reportado | 16 | |
| Blastos hemograma (%) | 1 | 70.0 ± NA |
| No reportado | 23 | |
| 1 N varía según disponibilidad de datos para cada variable | ||
library(knitr)
table(datos_f$alteracion_genetica_279) %>%
kable()| Var1 | Freq |
|---|---|
| Alteración genética: Fecha toma 30-sep-2024 Fecha reporte en SAHI: 03-oct-2024 FLT3-ITD: Muestra POSITIVA para mutación FLT3-ITD en estado Heterocigoto. Relación alelo mutado/alelo normal = 1.65 D835: Muestra NEGATIVA para mutación FLT3-TKD D835. Homocigoto Normal | 1 |
| BCR ABL p 210 negativo, BCR/ABL p 190 negativo. | 1 |
| Panel genético de 28 traslocaciones negativo, FTL3 negativo | 1 |
| PCR BCR ABL p190 y 210 negativos | 1 |
| Reporte: Cariotipo 46,XX,add(15)(p11.2)[11]/46,XX[1] dos clonas celulares. En la primera la cual representa el 91.6% de las células analizadas se observa una adición de material genético de origen desconocido en el brazo corto del cromosoma 15, en la región p11.2. En la segunda clona la cual representa el 8.3% de las células analizadas se observa un complemento cromosómico femenino normal. Panel de 28 mutaciones de leucemia aguda sin detección de re-arreglos o mutaciones. Mutación FLT3 negativo, HLA de potenciales donantes con compatibilidad idéntico para un familiar y 3 haploidenticos. | 1 |
library(stringi)
datos_f$localizacion_275 <- datos_f$localizacion_275 %>%
stri_trans_general("Latin-ASCII") %>% # quitar tildes
tolower() %>% # minusculas
gsub("[^a-z0-9 ]", " ", .) %>% # quitar signos
gsub("\\s+", " ", .) %>% # espacios dobles
trimws()
table(datos_f$localizacion_275) %>%
kable()| Var1 | Freq |
|---|---|
| compromiso ganglionar supraclavicular izquierdo ganglio de virchow | 1 |
| ganglionar | 1 |
| higado | 3 |
| peritoneal | 3 |
| sitio de metastasis compromiso oseo hepatico peritoneal y diseminacion linfangitica toracica | 1 |
library(tidyr)
library(ggplot2)
# Lista de variables
antecedentes <- c("infarto_de_miocardio","insuficiencia_cardiaca_congestiva","enfermedad_vascular_periferica", "enfermedad_cerebrovascular",
"demencia", "enfermedad_pulmonar_cronica", "enfermedad_ulcerosa",
"patologia_hepatica_ligera", "patologia_hepatica_moderada_o_grave",
"diabetes", "diabetes_con_lesion_organica", "hemiplejia",
"patologia_renal_moderada_o_grave", "otra_s")
# Calcular porcentajes de "Sí"
# Calcular porcentajes de "Sí" (asumiendo que tu variable ID se llama "ID" o similar)
datos_f %>%
distinct(Record_ID1, .keep_all = TRUE) %>% # Mantener solo un registro por ID
select(all_of(antecedentes)) %>%
summarise(across(everything(), ~mean(. == "Si", na.rm = TRUE) * 100)) %>%
pivot_longer(everything(), names_to = "Variable", values_to = "Porcentaje") %>%
mutate(Variable = gsub("_", " ", Variable),
Variable = tools::toTitleCase(Variable)) %>%
ggplot(aes(x = reorder(Variable, Porcentaje), y = Porcentaje)) +
geom_col(fill = "steelblue", alpha = 0.8) +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
hjust = -0.2, size = 3.5) +
coord_flip() +
labs(title = "Distribución porcentual Antecedentes",
subtitle = "N = 24 pacientes",
x = NULL,
y = "Porcentaje (%)") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
panel.grid.major.y = element_blank()) +
scale_y_continuous(limits = c(0, 100), expand = expansion(mult = c(0, 0.05)))En antecedentes “otros” se revisa que se puede encontrar solamente con el primero
library(tidyverse)
library(tm)
library(SnowballC)
texto <- datos_f$nombre_antecedente_1
texto <- texto[!is.na(texto)]
texto <- texto %>%
stri_trans_general("Latin-ASCII") %>% # quitar tildes
tolower() %>% # minusculas
gsub("[^a-z0-9 ]", " ", .) %>% # quitar signos
gsub("\\s+", " ", .) %>% # espacios dobles
trimws()
# Crear corpus limpio
corp <- Corpus(VectorSource(texto))
# QUITAR CONECTORES (stopwords en español)
corp <- tm_map(corp, removeWords, stopwords("spanish"))
# Eliminar espacios extra
corp <- tm_map(corp, stripWhitespace)
corp <- tm_map(corp, stemDocument, language = "spanish")
corp <- Corpus(VectorSource(texto))
tdm <- TermDocumentMatrix(corp)
mat <- as.matrix(tdm)
freq <- sort(rowSums(mat), decreasing = TRUE)
df <- data.frame(
palabra = names(freq),
frecuencia = freq
)
library(gt)
df %>%
gt() %>%
tab_header(
title = md("**Tabla: Frecuencia de antecedentes**")
) %>%
fmt_number(
columns = "frecuencia",
decimals = 0
) %>%
cols_label(
palabra = "Antecedente",
frecuencia = "Frecuencia"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels(everything())
)| Tabla: Frecuencia de antecedentes | |
|---|---|
| Antecedente | Frecuencia |
| alcalina | 2 |
| elevacion | 2 |
| fosfatasa | 2 |
| trombosis | 2 |
| anemia | 2 |
| con | 2 |
| izquierdo | 2 |
| hipertrigliceridemia | 2 |
| hiperglucemia | 2 |
| confluente | 1 |
| derecha | 1 |
| llegada | 1 |
| parcial | 1 |
| subclavia | 1 |
| vena | 1 |
| yugulosubclavio | 1 |
| cronica | 1 |
| tos | 1 |
| arterial | 1 |
| hipertension | 1 |
| esmerilado | 1 |
| lsd | 1 |
| nodulo | 1 |
| pulmonar | 1 |
| vidrio | 1 |
| inferior | 1 |
| miembro | 1 |
| profunda | 1 |
| sospecha | 1 |
| venosa | 1 |
| cardiopatia | 1 |
| concentrica | 1 |
| hipertrofica | 1 |
| celulitis | 1 |
| pie | 1 |
| enfermedad | 1 |
| gastroesofagico | 1 |
| reflujo | 1 |
| estudio | 1 |
| miomatosis | 1 |
| uterina | 1 |
| esteatosis | 1 |
| hepatica | 1 |
| moderada | 1 |
| anticuerpos | 1 |
| calientes | 1 |
| hemolitica | 1 |
| requerimiento | 1 |
| trasfusion | 1 |
| neuropatia | 1 |
| sensitiva | 1 |
| hiperuricemia | 1 |
| aguda | 1 |
| sinusitis | 1 |
| axonal | 1 |
| controlada | 1 |
| motora | 1 |
| polineuropatia | 1 |
| sensitivo | 1 |
| hipoxemia | 1 |
| bilateral | 1 |
| glaucoma | 1 |
En este caso no hay información concluyente debido a los diversos nombres dispuestos. Una opción es realizar un diccionario de sinónimos para poder categorizar. Otra opción es la depuración manual o utilizar software como N-vivo.
ids_con_fecha <- datos_f %>%
filter(!is.na(fecha_de_dispensacion)) %>%
pull(Record_ID1) %>%
unique()
ids_con_fecha [1] 1 3 4 6 8 9 10 11 12 13 19 25 26 27 29 30
ids_con_dosis <- datos_f %>%
filter(!is.na(dosis_389)) %>%
pull(Record_ID1) %>%
unique()
ids_con_dosis [1] 1 3 4 6 8 9 10 11 12 13 19 25 26 27 29 30
table(datos_f$esta_tomando_el_medicamento_de_estudio)
No Si
2 21
# Crear la tabla
datos_f %>%
select(
event_name
) %>%
tbl_summary(
statistic = list(
all_continuous() ~ "{mean} ± {sd}",
all_categorical() ~ "{n} ({p}%)"
),
digits = list(
all_continuous() ~ 1,
all_categorical() ~ c(0, 1)
),
missing = "ifany",
missing_text = "No reportado",
label = list(
event_name ~ "Evento")
) %>%
add_n() %>%
bold_labels() %>%
italicize_levels() %>%
modify_caption("**Distribución momentos en la muestra que cumple criteriosde elegibilidad**") %>%
modify_footnote(all_stat_cols() ~ "1. N se toma como el número de momentos, 2. n(%)")| Characteristic | N | N = 1,1291 |
|---|---|---|
| Evento | 1,129 | |
| Ciclo 2 | 20 (1.8%) | |
| Evento adverso | 245 (21.7%) | |
| Medicamento concomitante | 712 (63.1%) | |
| Objetivos exploratorios | 79 (7.0%) | |
| Visita de finalización | 23 (2.0%) | |
| Visita de inicio/Ciclo 1 | 24 (2.1%) | |
| Visita de tamizaje | 24 (2.1%) | |
| Visita no programada | 2 (0.2%) | |
1 N se toma como el número de momentos, 2. n(%)
|
||
Frente a “medicamento concomitante” es posible crear una columna nueva en torno de medicamento concomitante (más que ser un momento adicional).
Evento adverso tampoco es un momento puntual, la columna “ha_presentado_evento_adverso” da cuenta de la misma información y la columna visita_numero indica en qué momento fue presentado dicho evento.
No se incluye a este punto de análisis “Objetivos exploratorios”.
Los momentos de comparación son: Visita de inicio/ciclo 1, Ciclo 2, Visita de finalización.
# Definir momentos de análisis
momentos_analisis <- c("Visita de inicio/Ciclo 1", "Ciclo 2", "Visita de finalización")
df_long <- datos_f %>%
filter(event_name %in% momentos_analisis)
# Selección de variables
vars_numericas <- c("peso_en_kilogramos", "presion_sistolica_en_mm_hg",
"presion_diastolica_en_mm_hg", "frecuencia_cardiaca_l_min")
vars_categoricas <- c("cabeza_y_cuello", "cardiovascular", "pulmonar",
"abdomen", "extremidades", "neurologico")
# Limpiar y convertir variables categóricas
df_long <- df_long %>%
mutate(across(all_of(vars_categoricas), ~ {
case_when(
. %in% c("", " ", NA) ~ NA_character_,
TRUE ~ trimws(.)
)
})) %>%
mutate(across(all_of(vars_categoricas), as.factor)) %>%
mutate(event_name = factor(event_name, levels = momentos_analisis))
# Calcular resúmenes numéricos
res_num <- df_long %>%
select(event_name, all_of(vars_numericas)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
# Calcular resúmenes categóricos (moda)
res_cat <- df_long %>%
select(event_name, all_of(vars_categoricas)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
# Crear tabla pivotada
tabla_final <- bind_rows(res_num, res_cat) %>%
pivot_wider(names_from = event_name, values_from = resumen)
# Orden y nombres bonitos
orden_filas <- c(
"peso_en_kilogramos", "presion_sistolica_en_mm_hg",
"presion_diastolica_en_mm_hg", "frecuencia_cardiaca_l_min",
"cabeza_y_cuello", "cardiovascular", "pulmonar",
"abdomen", "extremidades", "neurologico"
)
nombres_bonitos <- c(
"peso_en_kilogramos" = "Peso (kg)",
"presion_sistolica_en_mm_hg" = "Presión sistólica (mmHg)",
"presion_diastolica_en_mm_hg" = "Presión diastólica (mmHg)",
"frecuencia_cardiaca_l_min" = "Frecuencia cardiaca (l/min)",
"cabeza_y_cuello" = "Cabeza y cuello",
"cardiovascular" = "Cardiovascular",
"pulmonar" = "Pulmonar",
"abdomen" = "Abdomen",
"extremidades" = "Extremidades",
"neurologico" = "Neurológico"
)
tabla_final <- tabla_final %>%
mutate(variable = factor(variable, levels = orden_filas)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos[as.character(variable)])
# Calcular n por evento
n_eventos <- df_long %>%
group_by(event_name) %>%
summarise(n = n_distinct(Record_ID1))
# Crear títulos de columnas
titulo_inicio <- paste0("**Ciclo 1**<br>N = ", n_eventos$n[n_eventos$event_name == "Visita de inicio/Ciclo 1"])
titulo_c2 <- paste0("**Ciclo 2**<br>N = ", n_eventos$n[n_eventos$event_name == "Ciclo 2"])
titulo_final <- paste0("**Finalización**<br>N = ", n_eventos$n[n_eventos$event_name == "Visita de finalización"])
# Crear tabla GT estilo gtsummary
gt_examen <- tabla_final %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables exámen físico - signos vitales por momento**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_inicio),
`Ciclo 2` = md(titulo_c2),
`Visita de finalización` = md(titulo_final)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
gt_examen| ** Evolución variables exámen físico - signos vitales por momento** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 24 |
Ciclo 2 N = 20 |
Finalización N = 23 |
| Peso (kg) | 58.2 (15.0) | 58.7 (14.3) | 59.6 (16.6) |
| Presión sistólica (mmHg) | 108.0 (12.3) | 109.7 (18.4) | 106.3 (17.0) |
| Presión diastólica (mmHg) | 66.1 (9.5) | 68.4 (10.7) | 60.3 (18.4) |
| Frecuencia cardiaca (l/min) | 82.2 (12.6) | 81.0 (10.9) | 77.4 (14.7) |
| Cabeza y cuello | Anormal: 4 (16.7%); Normal: 20 (83.3%) | Anormal: 4 (22.2%); Normal: 14 (77.8%) | Anormal: 3 (16.7%); Normal: 15 (83.3%) |
| Cardiovascular | Anormal: 8 (33.3%); Normal: 16 (66.7%) | Anormal: 5 (27.8%); Normal: 13 (72.2%) | Anormal: 5 (27.8%); Normal: 13 (72.2%) |
| Pulmonar | Anormal: 8 (33.3%); Normal: 16 (66.7%) | Anormal: 9 (50.0%); Normal: 9 (50.0%) | Anormal: 9 (50.0%); Normal: 9 (50.0%) |
| Abdomen | Anormal: 12 (50.0%); Normal: 12 (50.0%) | Anormal: 7 (38.9%); Normal: 11 (61.1%) | Anormal: 10 (55.6%); Normal: 8 (44.4%) |
| Extremidades | Anormal: 10 (41.7%); Normal: 14 (58.3%) | Anormal: 9 (50.0%); Normal: 9 (50.0%) | Anormal: 9 (50.0%); Normal: 9 (50.0%) |
| Neurológico | Anormal: 2 (8.3%); Normal: 22 (91.7%) | Anormal: 2 (11.1%); Normal: 16 (88.9%) | Anormal: 1 (5.6%); Normal: 17 (94.4%) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
# Selección de variables
vars_numericas1 <- c("frecuencia_367", "pr", "qrs", "qtc", "grosor_de_la_pared_del_septo_interventricular_mm", "grosor_de_la_pared_posterior_mm", "dimension_diastolica_interna_del_ventriculo_izquierdo_mm", "dimension_sistolica_interna_del_ventriculo_izquierdo_mm", "indice_de_masa_ventriculo_izquierdo_g_m2", "fraccion_de_eyeccon_ventriculo_izquierdo_percent")
vars_categoricas1 <- c("electrocardiograma", "ecocardiograma")
# Limpiar y convertir variables categóricas
df_long <- df_long %>%
mutate(across(all_of(vars_categoricas1), ~ {
case_when(
. %in% c("", " ", NA) ~ NA_character_,
TRUE ~ trimws(.)
)
})) %>%
mutate(across(all_of(vars_categoricas1), as.factor)) %>%
mutate(event_name = factor(event_name, levels = momentos_analisis))
# Calcular resúmenes numéricos
res_num1 <- df_long %>%
select(event_name, all_of(vars_numericas1)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
# Calcular resúmenes categóricos (moda)
res_cat1 <- df_long %>%
select(event_name, all_of(vars_categoricas1)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
# Crear tabla pivotada
tabla_final1 <- bind_rows(res_num1, res_cat1) %>%
pivot_wider(names_from = event_name, values_from = resumen)
# Orden y nombres bonitos
orden_filas1 <- c("frecuencia_367", "pr", "qrs", "qtc", "grosor_de_la_pared_del_septo_interventricular_mm", "grosor_de_la_pared_posterior_mm", "dimension_diastolica_interna_del_ventriculo_izquierdo_mm", "dimension_sistolica_interna_del_ventriculo_izquierdo_mm", "indice_de_masa_ventriculo_izquierdo_g_m2","fraccion_de_eyeccon_ventriculo_izquierdo_percent","electrocardiograma", "ecocardiograma")
nombres_bonitos1 <- c(
"frecuencia_367" = "Frecuencia",
"pr" = "PR",
"qrs" = "QRS",
"qtc" = "QTC",
"grosor_de_la_pared_del_septo_interventricular_mm" = "Grosor Pared septo interventricular (mm)",
"grosor_de_la_pared_posterior_mm" = "Grosor pared posterior (mm)",
"dimension_diastolica_interna_del_ventriculo_izquierdo_mm" = "Dim. diastolica int. ventriculo izq. (mm)",
"dimension_sistolica_interna_del_ventriculo_izquierdo_mm" = "Dim. sistolica int.ventriculo izq. (mm)",
"indice_de_masa_ventriculo_izquierdo_g_m2" = "indice masa ventriculo izquierdo",
"fraccion_de_eyeccon_ventriculo_izquierdo_percent" = "frac. eyec. ventriculo izquierdo %",
"electrocardiograma" = "Electrocardiograma",
"ecocardiograma" = "Ecocardiograma")
tabla_final1 <- tabla_final1 %>%
mutate(variable = factor(variable, levels = orden_filas1)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos1[as.character(variable)])
# Calcular n por evento
n_eventos1 <- df_long %>%
group_by(event_name) %>%
summarise(n = n_distinct(Record_ID1))
# Crear tabla GT estilo gtsummary
gt_examen1 <- tabla_final1 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables función cardíaca**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_inicio),
`Ciclo 2` = md(titulo_c2),
`Visita de finalización` = md(titulo_final)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
gt_examen1| ** Evolución variables función cardíaca** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 24 |
Ciclo 2 N = 20 |
Finalización N = 23 |
| Frecuencia | 75.4 (12.7) | 74.8 (14.7) | 72.1 (13.4) |
| PR | 139.6 (21.8) | 137.2 (15.9) | 150.7 (15.1) |
| QRS | 93.8 (9.7) | 97.4 (11.9) | 94.8 (10.7) |
| QTC | 426.9 (31.5) | 448.6 (26.5) | 853.5 (1288.5) |
| Grosor Pared septo interventricular (mm) | 8.4 (1.8) | 7.9 (2.4) | 15.4 (21.0) |
| Grosor pared posterior (mm) | 7.8 (1.4) | 8.0 (1.6) | 8.2 (2.1) |
| Dim. diastolica int. ventriculo izq. (mm) | 46.4 (9.1) | 45.5 (6.2) | 44.5 (6.7) |
| Dim. sistolica int.ventriculo izq. (mm) | 28.7 (5.5) | 32.2 (3.8) | 28.4 (4.5) |
| indice masa ventriculo izquierdo | 73.5 (23.2) | 847.3 (2466.2) | 73.9 (19.8) |
| frac. eyec. ventriculo izquierdo % | 60.2 (5.6) | 56.9 (3.4) | 59.0 (4.0) |
| Electrocardiograma | Anormal: 7 (53.8%); Normal: 6 (46.2%) | Anormal: 5 (50.0%); Normal: 5 (50.0%) | Anormal: 2 (20.0%); Normal: 8 (80.0%) |
| Ecocardiograma | Anormal clínicamente no significativo: 10 (83.3%); Normal clínicamente significativo: 2 (16.7%) | Anormal clínicamente no significativo: 8 (80.0%); Normal clínicamente significativo: 2 (20.0%) | Anormal clínicamente no significativo: 7 (70.0%); Normal clínicamente significativo: 3 (30.0%) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
# Selección de variables
vars_numericas2 <- c("trigliceridos_en_mg_d_l", "colesterol_total_en_mg_d_l", "hdl_en_mg_d_l", "ldl_en_mg_d_l", "fosfatasa_alcalina_u_l", "ast_u_l", "alt_u_l", "bilirrubina_total_en_mg_d_l", "bilirrubina_directa_en_mg_d_l", "bilirrubina_total_en_mg_d_l", "nitrogeno_ureico_en_sangre_bun_en_mg_d_l", "creatinina_serica_en_mg_d_l", "acido_urico_en_mg_d_l", "lactato_deshidrogenasa_ldh_u_l", "ferritina_en_ng_ml", "albumina_en_g_d_l", "hierro_en_ug_dl", "recuento_total_de_eritrocitos_u_l", "recuento_plaquetas_u_l", "hemoglobina_en_gr_d_l", "hematocrito_percent", "recuento_total_de_leucocitos_u_l", "neutrofilos_valor_absoluto_u_l", "neutrofilos_percent", "linfocitos_valor_absoluto_u_l", "linfocitos_percent", "eosinofilos_valor_absoluto_u_l", "eosinofilos_percent", "basofilos_valor_absoluto_u_l", "basofilos_percent", "monocitos_valor_absoluto_u_l", "monocitos_percent", "glicemia_en_mg_d_l", "sodio_en_mmol_l","calcio_en_mg_dl", "potasio_en_mmol_l", "magnesio_en_mg_dl" )
vars_categoricas2 <- c("analisis_de_orina")
# Limpiar y convertir variables categóricas
df_long <- df_long %>%
mutate(across(all_of(vars_categoricas2), ~ {
case_when(
. %in% c("", " ", NA) ~ NA_character_,
TRUE ~ trimws(.)
)
})) %>%
mutate(across(all_of(vars_categoricas2), as.factor)) %>%
mutate(event_name = factor(event_name, levels = momentos_analisis))
# Calcular resúmenes numéricos
res_num2 <- df_long %>%
select(event_name, all_of(vars_numericas2)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
res_cat2 <- df_long %>%
select(event_name, all_of(vars_categoricas2)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
# Crear tabla pivotada
tabla_final2 <- bind_rows(res_num2, res_cat2) %>%
pivot_wider(names_from = event_name, values_from = resumen)
# Orden y nombres bonitos
orden_filas2 <- c("analisis_de_orina", "trigliceridos_en_mg_d_l", "colesterol_total_en_mg_d_l", "hdl_en_mg_d_l", "ldl_en_mg_d_l", "fosfatasa_alcalina_u_l", "ast_u_l", "alt_u_l", "bilirrubina_total_en_mg_d_l", "bilirrubina_directa_en_mg_d_l", "bilirrubina_indirecta_en_mg_d_l", "nitrogeno_ureico_en_sangre_bun_en_mg_d_l", "creatinina_serica_en_mg_d_l", "acido_urico_en_mg_d_l", "lactato_deshidrogenasa_ldh_u_l", "ferritina_en_ng_ml", "albumina_en_g_d_l", "hierro_en_ug_dl", "recuento_total_de_eritrocitos_u_l", "recuento_plaquetas_u_l", "hemoglobina_en_gr_d_l", "hematocrito_percent", "recuento_total_de_leucocitos_u_l", "neutrofilos_valor_absoluto_u_l", "neutrofilos_percent", "linfocitos_valor_absoluto_u_l", "linfocitos_percent", "eosinofilos_valor_absoluto_u_l", "eosinofilos_percent", "basofilos_valor_absoluto_u_l", "basofilos_percent", "monocitos_valor_absoluto_u_l", "monocitos_percent", "glicemia_en_mg_d_l", "sodio_en_mmol_l","calcio_en_mg_dl", "potasio_en_mmol_l", "magnesio_en_mg_dl" )
nombres_bonitos2 <- c(
"analisis_de_orina" = "Análisis Orina",
"trigliceridos_en_mg_d_l" = "Trigliceridos (mg/dL)", "colesterol_total_en_mg_d_l"= "Colesterol (mg/dL)",
"hdl_en_mg_d_l" = "hdl (mg/dL)",
"ldl_en_mg_d_l" = "ldl (mg/dL)",
"fosfatasa_alcalina_u_l" = "fosfata alcalina (U/L)",
"ast_u_l" = "ast (U/L)",
"alt_u_l" = "alt (U/L)",
"bilirrubina_total_en_mg_d_l" = "bilirrubina total (mg/dL)", "bilirrubina_directa_en_mg_d_l" = "bilirrubina directa (mg/dL)", "bilirrubina_indirecta_en_mg_d_l" = "bilirrubina indirecta (mg/dL)", "nitrogeno_ureico_en_sangre_bun_en_mg_d_l" = "nitrogeno ureico (mg/dL)", "creatinina_serica_en_mg_d_l" = "creatinina serica (mg/dL)", "acido_urico_en_mg_d_l" = "acido urico (mg/dL)", "lactato_deshidrogenasa_ldh_u_l" = "lactato deshidrogenasa (U/L)",
"ferritina_en_ng_ml" = "ferratina (ng/dL)",
"albumina_en_g_d_l" = "albumia (g/dL)",
"hierro_en_ug_dl" = "hierro (ug/dL)",
"recuento_total_de_eritrocitos_u_l" = "recuento total eitrocitos (U/L)", "recuento_plaquetas_u_l" = "recuento plaquetas (U/L)",
"hemoglobina_en_gr_d_l" = "hemoglobina en (gr/dL)",
"hematocrito_percent" = "hematrocito %",
"recuento_total_de_leucocitos_u_l" = "recuento total leucocito (U/L)", "neutrofilos_valor_absoluto_u_l" = "netrofilos V. abs (U/L)",
"neutrofilos_percent" = "neutrofilos %",
"linfocitos_valor_absoluto_u_l" = "linfocitos v. abs (U/L)",
"linfocitos_percent" = "linfocitos %",
"eosinofilos_valor_absoluto_u_l" = "eosinofilos v. abs", "eosinofilos_percent" = "eosinofilos %",
"basofilos_valor_absoluto_u_l" = "basofilos v. abs (U/L)", "basofilos_percent" = "basofilos %",
"monocitos_valor_absoluto_u_l" = "monocitos v. abs (U/L)",
"monocitos_percent" = "monocitos %",
"glicemia_en_mg_d_l" = "glicemia (mg/dL)",
"sodio_en_mmol_l" = "sodio (mmol/L)",
"calcio_en_mg_dl" = "calcio (mg/dL)",
"potasio_en_mmol_l" = "potasio (mmol/L)",
"magnesio_en_mg_dl" = "magnesio (mg/dL)")
tabla_final2 <- tabla_final2 %>%
mutate(variable = factor(variable, levels = orden_filas2)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos2[as.character(variable)])
# Calcular n por evento
n_eventos2 <- df_long %>%
group_by(event_name) %>%
summarise(n = n_distinct(Record_ID1))
# Crear tabla GT estilo gtsummary
gt_examen2 <- tabla_final2 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables examen laboratorio**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_inicio),
`Ciclo 2` = md(titulo_c2),
`Visita de finalización` = md(titulo_final)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
gt_examen2| ** Evolución variables examen laboratorio** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 24 |
Ciclo 2 N = 20 |
Finalización N = 23 |
| Análisis Orina | Anormal: 12 (52.2%); Normal: 11 (47.8%) | Anormal: 9 (56.2%); Normal: 7 (43.8%) | Anormal: 12 (70.6%); Normal: 5 (29.4%) |
| Trigliceridos (mg/dL) | 146.2 (71.1) | 118.7 (46.3) | 150.1 (85.0) |
| Colesterol (mg/dL) | 152.1 (34.3) | 156.5 (49.8) | 163.1 (43.6) |
| hdl (mg/dL) | 38.8 (17.2) | 38.2 (14.2) | 42.4 (18.3) |
| ldl (mg/dL) | 85.4 (24.4) | 95.3 (43.5) | 90.7 (37.9) |
| fosfata alcalina (U/L) | 177.9 (141.0) | 150.6 (88.8) | 154.1 (74.7) |
| ast (U/L) | 25.2 (9.0) | 34.9 (26.1) | 37.0 (53.6) |
| alt (U/L) | 28.0 (21.4) | 46.2 (48.4) | 40.3 (56.9) |
| bilirrubina total (mg/dL) | 0.6 (0.3) | 0.8 (0.5) | 0.7 (0.4) |
| bilirrubina directa (mg/dL) | 0.2 (0.1) | 0.3 (0.2) | 0.3 (0.2) |
| nitrogeno ureico (mg/dL) | 17.7 (10.5) | 13.6 (5.0) | 14.1 (4.5) |
| creatinina serica (mg/dL) | 0.7 (0.2) | 0.7 (0.1) | 0.7 (0.2) |
| acido urico (mg/dL) | 3.7 (1.1) | 3.5 (1.2) | 5.2 (2.0) |
| lactato deshidrogenasa (U/L) | 557.0 (897.4) | 293.5 (215.5) | 241.6 (142.9) |
| ferratina (ng/dL) | 3246.5 (5803.4) | 3833.2 (4749.2) | 6306.4 (10316.6) |
| albumia (g/dL) | 3.7 (0.5) | 3.5 (0.6) | 3.7 (0.7) |
| hierro (ug/dL) | 125.4 (100.4) | 105.0 (80.4) | 84.4 (56.5) |
| recuento total eitrocitos (U/L) | 5953846.2 (9684481.2) | 3265000.0 (948639.4) | 3705000.0 (983387.0) |
| recuento plaquetas (U/L) | 161215.4 (161283.9) | 129040.0 (171572.3) | 207950.0 (134865.1) |
| hemoglobina en (gr/dL) | 9.8 (2.8) | 9.5 (2.1) | 11.0 (2.8) |
| hematrocito % | 29.5 (8.7) | 28.8 (7.5) | 33.2 (8.6) |
| recuento total leucocito (U/L) | 5141.2 (3257.2) | 2687.0 (2293.1) | 4360.0 (2527.4) |
| netrofilos V. abs (U/L) | 2371.6 (2423.4) | 1101.0 (1414.2) | 3042.0 (2512.5) |
| neutrofilos % | 39.4 (26.9) | 35.5 (25.9) | 65.0 (25.9) |
| linfocitos v. abs (U/L) | 2004.1 (2042.5) | 1255.0 (1653.0) | 975.0 (673.0) |
| linfocitos % | 43.9 (26.5) | 53.2 (29.5) | 26.9 (27.0) |
| eosinofilos v. abs | 83.8 (166.8) | 32.0 (47.3) | 55.0 (52.1) |
| eosinofilos % | 1.5 (2.0) | 1.2 (1.7) | 1.5 (1.1) |
| basofilos v. abs (U/L) | 123.8 (385.2) | 14.0 (31.7) | 8.0 (13.2) |
| basofilos % | 1.7 (4.9) | 0.3 (0.5) | 0.4 (0.5) |
| monocitos v. abs (U/L) | 634.6 (877.9) | 247.0 (271.9) | 259.0 (183.8) |
| monocitos % | 12.0 (11.6) | 9.2 (8.8) | 5.9 (4.3) |
| glicemia (mg/dL) | 110.7 (34.8) | 100.5 (14.8) | 95.4 (10.4) |
| sodio (mmol/L) | 136.6 (2.9) | 139.2 (1.9) | 139.0 (3.3) |
| calcio (mg/dL) | 8.8 (0.5) | 8.8 (0.8) | 9.1 (0.8) |
| potasio (mmol/L) | 4.2 (0.5) | 4.3 (0.3) | 4.0 (0.4) |
| magnesio (mg/dL) | 2.0 (0.4) | 2.0 (0.1) | 2.0 (0.2) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
Primero se alista la base de datos
df_diag <- datos_f %>%
filter(event_name == "Visita de tamizaje") %>%
select(Record_ID1, diagnostico_del_paciente_10) %>%
distinct()
colnames(df_diag)[2] <- "DIAGF"
df_long <- df_long %>%
left_join(df_diag, by = "Record_ID1")
#Se recodifica el tipo de cáncer
df_long <- df_long %>%
mutate(
TIPO_DX = case_when(
DIAGF %in% c(
"Cáncer de Colón",
"Cáncer de Estómago",
"Cáncer de Páncreas",
"Cáncer de Vias Biliares"
) ~ "Cancer_Gastrico",
DIAGF %in% c(
"Leucemia Linfoide Aguda Nuevo dx",
"Leucemia Linfoide Aguda Recaída",
"Leucemia Mieloide Aguda Nuevo dx",
"Leucemia Mieloide Aguda Recaída"
) ~ "Leucemias",
TRUE ~ DIAGF
)
)
df_long_gastrico <- df_long %>% filter(TIPO_DX == "Cancer_Gastrico")
df_long_leucemias <- df_long %>% filter(TIPO_DX == "Leucemias")res_num3 <- df_long_gastrico %>%
select(event_name, all_of(vars_numericas)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
# Calcular resúmenes categóricos (moda)
res_cat3 <- df_long_gastrico %>%
select(event_name, all_of(vars_categoricas)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
tabla_final3 <- bind_rows(res_num3, res_cat3) %>%
pivot_wider(names_from = event_name, values_from = resumen)
tabla_final3 <- tabla_final3 %>%
mutate(variable = factor(variable, levels = orden_filas)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos[as.character(variable)])
n_eventos3 <- df_long_gastrico %>%
group_by(event_name) %>%
summarise(n = n_distinct(Record_ID1))
# Crear títulos de columnas
titulo_iniciox <- paste0("**Ciclo 1**<br>N = ", n_eventos3$n[n_eventos3$event_name == "Visita de inicio/Ciclo 1"])
titulo_c2x <- paste0("**Ciclo 2**<br>N = ", n_eventos3$n[n_eventos3$event_name == "Ciclo 2"])
titulo_finalx <- paste0("**Finalización**<br>N = ", n_eventos3$n[n_eventos3$event_name == "Visita de finalización"])
# Crear tabla GT estilo gtsummary
gt_examen3 <- tabla_final3 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables exámen físico - signos vitales por momento CANCER GASTRICO**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_iniciox),
`Ciclo 2` = md(titulo_c2x),
`Visita de finalización` = md(titulo_finalx)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
###Leucemias
res_num4 <- df_long_leucemias %>%
select(event_name, all_of(vars_numericas)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
# Calcular resúmenes categóricos (moda)
res_cat4 <- df_long_leucemias %>%
select(event_name, all_of(vars_categoricas)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
tabla_final4 <- bind_rows(res_num4, res_cat4) %>%
pivot_wider(names_from = event_name, values_from = resumen)
tabla_final4 <- tabla_final4 %>%
mutate(variable = factor(variable, levels = orden_filas)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos[as.character(variable)])
n_eventos4 <- df_long_leucemias %>%
group_by(event_name) %>%
summarise(n = n_distinct(Record_ID1))
# Crear títulos de columnas
titulo_inicioy <- paste0("**Ciclo 1**<br>N = ", n_eventos4$n[n_eventos4$event_name == "Visita de inicio/Ciclo 1"])
titulo_c2y <- paste0("**Ciclo 2**<br>N = ", n_eventos4$n[n_eventos4$event_name == "Ciclo 2"])
titulo_finaly <- paste0("**Finalización**<br>N = ", n_eventos4$n[n_eventos4$event_name == "Visita de finalización"])
# Crear tabla GT estilo gtsummary
gt_examen4 <- tabla_final4 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables exámen físico - signos vitales por momento LEUCEMIAS**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_inicioy),
`Ciclo 2` = md(titulo_c2y),
`Visita de finalización` = md(titulo_finaly)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
library(htmltools)
tablas_juntas <- tagList(
gt_examen3,
htmltools::br(), htmltools::br(), # doble salto de línea
gt_examen4
)
tablas_juntas| ** Evolución variables exámen físico - signos vitales por momento CANCER GASTRICO** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 9 |
Ciclo 2 N = 6 |
Finalización N = 8 |
| Peso (kg) | 46.0 (10.3) | 48.6 (12.1) | 48.4 (12.2) |
| Presión sistólica (mmHg) | 106.4 (14.0) | 116.2 (20.7) | 112.5 (16.4) |
| Presión diastólica (mmHg) | 64.9 (6.9) | 72.5 (14.6) | 61.7 (23.2) |
| Frecuencia cardiaca (l/min) | 80.6 (14.4) | 82.8 (15.4) | 77.7 (12.1) |
| Cabeza y cuello | Anormal: 1 (11.1%); Normal: 8 (88.9%) | Normal: 6 (100.0%) | Normal: 6 (100.0%) |
| Cardiovascular | Anormal: 2 (22.2%); Normal: 7 (77.8%) | Anormal: 1 (16.7%); Normal: 5 (83.3%) | Anormal: 1 (16.7%); Normal: 5 (83.3%) |
| Pulmonar | Anormal: 2 (22.2%); Normal: 7 (77.8%) | Anormal: 4 (66.7%); Normal: 2 (33.3%) | Anormal: 5 (83.3%); Normal: 1 (16.7%) |
| Abdomen | Anormal: 7 (77.8%); Normal: 2 (22.2%) | Anormal: 4 (66.7%); Normal: 2 (33.3%) | Anormal: 5 (83.3%); Normal: 1 (16.7%) |
| Extremidades | Anormal: 7 (77.8%); Normal: 2 (22.2%) | Anormal: 4 (66.7%); Normal: 2 (33.3%) | Anormal: 5 (83.3%); Normal: 1 (16.7%) |
| Neurológico | Normal: 9 (100.0%) | Normal: 6 (100.0%) | Normal: 6 (100.0%) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
| ** Evolución variables exámen físico - signos vitales por momento LEUCEMIAS** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 15 |
Ciclo 2 N = 14 |
Finalización N = 15 |
| Peso (kg) | 65.5 (12.5) | 63.7 (12.9) | 65.2 (15.9) |
| Presión sistólica (mmHg) | 108.9 (11.5) | 106.5 (17.1) | 103.2 (17.1) |
| Presión diastólica (mmHg) | 66.8 (10.9) | 66.4 (8.2) | 59.6 (16.7) |
| Frecuencia cardiaca (l/min) | 83.3 (11.9) | 80.1 (8.5) | 77.3 (16.4) |
| Cabeza y cuello | Anormal: 3 (20.0%); Normal: 12 (80.0%) | Anormal: 4 (33.3%); Normal: 8 (66.7%) | Anormal: 3 (25.0%); Normal: 9 (75.0%) |
| Cardiovascular | Anormal: 6 (40.0%); Normal: 9 (60.0%) | Anormal: 4 (33.3%); Normal: 8 (66.7%) | Anormal: 4 (33.3%); Normal: 8 (66.7%) |
| Pulmonar | Anormal: 6 (40.0%); Normal: 9 (60.0%) | Anormal: 5 (41.7%); Normal: 7 (58.3%) | Anormal: 4 (33.3%); Normal: 8 (66.7%) |
| Abdomen | Anormal: 5 (33.3%); Normal: 10 (66.7%) | Anormal: 3 (25.0%); Normal: 9 (75.0%) | Anormal: 5 (41.7%); Normal: 7 (58.3%) |
| Extremidades | Anormal: 3 (20.0%); Normal: 12 (80.0%) | Anormal: 5 (41.7%); Normal: 7 (58.3%) | Anormal: 4 (33.3%); Normal: 8 (66.7%) |
| Neurológico | Anormal: 2 (13.3%); Normal: 13 (86.7%) | Anormal: 2 (16.7%); Normal: 10 (83.3%) | Anormal: 1 (8.3%); Normal: 11 (91.7%) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
res_num5 <- df_long_gastrico %>%
select(event_name, all_of(vars_numericas1)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
# Calcular resúmenes categóricos (moda)
res_cat5 <- df_long_gastrico %>%
select(event_name, all_of(vars_categoricas1)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
tabla_final5 <- bind_rows(res_num5, res_cat5) %>%
pivot_wider(names_from = event_name, values_from = resumen)
tabla_final5 <- tabla_final5 %>%
mutate(variable = factor(variable, levels = orden_filas1)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos1[as.character(variable)])
gt_examen5 <- tabla_final5 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables función cardíaca Cancer Gastrico**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_iniciox),
`Ciclo 2` = md(titulo_c2x),
`Visita de finalización` = md(titulo_finalx)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
#Leucemias
res_num6 <- df_long_leucemias %>%
select(event_name, all_of(vars_numericas1)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
# Calcular resúmenes categóricos (moda)
res_cat6 <- df_long_leucemias %>%
select(event_name, all_of(vars_categoricas1)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
tabla_final6 <- bind_rows(res_num6, res_cat6) %>%
pivot_wider(names_from = event_name, values_from = resumen)
tabla_final6 <- tabla_final6 %>%
mutate(variable = factor(variable, levels = orden_filas1)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos1[as.character(variable)])
gt_examen6 <- tabla_final6 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables función cardíaca Leucemias**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_inicioy),
`Ciclo 2` = md(titulo_c2y),
`Visita de finalización` = md(titulo_finaly)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
tablas_juntas1 <- tagList(
gt_examen5,
htmltools::br(), htmltools::br(), # doble salto de línea
gt_examen6
)
tablas_juntas1| ** Evolución variables función cardíaca Cancer Gastrico** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 9 |
Ciclo 2 N = 6 |
Finalización N = 8 |
| Frecuencia | 73.8 (19.3) | 74.3 (9.1) | 70.5 (19.8) |
| PR | 147.5 (24.2) | 142.7 (20.0) | 153.0 (20.9) |
| QRS | 92.0 (11.0) | 89.3 (8.3) | 94.5 (12.2) |
| QTC | 418.5 (41.5) | 427.0 (4.4) | 442.5 (21.7) |
| Grosor Pared septo interventricular (mm) | 8.8 (2.2) | 9.0 (4.0) | 9.0 (2.2) |
| Grosor pared posterior (mm) | 7.5 (1.9) | 7.7 (2.1) | 7.8 (2.2) |
| Dim. diastolica int. ventriculo izq. (mm) | 39.8 (7.8) | 44.7 (7.2) | 41.2 (4.8) |
| Dim. sistolica int.ventriculo izq. (mm) | 25.2 (5.0) | 29.7 (2.5) | 27.2 (3.9) |
| indice masa ventriculo izquierdo | 64.2 (24.7) | 74.0 (30.5) | 70.8 (19.8) |
| frac. eyec. ventriculo izquierdo % | 59.8 (6.9) | 56.3 (3.2) | 57.8 (5.0) |
| Electrocardiograma | Anormal: 4 (100.0%) | Normal: 3 (100.0%) | Anormal: 1 (25.0%); Normal: 3 (75.0%) |
| Ecocardiograma | Anormal clínicamente no significativo: 2 (50.0%); Normal clínicamente significativo: 2 (50.0%) | Anormal clínicamente no significativo: 3 (100.0%) | Anormal clínicamente no significativo: 2 (50.0%); Normal clínicamente significativo: 2 (50.0%) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
| ** Evolución variables función cardíaca Leucemias** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 15 |
Ciclo 2 N = 14 |
Finalización N = 15 |
| Frecuencia | 76.2 (9.5) | 75.0 (17.2) | 73.2 (9.1) |
| PR | 135.6 (21.0) | 134.9 (15.0) | 148.8 (10.7) |
| QRS | 94.8 (9.7) | 100.9 (11.9) | 95.0 (10.9) |
| QTC | 431.1 (27.7) | 457.9 (26.7) | 1127.5 (1662.2) |
| Grosor Pared septo interventricular (mm) | 8.2 (1.8) | 7.4 (1.5) | 19.7 (27.1) |
| Grosor pared posterior (mm) | 8.0 (1.2) | 8.1 (1.5) | 8.5 (2.2) |
| Dim. diastolica int. ventriculo izq. (mm) | 49.8 (8.2) | 45.9 (6.3) | 46.7 (7.3) |
| Dim. sistolica int.ventriculo izq. (mm) | 30.4 (5.3) | 33.3 (3.9) | 29.2 (5.0) |
| indice masa ventriculo izquierdo | 78.1 (22.6) | 1178.7 (2948.9) | 76.0 (21.4) |
| frac. eyec. ventriculo izquierdo % | 60.4 (5.3) | 57.1 (3.7) | 59.8 (3.5) |
| Electrocardiograma | Anormal: 3 (33.3%); Normal: 6 (66.7%) | Anormal: 5 (71.4%); Normal: 2 (28.6%) | Anormal: 1 (16.7%); Normal: 5 (83.3%) |
| Ecocardiograma | Anormal clínicamente no significativo: 8 (100.0%) | Anormal clínicamente no significativo: 5 (71.4%); Normal clínicamente significativo: 2 (28.6%) | Anormal clínicamente no significativo: 5 (83.3%); Normal clínicamente significativo: 1 (16.7%) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
res_num7 <- df_long_gastrico %>%
select(event_name, all_of(vars_numericas2)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
res_cat7 <- df_long_gastrico %>%
select(event_name, all_of(vars_categoricas2)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
tabla_final7 <- bind_rows(res_num7, res_cat7) %>%
pivot_wider(names_from = event_name, values_from = resumen)
tabla_final7 <- tabla_final7 %>%
mutate(variable = factor(variable, levels = orden_filas2)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos2[as.character(variable)])
# Crear tabla GT estilo gtsummary
gt_examen7 <- tabla_final7 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables examen laboratorio cancer gastrico**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_iniciox),
`Ciclo 2` = md(titulo_c2x),
`Visita de finalización` = md(titulo_finalx)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
#Leucemias
res_num8 <- df_long_leucemias %>%
select(event_name, all_of(vars_numericas2)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
group_by(event_name, variable) %>%
summarise(
resumen = sprintf("%.1f (%.1f)", mean(valor, na.rm = TRUE), sd(valor, na.rm = TRUE)),
.groups = "drop"
)
res_cat8 <- df_long_leucemias %>%
select(event_name, all_of(vars_categoricas2)) %>%
pivot_longer(-event_name, names_to = "variable", values_to = "valor") %>%
filter(!is.na(valor)) %>%
group_by(event_name, variable, valor) %>%
summarise(n = n(), .groups = "drop_last") %>%
mutate(pct = n / sum(n) * 100) %>%
ungroup() %>%
mutate(resumen = sprintf("%s: %d (%.1f%%)", valor, n, pct)) %>%
group_by(event_name, variable) %>%
summarise(resumen = paste(resumen, collapse = "; "), .groups = "drop") # Junta todos los niveles
tabla_final8 <- bind_rows(res_num8, res_cat8) %>%
pivot_wider(names_from = event_name, values_from = resumen)
tabla_final8 <- tabla_final8 %>%
mutate(variable = factor(variable, levels = orden_filas2)) %>%
arrange(variable) %>%
mutate(variable = nombres_bonitos2[as.character(variable)])
# Crear tabla GT estilo gtsummary
gt_examen8 <- tabla_final8 %>%
gt() %>%
# TÍTULO PRINCIPAL
tab_header(
title = md("** Evolución variables examen laboratorio Leucemias**")
) %>%
cols_label(
variable = "**Característica**",
`Visita de inicio/Ciclo 1` = md(titulo_inicioy),
`Ciclo 2` = md(titulo_c2y),
`Visita de finalización` = md(titulo_finaly)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "bottom", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "top", weight = px(2)),
locations = cells_body(rows = 1)
) %>%
tab_style(
style = cell_text(align = "left"),
locations = cells_body(columns = variable)
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_body(columns = -variable)
) %>%
# Estilo del título
tab_style(
style = cell_text(
weight = "bold",
size = px(14),
align = "left"
),
locations = cells_title(groups = "title")
) %>%
tab_options(
table.font.names = "Arial",
table.font.size = px(12),
data_row.padding = px(5),
table.border.top.style = "hidden",
table.border.bottom.style = "solid",
table.border.bottom.width = px(2),
column_labels.border.bottom.width = px(2),
column_labels.border.top.width = px(2),
heading.align = "left"
) %>%
tab_footnote(
footnote = "Media (DE) para variables continuas; Moda: n (%) para variables categóricas",
locations = cells_column_labels(columns = variable)
)
tablas_juntas2 <- tagList(
gt_examen7,
htmltools::br(), htmltools::br(), # doble salto de línea
gt_examen8
)
tablas_juntas2| ** Evolución variables examen laboratorio cancer gastrico** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 9 |
Ciclo 2 N = 6 |
Finalización N = 8 |
| Análisis Orina | Anormal: 7 (77.8%); Normal: 2 (22.2%) | Anormal: 4 (66.7%); Normal: 2 (33.3%) | Anormal: 5 (83.3%); Normal: 1 (16.7%) |
| Trigliceridos (mg/dL) | 107.5 (33.7) | 121.3 (61.4) | 117.1 (26.3) |
| Colesterol (mg/dL) | 169.8 (18.8) | 186.5 (51.8) | 170.8 (55.2) |
| hdl (mg/dL) | 54.3 (15.4) | 53.0 (11.6) | 54.3 (15.1) |
| ldl (mg/dL) | 95.8 (18.8) | 114.8 (54.0) | 93.0 (42.6) |
| fosfata alcalina (U/L) | 226.3 (187.7) | 118.7 (44.9) | 112.9 (15.0) |
| ast (U/L) | 22.1 (8.3) | 28.3 (10.4) | 26.2 (12.2) |
| alt (U/L) | 16.8 (8.7) | 24.1 (11.3) | 25.4 (26.4) |
| bilirrubina total (mg/dL) | 0.5 (0.2) | 0.4 (0.2) | 0.5 (0.3) |
| bilirrubina directa (mg/dL) | 0.2 (0.1) | 0.2 (0.1) | 0.2 (0.1) |
| nitrogeno ureico (mg/dL) | 13.4 (4.6) | 14.4 (6.7) | 13.3 (5.7) |
| creatinina serica (mg/dL) | 0.7 (0.2) | 0.6 (0.1) | 0.6 (0.1) |
| acido urico (mg/dL) | 3.7 (0.9) | 3.9 (0.5) | 3.5 (0.3) |
| lactato deshidrogenasa (U/L) | 173.0 (49.9) | 206.1 (40.7) | 231.5 (47.8) |
| ferratina (ng/dL) | 307.2 (495.4) | 26.0 (3.5) | 81.2 (55.2) |
| albumia (g/dL) | 3.8 (0.3) | 4.1 (0.2) | 3.9 (0.4) |
| hierro (ug/dL) | 29.2 (7.4) | 33.3 (8.7) | 33.3 (13.1) |
| recuento total eitrocitos (U/L) | 12600000.0 (16953465.7) | 4230000.0 (1035229.4) | 4122500.0 (811598.2) |
| recuento plaquetas (U/L) | 325250.0 (145525.3) | 233133.3 (32110.0) | 263325.0 (129745.2) |
| hemoglobina en (gr/dL) | 11.2 (1.8) | 11.7 (2.0) | 11.3 (1.4) |
| hematrocito % | 34.2 (5.6) | 36.2 (6.4) | 34.6 (4.8) |
| recuento total leucocito (U/L) | 5576.5 (4045.6) | 4803.3 (1275.6) | 5417.5 (3792.3) |
| netrofilos V. abs (U/L) | 5225.0 (1646.0) | 2996.7 (1054.1) | 4100.0 (3688.7) |
| neutrofilos % | 73.5 (6.0) | 61.6 (6.5) | 70.1 (12.9) |
| linfocitos v. abs (U/L) | 1200.0 (216.0) | 1090.0 (215.2) | 870.0 (375.4) |
| linfocitos % | 17.7 (5.6) | 24.5 (9.9) | 20.4 (11.2) |
| eosinofilos v. abs | 75.0 (95.7) | 100.0 (0.0) | 55.0 (52.6) |
| eosinofilos % | 1.5 (1.3) | 1.9 (0.5) | 1.4 (1.2) |
| basofilos v. abs (U/L) | 50.0 (57.7) | 43.3 (51.3) | 7.5 (15.0) |
| basofilos % | 0.8 (0.4) | 0.9 (0.5) | 0.6 (0.6) |
| monocitos v. abs (U/L) | 450.0 (264.6) | 523.3 (302.7) | 360.0 (170.5) |
| monocitos % | 6.5 (2.2) | 10.8 (4.0) | 7.4 (2.1) |
| glicemia (mg/dL) | 94.8 (12.8) | 85.6 (3.5) | 94.0 (6.7) |
| sodio (mmol/L) | 137.8 (1.9) | 140.3 (1.5) | 138.5 (4.0) |
| calcio (mg/dL) | 8.6 (0.6) | 8.7 (0.2) | 9.1 (0.6) |
| potasio (mmol/L) | 3.9 (0.4) | 4.1 (0.4) | 4.0 (0.5) |
| magnesio (mg/dL) | 2.0 (0.1) | 2.0 (0.1) | 2.1 (0.2) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
| ** Evolución variables examen laboratorio Leucemias** | |||
|---|---|---|---|
| **Característica**1 | Ciclo 1 N = 15 |
Ciclo 2 N = 14 |
Finalización N = 15 |
| Análisis Orina | Anormal: 5 (35.7%); Normal: 9 (64.3%) | Anormal: 5 (50.0%); Normal: 5 (50.0%) | Anormal: 7 (63.6%); Normal: 4 (36.4%) |
| Trigliceridos (mg/dL) | 171.2 (78.5) | 117.3 (39.2) | 168.1 (101.1) |
| Colesterol (mg/dL) | 140.8 (37.6) | 140.1 (42.3) | 158.8 (38.3) |
| hdl (mg/dL) | 28.8 (8.8) | 30.2 (7.2) | 35.8 (17.0) |
| ldl (mg/dL) | 78.6 (25.7) | 86.4 (37.3) | 89.4 (37.3) |
| fosfata alcalina (U/L) | 146.8 (96.5) | 168.0 (103.3) | 176.5 (85.1) |
| ast (U/L) | 27.2 (9.2) | 38.5 (31.5) | 42.9 (66.5) |
| alt (U/L) | 35.2 (24.1) | 58.2 (56.8) | 48.4 (68.0) |
| bilirrubina total (mg/dL) | 0.7 (0.4) | 1.0 (0.5) | 0.8 (0.4) |
| bilirrubina directa (mg/dL) | 0.3 (0.1) | 0.3 (0.2) | 0.3 (0.2) |
| nitrogeno ureico (mg/dL) | 20.4 (12.3) | 13.1 (4.2) | 14.6 (3.9) |
| creatinina serica (mg/dL) | 0.8 (0.2) | 0.7 (0.2) | 0.7 (0.2) |
| acido urico (mg/dL) | 3.6 (1.3) | 3.3 (1.3) | 6.2 (1.9) |
| lactato deshidrogenasa (U/L) | 727.7 (1049.1) | 331.0 (252.2) | 248.3 (187.8) |
| ferratina (ng/dL) | 4716.1 (6739.0) | 5464.8 (4845.6) | 10456.5 (11828.1) |
| albumia (g/dL) | 3.7 (0.6) | 3.3 (0.5) | 3.6 (0.9) |
| hierro (ug/dL) | 168.2 (91.8) | 135.7 (77.4) | 118.4 (46.6) |
| recuento total eitrocitos (U/L) | 3000000.0 (999862.5) | 2851428.6 (572259.5) | 3426666.7 (1055019.7) |
| recuento plaquetas (U/L) | 88311.1 (107907.6) | 84428.6 (189927.1) | 171033.3 (136200.8) |
| hemoglobina en (gr/dL) | 9.1 (3.1) | 8.6 (1.5) | 10.8 (3.6) |
| hematrocito % | 27.4 (9.3) | 25.6 (5.6) | 32.2 (10.8) |
| recuento total leucocito (U/L) | 4947.8 (3104.8) | 1780.0 (2036.1) | 3655.0 (1173.8) |
| netrofilos V. abs (U/L) | 1103.4 (1383.3) | 288.6 (250.5) | 2336.7 (1306.3) |
| neutrofilos % | 24.2 (15.2) | 24.3 (22.5) | 61.6 (32.8) |
| linfocitos v. abs (U/L) | 2361.5 (2402.8) | 1325.7 (2015.9) | 1045.0 (846.2) |
| linfocitos % | 55.5 (23.4) | 65.5 (26.2) | 31.2 (34.3) |
| eosinofilos v. abs | 87.8 (195.6) | 2.9 (7.6) | 55.0 (56.8) |
| eosinofilos % | 1.5 (2.4) | 1.0 (2.0) | 1.6 (1.0) |
| basofilos v. abs (U/L) | 156.7 (466.3) | 1.4 (3.8) | 8.3 (13.3) |
| basofilos % | 2.1 (5.9) | 0.1 (0.3) | 0.3 (0.4) |
| monocitos v. abs (U/L) | 716.7 (1051.2) | 128.6 (160.8) | 191.7 (172.6) |
| monocitos % | 14.5 (13.3) | 8.6 (10.5) | 4.9 (5.2) |
| glicemia (mg/dL) | 117.8 (39.7) | 106.9 (13.0) | 96.3 (12.9) |
| sodio (mmol/L) | 136.1 (3.2) | 138.7 (2.0) | 139.3 (3.0) |
| calcio (mg/dL) | 8.8 (0.5) | 8.8 (1.0) | 9.2 (1.0) |
| potasio (mmol/L) | 4.3 (0.5) | 4.4 (0.3) | 4.1 (0.4) |
| magnesio (mg/dL) | 2.0 (0.4) | 2.0 (0.2) | 2.0 (0.2) |
| 1 Media (DE) para variables continuas; Moda: n (%) para variables categóricas | |||
Se verificó los eventos adversos reportados por los pacientes cruzado por el momento de presentación
df_AE <- datos_f %>%
filter(event_name == "Evento adverso")
df_AE$nombre_del_evento_adverso <- df_AE$nombre_del_evento_adverso %>%
stri_trans_general("Latin-ASCII") %>% # quitar tildes
tolower() %>% # minusculas
gsub("[^a-z0-9 ]", " ", .) %>% # quitar signos
gsub("\\s+", " ", .) %>% # espacios dobles
trimws()
table(df_AE$nombre_del_evento_adverso) %>%
kable()| Var1 | Freq |
|---|---|
| accidente cerebrovascular | 1 |
| alopecia | 1 |
| alteraciones del animo | 1 |
| alteraciones vasculares ateromatosis calcificada de segmentos intracraneales de las arterias carotidas internas | 1 |
| anemia | 5 |
| anorexia | 2 |
| apendicitis | 1 |
| apendicitis aguda | 1 |
| artralgias | 1 |
| artritis | 1 |
| ascitis | 1 |
| bacteremia | 1 |
| bacteriemia | 1 |
| bajo peso | 1 |
| bronquiolitis bacteriana | 1 |
| caida desde su propia altura | 1 |
| cefalea | 2 |
| cefalea origen oftalmologico | 1 |
| colitis | 1 |
| colitis neutropenica | 2 |
| constipacion | 3 |
| constipacion estrenimiento | 1 |
| contusion de muneca izquierda | 1 |
| derrame pericardico | 1 |
| derrame pleural minima cantidad de liquido pleural bilateral | 1 |
| deshidratacion | 1 |
| desordenes del sistema nervioso signos leves de atrofia cerebral cortical y central | 1 |
| diarrea | 7 |
| disminucion de conteo de linfocitos | 1 |
| disminucion de fraccion de eyeccion | 1 |
| disminucion de fraccion de eyeccion fevi 52 | 1 |
| disminucion de la fraccion de eyeccion | 1 |
| disminucion de la fraccion de eyeccion descenso en 13 3 | 1 |
| disminucion del recuento de linfocitos | 1 |
| disminucion del recuento de neutrofilos | 1 |
| disnea | 2 |
| dolor abdominal | 7 |
| dolor abdominal oncologico | 1 |
| dolor de cabeza | 2 |
| dolor en el pecho | 1 |
| dolor toracico de origen no cardiaco | 1 |
| edema | 1 |
| edema de miembros inferiores | 1 |
| edema pulmonar | 1 |
| elevacion de alt | 5 |
| elevacion de ast | 4 |
| elevacion de bilirrubinas | 1 |
| elevacion de creatinina | 2 |
| elevacion de deshidrogenasa lactica | 2 |
| elevacion de fosfatasa alcalina | 2 |
| elevacion de la fosfatasa alcalina | 1 |
| elevacion de lactato deshidrogenasa | 1 |
| emesis | 2 |
| enfermedad diarreica aguda de probable origen infeccioso | 1 |
| enterocolitis | 1 |
| epistaxis | 3 |
| escleritis anterior difusa ojo derecho | 1 |
| falla cardiaca | 2 |
| fatiga | 1 |
| fiebre | 2 |
| fiebre de origen tumoral | 1 |
| fistula gastrointestinal | 1 |
| fistula gastrointestinal enterocutanea vs progresion tumoral a pared abdominal | 1 |
| flebitis infecciosa tromboflebitis de vena basilica y vena cubital mediana del antebrazo derecho | 1 |
| fraccion de eyeccion disminuida | 1 |
| hematoma | 1 |
| hematoma intracraneana hematoma subdural | 1 |
| hemorragia conjuntival en ojos bilateral predominio derecho | 1 |
| hemorragia de vias digestivas altas | 2 |
| hemorragia uterina | 1 |
| hipercalcemia | 1 |
| hipercolesterolemia | 1 |
| hiperfosfatemia | 1 |
| hiperglucemia | 1 |
| hiperkalemia | 1 |
| hipertension arterial | 1 |
| hipertrigliceridemia | 4 |
| hipo singulto | 1 |
| hipoalbuminemia | 2 |
| hipocalcemia | 3 |
| hipokalemia | 5 |
| hipokalemia leve | 1 |
| hipomagnesemia | 1 |
| hiponatremia hiponatremia hipovolemica | 1 |
| hipotension | 3 |
| hipoxemia | 2 |
| incremento de lactato deshidrogenasa | 1 |
| infeccion asociada a cateter | 1 |
| infeccion bronquial | 1 |
| infeccion de la piel | 1 |
| infeccion de piel | 1 |
| infeccion de piel paniculitis con sobreinfeccion bacteriana neutropenia febril | 1 |
| infeccion de vias urinarias baja | 1 |
| infeccion pulmonar | 2 |
| infeccion respiratoria alta rinofaringitis viral | 1 |
| intervalo qt prolongado | 1 |
| linfopenia | 1 |
| magnesio bajo | 2 |
| mucositis | 3 |
| mucositis oral | 4 |
| nauseas | 13 |
| neumonia multilobar | 1 |
| neuropatia periferica sensitiva en miembros inferiores | 1 |
| neuropatia sensitiva | 1 |
| neutropenia febril | 12 |
| neutropenia febril bacteremia por k pneumoniae patron usual | 1 |
| neutropenia febril foco gastrointestinal | 2 |
| neutropenia febril foco respiratorio | 1 |
| neutropenia febril riesgo de candidiasis invasiva | 1 |
| ojo seco bilateral | 1 |
| orquiepididimitis | 1 |
| otalgia derecha | 1 |
| otras infecciones e infestaciones infeccion fungica invasiva de brecha | 1 |
| otras infecciones e infestaciones lavado bronco alveolar con evidencia de enterobacter cloacae complex y klebsiella oxytoca con patron de resistencia kpc sarm | 1 |
| otros desordenes cardiacos derrame pericardico minimo | 1 |
| otros desordenes cardiacos imagen con ecogenicidad de tejidos blandos de 5x2 mm altamente movil adherida a extremo distal de cateter central compatible con trombo vs vegetacion | 1 |
| palpitaciones | 1 |
| pancitopenia severa exacerbacion anemia y trombocitopenia | 1 |
| papiloma de la piel verrugas plantares | 1 |
| parestesias | 1 |
| perdida de peso | 5 |
| potasio bajo | 3 |
| progresion de la enfermedad | 1 |
| prolongacion del intervalo qt corregido | 1 |
| prurito | 2 |
| purpura humeda | 1 |
| queratitis epitelial | 1 |
| reaccion alergica | 1 |
| reaccion alergica asociaron con transfusion de plaquetas | 1 |
| reaccion de hipersensibilidad | 1 |
| recaida de leucemia aguda bifenotipica neoplasia benigna maligna o no especificada | 1 |
| recuento de neutrofilos disminuido neutropenia | 1 |
| retinopatia leucemica | 1 |
| rinosinusitis fungica alergica | 1 |
| sangrado gastrointestinal | 1 |
| sangrado oral | 1 |
| sepsis choque septico refractario | 1 |
| sindrome febril | 1 |
| sindrome mano pie | 1 |
| sobrecarga de hierro | 1 |
| sodio bajo | 1 |
| sospecha de dolor toracico cardiaco y coronario | 1 |
| sospecha de infeccion respiratoria | 1 |
| tos | 1 |
| trastorno hidroelectrolitico | 1 |
| trastorno hidroelectrolitico hipokalemia | 2 |
| trastorno hidroelectrolitico hipomagnasemia | 1 |
| trombocitopenia | 2 |
| trombocitopenia severa secundaria a leucemia mieloide aguda | 1 |
| tromboflebitis superficial tromboflebitis en miembro superior izquierdo | 1 |
| trombosis venosa profunda aguda | 1 |
| urticaria | 1 |
| vomito | 1 |
Se intentó categorizar, pendiente por categorizar o verificar el análisis de esta información
df_AE <- df_AE %>%
mutate(evento_agrupado = case_when(
# Apendicitis
grepl("apendicitis", nombre_del_evento_adverso) ~ "apendicitis",
# Dolor abdominal
grepl("dolor abdominal", nombre_del_evento_adverso) ~ "dolor abdominal",
# Neutropenia febril
grepl("neutropenia febril", nombre_del_evento_adverso) ~ "neutropenia febril",
# Elevación de enzimas hepáticas
grepl("elevacion de alt|elevacion de ast", nombre_del_evento_adverso) ~ "elevacion de transaminasas",
# Colitis
grepl("colitis", nombre_del_evento_adverso) ~ "colitis",
# Hipokalemia
grepl("hipokalemia|potasio bajo", nombre_del_evento_adverso) ~ "hipokalemia",
# Hipocalcemia
grepl("hipocalcemia", nombre_del_evento_adverso) ~ "hipocalcemia",
# Mucositis
grepl("mucositis", nombre_del_evento_adverso) ~ "mucositis",
# Disminución de fracción de eyección
grepl("disminucion de.*fraccion de eyeccion|fraccion de eyeccion disminuida",
nombre_del_evento_adverso) ~ "disminucion de fraccion de eyeccion",
# Hemorragia digestiva
grepl("hemorragia de vias digestivas|sangrado gastrointestinal",
nombre_del_evento_adverso) ~ "hemorragia digestiva",
# Infección pulmonar/respiratoria
grepl("infeccion pulmonar|infeccion respiratoria|infeccion bronquial|neumonia",
nombre_del_evento_adverso) ~ "infeccion respiratoria",
# Trastorno hidroelectrolítico
grepl("trastorno hidroelectrolitico", nombre_del_evento_adverso) ~ "trastorno hidroelectrolitico",
# Elevación de fosfatasa alcalina
grepl("elevacion de.*fosfatasa alcalina", nombre_del_evento_adverso) ~ "elevacion de fosfatasa alcalina",
# Elevación de lactato deshidrogenasa
grepl("elevacion de.*deshidrogenasa|incremento de lactato",
nombre_del_evento_adverso) ~ "elevacion de lactato deshidrogenasa",
# Hipomagnesemia
grepl("hipomagnesemia|magnesio bajo|hipomagnasemia", nombre_del_evento_adverso) ~ "hipomagnesemia",
# Hiponatremia
grepl("hiponatremia|sodio bajo", nombre_del_evento_adverso) ~ "hiponatremia",
# Dolor de cabeza/cefalea
grepl("cefalea|dolor de cabeza", nombre_del_evento_adverso) ~ "cefalea",
# Constipación
grepl("constipacion|estrenimiento", nombre_del_evento_adverso) ~ "constipacion",
# Infección de piel
grepl("infeccion de.*piel", nombre_del_evento_adverso) ~ "infeccion de piel",
# Flebitis/tromboflebitis
grepl("flebitis|tromboflebitis", nombre_del_evento_adverso) ~ "tromboflebitis",
# Derrame pleural
grepl("derrame pleural", nombre_del_evento_adverso) ~ "derrame pleural",
# Derrame pericárdico
grepl("derrame pericardico", nombre_del_evento_adverso) ~ "derrame pericardico",
# Fiebre
grepl("fiebre", nombre_del_evento_adverso) ~ "fiebre",
# Nuaseas - vomito
grepl("nauseas", nombre_del_evento_adverso) ~ "nauseas o vomito",
grepl("vomito", nombre_del_evento_adverso) ~ "nauseas o vomito",
#bacteriemia
grepl("bacteremia", nombre_del_evento_adverso) ~ "bacteriemia",
grepl("bacteriemia", nombre_del_evento_adverso) ~ "bacteriemia",
# Otros: mantener original
TRUE ~ nombre_del_evento_adverso
))
# Ver resultados
table(df_AE$evento_agrupado) %>%
kable| Var1 | Freq |
|---|---|
| accidente cerebrovascular | 1 |
| alopecia | 1 |
| alteraciones del animo | 1 |
| alteraciones vasculares ateromatosis calcificada de segmentos intracraneales de las arterias carotidas internas | 1 |
| anemia | 5 |
| anorexia | 2 |
| apendicitis | 2 |
| artralgias | 1 |
| artritis | 1 |
| ascitis | 1 |
| bacteriemia | 2 |
| bajo peso | 1 |
| bronquiolitis bacteriana | 1 |
| caida desde su propia altura | 1 |
| cefalea | 5 |
| colitis | 4 |
| constipacion | 4 |
| contusion de muneca izquierda | 1 |
| derrame pericardico | 2 |
| derrame pleural | 1 |
| deshidratacion | 1 |
| desordenes del sistema nervioso signos leves de atrofia cerebral cortical y central | 1 |
| diarrea | 7 |
| disminucion de conteo de linfocitos | 1 |
| disminucion de fraccion de eyeccion | 5 |
| disminucion del recuento de linfocitos | 1 |
| disminucion del recuento de neutrofilos | 1 |
| disnea | 2 |
| dolor abdominal | 8 |
| dolor en el pecho | 1 |
| dolor toracico de origen no cardiaco | 1 |
| edema | 1 |
| edema de miembros inferiores | 1 |
| edema pulmonar | 1 |
| elevacion de bilirrubinas | 1 |
| elevacion de creatinina | 2 |
| elevacion de fosfatasa alcalina | 3 |
| elevacion de lactato deshidrogenasa | 4 |
| elevacion de transaminasas | 9 |
| emesis | 2 |
| enfermedad diarreica aguda de probable origen infeccioso | 1 |
| epistaxis | 3 |
| escleritis anterior difusa ojo derecho | 1 |
| falla cardiaca | 2 |
| fatiga | 1 |
| fiebre | 3 |
| fistula gastrointestinal | 1 |
| fistula gastrointestinal enterocutanea vs progresion tumoral a pared abdominal | 1 |
| hematoma | 1 |
| hematoma intracraneana hematoma subdural | 1 |
| hemorragia conjuntival en ojos bilateral predominio derecho | 1 |
| hemorragia digestiva | 3 |
| hemorragia uterina | 1 |
| hipercalcemia | 1 |
| hipercolesterolemia | 1 |
| hiperfosfatemia | 1 |
| hiperglucemia | 1 |
| hiperkalemia | 1 |
| hipertension arterial | 1 |
| hipertrigliceridemia | 4 |
| hipo singulto | 1 |
| hipoalbuminemia | 2 |
| hipocalcemia | 3 |
| hipokalemia | 11 |
| hipomagnesemia | 3 |
| hiponatremia | 2 |
| hipotension | 3 |
| hipoxemia | 2 |
| infeccion asociada a cateter | 1 |
| infeccion de piel | 2 |
| infeccion de vias urinarias baja | 1 |
| infeccion respiratoria | 6 |
| intervalo qt prolongado | 1 |
| linfopenia | 1 |
| mucositis | 7 |
| nauseas o vomito | 14 |
| neuropatia periferica sensitiva en miembros inferiores | 1 |
| neuropatia sensitiva | 1 |
| neutropenia febril | 18 |
| ojo seco bilateral | 1 |
| orquiepididimitis | 1 |
| otalgia derecha | 1 |
| otras infecciones e infestaciones infeccion fungica invasiva de brecha | 1 |
| otras infecciones e infestaciones lavado bronco alveolar con evidencia de enterobacter cloacae complex y klebsiella oxytoca con patron de resistencia kpc sarm | 1 |
| otros desordenes cardiacos imagen con ecogenicidad de tejidos blandos de 5x2 mm altamente movil adherida a extremo distal de cateter central compatible con trombo vs vegetacion | 1 |
| palpitaciones | 1 |
| pancitopenia severa exacerbacion anemia y trombocitopenia | 1 |
| papiloma de la piel verrugas plantares | 1 |
| parestesias | 1 |
| perdida de peso | 5 |
| progresion de la enfermedad | 1 |
| prolongacion del intervalo qt corregido | 1 |
| prurito | 2 |
| purpura humeda | 1 |
| queratitis epitelial | 1 |
| reaccion alergica | 1 |
| reaccion alergica asociaron con transfusion de plaquetas | 1 |
| reaccion de hipersensibilidad | 1 |
| recaida de leucemia aguda bifenotipica neoplasia benigna maligna o no especificada | 1 |
| recuento de neutrofilos disminuido neutropenia | 1 |
| retinopatia leucemica | 1 |
| rinosinusitis fungica alergica | 1 |
| sangrado oral | 1 |
| sepsis choque septico refractario | 1 |
| sindrome febril | 1 |
| sindrome mano pie | 1 |
| sobrecarga de hierro | 1 |
| sospecha de dolor toracico cardiaco y coronario | 1 |
| tos | 1 |
| trastorno hidroelectrolitico | 2 |
| trombocitopenia | 2 |
| trombocitopenia severa secundaria a leucemia mieloide aguda | 1 |
| tromboflebitis | 2 |
| trombosis venosa profunda aguda | 1 |
| urticaria | 1 |
Se verifica cuántos pacientes presentaron el evento adverso
n_pacientes_ea <- df_AE %>%
distinct(Record_ID1) %>%
nrow()Se presenta la distribución del evento adverso acorde a la visita realizada.
n_ea <- df_AE %>%
nrow()df_AE$visita_numero <- factor(df_AE$visita_numero, levels = c("Visita de tamizaje", "Visita de inicio/Ciclo 1", "Ciclo2 Ciclo 2", "Visita de Finalización"), labels = c("Tamizaje", "Ciclo 1", "Ciclo 2", "Finalización"))
table(df_AE$seriedad_evento_adverso, df_AE$visita_numero) %>%
addmargins() %>%
kable| Tamizaje | Ciclo 1 | Ciclo 2 | Finalización | Sum | |
|---|---|---|---|---|---|
| Amenaza a la vida | 0 | 3 | 0 | 1 | 4 |
| Causa la muerte | 0 | 2 | 2 | 0 | 4 |
| No serio | 2 | 42 | 114 | 69 | 227 |
| Produjo o prolongo hospitalización | 0 | 7 | 2 | 0 | 9 |
| Sum | 2 | 54 | 118 | 70 | 244 |
Se presenta conteo por paciente
conteo_eventos <- df_AE %>%
count(Record_ID1, name = "n_eventos")
conteo_eventos %>%
kable()| Record_ID1 | n_eventos |
|---|---|
| 1 | 1 |
| 3 | 3 |
| 4 | 6 |
| 6 | 1 |
| 7 | 6 |
| 8 | 11 |
| 9 | 9 |
| 10 | 11 |
| 11 | 8 |
| 12 | 35 |
| 13 | 4 |
| 16 | 6 |
| 17 | 6 |
| 18 | 9 |
| 19 | 11 |
| 20 | 18 |
| 21 | 5 |
| 23 | 8 |
| 25 | 9 |
| 26 | 8 |
| 27 | 10 |
| 28 | 18 |
| 29 | 12 |
| 30 | 30 |
Ahora se revisó por paciente de manera concomitante cuántos eventos adversos fueron presentados
conteo_eventos <- conteo_eventos %>%
mutate(
categoria_eventos = case_when(
n_eventos == 1 ~ "1 evento",
n_eventos >= 2 & n_eventos <= 5 ~ "2 - 5 eventos",
n_eventos >= 6 & n_eventos <= 9 ~ "6 - 9 eventos",
n_eventos >= 10 ~ "10 o más eventos"
),
categoria_eventos = factor(
categoria_eventos,
levels = c("1 evento", "2 - 5 eventos", "6 - 9 eventos", "10 o más eventos")
)
)
table(conteo_eventos$categoria_eventos) %>%
kable()| Var1 | Freq |
|---|---|
| 1 evento | 2 |
| 2 - 5 eventos | 3 |
| 6 - 9 eventos | 10 |
| 10 o más eventos | 9 |
conteo_eventos1 <- conteo_eventos%>%
left_join(df_AE, by = "Record_ID1") %>%
distinct()
pacientes_visita <- df_AE %>%
select(Record_ID1, visita_numero, seriedad_evento_adverso) %>%
distinct()
conteo_eventos1 <- conteo_eventos %>%
left_join(pacientes_visita, by = "Record_ID1")
conteo_eventos2 <- conteo_eventos1%>%
left_join(df_long, by = "Record_ID1") %>%
distinct()
diagnostico <- df_long %>%
select(Record_ID1,TIPO_DX ) %>%
distinct()
conteo_eventos2 <- conteo_eventos1 %>%
left_join(diagnostico, by = "Record_ID1")
df_AE_gastrico <- conteo_eventos2 %>% filter(TIPO_DX == "Cancer_Gastrico")
df_AE_Leucemias <- conteo_eventos2 %>% filter(TIPO_DX == "Leucemias")
table(df_AE_gastrico$seriedad_evento_adverso, df_AE_gastrico$visita_numero) %>%
addmargins() %>%
kable| Tamizaje | Ciclo 1 | Ciclo 2 | Finalización | Sum | |
|---|---|---|---|---|---|
| Causa la muerte | 0 | 2 | 0 | 0 | 2 |
| No serio | 0 | 2 | 6 | 5 | 13 |
| Produjo o prolongo hospitalización | 0 | 3 | 0 | 0 | 3 |
| Sum | 0 | 7 | 6 | 5 | 18 |
table(df_AE_gastrico$categoria_eventos) %>%
kable| Var1 | Freq |
|---|---|
| 1 evento | 2 |
| 2 - 5 eventos | 5 |
| 6 - 9 eventos | 11 |
| 10 o más eventos | 0 |
table(df_AE_Leucemias$seriedad_evento_adverso, df_AE_Leucemias$visita_numero) %>%
addmargins() %>%
kable| Tamizaje | Ciclo 1 | Ciclo 2 | Finalización | Sum | |
|---|---|---|---|---|---|
| Amenaza a la vida | 0 | 3 | 0 | 1 | 4 |
| Causa la muerte | 0 | 0 | 2 | 0 | 2 |
| No serio | 1 | 7 | 12 | 11 | 31 |
| Produjo o prolongo hospitalización | 0 | 4 | 1 | 0 | 5 |
| Sum | 1 | 14 | 15 | 12 | 42 |
table(df_AE_Leucemias$categoria_eventos) %>%
kable| Var1 | Freq |
|---|---|
| 1 evento | 0 |
| 2 - 5 eventos | 2 |
| 6 - 9 eventos | 12 |
| 10 o más eventos | 29 |
#df1 <- gt_examen3 %>% gt::as_raw_html() %>% rvest::read_html() %>% rvest::html_table() %>% .[[1]]
#df2 <- gt_examen4 %>% gt::as_raw_html() %>% rvest::read_html() %>% rvest::html_table() %>% .[[1]]
#library(openxlsx)
#wb <- createWorkbook()
#addWorksheet(wb, "Cancer_Gastrico")
#writeData(wb, "Cancer_Gastrico", df1)
#addWorksheet(wb, "Leucemias")
#writeData(wb, "Leucemias", df2)
#saveWorkbook(wb, "tablas_juntas.xlsx", overwrite = TRUE)