library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(knitr)
data <- read.csv("/Users/lorandacalderonzamora/Downloads/Likert_Base_de_Datos.csv")
dim(data )
## [1] 96 22
names(data )
##  [1] "Código.Participante"                       
##  [2] "Grupo_de_estudio"                          
##  [3] "Entendió.principios.teóricos"              
##  [4] "Explicó.conceptos.anatómicos"              
##  [5] "Conocimiento.en.terminología"              
##  [6] "Identificó.estructuras.en.cadáver"         
##  [7] "Comprendió.funciones.y.relaciones"         
##  [8] "Relacionó.teoría.con.práctica"             
##  [9] "Demostró.comprensión.de.anatomías.normales"
## [10] "Realizó.disecciones.con.destreza"          
## [11] "Usó.herramientas.de.disección"             
## [12] "Aplicó.técnicas.de.disección.correctamente"
## [13] "Colaboró.en.actividades.grupales"          
## [14] "Identificó.y.resolvió.problemas"           
## [15] "Mantuvo.entorno.seguro"                    
## [16] "Aplicó.conocimientos.a.problemas.clínicos" 
## [17] "Mostró.interés.en.prácticas"               
## [18] "Respetó.opiniones.en.grupo"                
## [19] "Actitud.ética.y.profesional"               
## [20] "Aceptó.retroalimentación"                  
## [21] "Mostró.empatía"                            
## [22] "Fomentó.ambiente.colaborativo"
str(data)
## 'data.frame':    96 obs. of  22 variables:
##  $ Código.Participante                       : chr  "M05C" "F02C" "F03C" "F04C" ...
##  $ Grupo_de_estudio                          : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Entendió.principios.teóricos              : int  5 3 3 2 5 3 2 5 2 3 ...
##  $ Explicó.conceptos.anatómicos              : int  5 5 2 5 2 5 5 5 5 3 ...
##  $ Conocimiento.en.terminología              : int  2 2 2 5 3 5 5 5 5 3 ...
##  $ Identificó.estructuras.en.cadáver         : int  5 5 5 3 5 5 3 5 2 5 ...
##  $ Comprendió.funciones.y.relaciones         : int  3 5 2 5 3 5 3 5 5 3 ...
##  $ Relacionó.teoría.con.práctica             : int  5 3 5 2 5 5 5 3 5 5 ...
##  $ Demostró.comprensión.de.anatomías.normales: int  3 3 5 5 2 5 3 2 2 3 ...
##  $ Realizó.disecciones.con.destreza          : int  5 2 3 3 5 5 5 2 5 3 ...
##  $ Usó.herramientas.de.disección             : int  5 5 3 2 5 5 2 3 3 3 ...
##  $ Aplicó.técnicas.de.disección.correctamente: int  5 5 3 3 3 3 2 3 3 5 ...
##  $ Colaboró.en.actividades.grupales          : int  5 3 3 2 3 5 3 2 3 5 ...
##  $ Identificó.y.resolvió.problemas           : int  3 5 2 5 2 3 5 2 3 2 ...
##  $ Mantuvo.entorno.seguro                    : int  3 5 3 3 5 2 5 2 2 3 ...
##  $ Aplicó.conocimientos.a.problemas.clínicos : int  2 5 2 3 5 5 3 2 2 2 ...
##  $ Mostró.interés.en.prácticas               : int  3 3 3 2 5 2 5 2 2 2 ...
##  $ Respetó.opiniones.en.grupo                : int  5 2 2 3 2 2 2 5 3 5 ...
##  $ Actitud.ética.y.profesional               : int  2 2 5 2 2 2 3 3 3 5 ...
##  $ Aceptó.retroalimentación                  : int  2 5 2 2 2 3 3 5 5 2 ...
##  $ Mostró.empatía                            : int  2 2 2 2 2 2 5 2 5 3 ...
##  $ Fomentó.ambiente.colaborativo             : int  5 3 3 2 2 2 3 2 3 5 ...
library(reshape2)
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
data$Grupo_de_estudio <- factor(data$Grupo_de_estudio, labels = c("Control", "Experimental"))

competencias_teoricas <- data[, c("Entendió.principios.teóricos",
                                  "Explicó.conceptos.anatómicos",
                                  "Conocimiento.en.terminología",
                                  "Identificó.estructuras.en.cadáver",
                                  "Comprendió.funciones.y.relaciones",
                                  "Relacionó.teoría.con.práctica",
                                  "Demostró.comprensión.de.anatomías.normales",
                                  "Grupo_de_estudio")]

competencias_long <- melt(competencias_teoricas, id.vars = "Grupo_de_estudio")

competencias_long$value <- factor(competencias_long$value,
                                  levels = c(1, 2, 3, 4, 5),
                                  labels = c("Totalmente de acuerdo", "De acuerdo", "Neutro", "En desacuerdo", "Totalmente en desacuerdo"))

ggplot(competencias_long, aes(x = variable, fill = value)) +
  geom_bar(position = "fill", aes(y = ..count../sum(..count..))) + 
  facet_wrap(~ Grupo_de_estudio) +
  scale_fill_brewer(palette = "Set3") +
  scale_y_continuous(labels = scales::percent_format(scale = 100)) +  
  labs(title = "Proporción de items en competencias teóricas por grupo",
       x = "", 
       y = "",
       fill = "Escala de Likert") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

data <- data %>%
  mutate(
    Entendió_principios_teóricos = as.numeric(as.character(Entendió.principios.teóricos)),
    Explicó_conceptos_anatómicos = as.numeric(as.character(Explicó.conceptos.anatómicos)),
    Conocimiento_en_terminología = as.numeric(as.character(Conocimiento.en.terminología)),
    Identificó_estructuras_en_cadáver = as.numeric(as.character(Identificó.estructuras.en.cadáver)),
    Comprendió_funciones_y_relaciones = as.numeric(as.character(Comprendió.funciones.y.relaciones)),
    Relacionó_teoría_con_práctica = as.numeric(as.character(Relacionó.teoría.con.práctica)),
    Demostró_comprensión_de_anatomías_normales = as.numeric(as.character(Demostró.comprensión.de.anatomías.normales))
  )

variables_teoricas <- c("Entendió_principios_teóricos",
                        "Explicó_conceptos_anatómicos",
                        "Conocimiento_en_terminología",
                        "Identificó_estructuras_en_cadáver",
                        "Comprendió_funciones_y_relaciones",
                        "Relacionó_teoría_con_práctica",
                        "Demostró_comprensión_de_anatomías_normales")


for (variable in variables_teoricas) {
  
  p <- ggplot(data, aes_string(x = variable, color = "Grupo_de_estudio")) +
    geom_freqpoly(stat = "bin", binwidth = 1, size = 1.5) +
    scale_x_continuous(breaks = c(1, 2, 3, 4, 5), labels = c("Totalmente en desacuerdo", 
                                                            "En desacuerdo", 
                                                            "Neutro", 
                                                            "De acuerdo", 
                                                            "Totalmente de acuerdo")) +
    labs(title = paste("Polígono de Frecuencias para", variable),
         x = "Puntaje en Escala de Likert",
         y = "Frecuencia",
         color = "Grupo de Estudio") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  print(p)
}
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

data$Competencias_Teoricas <- rowSums(data[, c("Entendió.principios.teóricos",
                                               "Explicó.conceptos.anatómicos",
                                               "Conocimiento.en.terminología",
                                               "Identificó.estructuras.en.cadáver",
                                               "Comprendió.funciones.y.relaciones",
                                               "Relacionó.teoría.con.práctica",
                                               "Demostró.comprensión.de.anatomías.normales")])

t_test_teoricas <- t.test(data$Competencias_Teoricas ~ data$Grupo_de_estudio)

print(t_test_teoricas)
## 
##  Welch Two Sample t-test
## 
## data:  data$Competencias_Teoricas by data$Grupo_de_estudio
## t = 4.6584, df = 93.493, p-value = 1.053e-05
## alternative hypothesis: true difference in means between group Control and group Experimental is not equal to 0
## 95 percent confidence interval:
##  1.803556 4.483401
## sample estimates:
##      mean in group Control mean in group Experimental 
##                   24.04348                   20.90000
ggplot(data, aes(x = Grupo_de_estudio, y = Competencias_Teoricas, fill = Grupo_de_estudio)) +
  geom_boxplot() +
  labs(title = "",
       x = "",
       y = "Puntaje total de las competencias teóricas") +
  theme_minimal()

competencias_practicas <- data[, c("Realizó.disecciones.con.destreza",
                                   "Usó.herramientas.de.disección",
                                   "Aplicó.técnicas.de.disección.correctamente",
                                   "Colaboró.en.actividades.grupales",
                                   "Identificó.y.resolvió.problemas",
                                   "Mantuvo.entorno.seguro",
                                   "Aplicó.conocimientos.a.problemas.clínicos",
                                   "Grupo_de_estudio")]

competencias_long <- melt(competencias_practicas, id.vars = "Grupo_de_estudio")

competencias_long$value <- factor(competencias_long$value,
                                  levels = c(1, 2, 3, 4, 5),
                                  labels = c("Totalmente de acuerdo", "De acuerdo", "Neutro", "En desacuerdo", "Totalmente en desacuerdo"))


ggplot(competencias_long, aes(x = variable, fill = value)) +
  geom_bar(position = "fill", aes(y = ..count../sum(..count..))) + 
  facet_wrap(~ Grupo_de_estudio) +
  scale_fill_brewer(palette = "Set3") +
  scale_y_continuous(labels = scales::percent_format(scale = 100)) +  # Cambiar las proporciones a porcentaje
  labs(title = "Proporción de items en competencias prácticas por grupo",
       x = "", 
       y = "",
       fill = "Escala de Likert") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

data <- data %>%
  mutate(
    Realizó_disecciones_con_destreza = as.numeric(as.character(Realizó.disecciones.con.destreza)),
    Usó_herramientas_de_disección = as.numeric(as.character(Usó.herramientas.de.disección)),
    Aplicó_técnicas_de_disección_correctamente = as.numeric(as.character(Aplicó.técnicas.de.disección.correctamente)),
    Colaboró_en_actividades_grupales = as.numeric(as.character(Colaboró.en.actividades.grupales)),
    Identificó_y_resolvió_problemas = as.numeric(as.character(Identificó.y.resolvió.problemas)),
    Mantuvo_entorno_seguro = as.numeric(as.character(Mantuvo.entorno.seguro)),
    Aplicó_conocimientos_a_problemas_clínicos = as.numeric(as.character(Aplicó.conocimientos.a.problemas.clínicos))
  )

variables_practicas <- c("Realizó_disecciones_con_destreza",
                         "Usó_herramientas_de_disección",
                         "Aplicó_técnicas_de_disección_correctamente",
                         "Colaboró_en_actividades_grupales",
                         "Identificó_y_resolvió_problemas",
                         "Mantuvo_entorno_seguro",
                         "Aplicó_conocimientos_a_problemas_clínicos")

for (variable in variables_practicas) {
  
  p <- ggplot(data, aes_string(x = variable, color = "Grupo_de_estudio")) +
    geom_freqpoly(stat = "bin", binwidth = 1, size = 1.5) +
    scale_x_continuous(breaks = c(1, 2, 3, 4, 5), labels = c("Totalmente en desacuerdo", 
                                                            "En desacuerdo", 
                                                            "Neutro", 
                                                            "De acuerdo", 
                                                            "Totalmente de acuerdo")) +
    labs(title = paste("Polígono de Frecuencias para", variable),
         x = "Puntaje en Escala de Likert",
         y = "Frecuencia",
         color = "Grupo de Estudio") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  print(p)
}

data$Competencias_Practicas <- rowSums(data[, c("Realizó.disecciones.con.destreza",
                                                "Usó.herramientas.de.disección",
                                                "Aplicó.técnicas.de.disección.correctamente",
                                                "Colaboró.en.actividades.grupales",
                                                "Identificó.y.resolvió.problemas",
                                                "Mantuvo.entorno.seguro",
                                                "Aplicó.conocimientos.a.problemas.clínicos")])

t_test_practicas <- t.test(data$Competencias_Practicas ~ data$Grupo_de_estudio)

print(t_test_practicas)
## 
##  Welch Two Sample t-test
## 
## data:  data$Competencias_Practicas by data$Grupo_de_estudio
## t = 1.9599, df = 93.881, p-value = 0.05297
## alternative hypothesis: true difference in means between group Control and group Experimental is not equal to 0
## 95 percent confidence interval:
##  -0.02042783  3.14564522
## sample estimates:
##      mean in group Control mean in group Experimental 
##                   23.28261                   21.72000
ggplot(data, aes(x = Grupo_de_estudio, y = Competencias_Practicas, fill = Grupo_de_estudio)) +
  geom_boxplot() +
  labs(title = "", 
       x = "", 
       y = "Puntaje total de las competencias prácticas") +
  theme_minimal()

competencias_actitudinales <- data[, c("Mostró.interés.en.prácticas",
                                       "Respetó.opiniones.en.grupo",
                                       "Actitud.ética.y.profesional",
                                       "Aceptó.retroalimentación",
                                       "Mostró.empatía",
                                       "Fomentó.ambiente.colaborativo",
                                       "Grupo_de_estudio")]

competencias_long <- melt(competencias_actitudinales, id.vars = "Grupo_de_estudio")

competencias_long$value <- factor(competencias_long$value,
                                  levels = c(1, 2, 3, 4, 5),
                                  labels = c("Totalmente de acuerdo", "De acuerdo", "Neutro", "En desacuerdo", "Totalmente en desacuerdo"))

ggplot(competencias_long, aes(x = variable, fill = value)) +
  geom_bar(position = "fill", aes(y = ..count../sum(..count..))) + 
  facet_wrap(~ Grupo_de_estudio) +
  scale_fill_brewer(palette = "Set3") +
  scale_y_continuous(labels = scales::percent_format(scale = 100)) +  # Cambiar las proporciones a porcentaje
  labs(title = "Proporción de items en competencias actitudinales por grupo",
       x = "", 
       y = "Porcentaje de Respuestas",
       fill = "Escala de Likert") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

data <- data %>%
  mutate(
    Mostró_interés_en_prácticas = as.numeric(as.character(Mostró.interés.en.prácticas)),
    Respetó_opiniones_en_grupo = as.numeric(as.character(Respetó.opiniones.en.grupo)),
    Actitud_ética_y_profesional = as.numeric(as.character(Actitud.ética.y.profesional)),
    Aceptó_retroalimentación = as.numeric(as.character(Aceptó.retroalimentación)),
    Mostró_empatía = as.numeric(as.character(Mostró.empatía)),
    Fomentó_ambiente_colaborativo = as.numeric(as.character(Fomentó.ambiente.colaborativo))
  )

variables_actitudinales <- c("Mostró_interés_en_prácticas",
                             "Respetó_opiniones_en_grupo",
                             "Actitud_ética_y_profesional",
                             "Aceptó_retroalimentación",
                             "Mostró_empatía",
                             "Fomentó_ambiente_colaborativo")


for (variable in variables_actitudinales) {
  
  # Crear el gráfico de polígono de frecuencias
  p <- ggplot(data, aes_string(x = variable, color = "Grupo_de_estudio")) +
    geom_freqpoly(stat = "bin", binwidth = 1, size = 1.5) +
    scale_x_continuous(breaks = c(1, 2, 3, 4, 5), labels = c("Totalmente en desacuerdo", 
                                                            "En desacuerdo", 
                                                            "Neutro", 
                                                            "De acuerdo", 
                                                            "Totalmente de acuerdo")) +
    labs(title = paste("Polígono de Frecuencias para", variable),
         x = "Puntaje en Escala de Likert",
         y = "Frecuencia",
         color = "Grupo de Estudio") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  print(p)
}

data$Competencias_Actitudinales <- rowSums(data[, c("Mostró.interés.en.prácticas",
                                                    "Respetó.opiniones.en.grupo",
                                                    "Actitud.ética.y.profesional",
                                                    "Aceptó.retroalimentación",
                                                    "Mostró.empatía",
                                                    "Fomentó.ambiente.colaborativo")])

t_test_actitudinales <- t.test(data$Competencias_Actitudinales ~ data$Grupo_de_estudio)

print(t_test_actitudinales)
## 
##  Welch Two Sample t-test
## 
## data:  data$Competencias_Actitudinales by data$Grupo_de_estudio
## t = 2.3052, df = 93.514, p-value = 0.02337
## alternative hypothesis: true difference in means between group Control and group Experimental is not equal to 0
## 95 percent confidence interval:
##  0.219255 2.944223
## sample estimates:
##      mean in group Control mean in group Experimental 
##                   19.52174                   17.94000
ggplot(data, aes(x = Grupo_de_estudio, y = Competencias_Actitudinales, fill = Grupo_de_estudio)) +
  geom_boxplot() +
  labs(title = "Boxplot de Competencias Actitudinales por Grupo", 
       x = "", 
       y = "Puntaje total de las competencias actitudinales") +
  theme_minimal()

# Interpretación para Competencias Teóricas
data$Interpretacion_Teoricas <- cut(data$Competencias_Teoricas,
                                    breaks = c(-Inf, 14, 19, 24, 29, 35),
                                    labels = c("Deficiencias graves", 
                                               "Dificultades para aplicar conceptos teóricos", 
                                               "Comprensión aceptable con áreas de mejora", 
                                               "Desempeño sólido y aplicación adecuada", 
                                               "Dominio excepcional"))

# Interpretación para Competencias Prácticas
data$Interpretacion_Practicas <- cut(data$Competencias_Practicas,
                                     breaks = c(-Inf, 14, 19, 24, 29, 35),
                                     labels = c("Deficiencias graves en la práctica", 
                                                "Deficiencias en la ejecución de técnicas", 
                                                "Rendimiento adecuado con áreas de mejora", 
                                                "Desempeño efectivo en la manipulación", 
                                                "Destreza técnica avanzada"))

# Interpretación para Competencias Actitudinales
data$Interpretacion_Actitudinales <- cut(data$Competencias_Actitudinales,
                                         breaks = c(-Inf, 9, 14, 19, 24, 30),
                                         labels = c("Actitud inadecuada", 
                                                    "Falta de interés o actitud negativa", 
                                                    "Actitud aceptable con posibilidad de mejora", 
                                                    "Responsabilidad y motivación", 
                                                    "Participación activa e interés"))
tabla_teoricas <- table(data$Grupo_de_estudio, data$Interpretacion_Teoricas)

chi_teoricas <- chisq.test(tabla_teoricas)
## Warning in chisq.test(tabla_teoricas): Chi-squared approximation may be
## incorrect
resultados_teoricas <- data.frame(
  Interpretacion = names(tabla_teoricas["Control", ]),  
  Control = as.numeric(tabla_teoricas["Control", ]),    
  Experimental = as.numeric(tabla_teoricas["Experimental", ]),  
  Chi_square = rep(chi_teoricas$statistic, length(colnames(tabla_teoricas))),  
  p_value = rep(chi_teoricas$p.value, length(colnames(tabla_teoricas)))  
)

kable(resultados_teoricas, caption = "Frecuencia de Interpretaciones en Competencias Teóricas")
Frecuencia de Interpretaciones en Competencias Teóricas
Interpretacion Control Experimental Chi_square p_value
Deficiencias graves 0 1 15.39853 0.0039422
Dificultades para aplicar conceptos teóricos 4 12 15.39853 0.0039422
Comprensión aceptable con áreas de mejora 20 30 15.39853 0.0039422
Desempeño sólido y aplicación adecuada 19 7 15.39853 0.0039422
Dominio excepcional 3 0 15.39853 0.0039422
tabla_practicas <- table(data$Grupo_de_estudio, data$Interpretacion_Practicas)


chi_practicas <- chisq.test(tabla_practicas)
## Warning in chisq.test(tabla_practicas): Chi-squared approximation may be
## incorrect
resultados_practicas <- data.frame(
  Interpretacion = names(tabla_practicas["Control", ]),  
  Control = as.numeric(tabla_practicas["Control", ]),   
  Experimental = as.numeric(tabla_practicas["Experimental", ]),  
  Chi_square = rep(chi_practicas$statistic, length(colnames(tabla_practicas))),  
  p_value = rep(chi_practicas$p.value, length(colnames(tabla_practicas)))  
)

kable(resultados_practicas, caption = "Frecuencia de Interpretaciones en Competencias Prácticas")
Frecuencia de Interpretaciones en Competencias Prácticas
Interpretacion Control Experimental Chi_square p_value
Deficiencias graves en la práctica 0 2 8.315606 0.0806778
Deficiencias en la ejecución de técnicas 6 13 8.315606 0.0806778
Rendimiento adecuado con áreas de mejora 25 20 8.315606 0.0806778
Desempeño efectivo en la manipulación 12 15 8.315606 0.0806778
Destreza técnica avanzada 3 0 8.315606 0.0806778
tabla_actitudinales <- table(data$Grupo_de_estudio, data$Interpretacion_Actitudinales)

chi_actitudinales <- chisq.test(tabla_actitudinales)
## Warning in chisq.test(tabla_actitudinales): Chi-squared approximation may be
## incorrect
resultados_actitudinales <- data.frame(
  Interpretacion = names(tabla_actitudinales["Control", ]),  
  Control = as.numeric(tabla_actitudinales["Control", ]),    
  Experimental = as.numeric(tabla_actitudinales["Experimental", ]),  
  Chi_square = rep(chi_actitudinales$statistic, length(colnames(tabla_actitudinales))),  
  p_value = rep(chi_actitudinales$p.value, length(colnames(tabla_actitudinales)))  
)

kable(resultados_actitudinales, caption = "Frecuencia de Interpretaciones en Competencias")
Frecuencia de Interpretaciones en Competencias
Interpretacion Control Experimental Chi_square p_value
Actitud inadecuada 0 1 3.22012 0.5216873
Falta de interés o actitud negativa 2 6 3.22012 0.5216873
Actitud aceptable con posibilidad de mejora 23 22 3.22012 0.5216873
Responsabilidad y motivación 19 20 3.22012 0.5216873
Participación activa e interés 2 1 3.22012 0.5216873