1 Elaborado por:

Nicolás Martínez Ramos
Bioestadístico Oficina de Investigaciones
Psicólogo, Esp. medición y evaluación psicológica y mg. bioestadística

2 Exploración base de datos

Ver código
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

library(labelled)

diagnose(BASE) %>% 
  mutate(across(where(is.numeric), ~round(., 1))) %>% #redondear a 1
  datatable(options = list(pageLength = 25))

2.1 Limpieza base

Ver código
#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"))

# 4. Verificar
table(BASE$grupo_profesional, useNA = "ifany")

Profesionales médicos            Enfermería                 Otros 
                   93                    52                    32 

3 Análisis descriptivo (sin ítems)

edad se reportó como variable continua.

Ver código
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**")

tabla0
Tabla 1
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)

4 Análisis descriptivo items como variables cuantitativas

Ver código
tabla_i4 <- BASE %>%
  select(
    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
  ) %>%
  tbl_summary(
    type = list(
      everything() ~ "continuous2"
    ),
    label = list(
      i4_1  ~ "4.1 El GB mejoró mis relaciones con los pacientes",
      i4_2  ~ "4.2 El GB me ayudó a establecer una relación de apoyo con mis colegas",
      i4_3  ~ "4.3 El GB mejoró mis relaciones con otros miembros del equipo multidisciplinario.",
      i4_4  ~ "4.4 El GB me proporcionó habilidades para la resolución de problemas en el entorno profesional.",
      i4_5  ~ "4.5 El GB me ayudó a aliviar el agotamiento profesional (burnout).",
      i4_6  ~ "4.6 El GB facilitó un mejor manejo de los pacientes (o usuarios) en mi consulta o atención.",
      i4_7  ~ "4.7 El GB mejoró mis habilidades de empatía hacia los pacientes (o usuarios).",
      i4_8  ~ "4.8 El GB me hizo sentir satisfecho(a).",
      i4_9  ~ "4.9 Mi preocupación por el autocuidado fue abordada en el GB.",
      i4_10 ~ "4.10 El GB se convirtió en una valiosa red de apoyo profesional para mí.",
      i4_11 ~ "4.11 El GB contribuyó al desarrollo de mi identidad profesional.",
      i4_12 ~ "4.12 Las discusiones en el GB me resultaron aburridas.",
      i4_13 ~ "4.13 Las discusiones en el GB son superficiales.",
      i4_14 ~ "4.14 Me sentí incómodo(a) al compartir mis casos en el GB.",
      i4_15 ~ "4.15 La orientación brindada en el GB no fue profesional.",
      i5_1  ~ "5.1 ¿Qué tan importante considera que es la participación en el Grupo Balint para su bienestar profesional?"
    ),
    statistic = everything() ~ c(
      "{mean} ({sd})",
      "{median} ({p25}, {p75})"
    ),
    digits = everything() ~ 1,
    missing = "ifany",
    missing_text = "Sin dato"
  ) %>%
  modify_header(label ~ "**Ítem**") %>%
  bold_labels() %>%
  modify_caption("**Tabla 2. Descripción de ítems**")

tabla_i4
Tabla 2. Descripción de ítems
Ítem N = 177
4.1 El GB mejoró mis relaciones con los pacientes
    Mean (SD) 3.6 (1.3)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.2 El GB me ayudó a establecer una relación de apoyo con mis colegas
    Mean (SD) 3.8 (1.3)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.3 El GB mejoró mis relaciones con otros miembros del equipo multidisciplinario.
    Mean (SD) 3.7 (1.3)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.4 El GB me proporcionó habilidades para la resolución de problemas en el entorno profesional.
    Mean (SD) 3.8 (1.3)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.5 El GB me ayudó a aliviar el agotamiento profesional (burnout).
    Mean (SD) 3.7 (1.4)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.6 El GB facilitó un mejor manejo de los pacientes (o usuarios) en mi consulta o atención.
    Mean (SD) 3.6 (1.2)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.7 El GB mejoró mis habilidades de empatía hacia los pacientes (o usuarios).
    Mean (SD) 3.8 (1.2)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.8 El GB me hizo sentir satisfecho(a).
    Mean (SD) 3.8 (1.3)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.9 Mi preocupación por el autocuidado fue abordada en el GB.
    Mean (SD) 3.6 (1.4)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.10 El GB se convirtió en una valiosa red de apoyo profesional para mí.
    Mean (SD) 3.6 (1.4)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.11 El GB contribuyó al desarrollo de mi identidad profesional.
    Mean (SD) 3.5 (1.3)
    Median (Q1, Q3) 4.0 (3.0, 5.0)
4.12 Las discusiones en el GB me resultaron aburridas.
    Mean (SD) 2.1 (1.4)
    Median (Q1, Q3) 1.0 (1.0, 3.0)
4.13 Las discusiones en el GB son superficiales.
    Mean (SD) 2.1 (1.4)
    Median (Q1, Q3) 1.0 (1.0, 3.0)
4.14 Me sentí incómodo(a) al compartir mis casos en el GB.
    Mean (SD) 2.2 (1.5)
    Median (Q1, Q3) 2.0 (1.0, 3.0)
4.15 La orientación brindada en el GB no fue profesional.
    Mean (SD) 1.9 (1.4)
    Median (Q1, Q3) 1.0 (1.0, 3.0)
5.1 ¿Qué tan importante considera que es la participación en el Grupo Balint para su bienestar profesional?
    Mean (SD) 2.5 (1.5)
    Median (Q1, Q3) 2.0 (1.0, 4.0)

5 Gráfico Likert de respuesta

Ver código
library(likert)
library(ggplot2)

datos_likert <- BASE %>%
  select(
    i4_1_f, i4_2_f, i4_3_f, i4_4_f, i4_5_f,
    i4_6_f, i4_7_f, i4_8_f, i4_9_f, i4_10_f,
    i4_11_f, i4_12_f, i4_13_f, i4_14_f, i4_15_f,
    i5_1_f
  )

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)

gglikert_stacked(datos_likert, labels_size = 6) +
  scale_fill_manual(
    values = c("indianred3", "pink", "#F5EEC8", "#A9D3D9", "steelblue"),
    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)
  )

5.1 Gráfico para profesionales de medicina

Ver código
BASE_MED <- BASE %>% filter(grupo_profesional == "Profesionales médicos")

datos_likert_MED <- BASE_MED %>%
  select(
    i4_1_f, i4_2_f, i4_3_f, i4_4_f, i4_5_f,
    i4_6_f, i4_7_f, i4_8_f, i4_9_f, i4_10_f,
    i4_11_f, i4_12_f, i4_13_f, i4_14_f, i4_15_f,
    i5_1_f
  )

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

gglikert_stacked(datos_likert_MED, labels_size = 6) +
  scale_fill_manual(
    values = c("indianred3", "pink", "#F5EEC8", "#A9D3D9", "steelblue"),
    name = "Respuesta"
  ) +
  ggtitle("Escala Likert",
          subtitle = "Actitudes Grupo Balint profesionales medicina (n = 93)") +
  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)
  )

5.2 Gráfico profesionales de enfermería

Ver código
BASE_ENF <- BASE %>% filter(grupo_profesional == "Enfermería")

datos_likert_ENF <- BASE_ENF %>%
  select(
    i4_1_f, i4_2_f, i4_3_f, i4_4_f, i4_5_f,
    i4_6_f, i4_7_f, i4_8_f, i4_9_f, i4_10_f,
    i4_11_f, i4_12_f, i4_13_f, i4_14_f, i4_15_f,
    i5_1_f
  )

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

gglikert_stacked(datos_likert_ENF, labels_size = 6) +
  scale_fill_manual(
    values = c("indianred3", "pink", "#F5EEC8", "#A9D3D9", "steelblue"),
    name = "Respuesta"
  ) +
  ggtitle("Escala Likert",
          subtitle = "Actitudes Grupo Balint profesionales Enfermería (n = 52)") +
  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)
  )

Recodificando los valores de los items aparentemente invertidos

Ver código
BASE <- BASE %>%
  mutate(
    across(c(i4_12, i4_13, i4_14, i4_15), ~ 6 - .)
  )

6 Realización análisis factorial exploratorio

  • Se evalua el supuesto de la adecuacion muestral
  • Se evalua el supuesto de identidad
  • Se evalua el supuesto de relacion entre variables
Ver código
library(psych)
KMO(BASE[,15:30])
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = BASE[, 15:30])
Overall MSA =  0.94
MSA for each item = 
 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 
 0.97  0.94  0.95  0.96  0.96  0.96  0.96  0.96  0.96  0.93  0.94  0.80  0.82 
i4_14 i4_15  i5_1 
 0.88  0.80  0.91 
Ver código
bartlett.test(BASE[,15:30])

    Bartlett test of homogeneity of variances

data:  BASE[, 15:30]
Bartlett's K-squared = 18.759, df = 15, p-value = 0.2249
Ver código
library(corrplot)
library(Hmisc)

# Correlación de Spearman
res <- rcorr(as.matrix(BASE[,15:30]), type = "spearman")
cor_matrix <- res$r

# Paleta de colores suave (rojo-blanco-azul)
mis_colores <- colorRampPalette(c("salmon", "white", "skyblue"))(200)


corrplot(cor_matrix,
         method = "color",        # celdas coloreadas (más "clásico" que círculos)
         type = "lower",          # solo mitad inferior
         addCoef.col = "black",   # muestra el número en negro dentro de cada celda
         number.cex = 1.2,        # tamaño del número
         col = mis_colores,       # paleta suave
         tl.col = "black",        # texto de las etiquetas en negro
         tl.srt = 50,             # rota las etiquetas 45°
         tl.cex = 1.5,            # tamaño de las etiquetas
         diag = FALSE,            # oculta la diagonal (correlación de cada ítem consigo mismo = 1)
         title = "Matriz de correlación de Spearman",
         mar = c(0,0,2,0))        # margen para que se vea bien el título

Cumple el supuesto de adecuación muestral, de relación entre variables pero no se cumple el supuesto de identidad (resultado no significativo en la prueba de esfericidad de bartlett)

6.1 Perfilación de sujetos a partir del resultado de actitud

  • Posiblemente se peuda descubrir una actitud alta y baja
Ver código
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
Ver código
set.seed(2025)
model1 <- Mclust(BASE[,15:30], modelNames = "EEE", G = 3)
summary(model1)
---------------------------------------------------- 
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 revisan los intervalos de confianza

Ver código
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")
  )

p

Se 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.

6.2 Caracterización perfiles de actitud

Ver código
# 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"))
Ver código
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 ~ "{mean} ({sd})"
    ),
    digits = list(
      all_categorical() ~ 1,
      edad2 ~ 1
    ),
    missing = "ifany",
    missing_text = "Sin dato"
  ) %>%
  add_overall(last = TRUE, col_label = "**Total**, N = {N}") %>%
  modify_header(label ~ "**Variable**") %>%
  modify_spanning_header(all_stat_cols() ~ "**Perfil**") %>%
  bold_labels() %>%
  modify_caption("**Tabla 1**")

tabla1
Tabla 1
Variable
Perfil
Alto
N = 1231
Medio
N = 461
Bajo
N = 81
Total, N = 1771
Participación actual o pasada en grupo Balint



    Actualmente participo en un grupo Balint. 64.0 (52.0%) 14.0 (30.4%) 2.0 (25.0%) 80.0 (45.2%)
    He participado en un grupo Balint en el pasado. 53.0 (43.1%) 25.0 (54.3%) 6.0 (75.0%) 84.0 (47.5%)
    Nunca he participado en un grupo Balint. 6.0 (4.9%) 7.0 (15.2%) 0.0 (0.0%) 13.0 (7.3%)
Tiempo participación grupo Balint



    De 1 a 2 años. 36.0 (29.3%) 11.0 (23.9%) 2.0 (25.0%) 49.0 (27.7%)
    De 2 a 3 años 7.0 (5.7%) 2.0 (4.3%) 1.0 (12.5%) 10.0 (5.6%)
    Más de 3 años. 26.0 (21.1%) 8.0 (17.4%) 0.0 (0.0%) 34.0 (19.2%)
    Menos de un año. 54.0 (43.9%) 25.0 (54.3%) 5.0 (62.5%) 84.0 (47.5%)
Género



    Femenino 93.0 (75.6%) 33.0 (71.7%) 7.0 (87.5%) 133.0 (75.1%)
    Masculino 30.0 (24.4%) 13.0 (28.3%) 1.0 (12.5%) 44.0 (24.9%)
Grupo profesional



    Profesionales médicos 69.0 (56.1%) 19.0 (41.3%) 5.0 (62.5%) 93.0 (52.5%)
    Enfermería 33.0 (26.8%) 17.0 (37.0%) 2.0 (25.0%) 52.0 (29.4%)
    Otros 21.0 (17.1%) 10.0 (21.7%) 1.0 (12.5%) 32.0 (18.1%)
Años ejercicio profesional



    11-19 años 35.0 (28.5%) 10.0 (21.7%) 2.0 (25.0%) 47.0 (26.6%)
    6-10 años 17.0 (13.8%) 12.0 (26.1%) 2.0 (25.0%) 31.0 (17.5%)
    Hasta 5 años 44.0 (35.8%) 11.0 (23.9%) 2.0 (25.0%) 57.0 (32.2%)
    Más de 20 años. 27.0 (22.0%) 13.0 (28.3%) 2.0 (25.0%) 42.0 (23.7%)
Desempeña cargo con personal a cargo



    No 67.0 (54.5%) 27.0 (58.7%) 6.0 (75.0%) 100.0 (56.5%)
    Sí 56.0 (45.5%) 19.0 (41.3%) 2.0 (25.0%) 77.0 (43.5%)
Participación act. docente



    No 75.0 (61.0%) 31.0 (67.4%) 4.0 (50.0%) 110.0 (62.1%)
    Sí 48.0 (39.0%) 15.0 (32.6%) 4.0 (50.0%) 67.0 (37.9%)
Edad 37.1 (9.1) 38.2 (7.9) 38.0 (8.5) 37.4 (8.7)
    Sin dato 7 4 0 11
1 n (%); Mean (SD)