#install.packages("dplyr")
#install.packages("tidyr")
#install.packages("ggplot2")
#install.packages("plotly")
#install.packages("pwr")
#install.packages("magick")
#install.packages("scales")

Problema 5

Christian David Vera Mendivelso
Paula Vidal Godoy

Métodos y Simulación estadística
Maestría en Ciencia de Datos
Pontificia Universidad Javeriana de Cali


Actividad 5

El “efecto del tamaño” (o “tamaño del efecto”, en inglés “effect size”) en el contexto de la prueba de hipótesis se refiere a la magnitud de la diferencia o la fuerza de la relación que se está investigando entre las variables. En otras palabras, mide la cantidad de cambio o la importancia práctica de los resultados, más allá de simplemente determinar si una diferencia es estadísticamente significativa. El tamaño del efecto es crucial porque, incluso si una prueba estadística muestra que un resultado es significativo (es decir, rechazas la hipótesis nula), el tamaño del efecto te dice si esa diferencia es realmente importante en un sentido práctico o clínico. Por ejemplo, un estudio podría encontrar que un nuevo medicamento reduce la presión arterial de manera estadísticamente significativa, pero el tamaño del efecto te indicaría si la reducción es lo suficientemente grande como para tener relevancia clínica. En resumen, el tamaño del efecto proporciona una medida complementaria a la significancia estadística, ayudando a interpretar el verdadero impacto o importancia de los resultados encontrados.

En este problema, nos centraremos en una aplicación que requiere la aplicación de la prueba t de Student para comparar las medias entre dos grupos. En este contexto evaluaremos cómo el efecto de los tamaños o las diferencias en los tamaños muestrales de los grupos influyen en la potencia de la prueba. De manera formal, la potencia se define como la probabilidad de rechazar la hipótesis nula cuando la hipótesis alternativa es verdadera. De forma más coloquial, la potencia es la capacidad de una prueba estadística para identificar un efecto si este realmente existe. En general, desequilibrios muy marcados en los tamaños de muestra tienden a reducir la potencia estadística, incluso cuando se asocian con tamaños de efecto considerables, lo que aumenta la probabilidad de cometer un error de tipo II. Para fundamentar esta afirmación, debes analizar diferentes resultados computacionales que se presentan a continuación.


Caso 1: Variando los tamaños de los efectos (d)

En los códigos del archivo llamado caso1.R, para cada tamaño fijo de los efectos d , se modela la relación entre el tamaño muestral y la potencia (manteniendo constante el nivel de significancia α=0.05). En las figuras se visualizan los resultados para tamaño de efecto muy pequeño (d=0.1), pequeño (d=0.2), mediano (d=0.5) y grande (d=0.8). Repite el análisis usando 5 valores distintos del nivel de significancia. ¿Cambian los resultados? ¿Qué ocurre cuando el tamaño de muestra de los grupos que se comparan es de 20, 60, 100 y 140? Analiza y compara los resultados.

library(magick)

# Define los niveles de significancia
significance_levels <- c(0.01, 0.025, 0.05, 0.1, 0.2)

# Define el vector de colores para las líneas
color_linea <- rainbow(length(columnas), alpha=.5) 
color_linea[cuts_num] <- c("black")

# Definir el grosor de la línea y los tipos de línea
grosor_linea <- 3
tipo_linea <- rep(1,length(color_linea))
tipo_linea[cuts_num] <- c(2:(length(cuts_num)+1))

# Bucle para crear gráficas para cada nivel de significancia
for (sig in significance_levels) {
  t.test.power.effect <- as.data.frame(do.call("cbind", lapply(1:length(d), function(i) {
    sapply(1:length(n), function(j) {
      power.t.test(n=n[j], d=d[i], sig.level=sig, power=NULL, type="two.sample")$power})})))
  
  # Ajustar NA a cero
  t.test.power.effect[is.na(t.test.power.effect)] <- 0 
  colnames(t.test.power.effect) <- paste(d, "effect size")
  
  # Graficar
  prueba <- t.test.power.effect
  
  png(filename = paste0("t_test_power_sig_", sig, ".png"), width = 800, height = 600)
  
  par(fig=c(0,.8,0,1), new=TRUE)
  
  plot(1, type="n", frame.plot=FALSE, xlab="Tamaño muestral", ylab="Potencia", 
       xlim=c(1, 150), ylim=c(0, 1), main=paste("t-Test (Nivel de significancia =", sig, ")"), axes = FALSE)
  
  abline(v=seq(0,150,by=10), col="lightgray", lty="dotted") 
  abline(h=seq(0,1,by=.05), col="lightgray", lty="dotted") 
  axis(1, seq(0, 150, by=10))
  axis(2, seq(0, 1, by=.05))
  
  for (i in 1:length(columnas)) {
    lines(1:150, prueba[,columnas[i]], col=color_linea[i], lwd=grosor_linea, lty=tipo_linea[i])}
  
  par(fig=c(.65,1,0,1), new=TRUE)
  plot.new()
  legend("top", legend=efecto, col=color_linea, lwd=3, lty=tipo_linea, title="Tamaño efecto", bty="n")
  dev.off()}


# Crear el GIF con las imágenes generadas
img_list <- list()
for (sig in significance_levels) {
  img_list <- c(img_list, image_read(paste0("t_test_power_sig_", sig, ".png")))}

# Combinar imágenes en un GIF
gif <- image_animate(image_join(img_list), fps=1)
image_write(gif, "Grafico_1.gif")

Fig 1. Potencia del t-Test para distintos niveles de significancia y tamaños de efecto

Respuesta Caso 1:

¿Cambian los resultados?

En la figura 1 se muestra que existe una relación entre la significancia y la potencia, al presentarse mayores niveles significancia, la probabilidad de rechazar la hipótesis nula se incrementa, lo cual genera que se aumente la potencia puesto que se incrementa la probabilidad de detectar cualquier efecto aunque se incrementa el riesgo de cometer un error Tipo I, es decir, rechazar la hipótesis nula cuando en realidad es verdadera, por lo cual es relevante equilibrar el nivel de significancia y la potencia para disponer de una mejor validez cuando se realiza las conclusiones de un estudio..

¿Qué ocurre cuando el tamaño de muestra de los grupos que se comparan es de 20, 60, 100 y 140?

A medida que se incrementa el tamaño de la muestra, manteniendo constante un nivel de significancia, se evidencia que la potencia de la prueba se incrementa, esto a causa de entre mayor sea la cantidad de datos se reduce la variabilidad aleatoria. Al incrementar los tamaños de muestra también se reduce los errores estándar, que se encuentra directamente relacionado con el tamaño de la muestra.


Caso 2: Análisis de Potencia en la Prueba t de Student

En los códigos del archivo llamado caso2.R, se modela la relación entre el tamaño del efecto \(d\) y la potencia, manteniendo constante el nivel de significancia \(\alpha = 0.05\). Para ello, se consideran los siguientes tamaños de muestra, donde \(n1\) es el número de sujetos en el grupo 1 y \(n2\) es el número de sujetos en el grupo 2:

  • \(n1=28\), \(n2=1406\): \(n1\) representa el 2 % del tamaño total de la muestra de 1434.
  • \(n1=144\), \(n2=1290\): \(n1\) representa el 10 % del tamaño total de la muestra de 1434.
  • \(n1=287\), \(n2=1147\): \(n1\) representa el 20 % del tamaño total de la muestra de 1434.
  • \(n1=430\), \(n2=1004\): \(n1\) representa el 30 % del tamaño total de la muestra de 1434.
  • \(n1=574\), \(n2=860\): \(n1\) representa el 40 % del tamaño total de la muestra de 1434.
  • \(n1=717\), \(n2=717\): Grupos de igual tamaño (esto es óptimo porque conduce a la potencia más alta para un tamaño de efecto dado).

En la figura resultante, se trazan las curvas de potencia para la prueba t de Student en función del tamaño del efecto, asumiendo una tasa de error Tipo I del 5 %. La comparación de diferentes curvas de potencia (basadas en el tamaño de la muestra de cada grupo) en el mismo gráfico proporciona una representación visual útil de este análisis.

En la figura también se traza una línea discontinua horizontal en un nivel de potencia aceptable del 80 % y una línea vertical en el tamaño del efecto que tendría que estar presente en nuestros datos para alcanzar el 80 % de potencia. Se observa que el tamaño del efecto debe ser superior a 0.54 para alcanzar un nivel de potencia aceptable dado tamaños de grupo altamente desequilibrados como \(n1=28\) y \(n2=1406\), en comparación con todos los demás escenarios que conducen al 100 % de potencia. Se repitió el análisis usando 5 valores distintos del nivel de significancia. ¿Cambian los resultados? ¿Qué ocurre cuando \(n1=28\) y \(n2=1406\)? Analiza y compara los resultados.

library(dplyr)    
library(tidyr)    
library(ggplot2)  
library(plotly)   
library(pwr)      
library(magick)
library(scales)

# Definir los niveles de significancia
niveles_significancia <- c(0.01, 0.025, 0.05, 0.15, 0.2)

#Guardar los gráficos
plot_list <- list()

# gráficos por nivel de significancia
for (sig in niveles_significancia) {
  
  # potencias con pwr.t2n.test para cada nivel de significancia
  ptab <- cbind(NULL, NULL)       
  for (i in seq(0, 1, length.out = 200)){
    pwrt1 <- pwr.t2n.test(n1 = 28, n2 = 1406, sig.level = sig, power = NULL, d = i, alternative="two.sided")
    pwrt2 <- pwr.t2n.test(n1 = 144, n2 = 1290, sig.level = sig, power = NULL, d = i, alternative="two.sided")
    pwrt3 <- pwr.t2n.test(n1 = 287, n2 = 1147, sig.level = sig, power = NULL, d = i, alternative="two.sided")
    pwrt4 <- pwr.t2n.test(n1 = 430, n2 = 1004, sig.level = sig, power = NULL, d = i, alternative="two.sided")
    pwrt5 <- pwr.t2n.test(n1 = 574, n2 = 860, sig.level = sig, power = NULL, d = i, alternative="two.sided")
    pwrt6 <- pwr.t2n.test(n1 = 717, n2 = 717, sig.level = sig, power = NULL, d = i, alternative="two.sided")
    
    ptab <- rbind(ptab, cbind(pwrt1$d, pwrt1$power,
                              pwrt2$d, pwrt2$power,
                              pwrt3$d, pwrt3$power,
                              pwrt4$d, pwrt4$power,
                              pwrt5$d, pwrt5$power,
                              pwrt6$d, pwrt6$power))}
  
  ptab <- cbind(seq_len(nrow(ptab)), ptab)
  colnames(ptab) <- c("id", "n1=28, n2=1406;tamaño del efecto", "n1=28, n2=1406;potencia",
                      "n1=144, n2=1290;tamaño del efecto", "n1=144, n2=1290;potencia",
                      "n1=287, n2=1147;tamaño del efecto", "n1=287, n2=1147;potencia",
                      "n1=430, n2=1004;tamaño del efecto", "n1=430, n2=1004;potencia",
                      "n1=574, n2=860;tamaño del efecto", "n1=574, n2=860;potencia",
                      "n1=717, n2=717;tamaño del efecto", "n1=717, n2=717;potencia")

  # Transformar el data frame para graficar
  temp1 <- ptab %>% as.data.frame() %>% gather(key = name, value = val, 2:13)
  temp2 <- temp1 %>% separate(col = name, into = c("muestras", "medidas"), sep = ";")
  temp3 <- temp2 %>% spread(key = medidas, value = val)
  
  temp3$muestras <- factor(temp3$muestras, 
                          levels = c("n1=28, n2=1406", "n1=144, n2=1290", 
                                     "n1=287, n2=1147", "n1=430, n2=1004",
                                     "n1=574, n2=860", "n1=717, n2=717"))
  
  # Generar el gráfico
  p <- ggplot(temp3, aes(x = `tamaño del efecto`, y = potencia, color = muestras)) +
    geom_line(size = 1) +
    theme_bw() +
    theme(axis.text = element_text(size = 10), 
          axis.title = element_text(size = 10), 
          legend.text = element_text(size = 10)) +
    geom_vline(xintercept = .54, linetype = 2) +
    geom_hline(yintercept = 0.80, linetype = 2) +
    labs(x = "Tamaño del efecto", y = "Potencia", title = paste("Nivel de significancia =", sig)) +
    scale_color_discrete(name = "Tamaño de muestra") +
    scale_y_continuous(limits = c(0, 1), expand = c(0, 0))
  
  # Guardar el gráfico en la lista
  plot_list[[paste0("sig_", sig)]] <- p
  
  # Guardar imagenes PNG
  ggsave(filename = paste0("power_curve_", sig, ".png"), plot = p, width = 8, height = 6)}

# Crear GIF magick
img_list <- list()

# Cargar las imágenes generadas
for (sig in niveles_significancia) {
  img <- image_read(paste0("power_curve_", sig, ".png"))
  img_list <- append(img_list, list(img))}

# Combinar las imágenes en un GIF
img_gif <- image_animate(image_join(img_list), fps = 1)

# Guardar el GIF
image_write(img_gif, "GRAFICA2.gif")

Fig 2. Curvas de potencia del t-Test para diferentes niveles de significancia.

Respuesta Caso 2:

En la figura 2 se muestra que a medida que se aumenta el nivel de significancia la potencia se incrementa para todos los tamaños de muestra evaluados dado que es mas probable rechazar la hipotesis nula y obtener resultados estadisticamente significativos, evidenciando que se precisa de un tamaño de efecto menor para conseguir nivel de potencia adecuado del 80%.

En el caso de n1=28 y n2=1406, se requiere un nivel de significancia de 0.05 para alcanzar una potencia del 80%. Este es el único tamaño de muestra evaluado que no alcanza una potencia del 80% al nivel de significancia mínimo. Por otro lado, para n1=717 y n2=717, incluso con el nivel de significancia más bajo, se garantiza una potencia del 80%, lo que demuestra que muestras más grandes aumentan la probabilidad de detectar diferencias pequeñas.