| Nicolás Martínez Ramos |
|---|
| Bioestadístico Oficina de Investigaciones |
| Psicólogo, Esp. medición y evaluación psicológica y mg. bioestadística |
library(readxl)
BASE <- read_excel("ACTITUDES HACIA LOS GRUPOS BALINT Y SU INFLUENCIA EN EL BIENESTAR PSICOSOCIAL(1-177).xlsx") # 5-08-2026
library(dplyr)
library(dlookr)
library(DT)
library(janitor)
BASE <- BASE %>%
clean_names() # Convierte todo a snake_case automáticamente#Items
names(BASE)[15:29] <- paste0("i4_", 1:15)
names(BASE)[30] <- "i5_1"
#recodificando los niveles de los items
BASE[15:30] <- lapply(BASE[15:30], function(x) as.numeric(gsub("=.*", "", x)))
#creando copia de factor de los items
nuevas_vars <- lapply(BASE[15:30], as.factor)
names(nuevas_vars) <- paste0(names(BASE)[15:30], "_f")
BASE <- cbind(BASE, nuevas_vars)
#Variables sociodemográficas
##edad
BASE$edad[BASE$edad == "juan fernando camargo arenas"] <- NA #ID 130
BASE$edad2 <- as.numeric(gsub("=.*", "", BASE$edad))
##sexo
BASE$genero <- as.factor(gsub("^[A-Z]\\.\\s*", "", BASE$genero))
##profesion
BASE$profesion_unificada <- case_when(
grepl("resident", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Residente de medicina",
grepl("especialista", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Médico especialista",
grepl("medic[ao] general|^medic[ao]$", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Médico general",
grepl("enfermer[ií]a$|auxiliar de enfermer", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Auxiliar de enfermería",
grepl("coordinadora de enfermer", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Coordinadora de enfermería",
grepl("enfermero", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Enfermero(a)",
grepl("tecnico en auxiliar", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Técnico auxiliar de enfermería",
grepl("administrativo", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Administrativo",
grepl("biolog", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Bióloga",
grepl("citohistotecnolog", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Citohistotecnóloga",
grepl("fisioterapeuta", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Fisioterapeuta",
grepl("ingeniero de sistemas", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Ingeniero de sistemas",
grepl("instrumentadora", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Instrumentadora quirúrgica",
grepl("qu[ií]mic[ao] far", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Químico farmacéutico",
grepl("^asistencial$", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Asistencial",
grepl("^X$", BASE$cual_es_su_profesion, ignore.case = TRUE) ~ "Desconocido",
TRUE ~ as.character(BASE$cual_es_su_profesion)
)
BASE$profesion_unificada <- as.factor(BASE$profesion_unificada)
## especialidad
BASE$especialidad_unificada <- case_when(
grepl("anestesiolog", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Anestesiología",
grepl("^an[oó]nimo$", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Desconocido",
grepl("cirugia pediatrica|cirug[ií]a pedi[aá]trica", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Cirugía pediátrica",
grepl("^cirujano$", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Cirugía general",
grepl("paliativ", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Cuidados paliativos",
grepl("urgencia|emergencia", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Medicina de urgencias/emergencias",
grepl("neonatolog", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Neonatología",
grepl("neumolog.*pediatr|pediatr.*neumolog", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Neumología pediátrica",
grepl("medicina.*familiar|residente de medicina familiar", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Medicina familiar",
grepl("medicina interna", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Medicina interna",
grepl("medicina\\s*general|medico general|médico general", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Medicina general",
grepl("^general$", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Medicina general",
grepl("geriatria|geriatría", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Geriatría",
grepl("hematolog", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Hematología",
grepl("pediatr", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Pediatría",
grepl("patologia|patología|sst.*patolog", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Patología",
grepl("psiquiatr", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Psiquiatría",
grepl("radioterapia", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Radioterapia",
grepl("radiolog", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Radiología",
grepl("urologia|urología", BASE$cual_es_su_especialidad, ignore.case = TRUE) ~ "Urología",
TRUE ~ as.character(BASE$cual_es_su_especialidad)
)
BASE$especialidad_unificada <- as.factor(BASE$especialidad_unificada)
## años ejercicio profesional
BASE$anos_de_ejercicio_profesional <- as.factor(gsub("^[A-Z]\\.\\s*", "", BASE$anos_de_ejercicio_profesional))
#cargo desempeñado
BASE$esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo <- as.factor(gsub("^[A-Z]\\.\\s*", "", BASE$esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo))
#participacio nen actividades docentes
BASE$participa_en_actividades_docentes <- as.factor(gsub("^[A-Z]\\.\\s*", "", BASE$participa_en_actividades_docentes))
library(stringr)
library(stringi)
# 1. Normalizar texto: minúsculas, sin tildes, sin espacios extra
esp <- BASE$cual_es_su_profesion %>%
str_to_lower() %>%
stri_trans_general("Latin-ASCII") %>%
str_squish()
# 2. Patrones
pat_enfermeria <- "enfermer|auxiliar"
pat_medico <- paste(
"anestes", "cirug", "paliativ", "dolor", "emergenc", "urgenc",
"fellow", "neonat", "general", "geriatr", "hemat", "medicina",
"medico", "pediatr", "patolog", "psiquiat", "radiol", "radioter",
"residente", "urolog", "neumol",
sep = "|"
)
# 3. Nueva variable (residentes y fellows quedan en médicos)
BASE$grupo_profesional <- case_when(
str_detect(esp, pat_enfermeria) ~ "Enfermería",
str_detect(esp, pat_medico) ~ "Profesionales médicos",
TRUE ~ "Otros"
) %>%
factor(levels = c("Profesionales médicos", "Enfermería", "Otros"))edad se reportó como variable continua.
library(gtsummary)
tabla0 <- BASE %>%
select(ha_participado_alguna_vez_en_un_grupo_balint_ya_sea_actualmente_o_en_el_pasado, durante_cuanto_tiempo_ha_participado_en_grupos_balint, a_durante_mis_estudios_de_pregrado, b_durante_la_residencia_medica,
c_como_especialista_subespecialista, d_durante_mis_estudios_para_subespecialista, e_como_auxiliar_de_enfermeria_enfermer, f_como_administrativo, genero, grupo_profesional, profesion_unificada, especialidad_unificada, anos_de_ejercicio_profesional, esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo, participa_en_actividades_docentes, edad2) %>%
tbl_summary(
type = list(
all_categorical() ~ "categorical",
edad2 ~ "continuous"
),
label = list(
ha_participado_alguna_vez_en_un_grupo_balint_ya_sea_actualmente_o_en_el_pasado ~ "Participación actual o pasada en grupo balint",
durante_cuanto_tiempo_ha_participado_en_grupos_balint ~ "Tiempo participación grpo balint",
a_durante_mis_estudios_de_pregrado ~ "Durante pregrado",
b_durante_la_residencia_medica ~ "Durante Residencia médica",
c_como_especialista_subespecialista ~ "Como Especialista - subespecialista",
d_durante_mis_estudios_para_subespecialista ~ "Durante estudios subespecialidad",
e_como_auxiliar_de_enfermeria_enfermer ~ "Como auxiliar de enfermería",
f_como_administrativo ~ "Como administrativo",
genero ~ "Género",
grupo_profesional ~ "Grupo profesional",
profesion_unificada ~ "Profesion",
especialidad_unificada ~ "Especialidad",
anos_de_ejercicio_profesional ~ "Años ejercicio profesional",
esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo ~ "Desempeño trabajo en que el tenga personal a cargo",
participa_en_actividades_docentes ~ "Partiipación act. docente",
edad2 ~ "Edad"
),
statistic = list(
all_categorical() ~ "{n} ({p}%)",
edad2 ~ "{mean} ({sd})"
),
digits = list(
all_categorical() ~ 1,
edad2 ~ 1
),
missing = "ifany",
missing_text = "Sin dato"
) %>%
modify_header(label ~ "**Variable**") %>%
bold_labels() %>%
modify_caption("**Tabla 1**")
library(writexl)
tabla0 %>%
as_tibble() %>%
write_xlsx("tabla0.xlsx")
tabla0| Variable | N = 1771 |
|---|---|
| Participación actual o pasada en grupo balint | |
| Actualmente participo en un grupo Balint. | 80.0 (45.2%) |
| He participado en un grupo Balint en el pasado. | 84.0 (47.5%) |
| Nunca he participado en un grupo Balint. | 13.0 (7.3%) |
| Tiempo participación grpo balint | |
| De 1 a 2 años. | 49.0 (27.7%) |
| De 2 a 3 años | 10.0 (5.6%) |
| Más de 3 años. | 34.0 (19.2%) |
| Menos de un año. | 84.0 (47.5%) |
| Durante pregrado | |
| NO | 168.0 (94.9%) |
| SI | 9.0 (5.1%) |
| Durante Residencia médica | |
| NO | 118.0 (66.7%) |
| SI | 59.0 (33.3%) |
| Como Especialista - subespecialista | |
| NO | 140.0 (79.1%) |
| SI | 37.0 (20.9%) |
| Durante estudios subespecialidad | |
| NO | 173.0 (97.7%) |
| SI | 4.0 (2.3%) |
| Como auxiliar de enfermería | |
| NO | 139.0 (78.5%) |
| SI | 38.0 (21.5%) |
| Como administrativo | |
| NO | 132.0 (74.6%) |
| SI | 45.0 (25.4%) |
| Género | |
| Femenino | 133.0 (75.1%) |
| Masculino | 44.0 (24.9%) |
| Grupo profesional | |
| Profesionales médicos | 93.0 (52.5%) |
| Enfermería | 52.0 (29.4%) |
| Otros | 32.0 (18.1%) |
| Profesion | |
| Administrativo | 23.0 (13.0%) |
| Asistencial | 1.0 (0.6%) |
| Auxiliar de enfermería | 8.0 (4.5%) |
| Bióloga | 1.0 (0.6%) |
| Citohistotecnóloga | 1.0 (0.6%) |
| Desconocido | 1.0 (0.6%) |
| Enfermero(a) | 44.0 (24.9%) |
| Fisioterapeuta | 1.0 (0.6%) |
| Ingeniero de sistemas | 1.0 (0.6%) |
| Instrumentadora quirúrgica | 1.0 (0.6%) |
| Médica General | 1.0 (0.6%) |
| Médico especialista | 37.0 (20.9%) |
| Médico general | 6.0 (3.4%) |
| Químico farmacéutico | 2.0 (1.1%) |
| Residente de medicina | 49.0 (27.7%) |
| Especialidad | |
| Anestesiología | 5.0 (6.5%) |
| Cirugía general | 1.0 (1.3%) |
| Cirugía pediátrica | 1.0 (1.3%) |
| Cuidados paliativos | 7.0 (9.1%) |
| Desconocido | 1.0 (1.3%) |
| Geriatría | 2.0 (2.6%) |
| Hematología | 2.0 (2.6%) |
| Medicina de urgencias/emergencias | 9.0 (11.7%) |
| Medicina familiar | 9.0 (11.7%) |
| Medicina general | 7.0 (9.1%) |
| Medicina interna | 6.0 (7.8%) |
| Neonatología | 2.0 (2.6%) |
| Neumología pediátrica | 1.0 (1.3%) |
| Patología | 2.0 (2.6%) |
| Pediatría | 7.0 (9.1%) |
| Psiquiatría | 3.0 (3.9%) |
| Radiología | 5.0 (6.5%) |
| Radioterapia | 1.0 (1.3%) |
| Urología | 6.0 (7.8%) |
| Sin dato | 100 |
| Años ejercicio profesional | |
| 11-19 años | 47.0 (26.6%) |
| 6-10 años | 31.0 (17.5%) |
| Hasta 5 años | 57.0 (32.2%) |
| Más de 20 años. | 42.0 (23.7%) |
| Desempeño trabajo en que el tenga personal a cargo | |
| No | 100.0 (56.5%) |
| Sí | 77.0 (43.5%) |
| Partiipación act. docente | |
| No | 110.0 (62.1%) |
| Sí | 67.0 (37.9%) |
| Edad | 37.4 (8.7) |
| Sin dato | 11 |
| 1 n (%); Mean (SD) | |
library(likert)
library(ggplot2)
library(dplyr)
items_directos <- paste0("i4_", 1:11)
items_invertidos <- c(paste0("i4_", 12:15), "i5_1")
niveles <- c("Desfavorable", "Neutro", "Favorable")
BASE <- BASE %>%
mutate(
# Ítems directos: 1-2 = Desfavorable, 3 = Neutro, 4-5 = Favorable
across(
all_of(items_directos),
~ factor(case_when(
. %in% 1:2 ~ "Desfavorable",
. == 3 ~ "Neutro",
. %in% 4:5 ~ "Favorable",
TRUE ~ NA_character_
), levels = niveles),
.names = "{.col}_cat"
),
# Ítems invertidos: 1-2 = Favorable, 3 = Neutro, 4-5 = Desfavorable
across(
all_of(items_invertidos),
~ factor(case_when(
. %in% 1:2 ~ "Favorable",
. == 3 ~ "Neutro",
. %in% 4:5 ~ "Desfavorable",
TRUE ~ NA_character_
), levels = niveles),
.names = "{.col}_cat"
)
)
datos_likert <- BASE %>%
select(i4_1_cat, i4_2_cat, i4_3_cat, i4_4_cat, i4_5_cat, i4_6_cat, i4_7_cat, i4_8_cat, i4_9_cat, i4_10_cat, i4_11_cat, i4_12_cat, i4_13_cat, i4_14_cat, i4_15_cat, i5_1_cat)
names(datos_likert) <- c(
"4.1 Relaciones con pacientes",
"4.2 Relación apoyo colegas",
"4.3 Mejoró relaciones equipo",
"4.4 Resolución de problemas",
"4.5 Disminuyó burnout",
"4.6 Manejo de pacientes",
"4.7 Empatía",
"4.8 Satisfacción",
"4.9 Autocuidado",
"4.10 Red de apoyo",
"4.11 Identidad profesional",
"4.12 Discusiones aburridas",
"4.13 Discusiones superficiales",
"4.14 Incomodidad al compartir",
"4.15 Orientación no profesional",
"5.1 Importancia del Grupo Balint"
)
library(ggstats)
colores_likert <- c(
"Desfavorable" = "indianred3",
"Neutro" = "#FFDEAD",
"Favorable" = "steelblue"
)
g_likert <- gglikert_stacked(datos_likert, labels_size = 6) +
scale_fill_manual(values = colores_likert, name = "Respuesta") +
ggtitle("Escala Likert", subtitle = "Actitudes Grupo Balint") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size = 25, color = "black"),
plot.subtitle = element_text(size = 20, color = "black"),
axis.text = element_text(color = "black", size = 20),
axis.title = element_text(color = "black"),
legend.text = element_text(color = "black", size = 20),
legend.title = element_text(color = "black", size = 20, face = "bold"),
legend.position = "bottom",
panel.grid.major.y = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)
g_likertggsave(
filename = file.path("likert_balint.png"),
plot = g_likert,
width = 14, height = 10, dpi = 300, bg = "white",
scale = 0.4
)
g_likertdatos_likert2 <- datos_likert
names(datos_likert2) <- c(
"4.1. El GB mejoró mis relaciones con los pacientes",
"4.2. El GB me ayudó a establecer una relación de apoyo con mis colegas",
"4.3. El GB mejoró mis relaciones con otros miembros del equipo multidisciplinario",
"4.4. El GB me proporcionó habilidades para la resolución de problemas en el entorno profesional",
"4.5. El GB me ayudó a aliviar el agotamiento profesional (burnout)",
"4.6. El GB facilitó un mejor manejo de los pacientes (o usuarios) en mi consulta o atención",
"4.7. El GB mejoró mis habilidades de empatía hacia los pacientes (o usuarios)",
"4.8. El GB me hizo sentir satisfecho (a).",
"4.9. Mi preocupación por el autocuidado fue abordada en el GB",
"4.10. El GB se convirtió en una valiosa red de apoyo profesional para mi",
"4.11. El GB contribuyó al desarrollo de mi identidad profesional",
"4.12. Las discusiones en el GB me resultaron aburridas",
"4.13. Las discusiones en el GB son superficiales",
"4.14. Me sentí incómodo (a) al compartir mis casos en el GB",
"4.15. La orientación brindada en el GB no fue profesional",
"5.1. ¿Qué tan importante considera que es la participación en el grupo Balint para su bienestar profesional?"
)
g_likert2 <- gglikert_stacked(datos_likert2, labels_size = 6) +
scale_fill_manual(values = colores_likert, name = "Respuesta") +
ggtitle("Escala Likert", subtitle = "Actitudes Grupo Balint") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size = 25, color = "black"),
plot.subtitle = element_text(size = 20, color = "black"),
axis.text = element_text(color = "black", size = 20),
axis.title = element_text(color = "black"),
legend.text = element_text(color = "black", size = 20),
legend.title = element_text(color = "black", size = 20, face = "bold"),
legend.position = "bottom",
panel.grid.major.y = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)
g_likert2ggsave(
filename = file.path("likert_balint2.png"),
plot = g_likert2,
width = 14, height = 10, dpi = 300, bg = "white",
scale = 0.4
)
g_likert2BASE_MED <- BASE %>% filter(grupo_profesional == "Profesionales médicos")
datos_likert_MED <- BASE_MED %>%
select(i4_1_cat, i4_2_cat, i4_3_cat, i4_4_cat, i4_5_cat, i4_6_cat, i4_7_cat, i4_8_cat, i4_9_cat, i4_10_cat, i4_11_cat, i4_12_cat, i4_13_cat, i4_14_cat, i4_15_cat, i5_1_cat)
names(datos_likert_MED) <- c(
"4.1 Relaciones con pacientes",
"4.2 Relación apoyo colegas",
"4.3 Mejoró relaciones equipo",
"4.4 Resolución de problemas",
"4.5 Disminuyó burnout",
"4.6 Manejo de pacientes",
"4.7 Empatía",
"4.8 Satisfacción",
"4.9 Autocuidado",
"4.10 Red de apoyo",
"4.11 Identidad profesional",
"4.12 Discusiones aburridas",
"4.13 Discusiones superficiales",
"4.14 Incomodidad al compartir",
"4.15 Orientación no profesional",
"5.1 Importancia del Grupo Balint"
)
g_likert3 <- gglikert_stacked(datos_likert_MED, labels_size = 6) +
scale_fill_manual(values = colores_likert, name = "Respuesta") +
ggtitle("Escala Likert", subtitle = "Actitudes Grupo Balint Medicina") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size = 25, color = "black"),
plot.subtitle = element_text(size = 20, color = "black"),
axis.text = element_text(color = "black", size = 20),
axis.title = element_text(color = "black"),
legend.text = element_text(color = "black", size = 20),
legend.title = element_text(color = "black", size = 20, face = "bold"),
legend.position = "bottom",
panel.grid.major.y = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)
g_likert3ggsave(
filename = file.path("likert_balint3.png"),
plot = g_likert3,
width = 14, height = 10, dpi = 300, bg = "white",
scale = 0.4
)
g_likert3BASE_ENF <- BASE %>% filter(grupo_profesional == "Enfermería")
datos_likert_ENF <- BASE_ENF %>%
select(i4_1_cat, i4_2_cat, i4_3_cat, i4_4_cat, i4_5_cat, i4_6_cat, i4_7_cat, i4_8_cat, i4_9_cat, i4_10_cat, i4_11_cat, i4_12_cat, i4_13_cat, i4_14_cat, i4_15_cat, i5_1_cat)
names(datos_likert_ENF) <- c(
"4.1 Relaciones con pacientes",
"4.2 Relación apoyo colegas",
"4.3 Mejoró relaciones equipo",
"4.4 Resolución de problemas",
"4.5 Disminuyó burnout",
"4.6 Manejo de pacientes",
"4.7 Empatía",
"4.8 Satisfacción",
"4.9 Autocuidado",
"4.10 Red de apoyo",
"4.11 Identidad profesional",
"4.12 Discusiones aburridas",
"4.13 Discusiones superficiales",
"4.14 Incomodidad al compartir",
"4.15 Orientación no profesional",
"5.1 Importancia del Grupo Balint"
)
g_likert4 <- gglikert_stacked(datos_likert_ENF, labels_size = 6) +
scale_fill_manual(values = colores_likert, name = "Respuesta") +
ggtitle("Escala Likert", subtitle = "Actitudes Grupo Balint Enfermeria") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size = 25, color = "black"),
plot.subtitle = element_text(size = 20, color = "black"),
axis.text = element_text(color = "black", size = 20),
axis.title = element_text(color = "black"),
legend.text = element_text(color = "black", size = 20),
legend.title = element_text(color = "black", size = 20, face = "bold"),
legend.position = "bottom",
panel.grid.major.y = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)
g_likert4ggsave(
filename = file.path("likert_balint4.png"),
plot = g_likert4,
width = 14, height = 10, dpi = 300, bg = "white",
scale = 0.4
)
g_likert4BASE_OTRO <- BASE %>% filter(grupo_profesional == "Otros")
datos_likert_OTRO <- BASE_OTRO %>%
select(i4_1_cat, i4_2_cat, i4_3_cat, i4_4_cat, i4_5_cat, i4_6_cat, i4_7_cat, i4_8_cat, i4_9_cat, i4_10_cat, i4_11_cat, i4_12_cat, i4_13_cat, i4_14_cat, i4_15_cat, i5_1_cat)
names(datos_likert_OTRO) <- c(
"4.1 Relaciones con pacientes",
"4.2 Relación apoyo colegas",
"4.3 Mejoró relaciones equipo",
"4.4 Resolución de problemas",
"4.5 Disminuyó burnout",
"4.6 Manejo de pacientes",
"4.7 Empatía",
"4.8 Satisfacción",
"4.9 Autocuidado",
"4.10 Red de apoyo",
"4.11 Identidad profesional",
"4.12 Discusiones aburridas",
"4.13 Discusiones superficiales",
"4.14 Incomodidad al compartir",
"4.15 Orientación no profesional",
"5.1 Importancia del Grupo Balint"
)
g_likert5 <- gglikert_stacked(datos_likert_OTRO, labels_size = 6) +
scale_fill_manual(values = colores_likert, name = "Respuesta") +
ggtitle("Escala Likert", subtitle = "Actitudes Grupo Balint Otras profesiones") +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size = 25, color = "black"),
plot.subtitle = element_text(size = 20, color = "black"),
axis.text = element_text(color = "black", size = 20),
axis.title = element_text(color = "black"),
legend.text = element_text(color = "black", size = 20),
legend.title = element_text(color = "black", size = 20, face = "bold"),
legend.position = "bottom",
panel.grid.major.y = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)
g_likert5ggsave(
filename = file.path("likert_balint5.png"),
plot = g_likert5,
width = 14, height = 10, dpi = 300, bg = "white",
scale = 0.4
)
g_likert5Recodificando los valores de los items aparentemente invertidos
library(mclust)
DATA_PROFILES <- BASE[, 15:30]
set.seed(2025)
mc1 <-mclustBIC(BASE[,15:30])
summary(mc1) # 3 grupos## Best BIC values:
## EEE,3 EEE,1 EEV,1
## BIC -6842.973 -6945.5907 -6945.5907
## BIC diff 0.000 -102.6181 -102.6181
## ----------------------------------------------------
## Gaussian finite mixture model fitted by EM algorithm
## ----------------------------------------------------
##
## Mclust EEE (ellipsoidal, equal volume, shape and orientation) model with 3
## components:
##
## log-likelihood n df BIC ICL
## -2940.104 177 186 -6842.973 -6843.214
##
## Clustering table:
## 1 2 3
## 123 8 46
Se grafica la solucion
library(tibble)
library(tidyr)
means <- data.frame(model1$parameters$mean) %>%
rownames_to_column() %>%
rename(DATA_PROFILES = rowname) %>%
pivot_longer(cols = c(X1, X2, X3), names_to = "Profile", values_to = "Mean") %>%
mutate(
Mean = round(Mean, 2),
# Estandarización Z (normalización usando media y desviación estándar)
Mean = (Mean - mean(Mean)) / sd(Mean)
)
p <- means %>%
mutate(
Profile = case_when(
Profile == "X1" ~ "P1 (123)",
Profile == "X2" ~ "P2 (8)",
Profile == "X3" ~ "P3 (46)",
TRUE ~ Profile
)
) %>%
ggplot(aes(
x = DATA_PROFILES,
y = Mean,
group = Profile,
color = Profile
)) +
geom_point(size = 2.25) +
geom_line(linewidth = 1.25) +
scale_x_discrete(
limits = c(
"i4_1", "i4_2", "i4_3", "i4_4", "i4_5", "i4_6", "i4_7", "i4_8",
"i4_9", "i4_10", "i4_11", "i4_12", "i4_13", "i4_14", "i4_15",
"i5_1"
)
) +
scale_color_manual(
values = c(
"P1 (123)" = "blue2",
"P2 (8)" = "green4",
"P3 (46)" = "red"
)
) +
labs(
x = "Items actitud",
y = "Media estandarizada",
color = "Perfil",
title = "Perfiles Actitud grupo Balint"
) +
theme_bw(base_size = 14) +
theme(
axis.text.x = element_text(angle = 90, hjust = 1, size = 20, face = "bold"),
axis.text.y = element_text(size = 20, face = "bold"),
axis.title.x = element_text(size = 22, face = "bold"),
axis.title.y = element_text(size = 22, face = "bold"),
legend.position = "right",
legend.text = element_text(size = 15, face = "bold"),
legend.title = element_text(size = 25, face = "bold")
)
ggsave(
filename = file.path("perfiles_balint.png"),
plot = p,
width = 14, height = 8, dpi = 300, bg = "white",
scale = 0.5
)
pSe encontraron 3 potenciales perfiles, de manera general da la impesión que existe un perfil de sujetos que tienen una actitud más positiva acerca del grupo Balint, sin emabrgo no encuentran gran aporte (items 5.1). Los otros se diferencian especialmente en los ítems que parecen invertidos.
# Extraer las clasificaciones del modelo
clases <- model1$classification
# Agregar las clases al data frame
BASE <- BASE %>%
mutate(Perfil = clases)
BASE$Perfil <- factor(BASE$Perfil, levels = c(1, 3, 2), labels = c ("Alto", "Medio", "Bajo"))
BASE <- BASE %>%
mutate(Perfil2 = case_when(
Perfil == "Alto" ~ "Favorable",
Perfil == "Medio" ~ "Neutro - Desfavorable",
Perfil == "Bajo" ~ "Neutro - Desfavorable",
TRUE ~ NA_character_
))tabla1 <- BASE %>%
select(
ha_participado_alguna_vez_en_un_grupo_balint_ya_sea_actualmente_o_en_el_pasado,
durante_cuanto_tiempo_ha_participado_en_grupos_balint, genero, grupo_profesional,
anos_de_ejercicio_profesional, esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo,
participa_en_actividades_docentes, edad2, Perfil
) %>%
tbl_summary(
by = Perfil,
type = list(
all_categorical() ~ "categorical",
edad2 ~ "continuous"
),
label = list(
ha_participado_alguna_vez_en_un_grupo_balint_ya_sea_actualmente_o_en_el_pasado ~ "Participación actual o pasada en grupo Balint",
durante_cuanto_tiempo_ha_participado_en_grupos_balint ~ "Tiempo participación grupo Balint",
genero ~ "Género",
grupo_profesional ~ "Grupo profesional",
anos_de_ejercicio_profesional ~ "Años ejercicio profesional",
esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo ~ "Desempeña cargo con personal a cargo",
participa_en_actividades_docentes ~ "Participación act. docente",
edad2 ~ "Edad"
),
statistic = list(
all_categorical() ~ "{n} ({p}%)",
edad2 ~ "{median} ({p25}, {p75})"
),
digits = list(
all_categorical() ~ 1,
edad2 ~ 1
),
missing = "ifany",
missing_text = "Sin dato"
) %>%
add_p(
test = list(
all_categorical() ~ "chisq.test",
all_continuous() ~ "kruskal.test"
),
pvalue_fun = ~ style_pvalue(.x, digits = 3)
) %>%
add_overall(last = FALSE, col_label = "**Total**, N = {N}") %>%
modify_header(label ~ "**Variable**") %>%
modify_spanning_header(all_stat_cols() ~ "**Perfil**") %>%
bold_labels() %>%
bold_p(t = 0.05) %>%
modify_caption("**Tabla 1**")
tabla1 %>%
as_tibble() %>%
write_xlsx("tabla1.xlsx")
tabla1| Variable |
Perfil
|
p-value2 | |||
|---|---|---|---|---|---|
| Total, N = 1771 | Alto N = 1231 |
Medio N = 461 |
Bajo N = 81 |
||
| Participación actual o pasada en grupo Balint | 0.018 | ||||
| Actualmente participo en un grupo Balint. | 80.0 (45.2%) | 64.0 (52.0%) | 14.0 (30.4%) | 2.0 (25.0%) | |
| He participado en un grupo Balint en el pasado. | 84.0 (47.5%) | 53.0 (43.1%) | 25.0 (54.3%) | 6.0 (75.0%) | |
| Nunca he participado en un grupo Balint. | 13.0 (7.3%) | 6.0 (4.9%) | 7.0 (15.2%) | 0.0 (0.0%) | |
| Tiempo participación grupo Balint | 0.650 | ||||
| De 1 a 2 años. | 49.0 (27.7%) | 36.0 (29.3%) | 11.0 (23.9%) | 2.0 (25.0%) | |
| De 2 a 3 años | 10.0 (5.6%) | 7.0 (5.7%) | 2.0 (4.3%) | 1.0 (12.5%) | |
| Más de 3 años. | 34.0 (19.2%) | 26.0 (21.1%) | 8.0 (17.4%) | 0.0 (0.0%) | |
| Menos de un año. | 84.0 (47.5%) | 54.0 (43.9%) | 25.0 (54.3%) | 5.0 (62.5%) | |
| Género | 0.621 | ||||
| Femenino | 133.0 (75.1%) | 93.0 (75.6%) | 33.0 (71.7%) | 7.0 (87.5%) | |
| Masculino | 44.0 (24.9%) | 30.0 (24.4%) | 13.0 (28.3%) | 1.0 (12.5%) | |
| Grupo profesional | 0.505 | ||||
| Profesionales médicos | 93.0 (52.5%) | 69.0 (56.1%) | 19.0 (41.3%) | 5.0 (62.5%) | |
| Enfermería | 52.0 (29.4%) | 33.0 (26.8%) | 17.0 (37.0%) | 2.0 (25.0%) | |
| Otros | 32.0 (18.1%) | 21.0 (17.1%) | 10.0 (21.7%) | 1.0 (12.5%) | |
| Años ejercicio profesional | 0.436 | ||||
| 11-19 años | 47.0 (26.6%) | 35.0 (28.5%) | 10.0 (21.7%) | 2.0 (25.0%) | |
| 6-10 años | 31.0 (17.5%) | 17.0 (13.8%) | 12.0 (26.1%) | 2.0 (25.0%) | |
| Hasta 5 años | 57.0 (32.2%) | 44.0 (35.8%) | 11.0 (23.9%) | 2.0 (25.0%) | |
| Más de 20 años. | 42.0 (23.7%) | 27.0 (22.0%) | 13.0 (28.3%) | 2.0 (25.0%) | |
| Desempeña cargo con personal a cargo | 0.494 | ||||
| No | 100.0 (56.5%) | 67.0 (54.5%) | 27.0 (58.7%) | 6.0 (75.0%) | |
| Sí | 77.0 (43.5%) | 56.0 (45.5%) | 19.0 (41.3%) | 2.0 (25.0%) | |
| Participación act. docente | 0.574 | ||||
| No | 110.0 (62.1%) | 75.0 (61.0%) | 31.0 (67.4%) | 4.0 (50.0%) | |
| Sí | 67.0 (37.9%) | 48.0 (39.0%) | 15.0 (32.6%) | 4.0 (50.0%) | |
| Edad | 36.0 (30.0, 44.0) | 35.0 (29.0, 43.0) | 38.0 (31.0, 45.0) | 38.5 (29.5, 45.5) | 0.571 |
| Sin dato | 11 | 7 | 4 | 0 | |
| 1 n (%); Median (Q1, Q3) | |||||
| 2 Pearson’s Chi-squared test; Kruskal-Wallis rank sum test | |||||
tabla2 <- BASE %>%
select(
ha_participado_alguna_vez_en_un_grupo_balint_ya_sea_actualmente_o_en_el_pasado,
durante_cuanto_tiempo_ha_participado_en_grupos_balint, genero, grupo_profesional,
anos_de_ejercicio_profesional, esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo,
participa_en_actividades_docentes, edad2, Perfil2
) %>%
tbl_summary(
by = Perfil2,
type = list(
all_categorical() ~ "categorical",
edad2 ~ "continuous"
),
label = list(
ha_participado_alguna_vez_en_un_grupo_balint_ya_sea_actualmente_o_en_el_pasado ~ "Participación actual o pasada en grupo Balint",
durante_cuanto_tiempo_ha_participado_en_grupos_balint ~ "Tiempo participación grupo Balint",
genero ~ "Género",
grupo_profesional ~ "Grupo profesional",
anos_de_ejercicio_profesional ~ "Años ejercicio profesional",
esta_desempenando_un_cargo_en_el_cual_tenga_personal_a_cargo ~ "Desempeña cargo con personal a cargo",
participa_en_actividades_docentes ~ "Participación act. docente",
edad2 ~ "Edad"
),
statistic = list(
all_categorical() ~ "{n} ({p}%)",
edad2 ~ "{median} ({p25}, {p75})"
),
digits = list(
all_categorical() ~ 1,
edad2 ~ 1
),
missing = "ifany",
missing_text = "Sin dato"
) %>%
add_p(
test = list(
all_categorical() ~ "fisher.test",
all_continuous() ~ "kruskal.test"
),
pvalue_fun = ~ style_pvalue(.x, digits = 3)
) %>%
add_overall(last = FALSE, col_label = "**Total**, N = {N}") %>%
modify_header(label ~ "**Variable**") %>%
modify_spanning_header(all_stat_cols() ~ "**Perfil**") %>%
bold_labels() %>%
bold_p(t = 0.05) %>%
modify_caption("**Tabla 1 - Ajustada**")
tabla2 %>%
as_tibble() %>%
write_xlsx("tabla2.xlsx")
tabla2| Variable |
Perfil
|
p-value2 | ||
|---|---|---|---|---|
| Total, N = 1771 | Favorable N = 1231 |
Neutro - Desfavorable N = 541 |
||
| Participación actual o pasada en grupo Balint | 0.010 | |||
| Actualmente participo en un grupo Balint. | 80.0 (45.2%) | 64.0 (52.0%) | 16.0 (29.6%) | |
| He participado en un grupo Balint en el pasado. | 84.0 (47.5%) | 53.0 (43.1%) | 31.0 (57.4%) | |
| Nunca he participado en un grupo Balint. | 13.0 (7.3%) | 6.0 (4.9%) | 7.0 (13.0%) | |
| Tiempo participación grupo Balint | 0.562 | |||
| De 1 a 2 años. | 49.0 (27.7%) | 36.0 (29.3%) | 13.0 (24.1%) | |
| De 2 a 3 años | 10.0 (5.6%) | 7.0 (5.7%) | 3.0 (5.6%) | |
| Más de 3 años. | 34.0 (19.2%) | 26.0 (21.1%) | 8.0 (14.8%) | |
| Menos de un año. | 84.0 (47.5%) | 54.0 (43.9%) | 30.0 (55.6%) | |
| Género | 0.851 | |||
| Femenino | 133.0 (75.1%) | 93.0 (75.6%) | 40.0 (74.1%) | |
| Masculino | 44.0 (24.9%) | 30.0 (24.4%) | 14.0 (25.9%) | |
| Grupo profesional | 0.358 | |||
| Profesionales médicos | 93.0 (52.5%) | 69.0 (56.1%) | 24.0 (44.4%) | |
| Enfermería | 52.0 (29.4%) | 33.0 (26.8%) | 19.0 (35.2%) | |
| Otros | 32.0 (18.1%) | 21.0 (17.1%) | 11.0 (20.4%) | |
| Años ejercicio profesional | 0.127 | |||
| 11-19 años | 47.0 (26.6%) | 35.0 (28.5%) | 12.0 (22.2%) | |
| 6-10 años | 31.0 (17.5%) | 17.0 (13.8%) | 14.0 (25.9%) | |
| Hasta 5 años | 57.0 (32.2%) | 44.0 (35.8%) | 13.0 (24.1%) | |
| Más de 20 años. | 42.0 (23.7%) | 27.0 (22.0%) | 15.0 (27.8%) | |
| Desempeña cargo con personal a cargo | 0.510 | |||
| No | 100.0 (56.5%) | 67.0 (54.5%) | 33.0 (61.1%) | |
| Sí | 77.0 (43.5%) | 56.0 (45.5%) | 21.0 (38.9%) | |
| Participación act. docente | 0.737 | |||
| No | 110.0 (62.1%) | 75.0 (61.0%) | 35.0 (64.8%) | |
| Sí | 67.0 (37.9%) | 48.0 (39.0%) | 19.0 (35.2%) | |
| Edad | 36.0 (30.0, 44.0) | 35.0 (29.0, 43.0) | 38.0 (30.0, 45.0) | 0.290 |
| Sin dato | 11 | 7 | 4 | |
| 1 n (%); Median (Q1, Q3) | ||||
| 2 Fisher’s exact test; Kruskal-Wallis rank sum test | ||||
````