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.
#Gráfica 1
#Se necesita el paquete pwr
if(!require(pwr)){install.packages("pwr");library("pwr")}
# t-TEST
# Se aplicará power.t.test del paquete stats (ya en R). Calcula la potencia de la prueba t de una o dos muestras, o determina los parámetros para obtener un valor particular de la potencia.
d<-seq(.1,2,by=.1) # 20 tamaños de los efectos
n<-1:150 # Tamaños muestrales
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=0.05,power=NULL,type= "two.sample")$power
})
})))
# Si algunas potencias no se pueden calcular, se ajustan a cero:
t.test.power.effect[is.na(t.test.power.effect)] <- 0
colnames(t.test.power.effect)<-paste (d,"effect size")
#Graficando los resultados
prueba <-t.test.power.effect #data frame de 150 X 20 (para graficar)
cuts_num<-c(2,5,8) # cortes
#Cortes basados en: Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Hillsdale, NJ: Lawrence Erlbaum Associates, Publishers.
cuts_cat<-c("pequeño","medio","grande")
columnas <- 1:ncol(prueba) #Lista de los valores 1:20
color_linea<-rainbow(length(columnas), alpha=.5) # Lista de 20 colores
grosor_linea=3 # Grosor de la línea
#Para el tipo de línea: (“blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, “twodash”) ó (0, 1, 2, 3, 4, 5, 6).
#Note que lty = “solid” is idéntica a lty=1.
tipo_linea <- rep(1,length(color_linea)) #Repetir length(color)=20 veces el 1
tipo_linea[cuts_num]<-c(2:(length(cuts_num)+1)) #Asignar 2, 3, 4 en las posiciones 2, 5, 8 de tipo_linea
#Resaltar posiciones importantes
cuts_num<-c(2,5,8) # Cortes
#Cortes basados en: Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Hillsdale, NJ: Lawrence Erlbaum Associates, Publishers.
cuts_cat<-c("pequeño","medio","grande")
color_linea[cuts_num]<-c("black")
efecto <- d # Listado de los 20 valores de 20
efecto[cuts_num] <- cuts_cat #Reemplazar en "efecto" las posiciones cuts_num (2, 5, 8) por las categorías de cuts_cat
par(fig=c(0,.8,0,1),new=TRUE)
## Warning in par(fig = c(0, 0.8, 0, 1), new = TRUE): llamada par(new=TRUE) sin
## gráfico
#Gráfica
plot(1, type="n", #no produce puntos ni líneas
frame.plot=FALSE,
xlab="Tamaño muestral", ylab="Potencia",
xlim=c(1,150), ylim=c(0,1),
main="t-Test", axes = FALSE)
#Editando los ejes, grid, etc.
abline(v=seq(0,150,by=10), col = "lightgray", lty = "dotted") # Grid vertical
abline(h=seq(0,1,by=.05), col = "lightgray", lty = "dotted") # Grid horizontal
axis(1,seq(0,150,by=10)) # Números en eje X
axis(2,seq(0,1,by=.05)) # Números en eje Y
#Plot de las lineas
#columnas <- 1:ncol(prueba) # lista de los valores 1:20
for(i in 1:length(columnas)) #length(columnas)=20
{
lines(1:150,
#prueba (data frame de 150 X 20, para graficar)
#columna <- 1:ncol(prueba) listado de valores 1:20
prueba[,columnas[i]], #filtrar "prueba" para valor de columna
col=color_linea[i], #color_linea[cuts_num]<-c("black")
lwd=grosor_linea, #grosor de cada linea
lty=tipo_linea[i] #tipo_linea[cuts_num]<-c(2:(length(cuts_num)+1))
)
}
#Leyendas
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" #Opciones: o (complete box), n (no box), 7, L, C, U
)
#Gráfica 2
#plot using ggplot2
#library(ggplot2)
#library(reshape)
#library(plotly)
obj <- cbind(size=1:150, prueba) #Agregando el tamaño al data frame "prueba"
# Usar melt y unir con "effect" para el mapeo
#El data frame "obj" se reconstruye con respecto al parámetro id="size".
melted <- cbind(reshape::melt(obj, id="size"), effect=rep(d,each=150))
p<- ggplot(data=melted, aes(x=size, y=value, color=as.factor(effect))) +
geom_line(size=0.7,alpha=.5) +
ylab("Potencia") +
xlab("Tamaño muestral") +
ggtitle("t-Test")+
theme_bw() +
#guides(fill=guide_legend(title="Efecto"))
#scale_fill_discrete(name = "Efecto")
#labs(fill='Efecto')
#scale_fill_manual("Efecto"#,values=c("orange","red")
scale_color_discrete(name = "Tamaño del efecto")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Interactive plot
plotly::ggplotly(p)
En la gráfica anterior se observa como varía la potencia de la prueba t en función de d (tamaño del efecto) y n (tamaño de la muestra).
Se puede concluir que:
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 α=0.05). Para ello, se considera 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 trazaron 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 es una representación visual útil de este análisis. En la figura también se trazó 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 dados tamaños de grupo altamente desequilibrados de n1=28 y n2=1406, en comparación con todos los demás escenarios que conducen al 100% de potencia. Repite 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) #Para manipulación de datos: separate, gather, spread
#library(ggplot2)
#library(plotly) #Para curvas de potencias interactivas
#library(pwr) #Para cálculo de las potencias
#Generar cálculos de las potencias con la funcion pwr.t2n.test.
#Es un t-test para 2 muestras con tamaños diferentes
#Aquí: d es el tamaño del efecto, Power= potencia de la prueba= 1-beta):
#pwr.t2n.test(n1 = NULL, n2= NULL, d = NULL, sig.level = 0.05, power = NULL, alternative = c("two.sided", "less","greater"))
ptab <- cbind(NULL, NULL)
for (i in seq(0,1, length.out = 200)){
pwrt1 <- pwr.t2n.test(n1 = 28, n2 = 1406,
sig.level = 0.05, power = NULL,
d = i, alternative="two.sided")
pwrt2 <- pwr.t2n.test(n1 = 144, n2 = 1290,
sig.level = 0.05, power = NULL,
d = i, alternative="two.sided")
pwrt3 <- pwr.t2n.test(n1 = 287, n2 = 1147,
sig.level = 0.05, power = NULL,
d = i, alternative="two.sided")
pwrt4 <- pwr.t2n.test(n1 = 430, n2 = 1004,
sig.level = 0.05, power = NULL,
d = i, alternative="two.sided")
pwrt5 <- pwr.t2n.test(n1 = 574, n2 = 860,
sig.level = 0.05, power = NULL,
d = i, alternative="two.sided")
pwrt6 <- pwr.t2n.test(n1 = 717, n2 = 717,
sig.level = 0.05, power = NULL,
d = i, alternative="two.sided")
#Es un data frame de tamaño 200 por 12:
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))
}
#Es un data frame de tamaño 200 por 13 (la 1ra columna es ID)
ptab <- cbind(seq_len(nrow(ptab)), ptab)
colnames(ptab) <- c("id","n1=28, n2=1406;effect size","n1=28, n2=1406;power",
"n1=144, n2=1290;effect size","n1=144, n2=1290;power",
"n1=287, n2=1147;effect size","n1=287, n2=1147;power",
"n1=430, n2=1004;effect size","n1=430, n2=1004;power",
"n1=574, n2=860;effect size","n1=574, n2=860;power",
"n1=717, n2=717;effect size","n1=717, n2=717;power")
#gather se usa para "reunir" un par key-value. En este caso, en 3 columnas: ID, variables y respuestas numericas
temp1 <- ptab %>% as.data.frame() %>% gather(key = name, value = val, 2:13)
#Separar celdas en columnas, de acuerdo a una condición (sep=). En este caso, se separó "name" en dos columnas: samples y pruebas
temp2 <- temp1 %>% separate(col = name, into = c("samples", "pruebas"), sep = ";")
#La función spread hace lo opuesto a gather. Son funciones complementarias.
#Es decir, si al resultado de aplicar la función spread le aplicamos la función gather llegamos al dataset original.
temp3 <- temp2 %>% spread(key = pruebas, value = val)
#Convertir la variable "samples" a factor.
temp3$samples <- factor(temp3$samples,
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")
)
#Gráfica
p<- ggplot(temp3, aes(x = `effect size`, y = power, color = samples)) +
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="Effect size", y="Power") +
scale_color_discrete(name = "Sampling size")
# so simple to make interactive plots
plotly::ggplotly(p)
Sobre la relación entre la potencia y el tamaño del efecto,
pudimos observar que para todas las combinaciones de tamaños muestrales,
conforme el tamaño aumenta, la potencia también aumenta, además, para
tamaños de efecto pequeños, la potencia es más baja, es decir, que es
complejo detectar diferencias estadísticamente significativas con estos
efectos pequeños.
Con los resultados de este caso tambien pudimos determinar las siguientes conclusiones: