Tras el cierre prolongado de escuelas en Panamá durante la pandemia (casi 18 meses), el Ministerio de Educación y SUMMA desarrollaron el Programa de Recuperación Integral y Socioemocional de Aprendizajes (PRISA), orientado a fortalecer las estrategias pedagógicas de los docentes mediante formación, recursos y orientaciones basadas en evidencia.
En 2025, PRISA se implementa en las escuelas Lucas Bárcenas y Estado de Minnesota, con apoyo del Club Rotario de Panamá. La iniciativa contempla un curso docente (julio-agosto) sobre cuatro prácticas pedagógicas clave —comprensión lectora, retroalimentación formativa, aprendizaje colaborativo y aprendizaje socioemocional— y un proceso posterior de planificación e implementación en aula durante cuatro meses.
Los resultados presentados a continuación corresponden a parte de los resultados a evaluar en esta implementación del programa PRISA Escuela.
La evaluación del Programa PRISA Escuelas se enmarca en un diseño mixto que integra enfoques cuantitativos y cualitativos. El componente cuantitativo contempló la aplicación de cuestionarios de conocimiento y una encuesta de percepción a los docentes en distintos momentos, con el fin de estimar variaciones en dimensiones relevantes: conocimientos pedagógicos, autoeficacia, reflexión y disposición al cambio, así como valoración del trabajo colaborativo. El componente cualitativo se orienta a comprender los procesos que median dichos cambios, a través de entrevistas, revisión documental y análisis de la implementación en aula.
A continuación, se presentan los cambios en conocimiento de los docentes antes y después del curso (evaluación de resultados), junto con la línea base de la encuesta de percepción docente.
Para la realización de los análisis, se integraron las bases de datos correspondientes al cuestionario de conocimientos en los momentos T0 y T1, vinculadas a través del correo electrónico. Posteriormente, se excluyeron del conjunto de datos los participantes que habían indicado pertenecer a SUMMA (n = 3) y al Club Rotario de Panamá (n = 1). De este modo, la muestra final quedó conformada por 89 docentes.
#Crear variable cantidad respuestas correctas (solo aquellos que respondieron las 12 preguntas, esto es conversable, si quieren que considere aunque haya contestado 1 pregunta es cosa de poner na.rm=TRUE en la suma)
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(across(ends_with("/1_T0"), as.numeric))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(across(ends_with("/1_T1"), as.numeric))
BDD_conoc_VF$correctas_T0 <- rowSums(BDD_conoc_VF[, c("P. 1 /1_T0","P. 2 /1_T0", "P. 3 /1_T0", "P. 4 /1_T0", "P. 5 /1_T0", "P. 6 /1_T0", "P. 7 /1_T0", "P. 8 /1_T0", "P. 9 /1_T0", "P. 10 /1_T0", "P. 11 /1_T0", "P. 12 /1_T0")], na.rm = FALSE)
sum(is.na(BDD_conoc_VF$correctas_T0))#quedan 6 personas fuera
BDD_conoc_VF$correctas_T1 <- rowSums(BDD_conoc_VF[, c("P. 1 /1_T1","P. 2 /1_T1", "P. 3 /1_T1", "P. 4 /1_T1", "P. 5 /1_T1", "P. 6 /1_T1", "P. 7 /1_T1", "P. 8 /1_T1", "P. 9 /1_T1", "P. 10 /1_T1", "P. 11 /1_T1", "P. 12 /1_T1")], na.rm = FALSE)
sum(is.na(BDD_conoc_VF$correctas_T1))#quedan 26 personas fuera, y se repiten las 6 que quedaron fueron en T0
#chequear por qué hay tantos NA en T1
sum(is.na(BDD_conoc_VF$"P. 1 /1_T1")) #aquí ya hay 19 que no respondieron la P1 en T1
sum(is.na(BDD_conoc_VF$"P. 4 /1_T1")) #sube a 20
sum(is.na(BDD_conoc_VF$"P. 7 /1_T1")) #sube a 21
redu <- BDD_conoc_VF %>% select(correctas_T0, `Calificación/10_T0`, correctas_T1, `Calificación/12_T1`, Nombre_T0, Nombre_T1, `Apellido(s)_T0`, `Apellido(s)_T1`, "Dirección de correo") # se comprueba que la suma de calificaciones en T0 estaba considerando sólo preguntas de la 1 a la 10.
#Quiero asegurarme que lo que la plataforma consideró como respuesta correcta, efectivamente sea correcta
library(dplyr)
#BDD T0
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC1_T0 = ifelse(`Respuesta 1_T0` == `Respuesta correcta 1_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC2_T0 = ifelse(`Respuesta 2_T0` == `Respuesta correcta 2_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC3_T0 = ifelse(`Respuesta 3_T0` == `Respuesta correcta 3_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC4_T0 = ifelse(`Respuesta 4_T0` == `Respuesta correcta 4_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC5_T0 = ifelse(`Respuesta 5_T0` == `Respuesta correcta 5_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC6_T0 = ifelse(`Respuesta 6_T0` == `Respuesta correcta 6_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC7_T0 = ifelse(`Respuesta 7_T0` == `Respuesta correcta 7_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC8_T0 = ifelse(`Respuesta 8_T0` == `Respuesta correcta 8_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC9_T0 = ifelse(`Respuesta 9_T0` == `Respuesta correcta 9_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC10_T0 = ifelse(`Respuesta 10_T0` == `Respuesta correcta 10_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC11_T0 = ifelse(`Respuesta 11_T0` == `Respuesta correcta 11_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC12_T0 = ifelse(`Respuesta 12_T0` == `Respuesta correcta 12_T0`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(Suma_RC_T0 = rowSums(select(., RC1_T0:RC12_T0), na.rm = TRUE))
all(BDD_conoc_VF$Suma_RC_T0 == BDD_conoc_VF$correctas_T0, na.rm = TRUE) #devuelve TRUE así que todas las observaciones son iguales.
#AHORA CON LA BDD T1
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC1_T1 = ifelse(`Respuesta 1_T1` == `Respuesta correcta 1_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC2_T1 = ifelse(`Respuesta 2_T1` == `Respuesta correcta 2_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC3_T1 = ifelse(`Respuesta 3_T1` == `Respuesta correcta 3_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC4_T1 = ifelse(`Respuesta 4_T1` == `Respuesta correcta 4_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC5_T1 = ifelse(`Respuesta 5_T1` == `Respuesta correcta 5_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC6_T1 = ifelse(`Respuesta 6_T1` == `Respuesta correcta 6_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC7_T1 = ifelse(`Respuesta 7_T1` == `Respuesta correcta 7_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC8_T1 = ifelse(`Respuesta 8_T1` == `Respuesta correcta 8_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC9_T1 = ifelse(`Respuesta 9_T1` == `Respuesta correcta 9_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC10_T1 = ifelse(`Respuesta 10_T1` == `Respuesta correcta 10_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC11_T1 = ifelse(`Respuesta 11_T1` == `Respuesta correcta 11_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(RC12_T1 = ifelse(`Respuesta 12_T1` == `Respuesta correcta 12_T1`, 1, 0))
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(Suma_RC_T1 = rowSums(select(., RC1_T1:RC12_T1), na.rm = TRUE))
all(BDD_conoc_VF$Suma_RC_T1 == BDD_conoc_VF$correctas_T1, na.rm = TRUE) #devuelve TRUE así que todas las observaciones son iguales.
En el Gráfico 1 se incluyeron, de manera
independiente, todos los docentes que respondieron el
cuestionario completo en Pre (T0) (n=84) y en Post (T1) (n=65). Se
observa un incremento en el promedio de respuestas correctas de 10.4 a
11.1. Los intervalos de confianza al 95% muestran que la diferencia es
consistente; sin embargo, esta comparación se realiza entre grupos que
no necesariamente corresponden a los mismos docentes. Por lo tanto, el
aumento refleja un cambio en la media de quienes participaron en cada
medición, sin garantizar que se trate del mismo conjunto de sujetos.
library(dplyr)
library(tidyr)
library(ggplot2)
df <- BDD_conoc_VF %>%
summarise(
media_T0 = mean(correctas_T0, na.rm = TRUE),
se_T0 = sd(correctas_T0, na.rm = TRUE) / sqrt(sum(!is.na(correctas_T0))),
n_T0 = sum(!is.na(correctas_T0)),
media_T1 = mean(correctas_T1, na.rm = TRUE),
se_T1 = sd(correctas_T1, na.rm = TRUE) / sqrt(sum(!is.na(correctas_T1))),
n_T1 = sum(!is.na(correctas_T1))
) %>%
pivot_longer(
cols = c(media_T0, se_T0, n_T0, media_T1, se_T1, n_T1),
names_to = c(".value", "Momento"),
names_pattern = "(.*)_(T.)"
) %>%
mutate(
Momento = recode(Momento,
"T0" = "Pre (T0)",
"T1" = "Post (T1)"),
Momento = factor(Momento, levels = c("Pre (T0)", "Post (T1)")),
IC_inf = media - 1.96*se,
IC_sup = media + 1.96*se
)
# etiquetas del eje X con n debajo
lab_x <- df %>% distinct(Momento, n) %>%
{ setNames(paste0(.$Momento, "\n(n=", .$n, ")"), .$Momento) }
ggplot(df, aes(x = Momento, y = media, fill = Momento)) +
geom_col(width = 0.6) +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# valor mínimo del IC a la derecha
geom_text(aes(y = IC_inf, label = round(IC_inf,1)),
hjust = -2, color = "black", size = 2.5) +
# valor máximo del IC a la derecha
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
# valor de la media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 1. Promedio de respuestas correctas (IC 95%) - todos",
x = NULL, y = "Promedio") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(limits = c(0, 12), breaks = 0:13) +
theme_minimal() +
theme(
legend.position = "none",
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank()
)
Para tener el dato concreto de cambio en conocimiento docente, en el Gráfico 2 se consideraron únicamente los 65 docentes que respondieron tanto en Pre (T0) como en Post (T1), lo que permite evaluar el cambio en un mismo grupo de participantes. En este caso, el promedio de respuestas correctas aumentó de 10.6 a 11.1. No obstante, los intervalos de confianza al 95% se superponen entre ambos momentos, lo que sugiere que el incremento observado podría no ser estadísticamente significativo. En consecuencia, el resultado debe interpretarse con cautela, ya que el aparente aumento podría no reflejar un cambio consistente en el conocimiento de los docentes.
library(dplyr)
library(tidyr)
library(ggplot2)
df <- BDD_conoc_VF %>%
# SOLO personas con ambos momentos respondidos
filter(!is.na(correctas_T0), !is.na(correctas_T1)) %>%
summarise(
media_T0 = mean(correctas_T0),
se_T0 = sd(correctas_T0) / sqrt(n()),
media_T1 = mean(correctas_T1),
se_T1 = sd(correctas_T1) / sqrt(n()),
n_paired = n()
) %>%
pivot_longer(
cols = c(media_T0, se_T0, media_T1, se_T1),
names_to = c(".value", "Momento"),
names_pattern = "(.*)_(T.)"
) %>%
mutate(
Momento = recode(Momento, "T0" = "Pre (T0)", "T1" = "Post (T1)"),
Momento = factor(Momento, levels = c("Pre (T0)", "Post (T1)")),
IC_inf = media - 1.96*se,
IC_sup = media + 1.96*se,
n = n_paired
)
# etiquetas del eje X con n como subtítulo
lab_x <- df %>% distinct(Momento, n) %>%
{ setNames(paste0(.$Momento, "\n(n=", .$n, ")"), .$Momento) }
ggplot(df, aes(x = Momento, y = media, fill = Momento)) +
geom_col(width = 0.6) +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# valor mínimo del IC a la derecha
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, color = "black", size = 2.5) +
# valor máximo del IC a la derecha
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, color = "black", size = 2.5) +
# valor de la media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 2: Promedio de respuestas correctas (IC 95%) — casos emparejados",
x = NULL, y = "Promedio") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen", "Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(limits = c(0, 12), breaks = 0:13,
expand = expansion(mult = c(0.02, 0.05))) +
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(margin = margin(t = 8)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank()
)
t.test(BDD_conoc_VF$correctas_T1, BDD_conoc_VF$correctas_T0, paired = TRUE)
Ante esta superposición de los IC, se realizó una Prueba t-student para muestras emparejadas para evaluar si efectivamente hubo cambios en el conocimiento de los docentes. Los resultados muestran que la diferencia media fue de 0,46 puntos a favor del Post. Sin embargo, esta diferencia no alcanzó significancia estadística (t = 1,99; gl = 64; p = 0,051). El intervalo de confianza del 95% para la diferencia media oscila entre −0,002 y 0,93, lo que indica que el cambio podría ser cercano a cero. En consecuencia, no se puede afirmar con certeza que haya habido un cambio significativo en el conocimiento de los docentes participantes antes y después del curso.
A continuación, el Gráfico 3 muestra el cambio en puntajes individuales de los docentes que respondieron todo el cuestionario en ambos momentos (n=65). Cada círculo representa a uno o más docentes según la combinación de puntajes en Pre (T0) y Post (T1), mientras que la línea diagonal roja indica la situación de “sin cambio”. Los puntos por encima de la diagonal corresponden a mejoras, los que se ubican sobre la línea reflejan estabilidad, y los que quedan por debajo evidencian retroceso.
library(dplyr)
library(ggplot2)
# total de filas en la base
N_total <- nrow(BDD_conoc_VF)
# casos completos (sin NA en T0 o T1)
N_completos <- BDD_conoc_VF %>%
filter(!is.na(correctas_T0), !is.na(correctas_T1)) %>%
nrow()
N_faltantes <- N_total - N_completos
BDD_conoc_VF %>%
filter(!is.na(correctas_T0), !is.na(correctas_T1)) %>%
ggplot(aes(x = correctas_T0, y = correctas_T1)) +
geom_count(color = "steelblue", alpha = 0.6) +
geom_text(stat = "sum", aes(label = after_stat(n)),
vjust = -0.8, size = 3.5, color = "black") +
geom_abline(slope = 1, intercept = 0,
linetype = "dashed", color = "red") +
scale_size_area(max_size = 10) +
labs(
title = "Gráfico 3. Cambio de conocimiento - individual",
x = "Correctas Pre (T0)",
y = "Correctas Post (T1)",
caption = paste0("(n = ", N_completos,")")
) +
guides(size = "none") +
theme_minimal() +
theme(
plot.caption = element_text(hjust = 0.5, vjust = 1,
size = 10, face = "italic")
)
library(dplyr)
BDD_conoc_VF %>%
filter(!is.na(correctas_T0), !is.na(correctas_T1)) %>%
mutate(Cambio_conocimiento = case_when(
correctas_T1 > correctas_T0 ~ "Mejoró",
correctas_T1 < correctas_T0 ~ "Empeoró",
TRUE ~ "Se mantuvo"
)) %>%
count(Cambio_conocimiento) %>%
mutate(
porcentaje = round(100 * n / sum(n), 1) # un decimal
)
De esta manera, los resultados permiten observar que:
46% de los docentes (n=30) mejoró su puntaje
34% de los docetes (n=22) se mantuvo igual
20% de los docentes (n=13) disminuyó
Esto indica que, aunque el aumento promedio entre pre y post es pequeño (medio punto), al observar los casos individuales se evidencia que casi la mitad de los docentes experimentó una mejora en su conocimiento, un tercio no presentó variaciones y uno de cada cinco mostró un retroceso.
En conjunto, esta evidencia destaca la importancia de analizar los cambios individuales además de las medias: el efecto del programa no es homogéneo. Si bien la tendencia global es positiva —con más docentes que mejoran que los que empeoran—, la presencia de un grupo que no avanzó o incluso disminuyó su desempeño sugiere la necesidad de explorar factores diferenciadores, como las condiciones de implementación o las características de los docentes, que podrían explicar estas trayectorias diversas.
En el Gráfico 4 se presentan los promedios de respuestas correctas obtenidas por los docentes en la prueba de conocimientos, diferenciados por escuela y momento de aplicación (Pre y Post). En la Escuela Lucas Bárcenas (n = 30), los docentes obtuvieron en promedio 10.4 respuestas correctas en el pretest (T0), aumentando a 11.0 en el postest (T1), lo que representa una diferencia promedio de 0.6 respuestas. En la escuela Estado de Minnesota (n = 35), los promedios pasaron de 10.8 en el pretest (T0) a 11.1 en el postest (T1), equivalente a un incremento promedio de 0.34 respuestas.
No obstante, aunque los promedios sugieren una tendencia de mejora en ambas instituciones, los análisis estadísticos adicionales mediante pruebas t pareadas mostraron que estas diferencias no alcanzan significación estadística. En ambos casos, los intervalos de confianza de la diferencia de media incluyen el valor cero, lo que impide afirmar con certeza que la mejora observada corresponda a un efecto real de la intervención.
En suma, los hallazgos del Gráfico 4, complementados con las pruebas t, permiten concluir que si bien se aprecia un patrón positivo en las medias postest respecto al pretest, no existe evidencia estadísticamente significativa de cambios en el desempeño docente en ninguna de las dos escuelas.
BDD_conoc_VF %>%
# 1) Mantener solo quienes tienen datos en T0 Y T1
dplyr::filter(!is.na(correctas_T0) & !is.na(correctas_T1)) %>%
# 2) Calcular medias, errores estándar y n por escuela
dplyr::group_by(Escuela) %>%
dplyr::summarise(
n = dplyr::n(), # número de personas
media_T0 = mean(correctas_T0, na.rm = TRUE),
se_T0 = sd(correctas_T0, na.rm = TRUE) / sqrt(n),
media_T1 = mean(correctas_T1, na.rm = TRUE),
se_T1 = sd(correctas_T1, na.rm = TRUE) / sqrt(n),
.groups = "drop"
) %>%
# 3) Pasar a formato largo y construir IC
tidyr::pivot_longer(
cols = c(media_T0, se_T0, media_T1, se_T1),
names_to = c(".value", "Momento"),
names_pattern = "(.*)_(T.)"
) %>%
dplyr::mutate(
Momento = dplyr::recode(Momento, "T0" = "Pre (T0)", "T1" = "Post (T1)"),
Momento = factor(Momento, levels = c("Pre (T0)", "Post (T1)")),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se,
# 👉 cambiar el nombre de la escuela para incluir el n
Escuela = paste0(Escuela, "\n(n=", n, ")")
) %>%
# 4) Gráfico
ggplot2::ggplot(ggplot2::aes(x = Momento, y = media, fill = Momento)) +
ggplot2::geom_col(width = 0.6, position = "dodge") +
ggplot2::geom_errorbar(ggplot2::aes(ymin = IC_inf, ymax = IC_sup),
width = 0.2, position = ggplot2::position_dodge(0.6)) +
# etiquetas IC
ggplot2::geom_text(ggplot2::aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -1, color = "black", size = 2.5,
position = ggplot2::position_dodge(width = 0.6)) +
ggplot2::geom_text(ggplot2::aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -1, color = "black", size = 2.5,
position = ggplot2::position_dodge(width = 0.6)) +
# valor medio dentro de la barra
ggplot2::geom_text(ggplot2::aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4,
position = ggplot2::position_dodge(0.6)) +
ggplot2::labs(title = "Gráfico 4. Promedio de respuestas correctas por escuela (IC 95%)",
x = NULL, y = "Promedio") +
ggplot2::scale_fill_manual(values = c("Pre (T0)" = "seagreen", "Post (T1)" = "steelblue")) +
ggplot2::scale_y_continuous(limits = c(0, 12), breaks = 0:12) +
ggplot2::facet_wrap(~ Escuela) +
ggplot2::theme_minimal() +
ggplot2::theme(
legend.position = "none",
axis.title.x = ggplot2::element_text(margin = ggplot2::margin(t = 15)),
axis.title.y = ggplot2::element_text(margin = ggplot2::margin(r = 15)),
panel.grid.minor.y = ggplot2::element_blank()
)
library(dplyr)
library(broom)
library(purrr)
library(tidyr)
# Agrupar por escuela y nestear los datos
t_tests_por_escuela <- BDD_conoc_VF %>%
group_by(Escuela) %>%
nest() %>%
mutate(
t_test = map(data, ~ t.test(.x$correctas_T1, .x$correctas_T0, paired = TRUE) %>% tidy())
) %>%
unnest(t_test) %>%
select(Escuela, estimate, statistic, p.value, conf.low, conf.high)
t_tests_por_escuela
En esta sección se presenta, para cada pregunta del cuestionario de conocimiento, el porcentaje de docentes que marcó la alternativa correcta. Para facilitar la lectura, las preguntas se agrupan por temática del curso: cada sub-sección se inicia con una tabla que incluye la pregunta y todas sus alternativas, destacando en negrita y color verde la respuesta correcta. Posteriormente, los gráficos muestran el porcentaje de docentes que eligió esa respuesta correcta.
Para asegurar una comparación justa entre Pre (T0) y Post (T1), se consideran únicamente los/las docentes que respondieron la misma pregunta en ambos momentos, evitando que variaciones en el número de casos afecten los resultados.
Aunque los ítems originales eran de selección múltiple con 4
alternativas, para el análisis se recodificó cada respuesta
como:
Correcta = 1
Incorrecta = 0
De este modo, el porcentaje que aparece en cada barra corresponde a la proporción observada de respuestas correctas en la muestra.
Además de la altura de la barra (el porcentaje), se incluye un Intervalo de Confianza al 95% (IC 95%) representado como línea vertical. El IC indica la precisión de la estimación: mientras más angosto, más precisa es. Es relevante mencionar que aquí, al ser una pregunta con categorías de respuesta 0 y 1, no es posible concluir a partir de la superposición de los IC pre y post si hubo un cambio real en docentes, sino que sólo describen cada momento por separado.
En este escenario, corresponde realizar una prueba de McNemar, apropiada para datos pareados con resultados correcto/incorrecto. Esta prueba se enfoca en los casos que cambian de incorrecto a correcto (0→1) y de correcto a incorrecto (1→0). Si la diferencia entre mejoras y retrocesos es suficientemente consistente, se detecta con McNemar y se reporta mediante el valor p (indicador de significancia estadística). Es decir, si el valor p < 0,05 significa que hay un cambio significativo entre pre y post, ya sea que mejoraron o empeoraron.
#renombraré las variables para que sea más fácil
BDD_conoc_VF <- BDD_conoc_VF %>%
rename(
ME1_T0 = "P. 1 /1_T0",
ME2_T0 = "P. 2 /1_T0",
ME3_T0 = "P. 3 /1_T0",
ME1_T1 = "P. 2 /1_T1",
ME2_T1 = "P. 3 /1_T1",
ME3_T1 = "P. 4 /1_T1"
)
Pregunta | Respuestas |
---|---|
ME1: ¿Qué características tienen las escuelas que promueven la mejora educativa? |
|
ME2: ¿Cuál de las siguientes afirmaciones describe mejor el concepto de mejoramiento educativo? |
|
ME3: ¿Qué acción refleja una práctica de liderazgo pedagógico? |
|
#debo hacer que compare sólo aquellas personas que contestaron en ambos momentos la pregunta, entonces, crearé variables que sea el mismo valor de ME1_T0...ME3_T0 si es que ME1_T1...ME3_T1 es distinto de NA
library(dplyr)
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(
ME1_T0_rec = ifelse(!is.na(ME1_T0) & !is.na(ME1_T1), ME1_T0, NA),
ME2_T0_rec = ifelse(!is.na(ME2_T0) & !is.na(ME2_T1), ME2_T0, NA),
ME3_T0_rec = ifelse(!is.na(ME3_T0) & !is.na(ME3_T1), ME3_T0, NA),
ME1_T1_rec = ifelse(!is.na(ME1_T0) & !is.na(ME1_T1), ME1_T1, NA),
ME2_T1_rec = ifelse(!is.na(ME2_T0) & !is.na(ME2_T1), ME2_T1, NA),
ME3_T1_rec = ifelse(!is.na(ME3_T0) & !is.na(ME3_T1), ME3_T1, NA)
)
#comprobar correcta recodificación
BDD_conoc_VF %>%
mutate(check_ME1 = ifelse(!is.na(ME1_T0_rec) & !is.na(ME1_T1_rec), "Ambos",
ifelse(is.na(ME1_T0_rec) & is.na(ME1_T1_rec), "Ninguno", "Solo uno"))) %>%
count(check_ME1)
BDD_conoc_VF %>%
mutate(check_ME2 = ifelse(!is.na(ME2_T0_rec) & !is.na(ME2_T1_rec), "Ambos",
ifelse(is.na(ME2_T0_rec) & is.na(ME2_T1_rec), "Ninguno", "Solo uno"))) %>%
count(check_ME2)
BDD_conoc_VF %>%
mutate(check_ME3 = ifelse(!is.na(ME3_T0_rec) & !is.na(ME3_T1_rec), "Ambos",
ifelse(is.na(ME3_T0_rec) & is.na(ME3_T1_rec), "Ninguno", "Solo uno"))) %>%
count(check_ME3)
# GRAFICO 5. MEJORAMIENTO EDUCATIVO
library(dplyr)
library(tidyr)
library(ggplot2)
# 1) LARGO Y LIMPIEZA
df_long_me <- BDD_conoc_VF %>%
pivot_longer(
cols = matches("^ME[0-9]+_T[01]_rec$"),
names_to = c("Pregunta", "Momento"),
names_pattern = "^(ME[0-9]+)_(T[01])_rec$",
values_to = "valor"
) %>%
mutate(
Momento = recode(Momento, T0 = "Pre (T0)", T1 = "Post (T1)"),
Momento = factor(Momento, levels = c("Pre (T0)", "Post (T1)")),
Pregunta = recode(
Pregunta,
"ME1" = "1. Escuela promueve ME \n(n=72)",
"ME2" = "2. Conceptualización ME \n(n=72)",
"ME3" = "3. Liderazgo pedagógico \n(n=71)"
)
)
# 2) RESUMEN: media, SE e IC95
df_bar_me <- df_long_me %>%
group_by(Pregunta, Momento) %>%
summarise(
media = mean(valor, na.rm = TRUE) * 100,
se = (sd(valor, na.rm = TRUE) / sqrt(sum(!is.na(valor)))) * 100,
.groups = "drop"
) %>%
mutate(
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# 3) GRÁFICO: estilo G7
pd <- position_dodge(width = 0.7)
ggplot(df_bar_me, aes(x = Pregunta, y = media, fill = Momento)) +
geom_col(position = pd, width = 0.6) +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup),
position = pd, width = 0.2) +
geom_text(aes(label = paste0(round(media, 1), "%")),
position = pd, vjust = -0.5, size = 3.5) +
labs(
title = "Gráfico 5. Mejoramiento educativo (% respuestas correctas) — IC 95%",
x = NULL, y = NULL, fill = NULL
) +
scale_y_continuous(limits = c(0, 110), breaks = seq(0, 110, 10)) +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
coord_cartesian(clip = "off") +
theme_minimal() +
theme(
legend.position = "top",
legend.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
En el Gráfico 5 se observa que:
El 83% de docentes en Pre (T0) y 93% en Post (T1) reconoció que fomentar el aprendizaje docente entre pares y una cultura de colaboración es una característica de escuelas que promueven la mejora educativa. Los IC95% indican buena precisión, sin embargo, al realizar la prueba de McNemar (bilateral) la diferencia no es estadísticamente significativa.
El 100% de docentes en Pre y 99% en Post identificó correctamente
que el mejoramiento educativo es un proceso continuo y colaborativo
orientado a mejorar los aprendizajes. Aquí hay efecto
techo: al obtener todos la respuesta correcta previo al curso,
no hay margen real para mejorar. Al realizar la prueba de McNemar
(bilateral) se observa que sólo 1 docente que había contestado bien
previo al curso, luego tiene una respuesta errada (p=1), por lo que
no se observan cambios significativos en esta pregunta.
El 79% en Pre y 94% en Post señaló como acción de liderazgo pedagógico “observar clases y retroalimentar para fortalecer la enseñanza”. En este caso, los IC95% en T0 son más anchos que en T1, lo que indica menor precisión. Al verificar con la prueba de McNemar vemos que 14 docentes mejoraron, mientras que sólo 3 retrocedieron, dando una mejora estadísticamente significativa.
## McNemar para ME1 (0/1), con manejo de NA
# Filtra pares completos (sin NA en ambos momentos)
df_me1 <- subset(BDD_conoc_VF, !is.na(ME1_T0_rec) & !is.na(ME1_T1_rec))
# Tabla 2x2: filas = T0, columnas = T1
tab_me1 <- table(T0 = df_me1$ME1_T0_rec, T1 = df_me1$ME1_T1_rec)
# Conteos clave
b <- as.numeric(tab_me1["0","1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_me1["1","0"]) # 1 -> 0 (retroceso)
n <- sum(tab_me1) # total de pares
m <- b + c # discordantes
# McNemar bilateral (con corrección de continuidad)
mcn_me1 <- mcnemar.test(tab_me1, correct = TRUE)
# Cambio neto pareado (en proporción; multiplica por 100 para pp)
delta <- (b - c) / n
# IC para delta (vía discordantes; exacto Clopper-Pearson sobre b|m)
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# Resultado compacto
list(
tabla_2x2 = tab_me1,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_me1$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# Filtra pares completos
d_me2 <- subset(BDD_conoc_VF, !is.na(ME2_T0_rec) & !is.na(ME2_T1_rec))
# Fuerza niveles 0/1 aunque no estén presentes en los datos
t0 <- factor(d_me2$ME2_T0_rec, levels = c(0, 1))
t1 <- factor(d_me2$ME2_T1_rec, levels = c(0, 1))
# Tabla 2x2 con todas las celdas
tab_me2 <- table(T0 = t0, T1 = t1)
# Discordantes
b <- as.numeric(tab_me2["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_me2["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_me2)
m <- b + c
# McNemar: manejar caso sin discordantes
if (m == 0) {
# No hay cambios 0->1 ni 1->0: la prueba no es aplicable (estadístico = 0)
p_mcn <- NA_real_ # o, si prefieres, p_mcn <- 1
aviso <- "Sin discordantes (b=c=0): no es posible aplicar McNemar."
ci_delta <- c(NA_real_, NA_real_)
} else {
p_mcn <- mcnemar.test(tab_me2, correct = TRUE)$p.value # bilateral
# IC para delta vía discordantes (exacto binomial)
ci_p <- binom.test(b, m)$conf.int
ci_delta <- (2 * ci_p - 1) * (m / n)
aviso <- NULL
}
delta <- (b - c) / n
list(
tabla_2x2 = tab_me2,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = p_mcn,
delta = delta, delta_pp = delta * 100,
ci_delta = ci_delta, ci_delta_pp = ci_delta * 100,
nota = aviso
)
#MCNEMAR PARA MEE3_REC
# Filtra pares completos (sin NA en ambos momentos)
df_me3 <- subset(BDD_conoc_VF, !is.na(ME3_T0_rec) & !is.na(ME3_T1_rec))
# Tabla 2x2: filas = T0, columnas = T1
tab_me3 <- table(T0 = df_me3$ME3_T0_rec, T1 = df_me3$ME3_T1_rec)
# Conteos clave
b <- as.numeric(tab_me3["0","1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_me3["1","0"]) # 1 -> 0 (retroceso)
n <- sum(tab_me3) # total de pares
m <- b + c # discordantes
# McNemar bilateral (con corrección de continuidad)
mcn_me3 <- mcnemar.test(tab_me3, correct = TRUE)
# Cambio neto pareado (en proporción; multiplica por 100 para pp)
delta <- (b - c) / n
# IC para delta (vía discordantes; exacto Clopper-Pearson sobre b|m)
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# Resultado compacto
list(
tabla_2x2 = tab_me3,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_me3$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
#renombraré las variables para que sea más fácil
BDD_conoc_VF <- BDD_conoc_VF %>%
rename(
PEE1_T0 = "P. 4 /1_T0",
PEE2_T0 = "P. 5 /1_T0",
PEE3_T0 = "P. 6 /1_T0",
PEE4_T0 = "P. 7 /1_T0",
PEE5_T0 = "P. 8 /1_T0",
PEE6_T0 = "P. 9 /1_T0",
PEE1_T1 = "P. 5 /1_T1",
PEE2_T1 = "P. 6 /1_T1",
PEE3_T1 = "P. 7 /1_T1",
PEE4_T1 = "P. 8 /1_T1",
PEE5_T1 = "P. 9 /1_T1",
PEE6_T1 = "P. 10 /1_T1"
)
#debo hacer que compare sólo aquellas personas que contestaron en ambos momentos la pregunta, entonces, crearé variables que sea el mismo valor de T0 si es que en T0 y T1 es distinto de NA
library(dplyr)
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(
PEE1_T0_rec = ifelse(!is.na(PEE1_T0) & !is.na(PEE1_T1), PEE1_T0, NA),
PEE2_T0_rec = ifelse(!is.na(PEE2_T0) & !is.na(PEE2_T1), PEE2_T0, NA),
PEE3_T0_rec = ifelse(!is.na(PEE3_T0) & !is.na(PEE3_T1), PEE3_T0, NA),
PEE4_T0_rec = ifelse(!is.na(PEE4_T0) & !is.na(PEE4_T1), PEE4_T0, NA),
PEE5_T0_rec = ifelse(!is.na(PEE5_T0) & !is.na(PEE5_T1), PEE5_T0, NA),
PEE6_T0_rec = ifelse(!is.na(PEE6_T0) & !is.na(PEE6_T1), PEE6_T0, NA),
PEE1_T1_rec = ifelse(!is.na(PEE1_T1) & !is.na(PEE1_T0), PEE1_T1, NA),
PEE2_T1_rec = ifelse(!is.na(PEE2_T1) & !is.na(PEE2_T0), PEE2_T1, NA),
PEE3_T1_rec = ifelse(!is.na(PEE3_T1) & !is.na(PEE3_T0), PEE3_T1, NA),
PEE4_T1_rec = ifelse(!is.na(PEE4_T1) & !is.na(PEE4_T0), PEE4_T1, NA),
PEE5_T1_rec = ifelse(!is.na(PEE5_T1) & !is.na(PEE5_T0), PEE5_T1, NA),
PEE6_T1_rec = ifelse(!is.na(PEE6_T1) & !is.na(PEE6_T0), PEE6_T1, NA),
)
Pregunta | Respuestas |
---|---|
PEE1: ¿Cómo se define el concepto de “prácticas efectivas basadas en evidencia” en el ámbito educativo? |
|
PEE2: Según la investigación educacional, ¿cuál de las siguientes características define una práctica educativa como efectiva? |
|
# GRAFICO 6. PEE 1 y 2 (estilo del Gráfico 7)
library(dplyr)
library(tidyr)
library(ggplot2)
# 1) LARGO DESDE VARIABLES *_rec
df_long_pee12 <- BDD_conoc_VF %>%
pivot_longer(
cols = matches("^PEE[12]_T[01]_rec$"), # PEE1_T0_rec, PEE1_T1_rec, PEE2_T0_rec, PEE2_T1_rec
names_to = c("Pregunta", "Momento"),
names_pattern = "^(PEE[12])_(T[01])_rec$",
values_to = "valor"
) %>%
mutate(
Momento = factor(recode(Momento, "T0" = "Pre (T0)", "T1" = "Post (T1)"),
levels = c("Pre (T0)", "Post (T1)")),
Pregunta = recode(Pregunta,
"PEE1" = "1. Conceptualización \n(n=72)",
"PEE2" = "2. Investigación educacional \n(n=72)")
)
# 2) RESUMEN: media, SE e IC95
df_bar_pee12 <- df_long_pee12 %>%
group_by(Pregunta, Momento) %>%
summarise(
media = mean(valor, na.rm = TRUE) * 100,
se = (sd(valor, na.rm = TRUE) / sqrt(sum(!is.na(valor)))) * 100,
.groups = "drop"
) %>%
mutate(
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# 3) GRÁFICO: estilo G7
pd <- position_dodge(width = 0.7)
ggplot(df_bar_pee12, aes(x = Pregunta, y = media, fill = Momento)) +
geom_col(position = pd, width = 0.6) +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup),
position = pd, width = 0.2) +
geom_text(aes(label = paste0(round(media, 1), "%")),
position = pd, vjust = -0.5, size = 3.5) +
labs(
title = "Gráfico 6. Prácticas pedagógicas efectivas 1 (% respuestas correctas) — IC 95%",
x = NULL, y = NULL, fill = NULL
) +
scale_y_continuous(limits = c(0, 110), breaks = seq(0, 110, 10)) +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
coord_cartesian(clip = "off") +
theme_minimal() +
theme(
legend.position = "top",
legend.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
En el Gráfico 6 se observa que:
En Pre (T0) el 92% y en Post (T1) el 93% de los docentes identificó que las prácticas efectivas basadas en evidencia son estrategias de enseñanza respaldadas por estudios rigurosos y datos empíricos que demuestran mejorar el aprendizaje de los estudiantes. Los IC95% son muy estrechos, lo que sugiere estimaciones precisas en ambos momentos. La prueba de McNemar (bilateral) da cuenta de que no hay cambios estadísticamente significativas.
Previo al curso (T0), el 65% de los docentes sabía que una característica de las prácticas educativas efectivas es que ha demostrado consistentemente, mediante estudios rigurosos, mejorar el aprendizaje de los estudiantes. Esta cifra asciende a 76% de los docentes una vez finalizado el curso (T1). Aún así, la prueba de McNemar (bilateral) reporta que esta mejora no es estadísticamente significativa.
# === MCNEMAR PARA PEE1 (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_pee1 <- subset(BDD_conoc_VF, !is.na(PEE1_T0_rec) & !is.na(PEE1_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_pee1 <- table(
T0 = factor(df_pee1$PEE1_T0_rec, levels = c(0, 1)),
T1 = factor(df_pee1$PEE1_T1_rec, levels = c(0, 1))
)
tab_pee1
# 3) Conteos clave
b <- as.numeric(tab_pee1["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_pee1["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_pee1) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_pee1 <- mcnemar.test(tab_pee1, correct = TRUE)
mcn_pee1
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_pee1,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_pee1$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# === MCNEMAR PARA PEE2 (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_pee2 <- subset(BDD_conoc_VF, !is.na(PEE2_T0_rec) & !is.na(PEE2_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_pee2 <- table(
T0 = factor(df_pee2$PEE2_T0_rec, levels = c(0, 1)),
T1 = factor(df_pee2$PEE2_T1_rec, levels = c(0, 1))
)
tab_pee2
# 3) Conteos clave
b <- as.numeric(tab_pee2["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_pee2["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_pee2) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_pee2 <- mcnemar.test(tab_pee2, correct = TRUE)
mcn_pee2
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_pee2,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_pee2$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
Pregunta | Respuestas |
---|---|
PEE3: ¿Cuál de las siguientes prácticas está más alineada con el desarrollo del aprendizaje socioemocional en el aula? |
|
PEE4: ¿Qué elemento es esencial para que una actividad grupal se considere aprendizaje colaborativo efectivo? |
|
PEE5: ¿Cuál es una característica clave de la retroalimentación formativa? |
|
PEE6: ¿Qué estrategia favorece la comprensión lectora? |
|
# === Gráfico 7. Prácticas educativas efectivas 2 (% correctas) — IC 95% ===
library(dplyr)
library(tidyr)
library(ggplot2)
library(tibble)
# 1) Pasar a formato largo (variables *_rec)
df_long <- BDD_conoc_VF %>%
pivot_longer(
cols = c(PEE3_T0_rec, PEE4_T0_rec, PEE5_T0_rec, PEE6_T0_rec,
PEE3_T1_rec, PEE4_T1_rec, PEE5_T1_rec, PEE6_T1_rec),
names_to = c("Pregunta", "Momento"),
names_pattern = "^(PEE[0-9]+)_(T[01])_rec$",
values_to = "valor"
) %>%
mutate(
Momento = factor(recode(Momento, T0 = "Pre (T0)", T1 = "Post (T1)"),
levels = c("Pre (T0)", "Post (T1)")),
Pregunta = factor(Pregunta, levels = c("PEE3", "PEE4", "PEE5", "PEE6"))
)
# 2) Etiquetas base (con saltos de línea, sin n)
labels_base <- tribble(
~Pregunta, ~label,
"PEE3", "3. Aprendizaje\nsocioemocional",
"PEE4", "4. Aprendizaje\ncolaborativo",
"PEE5", "5. Retroalimentación\nformativa",
"PEE6", "6. Comprensión\nlectora"
)
# 3) N por variable (mismas personas en ambos momentos) -> usar el MÁXIMO entre Pre/Post
df_n_x <- df_long %>%
group_by(Pregunta, Momento) %>%
summarise(n = sum(!is.na(valor)), .groups = "drop") %>%
group_by(Pregunta) %>%
summarise(n = max(n), .groups = "drop")
# 4) Vector de etiquetas finales para el eje X: "label\n(n=...)"
lab_x <- labels_base %>%
left_join(df_n_x, by = "Pregunta") %>%
mutate(label_n = paste0(label, "\n(n=", n, ")")) %>%
{ setNames(.$label_n, .$Pregunta) }
# 5) Resumen por barra: media, SE e IC95
df_bar_momento <- df_long %>%
group_by(Pregunta, Momento) %>%
summarise(
media = mean(valor, na.rm = TRUE) * 100,
se = (sd(valor, na.rm = TRUE) / sqrt(sum(!is.na(valor)))) * 100,
.groups = "drop"
) %>%
mutate(
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# 6) Gráfico (estilo deseado)
pd <- position_dodge(width = 0.7)
ggplot(df_bar_momento, aes(x = Pregunta, y = media, fill = Momento)) +
geom_col(position = pd, width = 0.6) +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup),
position = pd, width = 0.2) +
geom_text(aes(label = paste0(round(media, 1), "%")),
position = pd, vjust = -0.5, size = 3.5) +
labs(
title = "Gráfico 7. Prácticas educativas efectivas 2 (% respuestas correctas) — IC 95%",
x = NULL, y = NULL, fill = NULL
) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(limits = c(0, 110), breaks = seq(0, 110, 10)) +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
coord_cartesian(clip = "off") +
theme_minimal() +
theme(
legend.position = "top",
legend.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
A modo general, en el Gráfico 7 se observa que el conocimiento en estas cuatro prácticas pedagógicas efectivas comenzó en niveles muy altos y con IC95% muy estrechos, lo que indica estimaciones precisas y poco margen de crecimiento. Al realizar la prueba McNemar se observa que la diferencia no es estadísticamente significativa en las cuatro dimensiones. En este contexto, el curso parece consolidar conocimientos más que generar ganancias sustantivas.
# === MCNEMAR PARA PEE3 (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_pee3 <- subset(BDD_conoc_VF, !is.na(PEE3_T0_rec) & !is.na(PEE3_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_pee3 <- table(
T0 = factor(df_pee3$PEE3_T0_rec, levels = c(0, 1)),
T1 = factor(df_pee3$PEE3_T1_rec, levels = c(0, 1))
)
tab_pee3
# 3) Conteos clave
b <- as.numeric(tab_pee3["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_pee3["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_pee3) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_pee3 <- mcnemar.test(tab_pee3, correct = TRUE)
mcn_pee3
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_pee3,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_pee3$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# === MCNEMAR PARA PEE4 (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_pee4 <- subset(BDD_conoc_VF, !is.na(PEE4_T0_rec) & !is.na(PEE4_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_pee4 <- table(
T0 = factor(df_pee4$PEE4_T0_rec, levels = c(0, 1)),
T1 = factor(df_pee4$PEE4_T1_rec, levels = c(0, 1))
)
tab_pee4
# 3) Conteos clave
b <- as.numeric(tab_pee4["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_pee4["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_pee4) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_pee4 <- mcnemar.test(tab_pee4, correct = TRUE)
mcn_pee4
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_pee4,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_pee4$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# === MCNEMAR PARA PEE5 (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_pee5 <- subset(BDD_conoc_VF, !is.na(PEE5_T0_rec) & !is.na(PEE5_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_pee5 <- table(
T0 = factor(df_pee5$PEE5_T0_rec, levels = c(0, 1)),
T1 = factor(df_pee5$PEE5_T1_rec, levels = c(0, 1))
)
tab_pee5
# 3) Conteos clave
b <- as.numeric(tab_pee5["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_pee5["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_pee5) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_pee5 <- mcnemar.test(tab_pee5, correct = TRUE)
mcn_pee5
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_pee5,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_pee5$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# === MCNEMAR PARA PEE6 (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_pee6 <- subset(BDD_conoc_VF, !is.na(PEE6_T0_rec) & !is.na(PEE6_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_pee6 <- table(
T0 = factor(df_pee6$PEE6_T0_rec, levels = c(0, 1)),
T1 = factor(df_pee6$PEE6_T1_rec, levels = c(0, 1))
)
tab_pee6
# 3) Conteos clave
b <- as.numeric(tab_pee6["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_pee6["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_pee6) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_pee6 <- mcnemar.test(tab_pee6, correct = TRUE)
mcn_pee6
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_pee6,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_pee6$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
library(dplyr)
#renombraré las variables para que sea más fácil
BDD_conoc_VF <- BDD_conoc_VF %>%
rename(
OBS_T0 = "P. 10 /1_T0",
DYR_T0 = "P. 11 /1_T0",
CCM_T0 = "P. 12 /1_T0",
OBS_T1 = "P. 1 /1_T1",
DYR_T1 = "P. 11 /1_T1",
CCM_T1 = "P. 12 /1_T1"
)
#debo hacer que compare sólo aquellas personas que contestaron en ambos momentos la pregunta, entonces, crearé variables que sea el mismo valor de T0 si es que en T0 y T1 es distinto de NA
BDD_conoc_VF <- BDD_conoc_VF %>%
mutate(
OBS_T0_rec = ifelse(!is.na(OBS_T0) & !is.na(OBS_T1), OBS_T0, NA),
DYR_T0_rec = ifelse(!is.na(DYR_T0) & !is.na(DYR_T1), DYR_T0, NA),
CCM_T0_rec = ifelse(!is.na(CCM_T0) & !is.na(CCM_T1), CCM_T0, NA),
OBS_T1_rec = ifelse(!is.na(OBS_T1) & !is.na(OBS_T0), OBS_T1, NA),
DYR_T1_rec = ifelse(!is.na(DYR_T1) & !is.na(DYR_T0), DYR_T1, NA),
CCM_T1_rec = ifelse(!is.na(CCM_T1) & !is.na(CCM_T0), CCM_T1, NA)
)
Pregunta | Respuestas |
---|---|
¿Cuál de los siguientes es un error frecuente al realizar una observación de clase? |
|
¿Por qué es importante promover el desarrollo profesional docente a través de una cultura de diálogo y retroalimentación en la escuela? |
|
¿Por qué es importante que las escuelas trabajen con ciclos cortos de mejora planificada? |
|
# === Gráfico X. Observación, diálogo y ciclos (% correctas) — IC 95% ===
library(dplyr)
library(tidyr)
library(ggplot2)
library(tibble)
# 1) Largo (OBS/DYR/CCM con *_rec)
df_long <- BDD_conoc_VF %>%
pivot_longer(
cols = c(OBS_T0_rec, OBS_T1_rec,
DYR_T0_rec, DYR_T1_rec,
CCM_T0_rec, CCM_T1_rec),
names_to = c("Pregunta", "Momento"),
names_pattern = "^(OBS|DYR|CCM)_(T[01])_rec$",
values_to = "valor"
) %>%
mutate(
Momento = factor(recode(Momento, T0 = "Pre (T0)", T1 = "Post (T1)"),
levels = c("Pre (T0)", "Post (T1)")),
Pregunta = factor(Pregunta, levels = c("OBS","DYR","CCM"))
)
# 2) Etiquetas base (con saltos de línea; sin n)
labels_base <- tribble(
~Pregunta, ~label,
"OBS", "1. Observación en aula",
"DYR", "2. Diálogo y retroalimentación",
"CCM", "3. Ciclos cortos de mejora"
)
# 3) N por variable (mismas personas en T0/T1) -> usar el MÁXIMO entre momentos
df_n_x <- df_long %>%
group_by(Pregunta, Momento) %>%
summarise(n = sum(!is.na(valor)), .groups = "drop") %>%
group_by(Pregunta) %>%
summarise(n = max(n), .groups = "drop")
# 4) Vector de etiquetas finales para eje X: "label\n(n=...)"
lab_x <- labels_base %>%
left_join(df_n_x, by = "Pregunta") %>%
mutate(label_n = paste0(label, "\n(n=", n, ")")) %>%
{ setNames(.$label_n, .$Pregunta) }
# 5) Resumen por barra: media, SE e IC95
df_bar_momento <- df_long %>%
group_by(Pregunta, Momento) %>%
summarise(
media = mean(valor, na.rm = TRUE) * 100,
se = (sd(valor, na.rm = TRUE) / sqrt(sum(!is.na(valor)))) * 100,
.groups = "drop"
) %>%
mutate(
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# 6) Gráfico
pd <- position_dodge(width = 0.7)
ggplot(df_bar_momento, aes(x = Pregunta, y = media, fill = Momento)) +
geom_col(position = pd, width = 0.6) +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup),
position = pd, width = 0.2) +
geom_text(aes(label = paste0(round(media, 1), "%")),
position = pd, vjust = -0.5, size = 3.5) +
labs(
title = "Gráfico 8. Observación aula, retroalimentación y ciclos de mejora \n(% respuestas correctas) — IC 95%",
x = NULL, y = NULL, fill = NULL
) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(limits = c(0, 110), breaks = seq(0, 110, 10)) +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
coord_cartesian(clip = "off") +
theme_minimal() +
theme(
legend.position = "top",
legend.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
En el Gráfico 8 se observa que:
En observación en aula, el conocimiento aumenta de 69% de respuestas correctas antes del curso a 82% después. Sin embargo, el test de McNemar señala que la diferencia no es estadísticamente significativa.
Respecto a la pregunta sobre la cultura de diálogo y retroalimentación, el grupo docente partió altísimo (T0 = 97,2%), con un claro efecto techo, y subió levemente a 99%. El McNemar indica que este aumento no es estadísticamente significativo.
Finalmente, en la pregunta sobre ciclos cortos de mejora vemos una estabilidad en niveles altos: de 90% a 94%. Los IC95% se superponen y McNemar resulta no significativo, lo que sugiere más bien una consolidación de conocimiento más que un avance sustantivo.
# === MCNEMAR PARA OBS_T0_rec (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_OBS <- subset(BDD_conoc_VF, !is.na(OBS_T0_rec) & !is.na(OBS_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_OBS <- table(
T0 = factor(df_OBS$OBS_T0_rec, levels = c(0, 1)),
T1 = factor(df_OBS$OBS_T1_rec, levels = c(0, 1))
)
tab_OBS
# 3) Conteos clave
b <- as.numeric(tab_OBS["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_OBS["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_OBS) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_OBS <- mcnemar.test(tab_OBS, correct = TRUE)
mcn_OBS
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_OBS,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_OBS$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# === MCNEMAR PARA DYR_T0_rec (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_DYR <- subset(BDD_conoc_VF, !is.na(DYR_T0_rec) & !is.na(DYR_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_DYR <- table(
T0 = factor(df_DYR$DYR_T0_rec, levels = c(0, 1)),
T1 = factor(df_DYR$DYR_T1_rec, levels = c(0, 1))
)
tab_DYR
# 3) Conteos clave
b <- as.numeric(tab_DYR["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_DYR["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_DYR) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_DYR <- mcnemar.test(tab_DYR, correct = TRUE)
mcn_DYR
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_DYR,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_DYR$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
# === MCNEMAR PARA CCM_T0_rec (T0 vs T1) ===
# 1) Pares completos (sin NA en ambos momentos)
df_CCM <- subset(BDD_conoc_VF, !is.na(CCM_T0_rec) & !is.na(CCM_T1_rec))
# 2) Tabla 2x2 asegurando niveles 0/1 (filas=T0, columnas=T1)
tab_CCM <- table(
T0 = factor(df_CCM$CCM_T0_rec, levels = c(0, 1)),
T1 = factor(df_CCM$CCM_T1_rec, levels = c(0, 1))
)
tab_CCM
# 3) Conteos clave
b <- as.numeric(tab_CCM["0", "1"]) # 0 -> 1 (mejora)
c <- as.numeric(tab_CCM["1", "0"]) # 1 -> 0 (retroceso)
n <- sum(tab_CCM) # total de pares
m <- b + c # discordantes
# 4) Test de McNemar (bilateral, con corrección de continuidad)
mcn_CCM <- mcnemar.test(tab_CCM, correct = TRUE)
mcn_CCM
# 5) Cambio neto pareado (delta) y su IC95% (vía discordantes)
# delta = (b - c) / n -> proporción (mult. x100 = puntos porcentuales)
delta <- (b - c) / n
ci_delta <- if (m > 0) {
ci_p <- binom.test(b, m)$conf.int # IC para p = b/(b+c)
(2 * ci_p - 1) * (m / n) # transforma a IC de delta
} else c(NA_real_, NA_real_)
# 6) Resultado compacto
list(
tabla_2x2 = tab_CCM,
b_0a1 = b, c_1a0 = c, discordantes = m, n_pares = n,
p_mcnemar_bilateral = mcn_CCM$p.value,
delta = delta, # en proporción
delta_pp = delta * 100, # en puntos porcentuales
ci_delta = ci_delta, # en proporción
ci_delta_pp = ci_delta * 100 # en puntos porcentuales
)
A continuación se presentan los resultados de línea base (T0) en distintas dimensiones que se espera evolucionen tras la formación del programa PRISA. A diferencia del cuestionario de conocimiento, esta encuesta no tiene respuestas “correctas/incorrectas”: recoge la percepción de los docentes sobre su capacidad, disposición y valoraciones (autorreporte).
library(dplyr)
Encuesta_T0 <-
readxl::read_xlsx("C:/Users/Monse/Dropbox/Personal/.SUMMA/PRISA Escuelas/Resultados/2025.09.16 BDD Encuesta docente evidencia promisoria T0.xlsx")
#Eliminar de base final a gente SUMMA, ROTARY y conserva los NA
BDD_encuesta_T0 <- Encuesta_T0 %>%
filter(!Institución %in% c("SUMMA", "Club Rotario Panamá") | is.na(Institución))
#chequear que no haya duplicados en ID correo electrónico
sum(duplicated(BDD_encuesta_T0$`Dirección de correo`)) # no hay duplicados
#renombraré las variables para que sea más fácil
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
rename(
estudios_T0 = "Q01_0",
autoef_RF1_T0 = "Q02_2. RT->Ofrecer retroalimentación oral o escrita al estudiantado para indicar sus áreas de mejora.",
autoef_RF2_T0 = "Q02_2. RT->Proporcionar a los estudiantes retroalimentación inmediata mientras trabajan en tareas específicas.",
autoef_RF3_T0 = "Q02_2. RT->Alentar a los estudiantes a realizar tareas similares hasta que el docente sepa que todos han comprendido el tema.",
autoef_RF4_T0 = "Q02_2. RT->Hacer comentarios específicos o entregar indicaciones a los estudiantes para ayudarlos a clarificar sus confusiones.",
autoef_AC1_T0 = "Q03_2. AC->Pedir a los estudiantes que trabajen en grupos pequeños para encontrar una solución conjunta a un problema o tarea.",
autoef_AC2_T0 = "Q03_2. AC->Animar a los estudiantes a cuestionar y reflexionar sobre los argumentos de sus compañeros.",
autoef_AC3_T0 = "Q03_2. AC->Promover la colaboración entre los estudiantes mediante dinámicas entre pares.",
autoef_AC4_T0 = "Q03_2. AC->Potenciar el aprendizaje cooperativo entre estudiantes con distintos niveles de aprendizaje mediante dinámicas integradoras.",
autoef_ASE1_T0 = "Q04_Sección 3. ASE->Ayudar al estudiantado a gestionar sus propias emociones, pensamientos y comportamiento dentro del aula.",
autoef_ASE2_T0 = "Q04_Sección 3. ASE->Ayudar al estudiantado a ser conscientes de sus sentimientos.",
autoef_ASE3_T0 = "Q04_Sección 3. ASE->Fomentar la empatía entre los estudiantes.",
autoef_ASE4_T0 = "Q04_Sección 3. ASE->Promover habilidades interpersonales en los estudiantes, como la comunicación, diálogo y el respeto.",
autoef_CL1_T0 = "Q05_5.CL->Conectar el tema de un texto con experiencias o conocimientos previos del estudiantado.",
autoef_CL2_T0 = "Q05_5.CL->Generar espacios para que los estudiantes realicen predicciones, deducciones, preguntas y conexiones.",
autoef_CL3_T0 = "Q05_5.CL->Explicar palabras en contexto y ofrecer ejemplos visuales o cotidianos.",
autoef_CL4_T0 = "Q05_5.CL->Evaluar la comprensión con preguntas orales, discusiones y actividades después de cada lectura.",
VTC_AC1_T0 = "Q06_3->Que el equipo docente trabaje conjuntamente para adquirir conocimientos, competencias y estrategias que mejoren su desempeño profesional",
VTC_AC2_T0 = "Q06_3->Que el equipo docente aprenda y aplique regularmente nuevos conocimientos para resolver problemas didácticos.",
VTC_AC3_T0 = "Q06_3->Que en la institución educativa existan oportunidades de ofrecer orientación y tutoría a los colegas.",
VTC_AC4_T0 = "Q06_3->Que en la institución educativa existan oportunidades, a nivel individual y grupal, para aplicar prácticas docentes y compartir los resultados.",
VTC_TP1_T0 = "Q07_3.1->Que el equipo docente trabaje y planifique conjuntamente la búsqueda de soluciones alternativas para responder mejor a las necesidades del estudiantado.",
VTC_TP2_T0 = "Q07_3.1->Que el equipo docente esté comprometido en la aplicación de estrategias y programas que mejoren el aprendizaje.",
VTC_TP3_T0 = "Q07_3.1->Que los docentes puedan enseñar de manera conjunta en una misma clase.",
VTC_TP4_T0 = "Q07_3.1->Que los docentes tengan la oportunidad de participar en actividades conjuntas con diferentes clases y grupos de edad (por ejemplo, en el desarrollo de proyectos).",
VTC_TEP1_T0 = "Q08_7.TP->Que el equipo docente tenga oportunidades para observar y analizar prácticas de aula de otros compañeros, lo que les permita dar apoyo a sus colegas.",
VTC_TEP2_T0 = "Q08_7.TP->Que el equipo docente proporcione retroalimentación a otros compañeros sobre sus prácticas docentes.",
VTC_TEP3_T0 = "Q08_7.TP->Que el equipo docente mantenga diálogos respetuosos entre sí, en los que se consideren distintos puntos de vista.",
VTC_TEP4_T0 = "Q08_7.TP->Que los docentes inicien y dirijan actividades colaborativas.",
Ref_pedag1_T0 = "Q09_4->Considerar la conexión entre sus acciones como docente y el aprendizaje de los estudiantes.",
Ref_pedag2_T0 = "Q09_4->Reflexionar y evaluar críticamente su propio proceso de enseñanza.",
Ref_pedag3_T0 = "Q09_4->Considerar la opinión del estudiantado para decisiones pedagógicas.",
Ref_pedag4_T0 = "Q09_4->Usar resultados de investigación educativa para mejorar la práctica de enseñanza.",
Ref_pedag5_T0 = "Q09_4->Mantener un compromiso activo con el aprendizaje profesional para mejorar la práctica pedagógica.",
Disp_camb1_T0 = "Q10_5->Probar nuevos enfoques pedagógicos que puedan cambiar la forma habitual en que trabajo en el aula.",
Disp_camb2_T0 = "Q10_5->Reflexionar y cuestionar mis propias creencias sobre lo que significa “enseñar bien”.",
Disp_camb3_T0 = "Q10_5->Revisar mis ideas previas sobre cómo entiendo el aprendizaje de los estudiantes.",
Disp_camb4_T0 = "Q10_5->Buscar sugerencias o retroalimentación de mis colegas que me ayuden para mejorar mi forma de enseñar.",
Disp_camb5_T0 = "Q10_5->Pedir la opinión de mis estudiantes para ajustar las estrategias de enseñanza que yo utilizo en el aula."
)
#pasar todas variables a numéricas
vars_T0 <- c("autoef_RF1_T0","autoef_RF2_T0","autoef_RF3_T0","autoef_RF4_T0","autoef_AC1_T0", "autoef_AC2_T0", "autoef_AC3_T0", "autoef_AC4_T0", "autoef_ASE1_T0", "autoef_ASE2_T0", "autoef_ASE3_T0", "autoef_ASE4_T0", "autoef_CL1_T0", "autoef_CL2_T0", "autoef_CL3_T0", "autoef_CL4_T0", "VTC_AC1_T0", "VTC_AC2_T0", "VTC_AC3_T0", "VTC_AC4_T0",
"VTC_TP1_T0", "VTC_TP2_T0", "VTC_TP3_T0", "VTC_TP4_T0",
"VTC_TEP1_T0", "VTC_TEP2_T0", "VTC_TEP3_T0", "VTC_TEP4_T0",
"Ref_pedag1_T0", "Ref_pedag2_T0", "Ref_pedag3_T0", "Ref_pedag4_T0", "Ref_pedag5_T0",
"Disp_camb1_T0", "Disp_camb2_T0", "Disp_camb3_T0", "Disp_camb4_T0", "Disp_camb5_T0")
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(across(all_of(vars_T0), ~ as.numeric(as.character(.x))))
# Creación indicador de Autoeficacia en retroalimentación formativa (variable continua = 4,5)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(
IND_autoef_RF_T0 = if_else(
if_all(all_of(c("autoef_RF1_T0", "autoef_RF2_T0", "autoef_RF3_T0", "autoef_RF4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_RF1_T0", "autoef_RF2_T0", "autoef_RF3_T0", "autoef_RF4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
# Creación indicador de Aprendizaje colaborativo (media = 4,5)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(
IND_autoef_AC_T0 = if_else(
if_all(all_of(c("autoef_AC1_T0", "autoef_AC2_T0", "autoef_AC3_T0", "autoef_AC4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_AC1_T0", "autoef_AC2_T0", "autoef_AC3_T0", "autoef_AC4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
# Creación indicador Autoeficacia ASE (media = 4,47)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(
IND_autoef_ASE_T0 = if_else(
if_all(all_of(c("autoef_ASE1_T0", "autoef_ASE2_T0", "autoef_ASE3_T0", "autoef_ASE4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_ASE1_T0", "autoef_ASE2_T0", "autoef_ASE3_T0", "autoef_ASE4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
# Creación indicador Autoeficacia comprensión lectora (media = 4,41)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(
IND_autoef_CL_T0 = if_else(
if_all(all_of(c("autoef_CL1_T0", "autoef_CL2_T0", "autoef_CL3_T0", "autoef_CL4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_CL1_T0", "autoef_CL2_T0", "autoef_CL3_T0", "autoef_CL4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
### VALORACION TRABAJO COLABORATIVO ###
# Creación indicador Aprendizaje colaborativo (media = 4,66)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(IND_VTC_AC_T0 = if_else(
if_all(all_of(c("VTC_AC1_T0", "VTC_AC2_T0", "VTC_AC3_T0", "VTC_AC4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("VTC_AC1_T0", "VTC_AC2_T0", "VTC_AC3_T0", "VTC_AC4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_) # si falta alguna → NA
)
# Creación indicador Trabajo Pedagógico (media = 4,52)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(IND_VTC_TP_T0 = if_else(
if_all(all_of(c("VTC_TP1_T0", "VTC_TP2_T0", "VTC_TP3_T0", "VTC_TP4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("VTC_TP1_T0", "VTC_TP2_T0", "VTC_TP3_T0", "VTC_TP4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
# Creación indicador Trabajo entre pares (media = 4,50)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(IND_VTC_TEP_T0 = if_else(
if_all(all_of(c("VTC_TEP1_T0", "VTC_TEP2_T0", "VTC_TEP3_T0", "VTC_TEP4_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("VTC_TEP1_T0", "VTC_TEP2_T0", "VTC_TEP3_T0", "VTC_TEP4_T0"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
### INDICADOR VALORACION REFLEXIÓN PEDAGÓGICA (media = 4,64)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(IND_REF_PEDAG_T0 = if_else(
if_all(all_of(c("Ref_pedag1_T0", "Ref_pedag2_T0", "Ref_pedag3_T0", "Ref_pedag4_T0", "Ref_pedag5_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("Ref_pedag1_T0", "Ref_pedag2_T0", "Ref_pedag3_T0", "Ref_pedag4_T0", "Ref_pedag5_T0"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
### INDICADOR DISPOSICION CAMBIAR PRÁCTICA (media = 4,52)
BDD_encuesta_T0 <- BDD_encuesta_T0 %>%
mutate(IND_DISP_CAMB_T0 = if_else(
if_all(all_of(c("Disp_camb1_T0", "Disp_camb2_T0", "Disp_camb3_T0", "Disp_camb4_T0", "Disp_camb5_T0")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("Disp_camb1_T0", "Disp_camb2_T0", "Disp_camb3_T0", "Disp_camb4_T0", "Disp_camb5_T0"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
Para poder responder a estas preguntas fue necesario crear indicadores compuestos sumativos, ya que cada dimensión evaluada contiene más de una pregunta. Antes de cada gráfico, aparece una tabla con las preguntas que conforman cada uno de los indicadores.
Indicador | Preguntas |
---|---|
Grado de disposición docente a modificar y ajustar sus prácticas pedagógicas |
|
Grado de importancia atribuida a la reflexión pedagógica |
|
library(dplyr)
library(tidyr)
library(ggplot2)
df <- BDD_encuesta_T0 %>%
summarise(
media_IND_DISP_CAMB_T0 = mean(IND_DISP_CAMB_T0, na.rm = TRUE),
se_IND_DISP_CAMB_T0 = sd(IND_DISP_CAMB_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_DISP_CAMB_T0))),
n_IND_DISP_CAMB_T0 = sum(!is.na(IND_DISP_CAMB_T0)),
media_IND_REF_PEDAG_T0 = mean(IND_REF_PEDAG_T0, na.rm = TRUE),
se_IND_REF_PEDAG_T0 = sd(IND_REF_PEDAG_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_REF_PEDAG_T0))),
n_IND_REF_PEDAG_T0 = sum(!is.na(IND_REF_PEDAG_T0))
) %>%
pivot_longer(
cols = everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
Variable = recode(Variable,
"IND_DISP_CAMB_T0" = "Disposición al cambio",
"IND_REF_PEDAG_T0" = "Reflexión pedagógica"),
Variable = factor(Variable, levels = c("Disposición al cambio","Reflexión pedagógica")),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# Etiquetas del eje X con n debajo
lab_x <- df %>% distinct(Variable, n) %>%
{ setNames(paste0(.$Variable, "\n(n=", .$n, ")"), .$Variable) }
# === TRANSFORMACIÓN PARA PARTIR EN 1 ===
df_plot <- df %>%
mutate(
media_c = media - 1,
IC_inf_c = IC_inf - 1,
IC_sup_c = IC_sup - 1
)
ggplot(df_plot, aes(x = Variable, y = media_c, fill = Variable)) +
geom_col(width = 0.6) +
geom_errorbar(aes(ymin = IC_inf_c, ymax = IC_sup_c), width = 0.2) +
# textos de IC (muestran el valor real, no el centrado)
geom_text(aes(y = IC_inf_c, label = round(IC_inf, 1)), hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup_c, label = round(IC_sup, 1)), hjust = -2, size = 2.5) +
# texto de la media dentro de la barra (valor real)
geom_text(aes(label = round(media, 1)), vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 9. Disposición docente a revisar y modificar sus prácticas\npedagógicas e importancia atribuida a la reflexión pedagógica T0 (IC 95%)",
x = NULL, y = "Grado disposición / importancia"
) +
scale_fill_manual(values = c(
"Disposición al cambio" = "seagreen",
"Reflexión pedagógica" = "seagreen"
)) +
scale_x_discrete(labels = lab_x) +
# Eje de 0 a 4 porque ya centramos en 1; re-etiquetamos para mostrar 1–5
scale_y_continuous(
limits = c(0, 4),
breaks = 0:4,
labels = function(b) b + 1,
expand = expansion(mult = c(0, 0.06))
) +
theme_minimal() +
theme(
legend.position = "none",
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
)
En el Gráfico 9 se observa que, previo al programa:
La disposición docente a revisar y ajustar prácticas es alta: media 4,5, IC95% 4,4–4,6. La estrechez del intervalo sugiere baja dispersión y una base homogénea, propicia para activar ciclos de mejora, escalar prácticas entre pares y focalizar los apoyos en el cómo cambiar (herramientas, acompañamiento, seguimiento) más que en el “por qué”.
La valoración de la reflexión pedagógica es similar y levemente superior: media 4,6, IC95% 4,6–4,7, con alto consenso. En consecuencia, conviene focalizar en la implementación y estandarización de instancias de reflexión más que en la sensibilización.
En ambos indicadores los promedios rozan el tope de la escala, lo que sugiere posible efecto techo y menor capacidad para discriminar matices de acuerdo.
Indicador | Preguntas |
---|---|
Grado de importancia atribuida al aprendizaje colaborativo docente |
|
Grado de importancia atribuida al trabajo pedagógico |
|
Grado de importancia atribuida al trabajo entre pares docentes |
|
library(dplyr)
library(tidyr)
library(ggplot2)
# Resumen
df_vtc <- BDD_encuesta_T0 %>%
summarise(
media_IND_VTC_AC_T0 = mean(IND_VTC_AC_T0, na.rm = TRUE),
se_IND_VTC_AC_T0 = sd(IND_VTC_AC_T0, na.rm = TRUE) /
sqrt(sum(!is.na(IND_VTC_AC_T0))),
n_IND_VTC_AC_T0 = sum(!is.na(IND_VTC_AC_T0)),
media_IND_VTC_TP_T0 = mean(IND_VTC_TP_T0, na.rm = TRUE),
se_IND_VTC_TP_T0 = sd(IND_VTC_TP_T0, na.rm = TRUE) /
sqrt(sum(!is.na(IND_VTC_TP_T0))),
n_IND_VTC_TP_T0 = sum(!is.na(IND_VTC_TP_T0)),
media_IND_VTC_TEP_T0 = mean(IND_VTC_TEP_T0, na.rm = TRUE),
se_IND_VTC_TEP_T0 = sd(IND_VTC_TEP_T0, na.rm = TRUE) /
sqrt(sum(!is.na(IND_VTC_TEP_T0))),
n_IND_VTC_TEP_T0 = sum(!is.na(IND_VTC_TEP_T0))
) %>%
pivot_longer(
cols = everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Orden explícito con los NOMBRES ORIGINALES
Variable = factor(
Variable,
levels = c("IND_VTC_AC_T0", "IND_VTC_TP_T0", "IND_VTC_TEP_T0")
),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# Etiquetas del eje X con n debajo (usando los nombres originales)
lab_map <- c(
"IND_VTC_AC_T0" = "Aprendizaje colaborativo",
"IND_VTC_TP_T0" = "Trabajo pedagógico",
"IND_VTC_TEP_T0" = "Trabajo entre pares"
)
# Etiquetas del eje X con n debajo (sin renombrar variables en los datos)
lab_x_vtc <- df_vtc %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl, "\n(n=", .$n, ")"), .$Variable) }
ggplot(df_vtc, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)), hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)), hjust = -2, size = 2.5) +
geom_text(aes(label = round(media, 1)), vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 10. Valoración trabajo colaborativo T0 (IC 95%)",
x = NULL, y = "Grado de importancia"
) +
scale_x_discrete(labels = lab_x_vtc) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # SIN clip="off"
theme_minimal() +
theme(
legend.position = "none",
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
)
En el Gráfico 10 los tres indicadores de trabajo colaborativo exhiben valoración alta y homogénea (IC95% estrechos), con poco margen de crecimiento. Esto configura un escenario propicio para pasar de la sensibilización a la implementación: instalar y estandarizar prácticas de trabajo colaborativo docente, dado que el tema ya es ampliamente considerado prioritario por los docentes.
Indicador | Preguntas |
---|---|
Grado de autoeficacia percibida para dar retroalimentación formativa en aula |
|
Grado de autoeficacia percibida para fomentar el aprendizaje colaborativo en el aula |
|
Grado de autoeficacia percibida para fomentar el aprendizaje socioemocional en el aula |
|
Grado de autoeficacia percibida para implementar estrategias de comprensión lectora |
|
library(dplyr)
library(tidyr)
library(ggplot2)
# ----- Variables a graficar -----
vars_autoef <- c("IND_autoef_RF_T0", "IND_autoef_AC_T0",
"IND_autoef_ASE_T0", "IND_autoef_CL_T0")
# ----- Resumen: media, se, n para cada variable -----
df_autoef <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_autoef),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_autoef),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"IND_autoef_RF_T0" = "Retroalimentación formativa",
"IND_autoef_AC_T0" = "Aprendizaje colaborativo",
"IND_autoef_ASE_T0" = "Aprendizaje socioemocional",
"IND_autoef_CL_T0" = "Comprensión lectora")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_autoef <- df_autoef %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl, "\n(n=", .$n, ")"), .$Variable) }
# ----- Gráfico -----
ggplot(df_autoef, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 11. Autoeficacia percibida en implementar prácticas de enseñanza T0 (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)"
) +
scale_x_discrete(labels = lab_x_autoef) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
)
En el Gráfico 11 se puede observar una alta y consistente autoeficacia docente en retroalimentación formativa, aprendizaje colaborativo, aprendizaje socioemocional y comprensión lectora. Esto permite centrar el programa en la ejecución de prácticas más que en sensibilización. Dado que la autoeficacia en comprensión lectora está levemente por debajo, conviene priorizar apoyos específicos en esta materia.
library(dplyr)
library(tidyr)
library(ggplot2)
# --- Resumen por Institución (dos escuelas) ---
df <- BDD_encuesta_T0 %>%
group_by(Institución) %>%
summarise(
media_IND_DISP_CAMB_T0 = mean(IND_DISP_CAMB_T0, na.rm = TRUE),
se_IND_DISP_CAMB_T0 = sd(IND_DISP_CAMB_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_DISP_CAMB_T0))),
n_IND_DISP_CAMB_T0 = sum(!is.na(IND_DISP_CAMB_T0)),
media_IND_REF_PEDAG_T0 = mean(IND_REF_PEDAG_T0, na.rm = TRUE),
se_IND_REF_PEDAG_T0 = sd(IND_REF_PEDAG_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_REF_PEDAG_T0))),
n_IND_REF_PEDAG_T0 = sum(!is.na(IND_REF_PEDAG_T0))
) %>%
pivot_longer(
cols = -Institución,
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Etiquetas legibles (ajusta si quieres mantener los códigos)
Variable = recode(
Variable,
"IND_DISP_CAMB_T0" = "Disposición al cambio",
"IND_REF_PEDAG_T0" = "Reflexión pedagógica"
),
Variable = factor(Variable, levels = c("Disposición al cambio",
"Reflexión pedagógica")),
IC_inf = media - 1.96*se,
IC_sup = media + 1.96*se
)
# n por institución (casos con ≥1 dato válido en las dos vars del gráfico)
vars_disp_ref <- c("IND_DISP_CAMB_T0", "IND_REF_PEDAG_T0")
nvec <- BDD_encuesta_T0 %>%
group_by(Institución) %>%
summarise(n = sum(if_any(all_of(vars_disp_ref), ~ !is.na(.))), .groups = "drop") %>%
{ setNames(.$n, .$Institución) }
# --- Centramos en 1 para que la barra "parta en 1" ---
df_plot <- df %>%
mutate(
media_c = media - 1,
IC_inf_c = IC_inf - 1,
IC_sup_c = IC_sup - 1
)
pd <- position_dodge(width = 0.65)
# Defino colores para las instituciones detectadas (2 niveles)
inst_levels <- levels(factor(df_plot$Institución))
cols <- c("seagreen", "steelblue")
names(cols) <- inst_levels # asigna en el orden de los niveles
ggplot(df_plot, aes(x = Variable, y = media_c, fill = Institución)) +
geom_col(width = 0.6, position = pd) +
geom_errorbar(aes(ymin = IC_inf_c, ymax = IC_sup_c), width = 0.2, position = pd) +
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4, position = pd) +
labs(
title = "Gráfico 12. Disposición a modificar prácticas e importancia de
la reflexión pedagógica — T0 (IC 95%)
",
x = NULL, y = "Grado disposición / importancia", fill = NULL
) +
scale_fill_manual(
values = c("seagreen","steelblue"),
labels = function(lv) paste0(lv, " (n=", nvec[lv], ")")
) +
scale_y_continuous(
limits = c(0, 4),
breaks = 0:4,
labels = function(b) b + 1,
expand = expansion(mult = c(0, 0.06))
) +
theme_minimal() +
theme(
legend.position = "top",
legend.direction = "horizontal",
legend.title = element_text(),
legend.margin = margin(b = 5),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
) +
guides(fill = guide_legend(nrow = 1, byrow = TRUE))
En el Gráfico 12 se observa que en ambas escuelas los niveles son altos y con IC estrechos, sin diferencias estadísticamente significativas entre ambas escuelas. El contexto es favorable para pasar de la sensibilización a la implementación.
library(dplyr)
library(tidyr)
library(ggplot2)
# ---- Variables y etiquetas ----
vars_vtc <- c("IND_VTC_AC_T0", "IND_VTC_TP_T0", "IND_VTC_TEP_T0")
lab_map <- c(
"IND_VTC_AC_T0" = "Aprendizaje colaborativo",
"IND_VTC_TP_T0" = "Trabajo pedagógico",
"IND_VTC_TEP_T0" = "Trabajo entre pares"
)
nvec <- BDD_encuesta_T0 |>
dplyr::summarise(dplyr::across(all_of(vars_vtc), ~ !is.na(.))) |>
dplyr::bind_cols(Institución = BDD_encuesta_T0$Institución) |>
dplyr::group_by(Institución) |>
dplyr::summarise(n = sum(dplyr::if_any(dplyr::everything(), ~ .x)), .groups="drop") |>
with(setNames(n, Institución))
# ---- Resumen por institución ----
df <- BDD_encuesta_T0 %>%
group_by(Institución) %>%
summarise(
across(all_of(vars_vtc),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
cols = -Institución,
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
Variable = factor(Variable, levels = vars_vtc),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# ---- Centrado para que la barra parta en 1 ----
df_plot <- df %>%
mutate(
media_c = media - 1,
IC_inf_c = IC_inf - 1,
IC_sup_c = IC_sup - 1
)
pd <- position_dodge(width = 0.65)
# ---- Colores por institución (seagreen / steelblue) ----
df_plot$Institución <- factor(df_plot$Institución) # asegura niveles
cols <- c("seagreen", "steelblue")
names(cols) <- levels(df_plot$Institución)
ggplot(df_plot, aes(x = Variable, y = media_c, fill = Institución)) +
geom_col(width = 0.6, position = pd) +
geom_errorbar(aes(ymin = IC_inf_c, ymax = IC_sup_c), width = 0.2, position = pd) +
# media real dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4, position = pd) +
labs(
title = "Gráfico 13. Valoración del trabajo colaborativo — T0 (IC 95%)",
x = NULL, y = "Grado de importancia", fill = NULL
) +
# eje 0–4 (centrado) re-etiquetado como 1–5 reales
scale_y_continuous(
limits = c(0, 4), breaks = 0:4, labels = function(b) b + 1,
expand = expansion(mult = c(0, 0.06))
) +
# etiquetas legibles para el eje X
scale_x_discrete(labels = lab_map) +
scale_fill_manual(
values = c("seagreen","steelblue"),
labels = function(lv) paste0(lv, " (n=", nvec[lv], ")")
) +
theme_minimal() +
theme(
legend.position = "top",
legend.direction = "horizontal",
legend.title = element_blank(),
legend.margin = margin(b = 5),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
) +
guides(fill = guide_legend(nrow = 1, byrow = TRUE))
En el Gráfico 13 se observa una valoración alta y consistente del trabajo colaborativo en ambas escuelas. En las tres dimensiones—aprendizaje colaborativo, trabajo pedagógico y trabajo entre pares—los promedios se sitúan entre 4,4 y 4,8 puntos, con IC95% estrechos que denotan consenso. El Estado de Minnesota presenta sistemáticamente puntajes algo superiores (≈0,2–0,3 puntos) respecto de Lucas Bárcenas; sin embargo, la superposición de los IC sugiere que las diferencias, aunque persistentes, son moderadas. Para el seguimiento, conviene priorizar indicadores de ejecución y calidad por sobre nuevas mediciones de valoración, dado el posible efecto techo.
library(dplyr)
library(tidyr)
library(ggplot2)
lab_map <- c(
"IND_autoef_RF_T0" = "Retroalimentación
formativa",
"IND_autoef_AC_T0" = "Aprendizaje
colaborativo",
"IND_autoef_ASE_T0" = "Aprendizaje
socioemocional",
"IND_autoef_CL_T0" = "Comprensión
lectora")
nvec <- BDD_encuesta_T0 |>
dplyr::summarise(dplyr::across(all_of(vars_autoef), ~ !is.na(.))) |>
dplyr::bind_cols(Institución = BDD_encuesta_T0$Institución) |>
dplyr::group_by(Institución) |>
dplyr::summarise(n = sum(dplyr::if_any(dplyr::everything(), ~ .x)), .groups="drop") |>
with(setNames(n, Institución))
# ---- Resumen por institución ----
df <- BDD_encuesta_T0 %>%
group_by(Institución) %>%
summarise(
across(all_of(vars_autoef),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
cols = -Institución,
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
Variable = factor(Variable, levels = vars_autoef),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# ---- Centrado para que la barra parta en 1 ----
df_plot <- df %>%
mutate(
media_c = media - 1,
IC_inf_c = IC_inf - 1,
IC_sup_c = IC_sup - 1
)
pd <- position_dodge(width = 0.65)
# ---- Colores por institución (seagreen / steelblue) ----
df_plot$Institución <- factor(df_plot$Institución) # asegura niveles
cols <- c("seagreen", "steelblue")
names(cols) <- levels(df_plot$Institución)
ggplot(df_plot, aes(x = Variable, y = media_c, fill = Institución)) +
geom_col(width = 0.6, position = pd) +
geom_errorbar(aes(ymin = IC_inf_c, ymax = IC_sup_c), width = 0.2, position = pd) +
# media real dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4, position = pd) +
labs(
title = "Gráfico 14. Autoeficacia docente T0 (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)", fill = NULL
) +
# eje 0–4 (centrado) re-etiquetado como 1–5 reales
scale_y_continuous(
limits = c(0, 4), breaks = 0:4, labels = function(b) b + 1,
expand = expansion(mult = c(0, 0.06))
) +
# etiquetas legibles para el eje X
scale_x_discrete(labels = lab_map) +
scale_fill_manual(
values = c("seagreen","steelblue"),
labels = function(lv) paste0(lv, " (n=", nvec[lv], ")")
) +
theme_minimal() +
theme(
legend.position = "top",
legend.direction = "horizontal",
legend.title = element_blank(),
legend.margin = margin(b = 5),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
) +
guides(fill = guide_legend(nrow = 1, byrow = TRUE))
En el Gráfico 14 se aprecia una autoeficacia alta y consistente en ambas escuelas para las cuatro áreas evaluadas. Estado de Minnesota presenta sistemáticamente puntajes superiores a Escuela Lucas Bárcenas. Los IC95% son estrechos y se solapan parcialmente, lo que indica consenso interno y diferencias moderadas pero persistentes a favor de Minnesota.
library(dplyr)
library(tidyr)
library(ggplot2)
# ----- Variables a graficar -----
vars_DCPP <- c("Disp_camb1_T0", "Disp_camb2_T0", "Disp_camb3_T0", "Disp_camb4_T0", "Disp_camb5_T0", "IND_DISP_CAMB_T0")
# ----- Resumen: media, se, n para cada variable -----
df_DCPP <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_DCPP),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_DCPP),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"Disp_camb1_T0" = "Probar nuevos\n enfoques pedagógicos",
"Disp_camb2_T0" = "Reflexionar y cuestionar lo que \nsignifica enseñar bien",
"Disp_camb3_T0" = "Revisar cómo entiendo el \naprendizaje de los estudiantes",
"Disp_camb4_T0" = "Buscar retroalimentación\n de mis colegas",
"Disp_camb5_T0" = "Pedir opinión estudiantes para\n ajustar estrategias de enseñanza",
"IND_DISP_CAMB_T0" = "Indicador total")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_DCPP <- df_DCPP %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_DCPP, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 15. Disposición a cambiar prácticas pedagógicas T0 (IC 95%)",
x = NULL, y = "Grado de disposición al cambio"
) +
scale_x_discrete(labels = lab_x_DCPP) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 30, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold")
)
library(dplyr)
library(tidyr)
library(ggplot2)
# ----- Variables a graficar -----
vars_RP <- c("Ref_pedag1_T0", "Ref_pedag2_T0", "Ref_pedag3_T0", "Ref_pedag4_T0", "Ref_pedag5_T0", "IND_REF_PEDAG_T0")
# ----- Resumen: media, se, n para cada variable -----
df_RP <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_RP),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_RP),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"Ref_pedag1_T0" = "Conectar sus acciones docentes\n con aprendizaje de estudiantes",
"Ref_pedag2_T0" = "Reflexionar y evaluar \nsu propia enseñanza",
"Ref_pedag3_T0" = "Considerar opinión estudiantado\n para decisiones pedagógicas",
"Ref_pedag4_T0" = "Usar investigación educativa\n para mejorar la enseñanza",
"Ref_pedag5_T0" = "Compromiso activo con aprendizaje\n profesional para mejorar práctica pedagógica",
"IND_REF_PEDAG_T0" = "Indicador total")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_RP <- df_RP %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_RP, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 16. Valoración Reflexión Pedagógica T0 (IC 95%)",
x = NULL, y = "Grado de importancia"
) +
scale_x_discrete(labels = lab_x_RP) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 40, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
library(dplyr)
library(tidyr)
library(ggplot2)
# ----- Variables a graficar -----
vars_VTC_AC <- c("VTC_AC1_T0", "VTC_AC2_T0", "VTC_AC3_T0", "VTC_AC4_T0", "IND_VTC_AC_T0")
# ----- Resumen: media, se, n para cada variable -----
df_VTC_AC <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_VTC_AC),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_VTC_AC),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"VTC_AC1_T0" = "Docentes trabajen juntos para adquirir\n conocimientos, competencias y estrategias \nque mejoren su desempeño profesional",
"VTC_AC2_T0" = "Docentes aprendan y apliquen \nregularmente nuevos conocimientos \npara resolver problemas didácticos",
"VTC_AC3_T0" = "Existan oportunidades de dar\n orientación y tutoría a colegas",
"VTC_AC4_T0" = "Existan oportunidades para\n aplicar prácticas docentes \ny compartir resultados",
"IND_VTC_AC_T0" = "Indicador total")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_VTC_AC <- df_VTC_AC %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_VTC_AC, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 17. Valoración Aprendizaje Colaborativo Docente T0 (IC 95%)",
x = NULL, y = "Grado de importancia"
) +
scale_x_discrete(labels = lab_x_VTC_AC) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 50, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
library(dplyr)
library(tidyr)
library(ggplot2)
# ----- Variables a graficar -----
vars_VTC_TP <- c("VTC_TP1_T0", "VTC_TP2_T0", "VTC_TP3_T0", "VTC_TP4_T0", "IND_VTC_TP_T0")
# ----- Resumen: media, se, n para cada variable -----
df_VTC_TP <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_VTC_TP),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_VTC_TP),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"VTC_TP1_T0" = "Docentes trabajen y planifiquen \nconjuntamente la búsqueda de soluciones\n para responder a las necesidades del estudiantado",
"VTC_TP2_T0" = "Docentes estén comprometidos con aplicación \nestrategias y programas que mejoren el aprendizaje",
"VTC_TP3_T0" = "Docentes puedan enseñar de manera \nconjunta en una misma clase",
"VTC_TP4_T0" = "Docentes participen en actividades conjuntas\n con diferentes clases y grupos de edad",
"IND_VTC_TP_T0" = "Indicador total")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_VTC_TP <- df_VTC_TP %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_VTC_TP, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 18. Valoración Trabajo Pedagógico T0 (IC 95%)",
x = NULL, y = "Grado de importancia"
) +
scale_x_discrete(labels = lab_x_VTC_TP) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 50, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
## TRABAJO ENTRE PARES ##
# ----- Variables a graficar -----
vars_VTC_TEP <- c("VTC_TEP1_T0", "VTC_TEP2_T0", "VTC_TEP3_T0", "VTC_TEP4_T0", "IND_VTC_TEP_T0")
# ----- Resumen: media, se, n para cada variable -----
df_VTC_TEP <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_VTC_TEP),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_VTC_TEP),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"VTC_TEP1_T0" = "Docentes observen y analicen\n prácticas de aula de pares",
"VTC_TEP2_T0" = "Docentes den retroalimentación a \ncompañeros sobre sus prácticas",
"VTC_TEP3_T0" = "Docentes mantengan diálogos respetuosos,\n considerando distintos puntos de vista",
"VTC_TEP4_T0" = "Docentes inicien y dirijan \nactividades colaborativas",
"IND_VTC_TEP_T0" = "Indicador total")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_VTC_TEP <- df_VTC_TEP %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_VTC_TEP, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 19. Valoración Trabajo entre Pares T0 (IC 95%)",
x = NULL, y = "Grado de importancia"
) +
scale_x_discrete(labels = lab_x_VTC_TEP) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 40, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
## RETROALIMENTACIÓN FORMATIVA ##
# ----- Variables a graficar -----
vars_autoef_RF <- c("autoef_RF1_T0", "autoef_RF2_T0", "autoef_RF3_T0", "autoef_RF4_T0", "IND_autoef_RF_T0")
# ----- Resumen: media, se, n para cada variable -----
df_autoef_RF <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_autoef_RF),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_autoef_RF),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"autoef_RF1_T0" = "Retroalimentar oral o \nescrita a estudiantes",
"autoef_RF2_T0" = "Retroalimentar de manera inmediata a estudiantes\n mientras trabajan en tareas específicas",
"autoef_RF3_T0" = "Alentar a estudiantes a realizar tareas similares \nhasta saber que todos han comprendido el tema",
"autoef_RF4_T0" = "Hacer comentarios específicos a estudiantes\n para clarificar sus confusiones",
"IND_autoef_RF_T0" = "Indicador total \nRetroalimentación formativa")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_autoef_RF <- df_autoef_RF %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_autoef_RF, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 20. Autoeficacia en Retroalimentación Formativa T0 (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)"
) +
scale_x_discrete(labels = lab_x_autoef_RF) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 40, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
## AUTOEFICACIA PARA FOMENTAR APRENDIZAJE COLABORATIVO ##
# ----- Variables a graficar -----
vars_autoef_AC <- c("autoef_AC1_T0", "autoef_AC2_T0", "autoef_AC3_T0", "autoef_AC4_T0", "IND_autoef_AC_T0")
# ----- Resumen: media, se, n para cada variable -----
df_autoef_AC <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_autoef_AC),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_autoef_AC),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"autoef_AC1_T0" = "Pedir a estudiantes que trabajen en \ngrupos pequeños para encontrar \nuna solución conjunta",
"autoef_AC2_T0" = "Animar a estudiantes a cuestionar y\n reflexionar sobre los argumentos \nde sus compañeros",
"autoef_AC3_T0" = "Promover la colaboración entre\n los estudiantes mediante \ndinámicas entre pares",
"autoef_AC4_T0" = "Potenciar el aprendizaje cooperativo \nentre estudiantes con distintos\n niveles de aprendizaje",
"IND_autoef_AC_T0" = "Indicador TOTAL Autoeficacia \nen fomentar Aprendizaje Colaborativo")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_autoef_AC <- df_autoef_AC %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_autoef_AC, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 21. Autoeficacia en fomentar el Aprendizaje Colaborativo T0",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)"
) +
scale_x_discrete(labels = lab_x_autoef_AC) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 40, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
## AUTOEFICACIA PARA FOMENTAR APRENDIZAJE SOCIOEMOCIONAL ##
# ----- Variables a graficar -----
vars_autoef_ASE <- c("autoef_ASE1_T0", "autoef_ASE2_T0", "autoef_ASE3_T0", "autoef_ASE4_T0", "IND_autoef_ASE_T0")
# ----- Resumen: media, se, n para cada variable -----
df_autoef_ASE <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_autoef_ASE),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_autoef_ASE),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"autoef_ASE1_T0" = "Ayudar al estudiantado a gestionar\n sus propias emociones, pensamientos\n y comportamiento dentro del aula",
"autoef_ASE2_T0" = "Ayudar al estudiantado a \nser conscientes de sus sentimientos",
"autoef_ASE3_T0" = "Fomentar la empatía \nentre los estudiantes",
"autoef_ASE4_T0" = "Promover habilidades interpersonales \nen los estudiantes como la \ncomunicación, diálogo y respeto",
"IND_autoef_ASE_T0" = "Indicador TOTAL \nAutoeficacia en fomentar \nAprendizaje Sociemocional")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_autoef_ASE <- df_autoef_ASE %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_autoef_ASE, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 22. Autoeficacia en fomentar el Aprendizaje Socioemocional T0",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)"
) +
scale_x_discrete(labels = lab_x_autoef_ASE) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 40, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)
## AUTOEFICACIA PARA IMPLEMENTAR ESTRATEGIAS DE COMPRENSIÓN LECTORA ##
# ----- Variables a graficar -----
vars_autoef_CL <- c("autoef_CL1_T0", "autoef_CL2_T0", "autoef_CL3_T0", "autoef_CL4_T0", "IND_autoef_CL_T0")
# ----- Resumen: media, se, n para cada variable -----
df_autoef_CL <- BDD_encuesta_T0 %>%
summarise(
across(all_of(vars_autoef_CL),
list(
media = ~ mean(.x, na.rm = TRUE),
se = ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))),
n = ~ sum(!is.na(.x))
),
.names = "{.fn}_{.col}")
) %>%
pivot_longer(
everything(),
names_to = c(".value", "Variable"),
names_pattern = "(media|se|n)_(.*)"
) %>%
mutate(
# Mantener el orden con los nombres ORIGINALES
Variable = factor(Variable, levels = vars_autoef_CL),
IC_inf = media - 1.96 * se,
IC_sup = media + 1.96 * se
)
# --- Mapa de etiquetas amigables para el eje X ---
lab_map <- c(
"autoef_CL1_T0" = "Conectar el tema de un texto\n con experiencias o conocimientos\n previos del estudiantado",
"autoef_CL2_T0" = "Generar espacios para que \nestudiantes realicen predicciones, \ndeducciones, preguntas y conexiones",
"autoef_CL3_T0" = "Explicar palabras en contexto y \nofrecer ejemplos visuales o cotidianos",
"autoef_CL4_T0" = "Evaluar la comprensión con preguntas \norales, discusiones y actividades \ndespués de cada lectura",
"IND_autoef_CL_T0" = "Indicador TOTAL \nAutoeficacia en implementar \nestrategias de comprensión lectora")
# --- Etiquetas del eje X con n debajo (sin renombrar columnas) ---
lab_x_autoef_CL <- df_autoef_CL %>%
dplyr::distinct(Variable, n) %>%
dplyr::mutate(lbl = dplyr::recode(Variable, !!!lab_map)) %>%
{ setNames(paste0(.$lbl), .$Variable) }
# ----- Gráfico -----
ggplot(df_autoef_CL, aes(x = Variable, y = media)) +
geom_col(width = 0.6, fill = "seagreen") +
geom_errorbar(aes(ymin = IC_inf, ymax = IC_sup), width = 0.2) +
# números del IC a la derecha de sus extremos
geom_text(aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -2, size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup, 1)),
hjust = -2, size = 2.5) +
# media dentro de la barra
geom_text(aes(label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(
title = "Gráfico 23. Autoeficacia en implementar estrategias de Comprensión lectora T0",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)"
) +
scale_x_discrete(labels = lab_x_autoef_CL) +
scale_y_continuous(breaks = 1:5, expand = expansion(mult = c(0, 0.06))) +
coord_cartesian(ylim = c(1, 5)) + # parte visualmente en 1
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 9, angle = 40, hjust = 1),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
panel.grid.minor.y = element_blank(),
plot.title = element_text(face = "bold"),
plot.margin = margin(t = 5.5, r = 5.5, b = 5.5, l = 25)
)