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. 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.
Los intervalos de confianza al 95% se incluyen como una referencia a la precisión de los promedios observados dentro de este grupo y permiten visualizar la magnitud de la variabilidad existente dentro del grupo. La lectura del gráfico debe entenderse en términos descriptivos: los promedios en ambos momentos son cercanos y el aumento observado entre T0 y T1 es acotado. Dado que estos intervalos corresponden a estimaciones separadas para cada momento y no incorporan la relación entre las mediciones realizadas en los mismos docentes, su superposición no constituye un criterio adecuado para evaluar el cambio pre-post.
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)
Para analizar formalmente la variación observada entre ambos momentos, se realizó una prueba t de Student para muestras emparejadas, considerando exclusivamente a los docentes con mediciones completas. Este análisis estima el cambio promedio individual (Post – Pre) y muestra una diferencia media de 0,46 puntos a favor del momento post; sin embargo, dicha diferencia no alcanza significancia estadística (p = 0,051). En consecuencia, el aumento observado debe interpretarse como un cambio pequeño y estadísticamente incierto dentro del grupo de docentes participantes del programa.
La ausencia de significancia estadística no necesariamente implica la inexistencia de un cambio, sino que puede estar asociada a la combinación de un efecto de magnitud reducida y la variabilidad observada en los resultados. Si bien el número de docentes con mediciones emparejadas (n = 65) es suficiente para detectar cambios de magnitud moderada, podría no ser adecuado para identificar efectos pequeños como el observado en este caso.
tt <- t.test(
BDD_conoc_VF$correctas_T1,
BDD_conoc_VF$correctas_T0,
paired = TRUE
)
t_value <- tt$statistic
n <- length(BDD_conoc_VF$correctas_T1)
d_z <- as.numeric(t_value / sqrt(n))
d_z
dif <- BDD_conoc_VF$correctas_T1 - BDD_conoc_VF$correctas_T0
d_z <- mean(dif, na.rm = TRUE) / sd(dif, na.rm = TRUE)
d_z
En este contexto, se estimó el tamaño del efecto asociado al cambio pre–post mediante el coeficiente d de Cohen para muestras emparejadasque permite dimensionar la magnitud del cambio observado en relación con la variabilidad del grupo. El valor obtenido (d ≈ 0,21) corresponde a un efecto pequeño, lo que indica que, si bien se observa un aumento promedio en el puntaje post, la magnitud del cambio en el grupo de docentes es acotada.
En conjunto, los resultados sugieren que el seminario produjo, a lo más, un incremento limitado en el conocimiento medido por esta prueba en el grupo de docentes participantes, al menos en el corto plazo.
Posibles explicaciones: 1. El nivel inicial de conocimiento de los docentes fuera relativamente alto, lo que reduce el margen observable de mejora en una prueba de este tipo (efecto techo). En este contexto, incrementos pequeños pueden reflejar más bien un afinamiento o consolidación de conocimientos que cambios amplios en el puntaje total. 2. El seminario PRISA podría haber tenido un impacto mayor en dimensiones que no son capturadas directamente por esta prueba de conocimientos (quizás cambios cualitativos) 3. El tiempo entre el seminario y la medición post podría haber sido insuficiente para que los aprendizajes se traduzcan en un desempeño distinto. Cambios en el conocimiento aplicado o en la integración de nuevos enfoques suelen requerir tiempo y oportunidades de uso para consolidarse. 4. La sensibilidad del instrumento de medición también puede haber limitado la detección de cambios pequeños. Si la prueba no fue diseñada específicamente para capturar variaciones finas en el nivel de conocimiento tras una intervención breve, es esperable que los efectos observables sean acotados. 5. El tamaño de la muestra con mediciones emparejadas, si bien adecuado para detectar efectos de magnitud moderada, reduce la potencia estadística para identificar efectos pequeños, como el observado, lo que puede haber contribuido a que el cambio no alcance significancia estadística.
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 un 20% 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.
Con el fin de explorar si la heterogeneidad observada en el cambio individual podría estar asociada a condiciones propias de cada establecimiento, se analizaron los resultados desagregados por escuela (Gráfico 4), considerando a los docentes con mediciones emparejadas en cada caso.
En la Escuela Lucas Bárcenas (n = 30), el promedio de respuestas correctas aumentó de 10,4 en el momento Pre a 11,0 en el Post, mientras que en el Estado de Minnesota (n = 35) el promedio pasó de 10,8 a 11,1. En ambos establecimientos se observa, por tanto, un incremento promedio de magnitud similar y acotada, consistente con el patrón general identificado en el análisis agregado.
Los intervalos de confianza al 95% se incluyen con un propósito descriptivo, como una referencia a la precisión de los promedios estimados y a la variabilidad observada dentro de cada establecimiento. La lectura del gráfico sugiere que los niveles promedio de conocimiento y el cambio observado entre el Pre y el Post son similares en ambas escuelas, sin contrastes pronunciados a simple vista.
Al analizar los resultados por establecimiento mediante pruebas t para muestras emparejadas, se observa que, si bien los promedios sugieren una tendencia de mejora en ambas instituciones, estas diferencias no alcanzan significación estadística. En este contexto, los resultados sugieren que la variabilidad observada se manifiesta principalmente a nivel individual entre docentes, más que asociada a condiciones institucionales específicas.
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) y línea salida (T1) en distintas dimensiones que se espera hayan evolucionen tras la participación en el 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 percepción PRE.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
Encuesta_T1 <-
readxl::read_xlsx("C:/Users/Monse/Dropbox/Personal/.SUMMA/PRISA Escuelas/Resultados/2026.01.07 BDD Encuesta percepción POST.xlsx")
#chequear que no haya duplicados en ID correo electrónico
sum(duplicated(Encuesta_T1$`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))))
#Renombrar variables T1
BDD_encuesta_T1 <- Encuesta_T1 %>%
rename(
autoef_RF1_T1 = "Q02_Autoeficacia 2->Ofrecer retroalimentación oral o escrita al estudiantado para señalar sus áreas de mejora.",
autoef_RF2_T1 = "Q03_Autoeficacia 3->Proporcionar a los estudiantes retroalimentación inmediata mientras trabajan en tareas específicas.",
autoef_RF3_T1 = "Q03_Autoeficacia 3->Alentar a los estudiantes a realizar tareas similares hasta que el docente sepa que todos han comprendido el tema.",
autoef_RF4_T1 = "Q03_Autoeficacia 3->Hacer comentarios específicos o entregar indicaciones a los estudiantes para ayudarlos a clarificar sus confusiones.",
autoef_AC1_T1 = "Q01_Autoeficacia 1->Pedir a los estudiantes que trabajen en grupos pequeños para encontrar una solución conjunta a un problema o tarea.",
autoef_AC2_T1 = "Q02_Autoeficacia 2->Animar a los estudiantes a cuestionar y reflexionar sobre los argumentos de sus compañeros.",
autoef_AC3_T1 = "Q03_Autoeficacia 3->Promover la colaboración entre los estudiantes mediante dinámicas entre pares",
autoef_AC4_T1 = "Q02_Autoeficacia 2->Potenciar el aprendizaje cooperativo entre estudiantes con distintos niveles mediante dinámicas integradoras.",
autoef_ASE1_T1 = "Q02_Autoeficacia 2->Ayudar al estudiantado a gestionar sus propias emociones, pensamientos y comportamientos dentro del aula.",
autoef_ASE2_T1 = "Q01_Autoeficacia 1->Ayudar al estudiantado a ser conscientes de sus sentimientos.",
autoef_ASE3_T1 = "Q01_Autoeficacia 1->Fomentar la empatía entre los estudiantes",
autoef_ASE4_T1 = "Q03_Autoeficacia 3->Promover habilidades interpersonales en los estudiantes, como la comunicación, el diálogo y el respeto.",
autoef_CL1_T1 = "Q01_Autoeficacia 1->Conectar el tema de un texto con experiencias o conocimientos previos del estudiantado",
autoef_CL2_T1 = "Q03_Autoeficacia 3->Generar espacios para que los estudiantes realicen predicciones, deducciones, preguntas y conexiones.",
autoef_CL3_T1 = "Q01_Autoeficacia 1->Explicar palabras en contexto y ofrecer ejemplos visuales o cotidianos.",
autoef_CL4_T1 = "Q02_Autoeficacia 2->Evaluar la comprensión con preguntas orales, discusiones y actividades después de cada lectura.",
VTC_AC1_T1 = "Q04_Importancia 1->Que el equipo docente trabaje conjuntamente para adquirir conocimientos, competencias y estrategias que mejoren su desempeño profesional.",
VTC_AC2_T1 = "Q05_Importancia 2->Que el equipo docente aprenda y aplique regularmente nuevos conocimientos para resolver problemas didácticos.",
VTC_AC3_T1 = "Q04_Importancia 1->Que en la institución educativa existan oportunidades para ofrecer orientación y tutoría a los colegas.",
VTC_AC4_T1 = "Q05_Importancia 2->Que en la institución educativa existan oportunidades, a nivel individual y grupal, para aplicar prácticas docentes y compartir los resultados.",
VTC_TP1_T1 = "Q05_Importancia 2->Que el equipo docente trabaje y planifique conjuntamente la búsqueda de soluciones alternativas para responder mejor a las necesidades del estudiantado.",
VTC_TP2_T1 = "Q05_Importancia 2->Que el equipo docente esté comprometido con la aplicación de estrategias y programas que mejoren el aprendizaje.",
VTC_TP3_T1 = "Q05_Importancia 2->Que los docentes puedan enseñar de manera conjunta en una misma clase.",
VTC_TP4_T1 = "Q04_Importancia 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_T1 = "Q05_Importancia 2->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_T1 = "Q04_Importancia 1->Que el equipo docente proporcione retroalimentación a otros compañeros sobre sus prácticas docentes.",
VTC_TEP3_T1 = "Q04_Importancia 1->Que el equipo docente mantenga diálogos respetuosos entre sí, en los que se consideren distintos puntos de vista.",
VTC_TEP4_T1 = "Q04_Importancia 1->Que los docentes inicien y dirijan actividades colaborativas.",
Ref_pedag1_T1 = "Q06_Importancia ref. pedagógica->Considerar la conexión entre sus acciones como docente y el aprendizaje de los estudiantes",
Ref_pedag2_T1 = "Q06_Importancia ref. pedagógica->Reflexionar y evaluar críticamente su propio proceso de enseñanza",
Ref_pedag3_T1 = "Q06_Importancia ref. pedagógica->Considerar la opinión del estudiantado para decisiones pedagógicas",
Ref_pedag4_T1 = "Q06_Importancia ref. pedagógica->Usar resultados de investigación educativa para mejorar la práctica de enseñanza",
Ref_pedag5_T1 = "Q06_Importancia ref. pedagógica->Mantener un compromiso activo con el aprendizaje profesional para mejorar la práctica pedagógica",
Disp_camb1_T1 = "Q07_Disposición->Probar nuevos enfoques pedagógicos que puedan cambiar la forma habitual en que trabajo en el aula.",
Disp_camb2_T1 = "Q07_Disposición->Reflexionar y cuestionar mis propias creencias sobre lo que significa “enseñar bien”.",
Disp_camb3_T1 = "Q07_Disposición->Revisar mis ideas previas sobre cómo entiendo el aprendizaje de los estudiantes.",
Disp_camb4_T1 = "Q07_Disposición->Buscar sugerencias o retroalimentación de mis colegas que me ayuden para mejorar mi forma de enseñar.",
Disp_camb5_T1 = "Q07_Disposición->Pedir la opinión de mis estudiantes para ajustar las estrategias de enseñanza que yo utilizo en el aula.",
Disp_AC_T1 = "Q08_Sección 5. PRISA->Mi disposición a compartir estrategias de aula con mis colegas.",
Implementa_TEP1_T1 = "Q08_Sección 5. PRISA->La retroalimentación de pares/colegas sobre mi práctica pedagógica.",
Implementa_TEP2_T1 = "Q08_Sección 5. PRISA->La colaboración entre docentes para planificar actividades de las clases.",
Implementa_planificacion_T1 = "Q08_Sección 5. PRISA->Mi planificación pedagógica en el aula.",
Implementa_PPE_T1 = "Q08_Sección 5. PRISA->La implementación de prácticas pedagógicas efectivas.",
Nuevo_recurso_T1 = "Q08_Sección 5. PRISA->Contar con nuevos recursos para mi trabajo de aula.",
Motivacion_estud_T1 = "Q08_Sección 5. PRISA->La motivación de los estudiantes en las actividades de aula."
)
#pasar todas variables T1 a numéricas
vars_T1 <- c("autoef_RF1_T1","autoef_RF2_T1","autoef_RF3_T1","autoef_RF4_T1","autoef_AC1_T1", "autoef_AC2_T1", "autoef_AC3_T1", "autoef_AC4_T1", "autoef_ASE1_T1", "autoef_ASE2_T1", "autoef_ASE3_T1", "autoef_ASE4_T1", "autoef_CL1_T1", "autoef_CL2_T1", "autoef_CL3_T1", "autoef_CL4_T1", "VTC_AC1_T1", "VTC_AC2_T1", "VTC_AC3_T1", "VTC_AC4_T1",
"VTC_TP1_T1", "VTC_TP2_T1", "VTC_TP3_T1", "VTC_TP4_T1",
"VTC_TEP1_T1", "VTC_TEP2_T1", "VTC_TEP3_T1", "VTC_TEP4_T1",
"Ref_pedag1_T1", "Ref_pedag2_T1", "Ref_pedag3_T1", "Ref_pedag4_T1", "Ref_pedag5_T1",
"Disp_camb1_T1", "Disp_camb2_T1", "Disp_camb3_T1", "Disp_camb4_T1", "Disp_camb5_T1", "Disp_AC_T1", "Implementa_TEP1_T1", "Implementa_TEP2_T1", "Implementa_planificacion_T1", "Implementa_PPE_T1", "Nuevo_recurso_T1", "Motivacion_estud_T1")
BDD_encuesta_T1 <- BDD_encuesta_T1 %>%
mutate(across(all_of(vars_T1), ~ as.numeric(as.character(.x))))
#Merge a partir de dirección correo
percepcion <- full_join(BDD_encuesta_T0, BDD_encuesta_T1, by = "Dirección de correo")
#Dejar en la BDD sólo aquellos casos que respondieron T0 y T1
BDD_percepcion <- percepcion[!is.na(percepcion$Curso.y), ]
### INDICADOR DISPOSICION CAMBIAR PRÁCTICA
BDD_percepcion <- BDD_percepcion %>%
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
# media_T0 = 4,52
BDD_percepcion <- BDD_percepcion %>%
mutate(IND_DISP_CAMB_T1 = if_else(
if_all(all_of(c("Disp_camb1_T1", "Disp_camb2_T1", "Disp_camb3_T1", "Disp_camb4_T1", "Disp_camb5_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 5 preg
rowMeans(pick(all_of(c("Disp_camb1_T1", "Disp_camb2_T1", "Disp_camb3_T1", "Disp_camb4_T1", "Disp_camb5_T1"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
# media_T1 = 4,52
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 |
|
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_DISP_CAMB_T0, na.rm = TRUE),
se_T0 = sd(IND_DISP_CAMB_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_DISP_CAMB_T0))),
n_T0 = sum(!is.na(IND_DISP_CAMB_T0)),
media_T1 = mean(IND_DISP_CAMB_T1, na.rm = TRUE),
se_T1 = sd(IND_DISP_CAMB_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_DISP_CAMB_T1))),
n_T1 = sum(!is.na(IND_DISP_CAMB_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 9. Disposición a modificar prácticas pedagógicas (IC 95%)",
x = NULL, y = "Grado disposición") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
| 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 |
|
#INDICADOR AUTOEFICACIA RETROALIMENTACIÓN FORMATIVA
BDD_percepcion <- BDD_percepcion %>%
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
))
BDD_percepcion <- BDD_percepcion %>%
mutate(
IND_autoef_RF_T1 = if_else(
if_all(all_of(c("autoef_RF1_T1", "autoef_RF2_T1", "autoef_RF3_T1", "autoef_RF4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_RF1_T1", "autoef_RF2_T1", "autoef_RF3_T1", "autoef_RF4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_autoef_RF_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_RF_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_RF_T0))),
n_T0 = sum(!is.na(IND_autoef_RF_T0)),
media_T1 = mean(IND_autoef_RF_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_RF_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_RF_T1))),
n_T1 = sum(!is.na(IND_autoef_RF_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 10. Autoeficacia retroalimentación formativa (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
#INDICADOR AUTOEFICACIA APRENDIZAJE COLABORATIVO
BDD_percepcion <- BDD_percepcion %>%
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
))
BDD_percepcion <- BDD_percepcion %>%
mutate(
IND_autoef_AC_T1 = if_else(
if_all(all_of(c("autoef_AC1_T1", "autoef_AC2_T1", "autoef_AC3_T1", "autoef_AC4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_AC1_T1", "autoef_AC2_T1", "autoef_AC3_T1", "autoef_AC4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_autoef_AC_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_AC_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_AC_T0))),
n_T0 = sum(!is.na(IND_autoef_AC_T0)),
media_T1 = mean(IND_autoef_AC_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_AC_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_AC_T1))),
n_T1 = sum(!is.na(IND_autoef_AC_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 11. Autoeficacia Aprendizaje Colaborativo (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
#INDICADOR AUTOEFICACIA ASE
BDD_percepcion <- BDD_percepcion %>%
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
))
BDD_percepcion <- BDD_percepcion %>%
mutate(
IND_autoef_ASE_T1 = if_else(
if_all(all_of(c("autoef_ASE1_T1", "autoef_ASE2_T1", "autoef_ASE3_T1", "autoef_ASE4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_ASE1_T1", "autoef_ASE2_T1", "autoef_ASE3_T1", "autoef_ASE4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_autoef_ASE_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_ASE_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_ASE_T0))),
n_T0 = sum(!is.na(IND_autoef_ASE_T0)),
media_T1 = mean(IND_autoef_ASE_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_ASE_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_ASE_T1))),
n_T1 = sum(!is.na(IND_autoef_ASE_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 12. Autoeficacia Aprendizaje Socioemocional (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
#INDICADOR AUTOEFICACIA COMPRENSIÓN LECTORA
BDD_percepcion <- BDD_percepcion %>%
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
))
BDD_percepcion <- BDD_percepcion %>%
mutate(
IND_autoef_CL_T1 = if_else(
if_all(all_of(c("autoef_CL1_T1", "autoef_CL2_T1", "autoef_CL3_T1", "autoef_CL4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("autoef_CL1_T1", "autoef_CL2_T1", "autoef_CL3_T1", "autoef_CL4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_ # si falta alguna → NA
))
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_autoef_CL_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_CL_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_CL_T0))),
n_T0 = sum(!is.na(IND_autoef_CL_T0)),
media_T1 = mean(IND_autoef_CL_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_CL_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_autoef_CL_T1))),
n_T1 = sum(!is.na(IND_autoef_CL_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 13. Autoeficacia Comprensión lectora (IC 95%)",
x = NULL, y = "Grado de autoeficacia (sentirse capaz)") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
# Gráfico 14: Barras apiladas 100% (1 rojo -> 5 verde)
library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)
# ----- Variables a graficar -----
vars_IPPE <- c(
"Implementa_planificacion_T1",
"Implementa_PPE_T1",
"Nuevo_recurso_T1"
)
# ----- Etiquetas de las categorías (desde la codificación) -----
etiquetas_cambio <- c(
"1" = "1. Ha empeorado mucho",
"2" = "2. Ha empeorado algo",
"3" = "3. Se mantiene igual",
"4" = "4. Ha mejorado algo",
"5" = "5. Ha mejorado mucho"
)
niveles_cambio <- etiquetas_cambio
# ----- Etiquetas amigables eje X -----
lab_map <- c(
"Implementa_planificacion_T1" = "Mi planificación \npedagógica en aula",
"Implementa_PPE_T1" = "La implementación de PPE",
"Nuevo_recurso_T1" = "Contar con nuevos recursos \npara mi trabajo de aula"
)
# ----- Paleta 1 rojo -> 5 verde -----
colores_cambio <- c(
"1. Ha empeorado mucho" = "#b2182b",
"2. Ha empeorado algo" = "#ef8a62",
"3. Se mantiene igual" = "#cccccc",
"4. Ha mejorado algo" = "#7fbf7b",
"5. Ha mejorado mucho" = "#1a9641"
)
# ----- Preparar datos (omite NA) -----
df_IPPE_pct <- BDD_encuesta_T1 %>%
select(all_of(vars_IPPE)) %>%
pivot_longer(
everything(),
names_to = "Variable",
values_to = "Categoria_num"
) %>%
filter(!is.na(Categoria_num)) %>% # omite NA reales
mutate(
Variable = factor(Variable, levels = vars_IPPE),
Categoria = recode(as.character(Categoria_num), !!!etiquetas_cambio),
Categoria = factor(Categoria, levels = etiquetas_cambio)
) %>%
count(Variable, Categoria, name = "n") %>%
# >>> CLAVE: fuerza niveles sin datos para que aparezcan en la leyenda
tidyr::complete(
Variable,
Categoria,
fill = list(n = 0)
) %>%
group_by(Variable) %>%
mutate(
n_total = sum(n),
pct = ifelse(n_total > 0, n / n_total, 0)
) %>%
ungroup()
# ----- Etiquetas eje X con n válido -----
lab_x_IPPE <- df_IPPE_pct %>%
distinct(Variable, n_total) %>%
mutate(lbl = recode(as.character(Variable), !!!lab_map)) %>%
{ setNames(paste0(.$lbl, "\n(n=", .$n_total, ")"), .$Variable) }
# ----- Gráfico -----
ggplot(df_IPPE_pct, aes(x = Variable, y = pct, fill = Categoria)) +
geom_col(width = 0.7, position = "fill") +
geom_text(
aes(label = ifelse(pct >= 0.05, percent(pct, accuracy = 1), "")),
position = position_fill(vjust = 0.5),
size = 3,
color = "white"
) +
scale_fill_manual(values = colores_cambio, drop = FALSE) +
scale_x_discrete(labels = lab_x_IPPE) +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
labs(
title = "Gráfico 14. ¿Cuánto han cambiado las distintas prácticas en su \nescuela a partir de su participación en PRISA?",
x = NULL,
y = "% de respuestas",
fill = NULL
) +
theme_minimal() +
theme(
axis.text.x = element_text(size = 9, angle = 30, hjust = 1),
plot.title = element_text(face = "bold")
)
| Indicador | Preguntas |
|---|---|
| Grado de importancia atribuida al aprendizaje colaborativo docente |
|
#APRENDIZAJE COLABORATIVO DOCENTE
##Indicador Importancia Aprendizaje colaborativo docente
BDD_percepcion <- BDD_percepcion %>%
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
BDD_percepcion <- BDD_percepcion %>%
mutate(IND_VTC_AC_T1 = if_else(
if_all(all_of(c("VTC_AC1_T1", "VTC_AC2_T1", "VTC_AC3_T1", "VTC_AC4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("VTC_AC1_T1", "VTC_AC2_T1", "VTC_AC3_T1", "VTC_AC4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
#Gráfico 15. Valoración aprendizaje colaborativo docente
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_VTC_AC_T0, na.rm = TRUE),
se_T0 = sd(IND_VTC_AC_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_VTC_AC_T0))),
n_T0 = sum(!is.na(IND_VTC_AC_T0)),
media_T1 = mean(IND_VTC_AC_T1, na.rm = TRUE),
se_T1 = sd(IND_VTC_AC_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_VTC_AC_T1))),
n_T1 = sum(!is.na(IND_VTC_AC_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 15. Valoración Aprendizaje Colaborativo Docente (IC 95%)",
x = NULL, y = "Grado de importancia") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
#Grafico 16: disposición + implementación aprendizaje colaborativo docente
library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)
# ----- Variables a graficar -----
vars_ACD <- c("Disp_AC_T1", "Implementa_TEP1_T1")
# ----- Etiquetas de las categorías (desde la codificación 1–5) -----
etiquetas_cambio <- c(
"1" = "1. Ha empeorado mucho",
"2" = "2. Ha empeorado algo",
"3" = "3. Se mantiene igual",
"4" = "4. Ha mejorado algo",
"5" = "5. Ha mejorado mucho"
)
# ----- Etiquetas amigables eje X (ajusta el texto si quieres) -----
lab_map_ACD <- c(
"Disp_AC_T1" = "Disposición a compartir \nestrategias de aula con mis\n colegas",
"Implementa_TEP1_T1" = "Retroalimentación de pares\nsobre mi práctica pedagógica"
)
# ----- Paleta 1 rojo -> 5 verde -----
colores_cambio <- c(
"1. Ha empeorado mucho" = "#b2182b",
"2. Ha empeorado algo" = "#ef8a62",
"3. Se mantiene igual" = "#cccccc",
"4. Ha mejorado algo" = "#7fbf7b",
"5. Ha mejorado mucho" = "#1a9641"
)
# ----- Preparar datos (omite NA y conserva categorías sin casos) -----
df_ACD_pct <- BDD_encuesta_T1 %>%
select(all_of(vars_ACD)) %>%
pivot_longer(
everything(),
names_to = "Variable",
values_to = "Categoria_num"
) %>%
filter(!is.na(Categoria_num)) %>% # omite NA reales
mutate(
Variable = factor(Variable, levels = vars_ACD),
Categoria = recode(as.character(Categoria_num), !!!etiquetas_cambio),
Categoria = factor(Categoria, levels = etiquetas_cambio)
) %>%
count(Variable, Categoria, name = "n") %>%
# >>> CLAVE: fuerza niveles sin datos (n = 0)
tidyr::complete(
Variable,
Categoria,
fill = list(n = 0)
) %>%
group_by(Variable) %>%
mutate(
n_total = sum(n),
pct = ifelse(n_total > 0, n / n_total, 0)
) %>%
ungroup()
# ----- Etiquetas eje X con n válido -----
lab_x_ACD <- df_ACD_pct %>%
distinct(Variable, n_total) %>%
mutate(lbl = recode(as.character(Variable), !!!lab_map_ACD)) %>%
{ setNames(paste0(.$lbl, "\n(n=", .$n_total, ")"), .$Variable) }
# ----- Gráfico -----
ggplot(df_ACD_pct, aes(x = Variable, y = pct, fill = Categoria)) +
geom_col(width = 0.7, position = "fill") +
geom_text(
aes(label = ifelse(pct >= 0.05, percent(pct, accuracy = 1), "")),
position = position_fill(vjust = 0.5),
size = 3,
color = "white"
) +
scale_fill_manual(values = colores_cambio, drop = FALSE) +
scale_x_discrete(labels = lab_x_ACD) +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
labs(
title = "Gráfico 16. Cambio en Aprendizaje Colaborativo Docente",
x = NULL,
y = "% de respuestas",
fill = NULL
) +
theme_minimal() +
theme(
axis.text.x = element_text(size = 9, angle = 30, hjust = 1),
plot.title = element_text(face = "bold")
)
| Indicador | Preguntas |
|---|---|
| Grado de importancia atribuida al trabajo pedagógico |
|
#INDICADOR VALORACIÓN TRABAJO PEDAGÓGICO
BDD_percepcion <- BDD_percepcion %>%
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
BDD_percepcion <- BDD_percepcion %>%
mutate(IND_VTC_TP_T1 = if_else(
if_all(all_of(c("VTC_TP1_T1", "VTC_TP2_T1", "VTC_TP3_T1", "VTC_TP4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("VTC_TP1_T1", "VTC_TP2_T1", "VTC_TP3_T1", "VTC_TP4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
#Gráfico 17. Valoración trabajo pedagógico
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_VTC_TP_T0, na.rm = TRUE),
se_T0 = sd(IND_VTC_TP_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_VTC_TP_T0))),
n_T0 = sum(!is.na(IND_VTC_TP_T0)),
media_T1 = mean(IND_VTC_TP_T1, na.rm = TRUE),
se_T1 = sd(IND_VTC_TP_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_VTC_TP_T1))),
n_T1 = sum(!is.na(IND_VTC_TP_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 17. Valoración Trabajo Pedagógico (IC 95%)",
x = NULL, y = "Grado de importancia") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
| Indicador | Preguntas |
|---|---|
| Grado de importancia atribuida al trabajo entre pares docentes |
|
#TRABAJO COLABORATIVO DOCENTE
##Indicador valoración trabajo colaborativo docente
BDD_percepcion <- BDD_percepcion %>%
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
BDD_percepcion <- BDD_percepcion %>%
mutate(IND_VTC_TEP_T1 = if_else(
if_all(all_of(c("VTC_TEP1_T1", "VTC_TEP2_T1", "VTC_TEP3_T1", "VTC_TEP4_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("VTC_TEP1_T1", "VTC_TEP2_T1", "VTC_TEP3_T1", "VTC_TEP4_T1"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
#Gráfico 18. Valoración trabajo colaborativo docente
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_VTC_TEP_T0, na.rm = TRUE),
se_T0 = sd(IND_VTC_TEP_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_VTC_TEP_T0))),
n_T0 = sum(!is.na(IND_VTC_TEP_T0)),
media_T1 = mean(IND_VTC_TEP_T1, na.rm = TRUE),
se_T1 = sd(IND_VTC_TEP_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_VTC_TEP_T1))),
n_T1 = sum(!is.na(IND_VTC_TEP_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 18. Valoración Trabajo Colaborativo Docente (IC 95%)",
x = NULL, y = "Grado de importancia") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
# Gráfico 19. Implementación trabajo colaborativo docente
library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)
# ----- Variable a graficar -----
var_unica <- "Implementa_TEP2_T1"
# ----- Etiquetas de las categorías (desde la codificación 1–5) -----
etiquetas_cambio <- c(
"1" = "1. Ha empeorado mucho",
"2" = "2. Ha empeorado algo",
"3" = "3. Se mantiene igual",
"4" = "4. Ha mejorado algo",
"5" = "5. Ha mejorado mucho"
)
# ----- Paleta 1 rojo -> 5 verde -----
colores_cambio <- c(
"1. Ha empeorado mucho" = "#b2182b",
"2. Ha empeorado algo" = "#ef8a62",
"3. Se mantiene igual" = "#cccccc",
"4. Ha mejorado algo" = "#7fbf7b",
"5. Ha mejorado mucho" = "#1a9641"
)
# etiqueta del eje X para esa variable
lab_map <- c(
"Implementa_TEP2_T1" = "La colaboración entre docentes para\nplanificar actividades de las clases"
)
# ----- Preparar datos (omite NA) -----
df_pct <- BDD_encuesta_T1 %>%
select(all_of(var_unica)) %>%
pivot_longer(everything(),
names_to = "Variable",
values_to = "Categoria_num") %>%
filter(!is.na(Categoria_num)) %>%
mutate(
Categoria = recode(as.character(Categoria_num), !!!etiquetas_cambio),
Categoria = factor(Categoria, levels = etiquetas_cambio),
Variable = factor(Variable, levels = var_unica)
) %>%
count(Variable, Categoria, name = "n") %>%
tidyr::complete(
Variable,
Categoria,
fill = list(n = 0)
) %>%
group_by(Variable) %>%
mutate(
n_total = sum(n),
pct = ifelse(n_total > 0, n / n_total, 0)
) %>%
ungroup()
# ----- Etiqueta eje X con n válido -----
lab_x <- df_pct %>%
distinct(Variable, n_total) %>%
mutate(lbl = recode(as.character(Variable), !!!lab_map)) %>%
{ setNames(paste0(.$lbl, "\n(n=", .$n_total, ")"), .$Variable) }
# ----- Gráfico -----
ggplot(df_pct, aes(x = Variable, y = pct, fill = Categoria)) +
geom_col(width = 0.7, position = "fill") +
geom_text(
aes(label = ifelse(pct >= 0.05, percent(pct, accuracy = 1), "")),
position = position_fill(vjust = 0.5),
size = 3,
color = "white"
) +
scale_fill_manual(values = colores_cambio, drop = FALSE) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
labs(
title = "Gráfico 19. Cambio en Implementación de \nTrabajo colaborativo docente",
x = NULL,
y = "% de respuestas",
fill = NULL
) +
theme_minimal() +
theme(
axis.text.x = element_text(size = 9, angle = 0, hjust = 0.5),
plot.title = element_text(face = "bold")
)
| Indicador | Preguntas |
|---|---|
| Grado de importancia atribuida a la reflexión pedagógica |
|
#VALORACIÓN REFLEXIÓN PEDAGÓGICA
BDD_percepcion <- BDD_percepcion %>%
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
BDD_percepcion <- BDD_percepcion %>%
mutate(IND_REF_PEDAG_T1 = if_else(
if_all(all_of(c("Ref_pedag1_T1", "Ref_pedag2_T1", "Ref_pedag3_T1", "Ref_pedag4_T1", "Ref_pedag5_T1")), ~ !is.na(.x)),#para aquellos que contestaron las 4 preg
rowMeans(pick(all_of(c("Ref_pedag1_T1", "Ref_pedag2_T1", "Ref_pedag3_T1", "Ref_pedag4_T1", "Ref_pedag5_T1"))), na.rm = FALSE),# promedio exacto
NA_real_)) # si falta alguna → NA
#Grafico 20. Valoración reflexión pedagógica
df <- BDD_percepcion %>%
summarise(
media_T0 = mean(IND_REF_PEDAG_T0, na.rm = TRUE),
se_T0 = sd(IND_REF_PEDAG_T0, na.rm = TRUE) / sqrt(sum(!is.na(IND_REF_PEDAG_T0))),
n_T0 = sum(!is.na(IND_REF_PEDAG_T0)),
media_T1 = mean(IND_REF_PEDAG_T1, na.rm = TRUE),
se_T1 = sd(IND_REF_PEDAG_T1, na.rm = TRUE) / sqrt(sum(!is.na(IND_REF_PEDAG_T1))),
n_T1 = sum(!is.na(IND_REF_PEDAG_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_rect(aes(xmin = as.numeric(Momento) - 0.3,
xmax = as.numeric(Momento) + 0.3,
ymin = 1, ymax = media),
color = NA) +
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, color = "black", size = 2.5) +
geom_text(aes(y = IC_sup, label = round(IC_sup,1)),
hjust = -2, color = "black", size = 2.5) +
geom_text(aes(y = media, label = round(media, 1)),
vjust = 1.5, color = "white", size = 4) +
labs(title = "Gráfico 20. Valoración Reflexión Pedagógica (IC 95%)",
x = NULL, y = "Grado de importancia") +
scale_fill_manual(values = c("Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue")) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(breaks = 1:5) +
coord_cartesian(ylim = c(1, 5)) +
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()
)
#Gráfico 21. MOTIVACIÓN ESTUDIANTE
library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)
# ----- Variable a graficar -----
var_ME <- "Motivacion_estud_T1"
# ----- Etiquetas de las categorías (desde la codificación 1–5) -----
etiquetas_cambio <- c(
"1" = "1. Ha empeorado mucho",
"2" = "2. Ha empeorado algo",
"3" = "3. Se mantiene igual",
"4" = "4. Ha mejorado algo",
"5" = "5. Ha mejorado mucho"
)
# ----- Paleta 1 rojo -> 5 verde -----
colores_cambio <- c(
"1. Ha empeorado mucho" = "#b2182b",
"2. Ha empeorado algo" = "#ef8a62",
"3. Se mantiene igual" = "#cccccc",
"4. Ha mejorado algo" = "#7fbf7b",
"5. Ha mejorado mucho" = "#1a9641"
)
# etiqueta del eje X para esa variable
lab_map <- c(
"Motivacion_estud_T1" = "La motivación de los estudiantes\nen las actividades de aula"
)
# ----- Preparar datos (omite NA) -----
df_ME <- BDD_encuesta_T1 %>%
select(all_of(var_ME)) %>%
pivot_longer(everything(),
names_to = "Variable",
values_to = "Categoria_num") %>%
filter(!is.na(Categoria_num)) %>%
mutate(
Categoria = recode(as.character(Categoria_num), !!!etiquetas_cambio),
Categoria = factor(Categoria, levels = etiquetas_cambio),
Variable = factor(Variable, levels = var_ME)
) %>%
count(Variable, Categoria, name = "n") %>%
tidyr::complete(
Variable,
Categoria,
fill = list(n = 0)
) %>%
group_by(Variable) %>%
mutate(
n_total = sum(n),
pct = ifelse(n_total > 0, n / n_total, 0)
) %>%
ungroup()
# ----- Etiqueta eje X con n válido -----
lab_x <- df_ME %>%
distinct(Variable, n_total) %>%
mutate(lbl = recode(as.character(Variable), !!!lab_map)) %>%
{ setNames(paste0(.$lbl, "\n(n=", .$n_total, ")"), .$Variable) }
# ----- Gráfico -----
ggplot(df_ME, aes(x = Variable, y = pct, fill = Categoria)) +
geom_col(width = 0.7, position = "fill") +
geom_text(
aes(label = ifelse(pct >= 0.05, percent(pct, accuracy = 1), "")),
position = position_fill(vjust = 0.5),
size = 3,
color = "white"
) +
scale_fill_manual(values = colores_cambio, drop = FALSE) +
scale_x_discrete(labels = lab_x) +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
labs(
title = "Gráfico 21. Cambio en Motivación estudiantes",
x = NULL,
y = "% de respuestas",
fill = NULL
) +
theme_minimal() +
theme(
axis.text.x = element_text(size = 9, angle = 0, hjust = 0.5),
plot.title = element_text(face = "bold")
)
# DISPOSICION CAMBIO PRÁCTICAS
BDD_percepcion %>%
# 1) Mantener solo quienes tienen datos en T0 Y T1
dplyr::filter(
!is.na(IND_DISP_CAMB_T0) & !is.na(IND_DISP_CAMB_T1)
) %>%
# 2) Calcular medias, errores estándar y n por escuela
dplyr::group_by(Institución.x) %>%
dplyr::summarise(
n = dplyr::n(), # número de personas
media_T0 = mean(IND_DISP_CAMB_T0, na.rm = TRUE),
se_T0 = sd(IND_DISP_CAMB_T0, na.rm = TRUE) / sqrt(n),
media_T1 = mean(IND_DISP_CAMB_T1, na.rm = TRUE),
se_T1 = sd(IND_DISP_CAMB_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,
# nombre de escuela con n
Escuela = paste0(Institución.x, "\n(n=", n, ")")
) %>%
# 4) Gráfico
ggplot2::ggplot(
ggplot2::aes(x = Momento, y = media, fill = Momento)
) +
ggplot2::geom_col(
width = 0.6,
position = ggplot2::position_dodge(width = 0.6)
) +
ggplot2::geom_errorbar(
ggplot2::aes(ymin = IC_inf, ymax = IC_sup),
width = 0.2,
position = ggplot2::position_dodge(width = 0.6)
) +
# etiquetas IC
ggplot2::geom_text(
ggplot2::aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -0.2,
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 = -0.2,
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(width = 0.6)
) +
ggplot2::labs(
title = "Gráfico 22. Disposición a modificar prácticas pedagógicas (IC 95%)",
x = NULL,
y = "Grado de disposición"
) +
ggplot2::scale_fill_manual(
values = c(
"Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue"
)
) +
# 🔑 CLAVE: no usar limits, usar coord_cartesian
ggplot2::scale_y_continuous(breaks = 1:5) +
ggplot2::coord_cartesian(ylim = c(1, 5)) +
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()
)
# DISPOSICION CAMBIO PRÁCTICAS
BDD_percepcion %>%
# 1) Mantener solo quienes tienen datos en T0 Y T1
dplyr::filter(
!is.na(IND_autoef_RF_T0) & !is.na(IND_autoef_RF_T1)
) %>%
# 2) Calcular medias, errores estándar y n por escuela
dplyr::group_by(Institución.x) %>%
dplyr::summarise(
n = dplyr::n(), # número de personas
media_T0 = mean(IND_autoef_RF_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_RF_T0, na.rm = TRUE) / sqrt(n),
media_T1 = mean(IND_autoef_RF_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_RF_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,
# nombre de escuela con n
Escuela = paste0(Institución.x, "\n(n=", n, ")")
) %>%
# 4) Gráfico
ggplot2::ggplot(
ggplot2::aes(x = Momento, y = media, fill = Momento)
) +
ggplot2::geom_col(
width = 0.6,
position = ggplot2::position_dodge(width = 0.6)
) +
ggplot2::geom_errorbar(
ggplot2::aes(ymin = IC_inf, ymax = IC_sup),
width = 0.2,
position = ggplot2::position_dodge(width = 0.6)
) +
# etiquetas IC
ggplot2::geom_text(
ggplot2::aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -0.2,
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 = -0.2,
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(width = 0.6)
) +
ggplot2::labs(
title = "Gráfico 23. Autoeficacia retroalimentación formativa (IC 95%)",
x = NULL,
y = "Grado de disposición"
) +
ggplot2::scale_fill_manual(
values = c(
"Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue"
)
) +
# 🔑 CLAVE: no usar limits, usar coord_cartesian
ggplot2::scale_y_continuous(breaks = 1:5) +
ggplot2::coord_cartesian(ylim = c(1, 5)) +
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()
)
#AUTOEFICACIA APRENDIZAJE COLABORATIVO
BDD_percepcion %>%
# 1) Mantener solo quienes tienen datos en T0 Y T1
dplyr::filter(
!is.na(IND_autoef_AC_T0) & !is.na(IND_autoef_AC_T1)
) %>%
# 2) Calcular medias, errores estándar y n por escuela
dplyr::group_by(Institución.x) %>%
dplyr::summarise(
n = dplyr::n(), # número de personas
media_T0 = mean(IND_autoef_AC_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_AC_T0, na.rm = TRUE) / sqrt(n),
media_T1 = mean(IND_autoef_AC_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_AC_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,
# nombre de escuela con n
Escuela = paste0(Institución.x, "\n(n=", n, ")")
) %>%
# 4) Gráfico
ggplot2::ggplot(
ggplot2::aes(x = Momento, y = media, fill = Momento)
) +
ggplot2::geom_col(
width = 0.6,
position = ggplot2::position_dodge(width = 0.6)
) +
ggplot2::geom_errorbar(
ggplot2::aes(ymin = IC_inf, ymax = IC_sup),
width = 0.2,
position = ggplot2::position_dodge(width = 0.6)
) +
# etiquetas IC
ggplot2::geom_text(
ggplot2::aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -0.2,
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 = -0.2,
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(width = 0.6)
) +
ggplot2::labs(
title = "Gráfico 24. Autoeficacia Aprendizaje Colaborativo (IC 95%)",
x = NULL,
y = "Grado de disposición"
) +
ggplot2::scale_fill_manual(
values = c(
"Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue"
)
) +
# 🔑 CLAVE: no usar limits, usar coord_cartesian
ggplot2::scale_y_continuous(breaks = 1:5) +
ggplot2::coord_cartesian(ylim = c(1, 5)) +
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()
)
#AUTOEFICACIA ASE
BDD_percepcion %>%
# 1) Mantener solo quienes tienen datos en T0 Y T1
dplyr::filter(
!is.na(IND_autoef_ASE_T0) & !is.na(IND_autoef_ASE_T1)
) %>%
# 2) Calcular medias, errores estándar y n por escuela
dplyr::group_by(Institución.x) %>%
dplyr::summarise(
n = dplyr::n(), # número de personas
media_T0 = mean(IND_autoef_ASE_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_ASE_T0, na.rm = TRUE) / sqrt(n),
media_T1 = mean(IND_autoef_ASE_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_ASE_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,
# nombre de escuela con n
Escuela = paste0(Institución.x, "\n(n=", n, ")")
) %>%
# 4) Gráfico
ggplot2::ggplot(
ggplot2::aes(x = Momento, y = media, fill = Momento)
) +
ggplot2::geom_col(
width = 0.6,
position = ggplot2::position_dodge(width = 0.6)
) +
ggplot2::geom_errorbar(
ggplot2::aes(ymin = IC_inf, ymax = IC_sup),
width = 0.2,
position = ggplot2::position_dodge(width = 0.6)
) +
# etiquetas IC
ggplot2::geom_text(
ggplot2::aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -0.2,
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 = -0.2,
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(width = 0.6)
) +
ggplot2::labs(
title = "Gráfico 25. Autoeficacia Aprendizaje Socioemocional (IC 95%)",
x = NULL,
y = "Grado de disposición"
) +
ggplot2::scale_fill_manual(
values = c(
"Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue"
)
) +
# 🔑 CLAVE: no usar limits, usar coord_cartesian
ggplot2::scale_y_continuous(breaks = 1:5) +
ggplot2::coord_cartesian(ylim = c(1, 5)) +
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()
)
#AUTOEFICACIA COMPRENSION LECTORA
BDD_percepcion %>%
# 1) Mantener solo quienes tienen datos en T0 Y T1
dplyr::filter(
!is.na(IND_autoef_CL_T0) & !is.na(IND_autoef_CL_T1)
) %>%
# 2) Calcular medias, errores estándar y n por escuela
dplyr::group_by(Institución.x) %>%
dplyr::summarise(
n = dplyr::n(), # número de personas
media_T0 = mean(IND_autoef_CL_T0, na.rm = TRUE),
se_T0 = sd(IND_autoef_CL_T0, na.rm = TRUE) / sqrt(n),
media_T1 = mean(IND_autoef_CL_T1, na.rm = TRUE),
se_T1 = sd(IND_autoef_CL_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,
# nombre de escuela con n
Escuela = paste0(Institución.x, "\n(n=", n, ")")
) %>%
# 4) Gráfico
ggplot2::ggplot(
ggplot2::aes(x = Momento, y = media, fill = Momento)
) +
ggplot2::geom_col(
width = 0.6,
position = ggplot2::position_dodge(width = 0.6)
) +
ggplot2::geom_errorbar(
ggplot2::aes(ymin = IC_inf, ymax = IC_sup),
width = 0.2,
position = ggplot2::position_dodge(width = 0.6)
) +
# etiquetas IC
ggplot2::geom_text(
ggplot2::aes(y = IC_inf, label = round(IC_inf, 1)),
hjust = -0.2,
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 = -0.2,
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(width = 0.6)
) +
ggplot2::labs(
title = "Gráfico 25. Autoeficacia Comprensión Lectora (IC 95%)",
x = NULL,
y = "Grado de disposición"
) +
ggplot2::scale_fill_manual(
values = c(
"Pre (T0)" = "seagreen",
"Post (T1)" = "steelblue"
)
) +
# 🔑 CLAVE: no usar limits, usar coord_cartesian
ggplot2::scale_y_continuous(breaks = 1:5) +
ggplot2::coord_cartesian(ylim = c(1, 5)) +
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()
)
# Gráfico 25: cambios implementación
library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)
# ----- Variables a graficar -----
vars_IPPE <- c(
"Implementa_planificacion_T1",
"Implementa_PPE_T1",
"Nuevo_recurso_T1"
)
# ----- Etiquetas de las categorías -----
etiquetas_cambio <- c(
"1" = "1. Ha empeorado mucho",
"2" = "2. Ha empeorado algo",
"3" = "3. Se mantiene igual",
"4" = "4. Ha mejorado algo",
"5" = "5. Ha mejorado mucho"
)
# ----- Etiquetas eje X -----
lab_map <- c(
"Implementa_planificacion_T1" = "Mi planificación \npedagógica en aula",
"Implementa_PPE_T1" = "La implementación de PPE",
"Nuevo_recurso_T1" = "Contar con nuevos recursos \npara mi trabajo de aula"
)
# ----- Paleta de colores -----
colores_cambio <- c(
"1. Ha empeorado mucho" = "#b2182b",
"2. Ha empeorado algo" = "#ef8a62",
"3. Se mantiene igual" = "#cccccc",
"4. Ha mejorado algo" = "#7fbf7b",
"5. Ha mejorado mucho" = "#1a9641"
)
# ----- Preparar datos (por escuela) -----
df_IPPE_pct <- BDD_encuesta_T1 %>%
select(Institución, all_of(vars_IPPE)) %>%
pivot_longer(
cols = all_of(vars_IPPE),
names_to = "Variable",
values_to = "Categoria_num"
) %>%
filter(!is.na(Categoria_num)) %>%
mutate(
Variable = factor(Variable, levels = vars_IPPE),
Categoria = recode(as.character(Categoria_num), !!!etiquetas_cambio),
Categoria = factor(Categoria, levels = etiquetas_cambio)
) %>%
count(Institución, Variable, Categoria, name = "n") %>%
# fuerza categorías sin datos
tidyr::complete(
Institución,
Variable,
Categoria,
fill = list(n = 0)
) %>%
group_by(Institución, Variable) %>%
mutate(
n_total = sum(n),
pct = ifelse(n_total > 0, n / n_total, 0)
) %>%
ungroup()
# ----- N válido por escuela (para el facet) -----
n_por_escuela <- df_IPPE_pct %>%
distinct(Institución, Variable, n_total) %>%
group_by(Institución) %>%
summarise(N = max(n_total), .groups = "drop")
# ----- Etiquetas de facet: Escuela + N -----
lab_escuela <- setNames(
paste0(n_por_escuela$Institución, "\n(N=", n_por_escuela$N, ")"),
n_por_escuela$Institución
)
# ----- Gráfico -----
ggplot(df_IPPE_pct, aes(x = Variable, y = pct, fill = Categoria)) +
geom_col(width = 0.7, position = "fill") +
geom_text(
aes(label = ifelse(pct >= 0.05, percent(pct, accuracy = 1), "")),
position = position_fill(vjust = 0.5),
size = 3,
color = "white"
) +
scale_fill_manual(values = colores_cambio, drop = FALSE) +
scale_x_discrete(labels = lab_map) +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
facet_wrap(
~ Institución,
labeller = labeller(Institución = lab_escuela)
) +
labs(
title = "Gráfico 25. ¿Cuánto han cambiado las distintas prácticas en su \nescuela a partir de su participación en PRISA?",
x = NULL,
y = "% de respuestas",
fill = NULL
) +
theme_minimal() +
theme(
axis.text.x = element_text(size = 9, angle = 30, hjust = 1),
plot.title = element_text(face = "bold"),
legend.position = "bottom",
strip.text = element_text(face = "bold")
)
#GRAFICO 26. VALORACION APRENDIZAJE COLABORATIVO DOCENTE
#Gráfico 27. Cambio en aprendizaje colaborativo docente
#Gráfico 28. Valoración trabajo pedagógico
#Gráfico 29. Valoración Trabajo Colaborativo docente
#Gráfico 30. Cambio en implementación de trabajo colaborativo docente
#Gráfico 31. Valoración reflexión pedagógica
#Gráfico 32. Cambio en motivación estudiantes