Caso integrador resuelto: estrés académico y programas de intervención

Comprender, aplicar, interpretar y decidir con ANOVA de un factor en R

Autor/a

Mg. José Luis Rodas Cobos

1 Situación de investigación

Un equipo de Psicología estudia el puntaje de estrés académico de estudiantes universitarios que pertenecen a tres grupos: Respiración guiada, Mindfulness breve y Control. El estrés se observa después del periodo de intervención. El objetivo es evaluar si los puntajes medios difieren entre los tres grupos y, especialmente, si cada intervención presenta resultados distintos a los del grupo Control.

En una investigación aplicada, una diferencia entre medias solo es útil si podemos explicar cuánto difieren los grupos, con qué incertidumbre y qué significado tiene esa diferencia. Por ello, este caso no termina al obtener un valor p: integra descripción, revisión de supuestos, ANOVA, tamaño del efecto y comparaciones múltiples.

Preguntas de investigación

  1. ¿Existen diferencias entre los puntajes medios de estrés académico de los tres grupos?
  2. ¿Qué proporción de la variabilidad observada del estrés se asocia con el grupo?
  3. ¿Qué diferencias existen entre cada intervención y el Control?
  4. ¿Qué decisiones pueden fundamentarse con los resultados y cuáles exceden la evidencia disponible?

Variables y diseño. La variable respuesta es estres (puntaje cuantitativo) y el factor es programa (tres niveles). Cada fila representa un estudiante, identificado mediante id. La base de datos es la suministrada para este ejercicio; el archivo QMD no permite verificar por sí solo si su origen es real o simulado. Tampoco documenta cómo fueron asignados los estudiantes ni qué instrumento y rango de puntuación se utilizaron. Estas condiciones deben precisarse antes de interpretar los resultados como efectos causales o cambios clínicamente relevantes.

En las interpretaciones suponemos que un puntaje más alto representa mayor estrés académico. Si la codificación de la escala utilizada fuera diferente, tendría que revisarse el sentido de las comparaciones.

Idea clave. Un ANOVA significativo no prueba que todos los grupos difieran, no identifica por sí solo el mejor programa y no demuestra una reducción individual del estrés si no existen mediciones comparables antes y después.

1.1 Planificación del tamaño de muestra mediante pwr

1.1.1 ¿Por qué necesitamos calcular el tamaño de muestra?

Antes de realizar una investigación, debemos determinar cuántos participantes necesitamos para responder adecuadamente a nuestra pregunta de investigación.

Una muestra demasiado pequeña puede dificultar la detección de diferencias que realmente existen entre los grupos.

Por otra parte, una muestra innecesariamente grande puede implicar mayores costos, tiempo y recursos.

Idea clave: El tamaño de muestra debe planificarse antes de recolectar los datos, considerando la magnitud del efecto que deseamos detectar, el nivel de significación y la potencia estadística.

1.1.2 Situación problemática

Un investigador desea evaluar si existen diferencias en el nivel de estrés académico entre estudiantes de Psicología sometidos a tres condiciones:

  • Respiración guiada.
  • Mindfulness breve.
  • Control.

La pregunta es:

¿Cuántos estudiantes debemos incluir en cada grupo para detectar un efecto moderado mediante un ANOVA de un factor?

Para responder, utilizaremos la función pwr.anova.test() del paquete pwr.

1.1.3 ¿Cómo determinamos el tamaño del efecto esperado?

Antes de calcular el tamaño de muestra, necesitamos establecer qué magnitud de diferencia entre los programas psicológicos consideramos relevante detectar.

En un ANOVA de un factor, una medida utilizada para planificar el tamaño de muestra es el tamaño del efecto f de Cohen.

Este indicador expresa la magnitud de las diferencias entre las medias poblacionales en relación con la variabilidad dentro de los grupos.

Cuanto mayor sea el valor de (f), mayor será la separación entre las medias respecto de la variabilidad residual.

1.1.3.1 Clasificación del tamaño del efecto según Cohen

Tamaño del efecto Valor de \(f\) Interpretación
Inferior a pequeño \(f < 0.10\) Diferencias muy reducidas respecto de la variabilidad dentro de los grupos.
Pequeño \(0.10 \leq f < 0.25\) Diferencias de magnitud pequeña.
Moderado \(0.25 \leq f < 0.40\) Diferencias de magnitud intermedia.
Grande \(f \geq 0.40\) Diferencias de magnitud elevada.

Fuente: Adaptado de las referencias convencionales de Cohen (1988) para el tamaño del efecto (f) en ANOVA.

Importante: Los valores 0.10, 0.25 y 0.40 son referencias orientativas, no límites universales. La importancia práctica de un efecto depende del contexto de investigación.

1.1.3.2 Ejemplo aplicado a Psicología

Supongamos que queremos comparar el estrés académico entre tres programas:

  • Control.
  • Respiración guiada.
  • Mindfulness breve.

Antes de recolectar los datos, debemos establecer qué magnitud de diferencia esperamos detectar.

Para este ejemplo seleccionamos:

\([f=0.25]\)

Este valor corresponde a un efecto moderado según las referencias convencionales de Cohen.

¿Qué significa?

Significa que planificaremos un estudio capaz de detectar diferencias globales de magnitud moderada entre los programas, considerando su variabilidad interna.

No significa que esperamos una reducción del estrés del 25 %, ni que el 25 % de los estudiantes mejorará.

El valor (f=0.25) es una medida estandarizada de magnitud del efecto, no un porcentaje de participantes beneficiados.

1.1.3.3 Relación entre el tamaño del efecto f y eta cuadrado

El tamaño del efecto (f) puede expresarse a partir de \((\eta^2)\) mediante la siguiente relación:

\[[ f=\sqrt{\frac{\eta^2}{1-\eta^2}} ]\]

Por ejemplo, un efecto de (f=0.25) equivale a:

\[[ \eta^2=\frac{f^2}{1+f^2} =\frac{0.25^2}{1+0.25^2} \approx 0.0588 ]\]

Esto representa aproximadamente el 5.88 % de la variabilidad de la variable respuesta atribuible a las diferencias entre grupos dentro de esta descomposición de la variabilidad.

Advertencia: En la planificación utilizamos un efecto esperado, que debe justificarse antes de observar los resultados. No debemos escogerlo a partir del efecto obtenido en la misma muestra para justificar retrospectivamente su tamaño.

1.1.4 Cálculo del tamaño de muestra mediante pwr

# Planificamos el tamaño muestral para un ANOVA de un factor.
plan_muestral <- pwr::pwr.anova.test(
  k = 3,             # Tres programas psicológicos
  n = NULL,          # Tamaño por grupo que deseamos calcular
  f = 0.25,          # Efecto moderado esperado
  sig.level = 0.05,  # Nivel de significación del 5 %
  power = 0.80       # Potencia estadística del 80 %
)

# Mostramos el resultado.
plan_muestral

     Balanced one-way analysis of variance power calculation 

              k = 3
              n = 52.3966
              f = 0.25
      sig.level = 0.05
          power = 0.8

NOTE: n is number in each group
# Redondeamos hacia arriba y calculamos la muestra total.
n_grupo <- ceiling(plan_muestral$n)
n_total <- n_grupo * 3

n_grupo
[1] 53
n_total
[1] 159

1.1.5 Interpretación del resultado

Para detectar un efecto global moderado de (f=0.25) con una potencia aproximada del 80 % y un nivel de significación del 5 %, necesitamos planificar 53 estudiantes por grupo, es decir, 159 estudiantes en total.

Este cálculo supone grupos independientes y equilibrados, bajo las condiciones del ANOVA clásico.

1.1.5.1 Pregunta para pensar

¿Qué ocurriría si, en lugar de esperar un efecto moderado, esperamos un efecto pequeño de (f=0.10)?

Necesitaríamos una muestra considerablemente mayor, porque detectar diferencias pequeñas es más difícil que detectar diferencias grandes cuando los demás parámetros permanecen constantes.

Idea clave: Cuanto menor sea el efecto que deseamos detectar, mayor será generalmente el tamaño de muestra necesario para mantener la misma potencia estadística. criterios de relevancia científica.

1.1.6 Cálculo del tamaño de muestra en R

# Calculamos el tamaño de muestra necesario por grupo.
plan_muestral <- pwr::pwr.anova.test(
  k = 3,             # Tres grupos de comparación
  n = NULL,          # Tamaño de muestra desconocido
  f = 0.25,          # Efecto esperado moderado
  sig.level = 0.05,  # Nivel de significación
  power = 0.80       # Potencia estadística
)

# Mostramos el resultado.
plan_muestral

     Balanced one-way analysis of variance power calculation 

              k = 3
              n = 52.3966
              f = 0.25
      sig.level = 0.05
          power = 0.8

NOTE: n is number in each group
# Redondeamos hacia arriba porque trabajamos con personas.
n_grupo <- ceiling(plan_muestral$n)

# Calculamos el total para los tres grupos.
n_total <- n_grupo * 3

n_grupo
[1] 53
n_total
[1] 159

1.1.7 Interpretación del resultado

El cálculo indica que necesitamos aproximadamente 53 estudiantes por grupo, es decir, 159 estudiantes en total.

Con este tamaño de muestra, un ANOVA de un factor tendría una potencia aproximada del 80 % para detectar un efecto global de magnitud f = 0.25, bajo las condiciones consideradas en la planificación.

Advertencia: Una potencia del 80 % no significa que exista un 80 % de probabilidad de que nuestra hipótesis sea verdadera. Significa que, si el efecto especificado realmente existe, el estudio tiene aproximadamente esa probabilidad de detectarlo mediante la prueba utilizada.

1.1.8 ¿Qué sucede si esperamos perder participantes?

En estudios psicológicos pueden presentarse retiros, inasistencias o registros incompletos.

Si esperamos perder aproximadamente el 10 % de los participantes, necesitamos incrementar el número inicial de estudiantes.

# Proporción esperada de pérdidas.
perdidas <- 0.10

# Calculamos cuántos estudiantes debemos reclutar por grupo.
n_ajustado <- ceiling(n_grupo / (1 - perdidas))

# Calculamos el total de estudiantes que debemos reclutar.
total_ajustado <- n_ajustado * 3

n_ajustado
[1] 59
total_ajustado
[1] 177

1.1.9 Interpretación del tamaño ajustado

Considerando una pérdida esperada del 10 %, debemos reclutar 59 estudiantes por grupo, es decir, 177 estudiantes en total.

El objetivo es conservar aproximadamente el tamaño muestral requerido después de las posibles pérdidas.

Este ajuste supone que las pérdidas no introducen sesgos importantes. Si los abandonos están relacionados con el nivel de estrés o con el programa recibido, aumentar el tamaño de muestra no elimina automáticamente ese sesgo.

1.1.10 ¿Calcular la muestra significa realizar un muestreo?

No. Son decisiones diferentes.

Tamaño de muestra: establece cuántos estudiantes necesitamos.

Método de muestreo: establece cómo seleccionaremos a los estudiantes de la población.

Asignación a los grupos: establece cómo distribuiremos a los estudiantes entre las tres condiciones del estudio.

Por ejemplo, podríamos seleccionar estudiantes mediante un muestreo probabilístico a partir de un padrón universitario y posteriormente asignarlos aleatoriamente a los tres grupos.

La selección probabilística contribuye a la representatividad respecto de la población definida, mientras que la asignación aleatoria busca mejorar la comparabilidad entre los grupos.

Son procedimientos que cumplen funciones distintas.

1.1.11 Consideraciones para aplicar este cálculo

La función pwr.anova.test() considera la planificación de un ANOVA clásico con grupos independientes y tamaños iguales.

La interpretación de la potencia depende también de que sean razonables los supuestos del modelo, especialmente la independencia de las observaciones y la estructura de variabilidad utilizada en el ANOVA.

Si el diseño incluye medidas repetidas, agrupamiento de estudiantes en aulas o varianzas muy diferentes, puede ser necesario utilizar otro procedimiento de planificación.

Importante: El cálculo anterior corresponde a un estudio hipotético que todavía se está planificando.

Nuestro caso integrador utiliza 30 observaciones ya registradas. No debemos confundir ese tamaño observado con el tamaño recomendado por este ejercicio de planificación.

1.1.12 Pregunta para reflexionar

Si un investigador cuenta solamente con 30 estudiantes, pero la planificación recomienda aproximadamente 159:

¿Significa que su investigación no tiene valor?

No necesariamente. Sin embargo, debe reconocer las limitaciones de precisión y potencia que podría tener su estudio para detectar el efecto considerado.

Además, una muestra pequeña no implica automáticamente que todos los resultados sean incorrectos; su interpretación debe considerar el diseño, la magnitud de los efectos, los intervalos de confianza y las limitaciones del estudio.

Conclusión: El tamaño de muestra no debe elegirse únicamente por comodidad o disponibilidad de participantes. Debe justificarse de acuerdo con la pregunta de investigación, el diseño estadístico y la magnitud del efecto que resulta relevante detectar.

2 Preparación y comprensión de los datos

2.1 Librerías necesarias

Utilizaremos R para importar la base, realizar los cálculos estadísticos y elaborar gráficos. No emplearemos código para imprimir decisiones que podemos explicar directamente en el texto.

library(readxl)
library(dplyr)
library(ggplot2)
library(car)
library(multcomp)

# Identidad visual coherente en todo el documento.
colores_programas <- c(
  "Respiración guiada" = "#0E9CA8", # Turquesa
  "Mindfulness breve" = "#7561BD",  # Violeta
  "Control" = "#EC8658"            # Coral
)

# Tema de gráficos: contraste legible, fondo blanco y tipografía sobria.
tema_estres <- theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", colour = "#18314B", size = 16),
    plot.subtitle = element_text(colour = "#536577", size = 10.5),
    plot.caption = element_text(colour = "#637587", size = 9),
    axis.title = element_text(face = "bold", colour = "#29455E"),
    axis.text = element_text(colour = "#34495E"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    panel.grid.major.y = element_line(colour = "#E8EDF3", linewidth = 0.35),
    legend.position = "bottom",
    legend.title = element_blank(),
    plot.title.position = "plot",
    plot.margin = margin(12, 16, 10, 12)
  )

2.2 Importación del archivo Excel

Se conserva exactamente la ruta de importación del QMD original. Para reproducir el documento, el archivo debe existir en esa ubicación de la computadora donde se ejecute R.

datos_estres <- read_excel(
  "D:/Github/Libros/Psico II/PPT 1/CASO_INTEGRADOR_ESTRES_PROGRAMAS_BASE.xlsx"
)

# Convertimos programa en una variable categórica nominal.
# Esto permite que R reconozca los tres grupos del estudio.

datos_estres <- datos_estres |>
  dplyr::mutate(
    programa = factor(
      programa,
      levels = c(
        "Respiración guiada",
        "Mindfulness breve",
        "Control"
      ),
      ordered = FALSE
    )
  )

# Verificamos que ahora sea un factor.
class(datos_estres$programa)
[1] "factor"
# Comprobamos los niveles definidos.
levels(datos_estres$programa)
[1] "Respiración guiada" "Mindfulness breve"  "Control"           

2.3 Verificación de la estructura

Antes de analizar, debemos confirmar que los nombres, categorías y tipos de datos sean correctos. Un modelo estadístico correctamente ejecutado sobre datos mal codificados puede producir conclusiones equivocadas.

dplyr::glimpse(datos_estres)
Rows: 30
Columns: 3
$ id       <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18…
$ programa <fct> Respiración guiada, Respiración guiada, Respiración guiada, R…
$ estres   <dbl> 29, 28, 31, 27, 30, 26, 29, 28, 30, 27, 24, 25, 23, 26, 22, 2…
dplyr::count(datos_estres, programa)
# A tibble: 3 × 2
  programa               n
  <fct>              <int>
1 Respiración guiada    10
2 Mindfulness breve     10
3 Control               10
colSums(is.na(datos_estres))
      id programa   estres 
       0        0        0 

Definimos explícitamente el orden de los tres grupos. Este orden se conservará en las tablas, los gráficos y las comparaciones de Tukey.

stopifnot(
  
  # Verifica que existan las columnas necesarias:
  # id, programa y estres.
  all(c("id", "programa", "estres") %in% names(datos_estres)),
  
  # Comprueba que el estrés sea una variable numérica,
  # porque utilizaremos sus valores para calcular medias
  # y realizar el ANOVA.
  is.numeric(datos_estres$estres),
  
  # Comprueba que ningún estudiante tenga
  # un programa sin identificar.
  !anyNA(datos_estres$programa),
  
  # Comprueba que no existan valores faltantes
  # en los puntajes de estrés.
  !anyNA(datos_estres$estres),
  
  # Verifica que no existan identificadores repetidos.
  # Cada estudiante debe tener un ID único.
  !anyDuplicated(datos_estres$id),
  
  # Comprueba que cada programa tenga
  # por lo menos dos observaciones.
  all(table(datos_estres$programa) >= 2)
  
)

Interpretación de esta revisión. programa debe contener exactamente los tres grupos previstos; estres debe ser numérica y no presentar valores faltantes sin un tratamiento justificado; id debe identificar observaciones distintas. Si se interrumpe la ejecución, corresponde revisar los datos originales, no eliminar registros automáticamente para que el código funcione.

3 Descripción inicial: ¿qué muestran los estudiantes observados?

3.1 Estadísticos descriptivos

La media resume el nivel promedio de estrés; la desviación estándar mide cuánto varían los puntajes entre estudiantes del mismo grupo. La mediana y el rango ayudan a reconocer asimetrías o valores alejados del resto.

descriptivos <- datos_estres |>
  dplyr::group_by(programa) |>
  dplyr::summarise(
    n = dplyr::n(),
    media = mean(estres),
    mediana = median(estres),
    de = sd(estres),
    minimo = min(estres),
    maximo = max(estres),
    .groups = "drop"
  )

descriptivos
# A tibble: 3 × 7
  programa               n media mediana    de minimo maximo
  <fct>              <int> <dbl>   <dbl> <dbl>  <dbl>  <dbl>
1 Respiración guiada    10  28.5    28.5  1.58     26     31
2 Mindfulness breve     10  24.2    24    1.32     22     26
3 Control               10  34.5    34.5  1.58     32     37
# 2. Presentar los resultados en una tabla HTML

knitr::kable(
  descriptivos,
  digits = 2,  # Mostrar dos decimales
  col.names = c(
    "Programa", "n", "Media", "Mediana",
    "DE", "Mínimo", "Máximo"
  ),
  caption = "Estadísticos descriptivos del estrés según programa"
)
Estadísticos descriptivos del estrés según programa
Programa n Media Mediana DE Mínimo Máximo
Respiración guiada 10 28.5 28.5 1.58 26 31
Mindfulness breve 10 24.2 24.0 1.32 22 26
Control 10 34.5 34.5 1.58 32 37

Tabla 1. Resumen del estrés académico según grupo. La tabla está escrita directamente en Markdown. Sus celdas numéricas se actualizan al ejecutar el documento con el Excel original.

Grupo n Media Mediana Desv. estándar Mínimo Máximo
Respiración guiada 10 28.5 28.5 1.58 26 31
Mindfulness breve 10 24.2 24 1.32 22 26
Control 10 34.5 34.5 1.58 32 37

Interpretación descriptiva. En esta muestra, el grupo con la menor media observada es Mindfulness breve (24.2 puntos), mientras que la mayor media corresponde a Control (34.5 puntos). La diferencia entre las medias extremas es 10.3 puntos. Esta es una comparación descriptiva, no una conclusión inferencial: todavía debemos estudiar cuánto de la diferencia podría corresponder a variabilidad muestral.

Compare también las desviaciones estándar: cuando la dispersión difiere mucho entre grupos, conviene prestar especial atención al supuesto de varianza común del ANOVA clásico.

3.2 Visualización de las distribuciones

Un diagrama de cajas acompañado por los puntajes individuales permite valorar de forma conjunta posición, dispersión y observaciones alejadas. El rombo señala la media; la línea de la caja representa la mediana.

ggplot(datos_estres, aes(x = programa, y = estres, colour = programa, fill = programa)) +
  geom_boxplot(width = 0.52, outlier.shape = NA, alpha = 0.22,
               linewidth = 0.8) +
  geom_jitter(width = 0.085, height = 0, alpha = 0.72, size = 2.7) +
  stat_summary(fun = mean, geom = "point", shape = 23, size = 3.7,
               colour = "#18314B", fill = "#F3CE64", stroke = 1.1) +
  scale_colour_manual(values = colores_programas) +
  scale_fill_manual(values = colores_programas) +
  labs(
    title = "Estrés académico según el programa",
    subtitle = "Cada punto representa un estudiante; el rombo dorado señala la media",
    x = "Programa", y = "Puntaje de estrés académico"
  ) +
  guides(colour = "none", fill = "none") +
  tema_estres

Interpretación. Observe si las cajas se superponen, cómo varía la dispersión y si existen puntajes extremos. La superposición visual no decide por sí misma la significación estadística. Un gráfico es una herramienta para comprender los datos y orientar los diagnósticos, no un sustituto del análisis inferencial.

Pregunta para pensar. Si dos medias se encuentran separadas, pero la variabilidad individual es muy grande, ¿tendríamos la misma confianza en esa diferencia que si los puntajes estuvieran poco dispersos?

4 Fundamento del ANOVA de un factor

4.1 ¿Por qué ANOVA y no varias pruebas t?

Nuestra variable respuesta es cuantitativa y el factor tiene tres grupos independientes. Realizar varias pruebas t sin un ajuste adecuado aumentaría el riesgo de obtener al menos un falso positivo. El ANOVA de un factor examina primero una pregunta global: si las tres medias poblacionales pueden considerarse iguales.

El razonamiento es comparar dos fuentes de variación:

  • Entre grupos: cuánto se separan las medias grupales respecto de la media general.
  • Dentro de los grupos: cuánto varían los estudiantes que pertenecen a un mismo grupo, aun cuando recibieron la misma condición.

Si la variación entre grupos es grande en relación con la variación residual dentro de ellos, aumenta el valor del estadístico F.

4.2 Modelo estadístico e hipótesis

Para el estudiante \(j\) que pertenece al grupo \(i\):

\[ Y_{ij}=\mu+\tau_i+\varepsilon_{ij} \]

En este modelo, \(Y_{ij}\) es el puntaje de estrés; \(\mu\) es la media general según la parametrización elegida; \(\tau_i\) representa el efecto del grupo \(i\); y \(\varepsilon_{ij}\) representa la variabilidad no explicada por el factor. Se utiliza una restricción identificadora, por ejemplo \(\sum_i\tau_i=0\), para parametrizar el modelo.

Las hipótesis son:

\[ H_0:\mu_1=\mu_2=\mu_3, \qquad H_1:\text{al menos una media difiere}. \]

Advertencia: la hipótesis alternativa no afirma que todas las medias son diferentes ni identifica qué intervención es mejor.

4.3 Fórmula del estadístico F

\[ \boxed{F=\frac{MC_{\text{entre}}}{MC_{\text{dentro}}} =\frac{SC_{\text{entre}}/(k-1)}{SC_{\text{dentro}}/(N-k)}} \]

Aquí \(SC\) significa suma de cuadrados, \(MC\) cuadrado medio, \(k\) es el número de grupos y \(N\) es el número total de estudiantes. El denominador mide la variabilidad residual estimada. Por ello, F no se interpreta como una diferencia en puntos de estrés: es una razón entre estimaciones de variabilidad.

4.4 Ajuste en R

Ajustamos un solo modelo con aov(). Servirá tanto para el ANOVA como para los residuos, los tamaños del efecto y las comparaciones posteriores; no necesitamos repetir el mismo ajuste con lm().

# 1. Ajustamos el modelo ANOVA de un factor.
# Comparamos las medias de estrés entre los programas.

modelo_estres <- aov(
  estres ~ programa,
  data = datos_estres
)

# 2. Obtenemos la tabla del análisis de varianza.
resultado_anova <- anova(modelo_estres)

# 3. Presentamos los resultados en una tabla HTML.
# digits = 4 muestra cuatro decimales.

knitr::kable(
  resultado_anova,
  digits = 4,
  col.names = c(
    "GL",
    "Suma de cuadrados",
    "Cuadrado medio",
    "F calculado",
    "Valor p"
  ),
  caption = "Análisis de varianza del estrés académico según programa"
)
Análisis de varianza del estrés académico según programa
GL Suma de cuadrados Cuadrado medio F calculado Valor p
programa 2 535.2667 267.6333 119.2426 0
Residuals 27 60.6000 2.2444 NA NA

5 ¿Podemos confiar en el modelo? Evaluación de supuestos

Los supuestos no son una lista de casillas que se aprueba con valores p. Su evaluación debe combinar el diseño del estudio, la exploración gráfica y la sensibilidad de las conclusiones.

5.1 Independencia de las observaciones

El ANOVA clásico supone errores independientes. Este supuesto depende fundamentalmente de cómo se seleccionaron y asignaron los estudiantes. Que una columna se llame id o que una prueba tenga un valor p elevado no demuestra independencia.

Si cada estudiante participa en un único grupo y proporciona una medición independiente, la estructura es compatible con un ANOVA de grupos independientes. Si se evaluó al mismo estudiante varias veces, o hay dependencia por aulas o equipos, puede ser necesario un modelo de medidas repetidas o multinivel.

5.2 Normalidad de los errores: histograma, densidad, gráfico Q-Q y Shapiro-Wilk

¿Por qué estudiamos la normalidad? El ANOVA clásico supone que los errores, dentro de cada grupo, siguen aproximadamente una distribución normal. Este supuesto no se evalúa mezclando directamente todos los puntajes de estrés: los grupos pueden tener medias diferentes aunque sus errores sean normales. Por ello, analizamos los residuos del modelo, es decir, la diferencia entre el puntaje observado de cada estudiante y la media estimada de su grupo.

Ningún gráfico o prueba aislada demuestra normalidad. Examinaremos tres representaciones complementarias y, después, la prueba de Shapiro-Wilk. Los gráficos se elaboran con ggplot2, excepto el Q-Q, para el que utilizamos explícitamente car::qqPlot().

# Estos residuos se utilizarán en todos los gráficos y en Shapiro-Wilk.
residuos_anova <- residuals(modelo_estres)

datos_residuos <- datos_estres |>
  dplyr::mutate(residuo = residuos_anova)

5.2.1 Histograma de los residuos

¿Qué buscamos? Una distribución aproximadamente simétrica, concentrada alrededor de cero y sin acumulaciones muy alejadas de su centro. La forma del histograma también depende del número de intervalos elegido; por eso no es suficiente para afirmar o rechazar normalidad.

ggplot(datos_residuos, aes(x = residuo)) +
  geom_histogram(
    aes(y = after_stat(density)), bins = 8,
    fill = "#69C5CC", colour = "white", linewidth = 0.8, alpha = 0.94
  ) +
  
  stat_function(
    fun = dnorm,
    args = list(mean = 0, sd = sqrt(resultado_anova[["Mean Sq"]][2])),
    colour = "#E36C4E",linewidth = 1.45
  ) +
  
  
  geom_density(
    fill = "#7CD2D0", colour = "black", alpha = 0.36,
    linewidth = 1.35, adjust = 1
  ) +

  
  geom_vline(xintercept = 0, linetype = "dashed",
             colour = "#42586C", linewidth = 0.7) +
  labs(
    title = "Histograma de residuos del ANOVA",
    subtitle = "Turquesa: residuos observados · Coral: normal teórica de referencia",
    x = "Residuo (puntos de estrés)", y = "Densidad"
  ) +
  
  tema_estres

Interpretación: si las barras se distribuyen a ambos lados del cero y siguen aproximadamente la forma de campana de la curva de referencia, ello es compatible con la normalidad. Una asimetría marcada o barras aisladas sugieren revisar la distribución y los casos correspondientes. La curva de referencia no es una prueba de normalidad ni se espera que cada barra coincida con ella.

5.2.2 Gráfico de densidad de los residuos

¿Qué aporta respecto al histograma? La curva de densidad suaviza la distribución empírica y permite observar asimetrías, colas largas o más de una concentración de valores. Su apariencia depende del grado de suavizado, sobre todo cuando la muestra es pequeña.

ggplot(datos_residuos, aes(x = residuo)) +
  geom_density(
    fill = "#7CD2D0", colour = "#0B8998", alpha = 0.36,
    linewidth = 1.35, adjust = 1
  ) +
  stat_function(
    fun = dnorm,
    args = list(mean = 0, sd = sqrt(resultado_anova[["Mean Sq"]][2])),
    colour = "#E36C4E", linewidth = 1.35, linetype = "longdash"
  ) +
  geom_vline(xintercept = 0, linetype = "dotted",
             colour = "#42586C", linewidth = 0.7) +
  labs(
    title = "Densidad de los residuos del ANOVA",
    subtitle = "Turquesa: densidad empírica · Coral: distribución normal de referencia",
    x = "Residuo (puntos de estrés)", y = "Densidad"
  ) +
  tema_estres

Interpretación: una curva empírica aproximadamente simétrica y similar a la referencia normal respalda visualmente la plausibilidad del supuesto. Si aparecen colas claramente más largas, asimetrías o varios picos, debemos examinar si se trata de valores extremos, diferencias de dispersión entre grupos o de un patrón que el modelo no representa adecuadamente. El suavizado puede crear u ocultar irregularidades; se interpreta junto con los demás gráficos.

5.2.3 Gráfico Q-Q de los residuos mediante car::qqPlot()

¿Qué examinamos? Comparamos los cuantiles observados de los residuos con los que esperaríamos de una distribución normal. Una tendencia aproximadamente rectilínea favorece la compatibilidad con el supuesto; separaciones sistemáticas, especialmente en las colas, merecen atención.

car::qqPlot(
  residuos_anova,
  distribution = "norm",   # Distribución normal de referencia
  envelope = 0.95,         # Envolvente de referencia del 95 %
  id = FALSE,              # No identificar automáticamente puntos extremos
  col = "#7360B9",         # Color violeta de los puntos
  col.lines = "#E36C4E",   # Color coral de la línea de referencia
  pch = 19,                # Puntos circulares sólidos
  main = "Normalidad de los residuos del ANOVA",
  xlab = "Cuantiles normales teóricos",
  ylab = "Cuantiles observados de los residuos"
)

Interpretación: si los puntos se sitúan aproximadamente sobre la recta de referencia, la forma de la distribución residual es razonablemente compatible con la normal. La banda representa una envolvente orientativa de referencia, no una certificación del supuesto; algunos puntos pueden alejarse por fluctuaciones muestrales. Una curvatura pronunciada o desviaciones persistentes en los extremos deben analizarse junto con el histograma y la densidad.

5.2.4 Prueba de Shapiro-Wilk

Tras la exploración gráfica, Shapiro-Wilk aporta una prueba formal de la hipótesis de normalidad:

\[ H_0:\; \text{los errores siguen una distribución normal}, \qquad H_1:\; \text{los errores no siguen una distribución normal}. \]

resultado_shapiro <- shapiro.test(residuos_anova)
resultado_shapiro

    Shapiro-Wilk normality test

data:  residuos_anova
W = 0.95869, p-value = 0.2867

Resultado: \(W =\) 0.9587; valor \(p =\) 0.287.

Interpretación estadística: La prueba no encuentra evidencia suficiente para rechazar la normalidad al nivel del 5 %. Esto no demuestra que la distribución sea exactamente normal y debe interpretarse junto con los gráficos.

Interpretación integrada y decisión: el histograma muestra la concentración de residuos; la densidad permite apreciar su forma suavizada; el Q-Q destaca especialmente las discrepancias en las colas; y Shapiro-Wilk complementa la evaluación con un contraste formal. Para decidir si el ANOVA clásico es adecuado, también necesitamos examinar la independencia, la homogeneidad de varianzas, los tamaños muestrales y la posible influencia de casos extremos. Una prueba aislada no reemplaza ese razonamiento.

5.3 Homogeneidad de varianzas: gráfico y Levene

El ANOVA clásico utiliza una varianza residual común para comparar los grupos. Para evaluar su plausibilidad conviene observar la amplitud de los residuos por grupo y considerar la prueba de Levene centrada en la mediana, que es menos sensible a la falta de normalidad que su versión basada en la media.

ggplot(datos_residuos, aes(x = programa, y = residuo,
                          colour = programa, fill = programa)) +
  geom_hline(yintercept = 0, linetype = "dashed",
             colour = "#627588", linewidth = 0.8) +
  geom_boxplot(outlier.shape = NA, width = 0.52,
               alpha = 0.22, linewidth = 0.8) +
  geom_jitter(width = 0.085, alpha = 0.72, size = 2.5) +
  scale_colour_manual(values = colores_programas) +
  scale_fill_manual(values = colores_programas) +
  guides(colour = "none", fill = "none") +
  labs(
    title = "Variabilidad de residuos según el grupo",
    subtitle = "Las tres dispersiones deberían ser razonablemente comparables",
    x = "Programa", y = "Residuo (puntos de estrés)"
  ) +
  tema_estres

resultado_levene <- car::leveneTest(
  estres ~ programa,
  data = datos_estres,
  center = median
)


knitr::kable(
  resultado_levene,
  digits = 4,
  caption = "Prueba de Levene para la homogeneidad de varianzas"
)
Prueba de Levene para la homogeneidad de varianzas
Df F value Pr(>F)
group 2 0.4709 0.6295
27 NA NA

Resultado: \(F_{\text{Levene}} =\) 0.471; valor \(p =\) 0.629.

Interpretación: No existe evidencia estadística suficiente de que las varianzas sean distintas. Esto no certifica varianzas idénticas: también debemos valorar el gráfico y los tamaños muestrales por grupo.

¿Qué hacer si las varianzas son muy diferentes? Cuando existe heterogeneidad relevante —especialmente con tamaños de grupo desiguales— una alternativa para la pregunta global es el ANOVA de Welch (oneway.test(estres ~ programa, data = datos_estres)). Sus comparaciones posteriores también deben corresponder al enfoque de varianzas desiguales; no sería coherente usar automáticamente Tukey HSD o Dunnett clásico sobre ese resultado.

5.4 Observaciones inusuales e influencia

¿Por qué hacemos este diagnóstico? Incluso cuando las medias de los grupos difieren, una observación muy alejada puede modificar la estimación de la variabilidad residual y, con ello, afectar el contraste F y las comparaciones. El propósito es detectar casos que merecen revisión, no borrar datos para mejorar el resultado.

Distinguimos tres conceptos, que no son equivalentes:

  • Residuo studentizado externo: identifica puntuaciones inusuales dentro de su grupo. Como señal exploratoria se utiliza \(|t_i|>3\); no es una prueba formal con control global de errores.
  • Distancia de Cook: mide la influencia potencial de excluir el caso sobre el conjunto de valores ajustados. La referencia usual \(D_i>4/N\) señala casos para revisar; \(D_i>1\) es una alerta más exigente. Ninguna de estas referencias determina automáticamente que el caso sea inválido.
  • Leverage: indica la posición de una observación en el diseño del modelo. En un ANOVA de un factor, \(h_{ii}=1/n_i\), donde \(n_i\) es el tamaño del grupo del estudiante. Como referencia exploratoria puede utilizarse \(h_{ii}>2p/N\), donde \(p\) es el número de parámetros estimados, incluido el intercepto. En este diseño, todos los estudiantes del mismo grupo tienen idéntico leverage: un valor grande suele reflejar un grupo pequeño, no un puntaje de estrés extremo.

5.4.1 Valores numéricos para comparar

Antes de revisar los casos calculamos los puntos de referencia concretos a partir de la muestra. No basta escribir \(4/N\) o \(1/n_i\): es necesario mostrar cuánto valen.

N <- nobs(modelo_estres)
p_modelo <- length(coef(modelo_estres))

umbral_studentizado <- 3
umbral_cook <- 4 / N
umbral_leverage <- 2 * p_modelo / N

revision_casos <- datos_estres |>
  dplyr::mutate(
    residuo_studentizado = as.numeric(rstudent(modelo_estres)),
    leverage = as.numeric(hatvalues(modelo_estres)),
    distancia_cook = as.numeric(cooks.distance(modelo_estres)),
    alerta_residuo = abs(residuo_studentizado) > umbral_studentizado,
    alerta_leverage = leverage > umbral_leverage,
    alerta_cook = distancia_cook > umbral_cook,
    orden = dplyr::row_number()
  )


# ---------------------------------------------------------
# 3. PRESENTAR LOS RESULTADOS EN UNA TABLA
# ---------------------------------------------------------

revision_casos |>
  dplyr::select(
    id,
    programa,
    estres,
    residuo_studentizado,
    leverage,
    distancia_cook,
    alerta_residuo,
    alerta_leverage,
    alerta_cook
  ) |>
  knitr::kable(
    digits = 4,
    col.names = c(
      "ID",
      "Programa",
      "Estrés",
      "Residuo studentizado",
      "Leverage",
      "Cook",
      "Alerta residuo",
      "Alerta leverage",
      "Alerta Cook"
    ),
    caption = "Diagnóstico de observaciones inusuales e influyentes"
  )
Diagnóstico de observaciones inusuales e influyentes
ID Programa Estrés Residuo studentizado Leverage Cook Alerta residuo Alerta leverage Alerta Cook
1 Respiración guiada 29 0.3460 0.1 0.0046 FALSE FALSE FALSE
2 Respiración guiada 28 -0.3460 0.1 0.0046 FALSE FALSE FALSE
3 Respiración guiada 31 1.8344 0.1 0.1146 FALSE FALSE FALSE
4 Respiración guiada 27 -1.0577 0.1 0.0413 FALSE FALSE FALSE
5 Respiración guiada 30 1.0577 0.1 0.0413 FALSE FALSE FALSE
6 Respiración guiada 26 -1.8344 0.1 0.1146 FALSE FALSE FALSE
7 Respiración guiada 29 0.3460 0.1 0.0046 FALSE FALSE FALSE
8 Respiración guiada 28 -0.3460 0.1 0.0046 FALSE FALSE FALSE
9 Respiración guiada 30 1.0577 0.1 0.0413 FALSE FALSE FALSE
10 Respiración guiada 27 -1.0577 0.1 0.0413 FALSE FALSE FALSE
11 Mindfulness breve 24 -0.1381 0.1 0.0007 FALSE FALSE FALSE
12 Mindfulness breve 25 0.5556 0.1 0.0117 FALSE FALSE FALSE
13 Mindfulness breve 23 -0.8397 0.1 0.0264 FALSE FALSE FALSE
14 Mindfulness breve 26 1.2814 0.1 0.0594 FALSE FALSE FALSE
15 Mindfulness breve 22 -1.5912 0.1 0.0887 FALSE FALSE FALSE
16 Mindfulness breve 24 -0.1381 0.1 0.0007 FALSE FALSE FALSE
17 Mindfulness breve 25 0.5556 0.1 0.0117 FALSE FALSE FALSE
18 Mindfulness breve 23 -0.8397 0.1 0.0264 FALSE FALSE FALSE
19 Mindfulness breve 24 -0.1381 0.1 0.0007 FALSE FALSE FALSE
20 Mindfulness breve 26 1.2814 0.1 0.0594 FALSE FALSE FALSE
21 Control 34 -0.3460 0.1 0.0046 FALSE FALSE FALSE
22 Control 36 1.0577 0.1 0.0413 FALSE FALSE FALSE
23 Control 33 -1.0577 0.1 0.0413 FALSE FALSE FALSE
24 Control 35 0.3460 0.1 0.0046 FALSE FALSE FALSE
25 Control 37 1.8344 0.1 0.1146 FALSE FALSE FALSE
26 Control 32 -1.8344 0.1 0.1146 FALSE FALSE FALSE
27 Control 34 -0.3460 0.1 0.0046 FALSE FALSE FALSE
28 Control 35 0.3460 0.1 0.0046 FALSE FALSE FALSE
29 Control 36 1.0577 0.1 0.0413 FALSE FALSE FALSE
30 Control 33 -1.0577 0.1 0.0413 FALSE FALSE FALSE

En este ejercicio tenemos \(N =\) 30 estudiantes y \(p =\) 3 parámetros del modelo (incluido el intercepto). Por tanto:

  • Residuo studentizado externo: \(|t_i|>3\).
  • Distancia de Cook: \(D_i>4/30=0.1333\).
  • Leverage: \(h_{ii}>2(3)/30=0.2\).
  • Para cada grupo, su leverage esperado es \(1/n_i\): Respiración guiada = 0.1; Mindfulness breve = 0.1; Control = 0.1.

Tabla de evaluación. El máximo observado y el número de alertas se obtienen de la base, y se comparan con los límites mostrados a su lado.

Diagnóstico Umbral orientativo Máximo observado Casos que superan el umbral
Residuo studentizado externo (valor absoluto) 3 1.834 0
Distancia de Cook 0.1333 0.1146 0
Leverage 0.2 0.1 0

Lectura: una observación que supera un umbral tiene una señal para investigar, no una clasificación definitiva de «influyente» o «no influyente». En particular, el leverage por sí solo no mide cuánto cambia el ajuste. La distancia de Cook incorpora tanto la discrepancia residual como el leverage.

5.4.2 Gráfico de residuos studentizados externos

Las líneas discontinuas marcan −3 y +3: un punto fuera de esas líneas merece una inspección adicional.

ggplot(revision_casos, aes(x = orden, y = residuo_studentizado,
                           colour = alerta_residuo)) +
  geom_hline(yintercept = c(-umbral_studentizado, umbral_studentizado),
             linetype = "dashed", colour = "#E36C4E", linewidth = 0.9) +
  geom_hline(yintercept = 0, colour = "#AABAC7", linewidth = 0.6) +
  geom_segment(aes(xend = orden, yend = 0), alpha = 0.45, linewidth = 0.9) +
  geom_point(size = 2.8) +
  scale_colour_manual(values = c("FALSE" = "#169CAD", "TRUE" = "#E36C4E"),
                      labels = c("FALSE" = "Sin señal", "TRUE" = "Revisar")) +
  labs(
    title = "Residuos studentizados externos",
    subtitle = "Referencias exploratorias en −3 y +3",
    x = "Número de observación", y = "Residuo studentizado",
    colour = "Señal"
  ) +
  tema_estres

5.4.3 Gráfico de distancia de Cook

La línea discontinua representa \(4/N =\) 0.1333. Los puntos corales, si aparecen, son candidatos a un análisis de sensibilidad.

ggplot(revision_casos, aes(x = orden, y = distancia_cook,
                           fill = alerta_cook)) +
  geom_col(width = 0.68, colour = "white", linewidth = 0.25) +
  geom_hline(yintercept = umbral_cook, linetype = "dashed",
             colour = "#E36C4E", linewidth = 1.1) +
  scale_fill_manual(values = c("FALSE" = "#6FC6CB", "TRUE" = "#E36C4E"),
                    labels = c("FALSE" = "Sin señal", "TRUE" = "Revisar")) +
  labs(
    title = "Distancia de Cook por estudiante",
    subtitle = paste0("Línea coral: límite orientativo 4/N = ",
                      round(umbral_cook, 4)),
    x = "Número de observación", y = "Distancia de Cook",
    fill = "Señal"
  ) +
  tema_estres

5.4.4 Casos que conviene verificar

Mostramos los cinco mayores valores de Cook junto con el residuo studentizado y el leverage; esto permite identificar qué registros revisar, además de observar los gráficos. Si no se supera ningún punto de referencia, los máximos siguen siendo informativos.

revision_casos |>
  dplyr::arrange(dplyr::desc(distancia_cook)) |>
  dplyr::select(id, programa, estres, residuo_studentizado,
                leverage, distancia_cook, alerta_cook) |>
  utils::head(5)
# A tibble: 5 × 7
     id programa estres residuo_studentizado leverage distancia_cook alerta_cook
  <dbl> <fct>     <dbl>                <dbl>    <dbl>          <dbl> <lgl>      
1     3 Respira…     31                 1.83    0.100         0.115  FALSE      
2    26 Control      32                -1.83    0.1           0.115  FALSE      
3    25 Control      37                 1.83    0.1           0.115  FALSE      
4     6 Respira…     26                -1.83    0.100         0.115  FALSE      
5    15 Mindful…     22                -1.59    0.100         0.0887 FALSE      

Interpretación contextual: se obtienen 0 casos sobre la referencia de Cook, 0 casos con \(|t_i|>3\) y 0 casos por encima de la referencia de leverage. Estos números orientan una auditoría de los registros; no autorizan eliminarlos automáticamente. Si algún caso supera los umbrales, conviene comparar los resultados completos con un análisis de sensibilidad justificado y documentar cualquier cambio.

6 Resultado global del ANOVA: cálculo, decisión e interpretación

La tabla ANOVA resume cuánto aporta el factor programa a la variabilidad total y cuánto permanece como variabilidad residual.

Tabla 2. Resultados del ANOVA de un factor.

knitr::kable(
  resultado_anova,
  digits = 4,
  col.names = c(
    "GL",
    "Suma de cuadrados",
    "Cuadrado medio",
    "F calculado",
    "Valor p"
  ),
  caption = "Análisis de varianza del estrés académico según programa"
)
Análisis de varianza del estrés académico según programa
GL Suma de cuadrados Cuadrado medio F calculado Valor p
programa 2 535.2667 267.6333 119.2426 0
Residuals 27 60.6000 2.2444 NA NA
Fuente SC gl MC F Valor p
Entre grupos (programa) 535.267 2 267.633 119.243 <0.001
Dentro de grupos (residual) 60.6 27 2.244 — —
Total 595.867 29 — — —

En el caso original se obtuvo:

\[ \boxed{F(2,27)=119.243,\qquad p<0.001} \]

Se utiliza \(\alpha=0.05\). Para estos grados de libertad, el valor crítico de la distribución F es aproximadamente \(F_{0.95;2,27}=3.354\). Como \(119.243>3.354\), el estadístico se ubica ampliamente en la región de rechazo. El valor p lleva a la misma decisión.

Decisión estadística: rechazamos \(H_0\) de igualdad de las tres medias poblacionales.

Interpretación en Psicología: los grupos estudiados no presentan un mismo nivel medio de estrés académico. Al menos una media poblacional difiere de otra; sin embargo, este resultado no identifica todavía los pares diferentes y no cuantifica cuánto difieren en puntos de estrés.

Alcance del resultado: la relevancia del contraste está condicionada a la adecuación del diseño y del modelo. Una diferencia entre grupos no equivale, por sí sola, a una reducción del estrés atribuible a la intervención.

Pregunta para pensar. ¿Por qué es posible obtener un valor F muy alto incluso si los estudiantes de un mismo grupo no tienen exactamente el mismo puntaje de estrés?

7 Magnitud del efecto: ¿qué tan importantes son las diferencias?

El ANOVA responde si existe evidencia de que las medias poblacionales difieren. Sin embargo, un valor p pequeño no indica, por sí solo, si esas diferencias tienen una magnitud importante. Por ello complementamos el contraste global con dos medidas de tamaño del efecto: eta cuadrado y omega cuadrado.

Pregunta de investigación: ¿qué proporción de la variabilidad de los puntajes de estrés académico se asocia con la pertenencia a los grupos Respiración guiada, Mindfulness breve y Control?

Estas medidas describen la magnitud global de la asociación entre programa y estres. No identifican cuál intervención es mejor; eso requiere observar las medias y las comparaciones específicas, como Tukey o Dunnett.

7.1 Eta cuadrado (\(\eta^2\)): proporción de variabilidad asociada con los grupos

7.1.1 ¿Qué significa?

Eta cuadrado indica qué proporción de la variabilidad total de los puntajes de estrés de esta muestra corresponde a las diferencias entre las medias de los tres grupos. Si su valor se aproxima a cero, las diferencias entre medias representan una parte pequeña de la variabilidad total; si se acerca a uno, representan una parte grande.

7.1.2 Fórmula y cálculo

\[ \boxed{\eta^2=\frac{SC_{\text{entre}}}{SC_{\text{total}}}} \]

Donde \(SC_{\text{entre}}\) es la suma de cuadrados entre grupos y \(SC_{\text{total}}\) es la suma de cuadrados total. En el ANOVA clásico de un factor, también puede calcularse con el estadístico F y sus grados de libertad:

\[ \begin{aligned} \eta^2 &=\frac{F\,gl_{\text{entre}}}{F\,gl_{\text{entre}}+gl_{\text{dentro}}}\\[4pt] &=\frac{119.243\,(2)}{119.243\,(2)+27}\\[4pt] &=\boxed{0.8983=89.83\%}. \end{aligned} \]

Interpretación estadística: en la muestra, aproximadamente el 89.83 % de la variabilidad total observada en los puntajes de estrés se asocia con las diferencias entre las medias de los grupos. Es una magnitud excepcionalmente elevada en términos de proporción de variabilidad.

En palabras sencillas: los tres grupos tienen puntajes medios tan diferentes, en relación con la variación de los estudiantes dentro de cada grupo, que el grupo al que pertenece cada estudiante es un descriptor muy importante de su puntaje de estrés en estos datos.

En R verificamos el resultado a partir de las sumas de cuadrados, sin utilizar código adicional para imprimir interpretaciones:

SC_entre <- resultado_anova[["Sum Sq"]][1]
SC_total <- sum(resultado_anova[["Sum Sq"]])
eta_cuadrado <- SC_entre / SC_total
eta_cuadrado
[1] 0.8982994

7.2 Omega cuadrado (\(\omega^2\)): estimación corregida del tamaño del efecto

7.2.1 ¿Para qué calcularlo si ya tenemos eta cuadrado?

Eta cuadrado resume la variabilidad asociada con los grupos en la muestra y tiende a sobrestimar el parámetro poblacional. Omega cuadrado incorpora una corrección por la variabilidad residual y los grados de libertad, de modo que suele ofrecer una estimación menos sesgada de la proporción de varianza poblacional asociada con el factor.

7.2.2 Fórmula y cálculo

\[ \boxed{\omega^2= \frac{SC_{\text{entre}}-(k-1)MC_{\text{dentro}}} {SC_{\text{total}}+MC_{\text{dentro}}}} \]

Donde \(k\) es el número de grupos (\(k=3\)) y \(MC_{\text{dentro}}\) es el cuadrado medio residual, que representa la variabilidad de los puntajes dentro de los grupos. Para este ANOVA de un factor, podemos expresar el cálculo mediante F:

\[ \begin{aligned} \omega^2 &=\frac{gl_{\text{entre}}(F-1)}{gl_{\text{entre}}F+gl_{\text{dentro}}+1}\\[4pt] &=\frac{2(119.243-1)}{2(119.243)+27+1}\\[4pt] &=\boxed{0.8874=88.74\%}. \end{aligned} \]

Interpretación estadística: omega cuadrado estima que alrededor del 88.74 % de la variabilidad poblacional de los puntajes de estrés se asocia con el factor programa, bajo el modelo empleado y sus supuestos. Es ligeramente menor que eta cuadrado debido a la corrección incorporada.

En palabras sencillas: incluso después de considerar la variabilidad residual al estimar el tamaño del efecto, las diferencias entre los grupos siguen siendo extraordinariamente grandes. Esto refuerza la idea de una asociación global fuerte, pero no demuestra todavía cuál intervención es preferible.

MC_dentro <- resultado_anova[["Mean Sq"]][2]
omega_cuadrado <- (
  SC_entre - resultado_anova$Df[1] * MC_dentro
) / (SC_total + MC_dentro)
omega_cuadrado
[1] 0.8874234

7.3 ¿Son valores pequeños, moderados o grandes?

Como guía orientativa, en aplicaciones de ANOVA suelen citarse los siguientes valores de referencia de eta cuadrado (convenciones aproximadas, no puntos de corte universales):

Magnitud orientativa Valor de referencia de \(\eta^2\) ¿Qué representa?
Pequeña \(0.01\) (1 %) Las diferencias entre grupos representan una proporción reducida de variabilidad.
Moderada \(0.06\) (6 %) La asociación puede ser apreciable, dependiendo del contexto.
Grande \(0.14\) (14 %) Las diferencias grupales representan una proporción relativamente importante.
Caso del estrés \(0.8983\) (89.83 %) Magnitud muy superior a la referencia habitual de efecto grande.

Recuerde. Estas convenciones son solo orientaciones para contextualizar \(\eta^2\); no deben trasladarse mecánicamente a todas las disciplinas ni aplicarse como umbrales rígidos de \(\omega^2\). Una magnitud muy grande no equivale automáticamente a un resultado clínicamente beneficioso.

¿Cómo clasificar omega cuadrado? El valor obtenido, \(\omega^2=0.8874\), también indica una asociación extraordinariamente grande. La calificación se fundamenta en que casi nueve décimas de la varianza quedan asociadas estadísticamente con los grupos, no en un punto de corte universal especial para omega cuadrado.

7.4 Gráfico: comparación visual de eta y omega cuadrado

En el siguiente gráfico, la longitud de cada barra representa la magnitud estimada en una escala común de 0 % a 100 %. La zona gris completa la escala; no representa un porcentaje de estudiantes que no mejoraron. Eta y omega se interpretan de manera distinta: uno describe la muestra y el otro incorpora una corrección para estimar el tamaño del efecto poblacional.

magnitudes <- data.frame(
  medida = factor(
    c("Eta cuadrado · muestra", "Omega cuadrado · corregido"),
    levels = c("Omega cuadrado · corregido", "Eta cuadrado · muestra")
  ),
  proporcion = c(eta_cuadrado, omega_cuadrado)
)

ggplot(magnitudes, aes(y = medida)) +
  geom_col(aes(x = 1), fill = "#E7EDF5", width = 0.58) +
  geom_col(aes(x = proporcion, fill = medida), width = 0.58) +
  geom_text(
    aes(x = proporcion / 2,
        label = paste0(format(round(100 * proporcion, 2), nsmall = 2), " %")),
    colour = "white", fontface = "bold", size = 5.3
  ) +
  scale_fill_manual(values = c(
    "Eta cuadrado · muestra" = "#0E9CA8",
    "Omega cuadrado · corregido" = "#7561BD"
  )) +
  scale_x_continuous(
    limits = c(0, 1), breaks = seq(0, 1, 0.2),
    labels = paste0(seq(0, 100, 20), " %"),
    expand = expansion(mult = c(0, 0))
  ) +
  labs(
    title = "¿Qué proporción de la variabilidad se asocia con el programa?",
    subtitle = "Eta: descripción de la muestra · Omega: estimación corregida del efecto",
    x = "Proporción de variabilidad asociada estadísticamente con el grupo",
    y = NULL,
    caption = "Un porcentaje elevado no es un porcentaje de eficacia terapéutica ni demuestra causalidad."
  ) +
  tema_estres +
  theme(
    legend.position = "none",
    axis.text.y = element_text(face = "bold", size = 11, colour = "#253A51"),
    axis.title.x = element_text(size = 10.5),
    panel.grid.major.x = element_line(colour = "#E8EDF3", linewidth = 0.35)
  )

Figura. Magnitud del efecto asociada al programa según eta y omega cuadrado.

Cómo interpretar el gráfico: las dos barras son muy largas y cercanas entre sí. Esto nos indica que las diferencias entre los tres grupos representan una proporción muy alta de la variabilidad del puntaje de estrés y que la estimación corregida sigue siendo elevada. La pequeña separación entre ambas barras se debe a que omega cuadrado incorpora una corrección que eta cuadrado no aplica.

Tabla 3. Resumen del tamaño del efecto en el caso de estrés académico.

Medida Resultado ¿Qué significa? Valoración contextual
Eta cuadrado (\(\eta^2\)) 0.8983 (89.83 %) Proporción de variabilidad muestral asociada con los grupos. Muy grande.
Omega cuadrado (\(\omega^2\)) 0.8874 (88.74 %) Estimación corregida de la proporción de variabilidad poblacional asociada con los grupos. Muy grande.

7.5 ¿Es bueno o malo para los programas psicológicos?

Desde el análisis estadístico: es un resultado informativo y favorable para detectar una diferencia global clara entre grupos, porque la magnitud de la asociación es muy elevada. Sin embargo, no es bueno ni malo por sí mismo en términos de beneficio psicológico: un tamaño del efecto grande no indica qué grupo tiene menor estrés.

Desde la interpretación psicológica: si una puntuación más baja representa menos estrés, sería favorable que una intervención tuviera una media menor que Control, con una diferencia respaldada por un intervalo de confianza suficientemente preciso y una magnitud relevante para la escala utilizada. Esas conclusiones se estudian después con Dunnett, y la comparación entre intervenciones se estudia con Tukey.

7.5.1 Lo que estos porcentajes no significan

  • No significan que el 89.83 % o el 88.74 % de los estudiantes haya mejorado.
  • No significan que el estrés se haya reducido en esos porcentajes respecto al inicio: el estudio no documenta aquí mediciones previas comparables.
  • No significan que los programas tengan una eficacia terapéutica de casi el 90 %.
  • No prueban por sí solos que pertenecer a un programa cause el nivel de estrés observado, porque falta documentar el diseño y la asignación de los participantes.
  • No permiten concluir cuál de las dos intervenciones es superior sin compararlas directamente.

7.5.2 ¿Debemos preocuparnos por un valor tan elevado?

No debemos descartarlo por ser grande; tampoco celebrarlo automáticamente. Un tamaño del efecto cercano a \(0.90\) es extraordinariamente elevado para muchas investigaciones psicológicas y merece revisar la procedencia de los datos, la codificación y el rango de la escala, la dispersión dentro de los grupos, la comparabilidad inicial y los supuestos del modelo. Si la base es simulada con fines didácticos, debemos señalarlo expresamente; si es real, la interpretación debe sustentarse en el diseño y la calidad de la medición.

Conclusión integrada: tanto \(\eta^2=0.8983\) como \(\omega^2=0.8874\) indican que el factor programa se asocia con diferencias globales muy grandes en los puntajes de estrés. Esto justifica estudiar con cuidado entre qué grupos ocurren, cuántos puntos representan, qué precisión tienen y si resultan psicológicamente favorables. No sustituye esas comparaciones ni demuestra eficacia causal.

Pregunta para pensar: ¿podría existir un omega cuadrado muy elevado si el grupo Control fuera el que presenta menos estrés? Sí. El tamaño del efecto mide la magnitud de las diferencias, no su dirección ni su conveniencia. Por ello es indispensable continuar con las medias y las comparaciones específicas.

8 Comparaciones múltiples: de la pregunta global a las diferencias concretas

ANOVA responde si todas las medias pueden considerarse iguales. Las comparaciones múltiples responden preguntas más específicas. La elección del método se fundamenta en el objetivo de investigación, no en buscar el valor p más pequeño.

Pregunta Procedimiento apropiado
¿Todos los grupos difieren entre sí por pares? Tukey HSD (con supuestos del ANOVA clásico).
¿Cada intervención difiere del grupo Control? Dunnett (comparaciones contra un control común).
¿Cómo funcionan las comparaciones por pares usando el error residual común y sin ajuste? Fisher LSD (DMS): comparaciones t con el cuadrado medio residual del ANOVA. Útil para enseñar la idea, pero más liberal ante comparaciones múltiples.

8.1 Tukey HSD: comparar todos los pares

Tukey es útil cuando la investigación también necesita comparar Respiración guiada vs. Mindfulness breve, además de comparar cada una con Control. Con tres grupos tenemos \(3(3-1)/2=3\) comparaciones. Los valores p e intervalos de confianza se ajustan por esa familia de comparaciones.

resultado_tukey <- TukeyHSD(modelo_estres, "programa", conf.level = 0.95)
resultado_tukey
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = estres ~ programa, data = datos_estres)

$programa
                                     diff       lwr       upr   p adj
Mindfulness breve-Respiración guiada -4.3 -5.961189 -2.638811 2.1e-06
Control-Respiración guiada            6.0  4.338811  7.661189 0.0e+00
Control-Mindfulness breve            10.3  8.638811 11.961189 0.0e+00

Tabla 4. Comparaciones de Tukey. Las diferencias se definen como primer grupo menos segundo grupo; el intervalo corresponde al 95 % de confianza simultánea.

Comparación (primero − segundo) Diferencia LI 95 % LS 95 % p ajustado
Mindfulness breve − Respiración guiada -4.3 -5.96 -2.64 <0.001
Control − Respiración guiada 6 4.34 7.66 <0.001
Control − Mindfulness breve 10.3 8.64 11.96 <0.001

Cómo leer e interpretar esta tabla:

  • Mindfulness breve frente a Respiración guiada: la diferencia estimada es -4.3 puntos. Se detecta evidencia de diferencia entre ambos grupos después del ajuste por multiplicidad. El signo de la diferencia indica cuál de las medias es mayor.
  • Control frente a Respiración guiada: la diferencia es 6 puntos. El contraste ajustado respalda una diferencia de medias entre ambos grupos. Si el contraste Control − Respiración es positivo, el Control presenta mayor estrés promedio.
  • Control frente a Mindfulness breve: la diferencia es 10.3 puntos. El contraste ajustado respalda una diferencia de medias entre ambos grupos. Si el contraste Control − Mindfulness es positivo, el Control presenta mayor estrés promedio.

Interpretación de los intervalos: cuando el intervalo simultáneo incluye el cero, la comparación correspondiente no aporta evidencia suficiente de una diferencia bilateral al 5 %. Cuando excluye el cero, la dirección del intervalo ayuda a identificar qué grupo posee mayor puntaje medio.

# Los valores de Tukey se transforman en datos solo para dibujar los intervalos.
comparaciones_tukey <- data.frame(
  comparacion = rownames(resultado_tukey$programa),
  diferencia = resultado_tukey$programa[, "diff"],
  li = resultado_tukey$programa[, "lwr"],
  ls = resultado_tukey$programa[, "upr"]
)

comparaciones_tukey$comparacion <- factor(
  comparaciones_tukey$comparacion,
  levels = rev(comparaciones_tukey$comparacion)
)

ggplot(comparaciones_tukey, aes(y = comparacion)) +
  geom_vline(xintercept = 0, linetype = "dashed",
             colour = "#E36C4E", linewidth = 0.85) +
  geom_segment(
    aes(x = li, xend = ls, yend = comparacion),
    linewidth = 2.4, colour = "#6E5ABB", alpha = 0.86
  ) +
  geom_point(aes(x = diferencia), size = 3.9,
             colour = "#0E9CA8", shape = 18) +
  labs(
    title = "Diferencias de medias: Tukey HSD",
    subtitle = "Violeta: IC simultáneo del 95 % · Rombo: diferencia estimada · Coral: cero",
    x = "Diferencia de medias (puntos de estrés)", y = NULL
  ) +
  tema_estres

Interpretación del gráfico: cada punto representa una diferencia estimada de medias y su segmento representa el intervalo de confianza simultáneo al 95 %. Los intervalos que excluyen el cero respaldan diferencias estadísticamente significativas entre los grupos correspondientes. Debemos interpretar la magnitud en puntos de estrés y el sentido de cada contraste, no solo su significación.

8.2 Fisher LSD (DMS): diferencia mínima significativa

8.2.1 ¿Qué pregunta responde y por qué incluirla?

La diferencia mínima significativa (LSD, por sus siglas en inglés) compara las medias por pares utilizando la misma estimación de varianza residual del ANOVA. Es una forma de comprender cómo una diferencia observada pasa a ser suficientemente grande respecto del error experimental para obtener evidencia estadística.

El método se enseña aquí para compararlo con Tukey y Dunnett, no para escoger automáticamente el procedimiento que proporcione más resultados significativos.

8.2.2 Fórmula y significado de sus componentes

Para los grupos \(i\) y \(j\) la diferencia observada es \(\bar Y_i-\bar Y_j\). Con un nivel de significación bilateral \(\alpha=0.05\), el umbral de Fisher es:

\[ \boxed{\mathrm{LSD}_{ij}=t_{1-\alpha/2,\,N-k}\sqrt{MC_{\mathrm{dentro}}\left(\frac{1}{n_i}+\frac{1}{n_j}\right)}} \]

  • \(t_{1-\alpha/2,\,N-k}\): valor crítico de la distribución t con los grados de libertad residuales del ANOVA.
  • \(MC_{\mathrm{dentro}}\): cuadrado medio residual, estimación común de la varianza.
  • \(n_i\) y \(n_j\): tamaños muestrales de los grupos comparados.

Regla de comparación: si \(|\bar Y_i-\bar Y_j|>\mathrm{LSD}_{ij}\), esa comparación resulta significativa al 5 % sin ajuste por multiplicidad. Si los tamaños grupales son distintos, el valor de LSD puede cambiar de un par a otro.

8.2.3 Cálculo con los datos del caso

El ANOVA tiene 27 grados de libertad residuales y un cuadrado medio residual de 2.2444. El valor crítico t bilateral es 2.0518. Esos valores permiten sustituir los componentes de la fórmula y evaluar cada diferencia.

# Comparaciones t por pares con la varianza residual común del ANOVA.
# Fisher LSD: valores p SIN ajuste por comparaciones múltiples.
# ---------------------------------------------------------
# PRUEBA LSD DE FISHER: COMPARACIÓN DE MEDIAS
# ---------------------------------------------------------

# Realizamos las comparaciones entre los programas.
# p.adj = "none": no aplica ajuste adicional por multiplicidad.
# group = TRUE: presenta las medias agrupadas con letras.

resultado_lsd <- agricolae::LSD.test(
  modelo_estres,
  "programa",
  p.adj = "none",
  group = TRUE
)

# Presentamos las medias y las letras en una tabla.

knitr::kable(
  resultado_lsd$groups,
  digits = 2,
  caption = "Comparación de medias mediante LSD de Fisher"
)
Comparación de medias mediante LSD de Fisher
estres groups
Control 34.5 a
Respiración guiada 28.5 b
Mindfulness breve 24.2 c

Tabla 5. Comparaciones de Fisher LSD (sin ajuste). El intervalo corresponde al 95 % de confianza individual, no simultánea.

Comparación (primero − segundo) Diferencia LSD crítico IC 95 % individual Valor p sin ajuste
Mindfulness breve − Respiración guiada -4.3 1.37 [-5.67, -2.93]
Control − Respiración guiada 6 1.37 [4.63, 7.37]
Control − Mindfulness breve 10.3 1.37 [8.93, 11.67]

8.2.4 Interpretación aplicada

  • Mindfulness breve frente a Respiración guiada: la diferencia es -4.3 puntos, frente a una LSD crítica de 1.37. La diferencia supera el umbral de Fisher LSD y es significativa sin ajuste.
  • Control frente a Respiración guiada: la diferencia es 6 puntos y la LSD crítica es 1.37. La comparación es significativa sin ajuste. Una diferencia positiva indica mayor estrés medio en Control.
  • Control frente a Mindfulness breve: la diferencia es 10.3 puntos y la LSD crítica es 1.37. La comparación es significativa sin ajuste. Una diferencia positiva indica mayor estrés medio en Control.

Advertencia importante: algunas variantes utilizan el criterio de aplicar LSD solamente después de un ANOVA global significativo (LSD «protegido»). Incluso así, con más de dos grupos el control del error familiar puede ser insuficiente frente a métodos como Tukey o Dunnett. Por eso, no debemos interpretar un resultado significativo exclusivamente con LSD si no se sostiene con el procedimiento seleccionado según la pregunta de investigación.

Comparación didáctica: Tukey controla las tres comparaciones simultáneamente; Dunnett controla específicamente las dos comparaciones con Control; Fisher LSD utiliza pruebas individuales sin un ajuste equivalente. Que el valor p de LSD sea menor no significa que el efecto sea mayor, sino que cambia la protección frente a múltiples contrastes.

8.3 Dunnett: comparar específicamente las intervenciones con Control

Si la decisión del equipo de Psicología es determinar si cada intervención presenta un puntaje medio diferente al del Control, Dunnett responde de forma más directa: compara Respiración guiada con Control y Mindfulness breve con Control, sin efectuar una comparación innecesaria entre las dos intervenciones.

Este procedimiento ajusta simultáneamente la inferencia de las comparaciones que comparten el mismo grupo de referencia. La hipótesis de cada contraste es \(H_0:\mu_{\text{intervención}}-\mu_{\text{Control}}=0\). Aquí utilizamos contrastes bilaterales.

Para que R interprete correctamente las diferencias, debemos convertir Control en categoría de referencia. Esto no modifica los datos ni las medias: únicamente fija el orden y el sentido de los contrastes.

datos_dunnett <- datos_estres |>
  dplyr::mutate(programa = relevel(programa, ref = "Control"))

modelo_dunnett <- aov(estres ~ programa, data = datos_dunnett)

resultado_dunnett <- multcomp::glht(
  modelo_dunnett,
  linfct = multcomp::mcp(programa = "Dunnett")
)

summary(resultado_dunnett)

     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = estres ~ programa, data = datos_dunnett)

Linear Hypotheses:
                                  Estimate Std. Error t value Pr(>|t|)    
Respiración guiada - Control == 0    -6.00       0.67  -8.955 2.85e-09 ***
Mindfulness breve - Control == 0    -10.30       0.67 -15.373  < 1e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Adjusted p values reported -- single-step method)
confint(resultado_dunnett)

     Simultaneous Confidence Intervals

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = estres ~ programa, data = datos_dunnett)

Quantile = 2.3335
95% family-wise confidence level
 

Linear Hypotheses:
                                  Estimate lwr      upr     
Respiración guiada - Control == 0  -6.0000  -7.5635  -4.4365
Mindfulness breve - Control == 0  -10.3000 -11.8635  -8.7365

Tabla 6. Comparaciones de Dunnett frente a Control. Cada diferencia se calcula como intervención menos Control.

Contraste Diferencia (puntos) LI 95 % LS 95 % p ajustado
Respiración guiada − Control -6 -7.56 -4.44 <0.001
Mindfulness breve − Control -10.3 -11.86 -8.74 <0.001

Interpretación para la investigación:

  • Respiración guiada: el puntaje medio difiere del Control en -6 puntos (intervención − Control). Existe evidencia de diferencia estadísticamente significativa después del ajuste de Dunnett. La media observada es menor que la del Control, una dirección favorable si menos puntos indican menos estrés.
  • Mindfulness breve: el puntaje medio difiere del Control en -10.3 puntos (intervención − Control). Existe evidencia de diferencia estadísticamente significativa después del ajuste de Dunnett. La media observada es menor que la del Control, una dirección favorable si menos puntos indican menos estrés.

Interpretación psicológica y decisión: una media inferior al Control es una dirección favorable, pero debe acompañarse de evidencia inferencial, precisión suficiente y una valoración de relevancia práctica según el instrumento usado. Si una comparación no es significativa, ello no demuestra equivalencia ni ausencia de efecto. Para sostener que una intervención reduce causalmente el estrés se necesita además un diseño adecuado.

Error frecuente. Concluir que una intervención es superior a otra porque una presenta \(p<0.05\) frente al Control y la otra no. Para afirmar superioridad entre intervenciones debemos contrastarlas directamente (por ejemplo, con Tukey).

9 Síntesis integral y decisión fundada

Primera pregunta: ¿existen diferencias globales? Sí. El ANOVA del caso informa \(F(2,27)=119.243\), \(p<0.001\), lo cual indica que no todas las medias poblacionales son iguales.

Segunda pregunta: ¿son diferencias de magnitud importante? Sí, en términos estadísticos. Eta cuadrado (\(\eta^2=0.8983\), 89.83 %) y omega cuadrado (\(\omega^2=0.8874\), 88.74 %) son muy grandes y revelan una asociación global extraordinariamente elevada. No significa que casi el 90 % de estudiantes mejoró ni que el programa reduzca el estrés un 90 %: falta conocer la dirección y relevancia de las comparaciones y la validez del diseño para inferir causalidad.

Tercera pregunta: ¿dónde se observan las diferencias? Las Tablas 4, 5 y 6 presentan, respectivamente, Tukey (todos los pares con ajuste), Fisher LSD (todos los pares sin ajuste) y Dunnett (cada intervención frente a Control con ajuste). Para una conclusión principal debemos utilizar el método correspondiente a la pregunta científica y considerar conjuntamente diferencia de medias, intervalo de confianza y valor p ajustado, cuando corresponda, además del significado práctico de los puntos en la escala de estrés.

Cuarta pregunta: ¿qué podemos decidir? El equipo puede identificar qué grupos presentan menores puntajes medios en la muestra y qué comparaciones cuentan con evidencia estadística. Para recomendar un programa como intervención eficaz necesita conocer el diseño del estudio, la comparabilidad inicial de los participantes, la calidad del instrumento, los posibles efectos adversos y la relevancia psicológica de las diferencias observadas.

Conclusión: el análisis ofrece evidencia sólida de diferencias globales entre los tres grupos estudiados y una asociación de gran magnitud entre grupo y puntaje de estrés. Las comparaciones específicas deben interpretarse con los valores de las Tablas 4, 5 y 6 y priorizar el método inferencial elegido por el objetivo del estudio. Aun si una intervención difiere significativamente del Control, no es correcto presentar ese hallazgo, por sí solo, como una reducción causal del estrés sin información adicional sobre el diseño y la medición.

10 Preguntas para discutir en clase

  1. ¿Por qué el ANOVA no puede decirnos por sí solo cuál de las intervenciones presenta menor estrés que el Control?
  2. ¿Por qué \(\eta^2=0.8983\) y \(\omega^2=0.8874\) se consideran muy grandes? Explique por qué no significan que «casi el 90 % de estudiantes mejoró» ni que «el estrés se redujo casi un 90 %».
  3. Si una diferencia de 2 puntos es estadísticamente significativa, ¿qué información adicional necesitamos antes de considerarla psicológicamente relevante?
  4. Si Levene indica heterogeneidad importante de varianzas, ¿por qué no bastaría con ignorar el resultado y continuar mecánicamente con Tukey?
  5. ¿Por qué «no significativo» no es equivalente a «los programas son iguales»?
  6. ¿Cómo cambiaría la estrategia analítica si se hubiera medido a los mismos estudiantes antes y después de la intervención?

11 Referencias bibliográficas

  • Dunnett, C. W. (1955). A multiple comparison procedure for comparing several treatments with a control. Journal of the American Statistical Association, 50(272), 1096–1121.
  • Hothorn, T., Bretz, F., & Westfall, P. (2008). Simultaneous inference in general parametric models. Biometrical Journal, 50(3), 346–363.
  • Lakens, D. (2013). Calculating and reporting effect sizes to facilitate cumulative science: A practical primer for t-tests and ANOVAs. Frontiers in Psychology, 4, 863.
  • Montgomery, D. C. (2017). Design and analysis of experiments (9th ed.). Wiley.
  • Morales, J., & Martínez, M. A. (2021). Modelos estadísticos. Universidad Miguel Hernández de Elche.

Nota de reproducibilidad. La ruta de Excel se ha preservado exactamente como en el documento original. El QMD entregado no incluye la base .xlsx; por ello, los estadísticos de Shapiro, Levene, descriptivos y comparaciones de Tukey, Fisher LSD y Dunnett se incorporan mediante expresiones en línea que se resuelven al generar el HTML en la computadora que dispone del Excel. Los valores globales \(F(2,27)=119.243\), \(\eta^2\approx0.8983\) y \(\omega^2\approx0.8874\) provienen de los resultados ya comunicados para este caso y deben concordar con el archivo original al ejecutarlo.