# Instalar el paquete si no lo instalaste antes
if (!requireNamespace("pwr", quietly = TRUE)) install.packages("pwr")
# Cargar el paquete
library(pwr)¿Cuántas observaciones necesito para poner a prueba mi hipótesis?
Cálculo del tamaño muestral - Parte 1

Por qué calcular el tamaño de la muestra
¿Alguna vez te preguntaste cuántas observaciones necesitás para poner a prueba tu hipótesis? Me refiero a qué número concreto, defendible, que puedas escribir en un protocolo de investigación o justificar ante un comité de ética necesitás. Esa pregunta tiene respuesta, y se llama análisis de poder.
La intuición detrás es simple: si testeás muy pocos casos, corrés el riesgo de no detectar un efecto que realmente existe, aunque tu hipótesis sea correcta. Si testeás de más, estás gastando tiempo, plata, o exponiendo a más participantes de los necesarios a un estudio. El análisis de poder te da el n mínimo razonable para tener una buena chance de detectar el efecto que te interesa, dado lo que ya sabés (o suponés) sobre su tamaño.
El objetivo de este tutorial es entender cómo podemos calcularlo para los diseños más comunes (comparar dos grupos (t de Student), comparar más de dos grupos (ANOVA), correlación y regresión lineal) y como podemos aplicarlo usando R. En una segunda parte, vamos a extender esto a modelos mixtos, pero vayamos por partes.
La lógica de la prueba de hipótesis
Imaginemos que nos interesa saber si un método de enseñanza basado en práctica de recuperación (hacer que los estudiantes se autoevalúen activamente) produce mejores resultados en un examen que el método tradicional (relectura). No tenemos acceso a la población completa, no podemos testear a todos los estudiantes, pero podemos acceder a una muestra, y en base a ella tomar una decisión sobre nuestra hipótesis y esa decisión puede coincidir con la realidad o no.
Cuando realizamos un test de hipótesis, la decisión se toma en base a si la evidencia nos permite o no rechazar la llamada hipótesis nula o hipótesis del no efecto. En el caso de nuestro ejemplo:
\(H_0\) (hipótesis nula): no hay diferencia en el puntaje promedio de examen entre el método tradicional y la práctica de recuperación. Es igual a decir que el método de estudio no tiene efecto sobre el puntaje promedio del examen.
\(H_1\) (hipótesis alternativa): la práctica de recuperación produce un puntaje promedio distinto que el método tradicional, es decir, el método de estudio sí tiene un efecto sobre el puntaje promedio del examen.
Ahora, decidir rechazar o no rechazar \(H_0\) en base a una muestra siempre deja abierta la posibilidad de equivocarse y hay dos formas distintas de equivocarse:
- Podemos concluir que el nuevo método funciona mejor (hay diferencias en nuestra muestra) cuando en realidad no es así (no hay diferencias reales en la población): es un falso positivo.
- Podemos concluir que no hay evidencia de mejora (en nuestra muestra) cuando el método en realidad sí funciona: es un falso negativo.
Entonces tenemos cuatro escenarios posibles:
| H0 es verdadera (los dos métodos son igual de efectivos) |
H0 es falsa (la práctica de recuperación sí funciona mejor) |
|
|---|---|---|
| No rechazo H0 (concluyo “no hay evidencia de diferencia”) |
Decisión correcta — Nivel de confianza (1−\(\alpha\)) | Error de Tipo II — probabilidad \(\beta\) |
| Rechazo H0 (concluyo “la práctica de recuperación es mejor”) |
Error de Tipo I — \(\alpha\) (nivel de significación) | Decisión correcta — Poder (1−\(\beta\)) |
Error de Tipo I (\(\alpha\)): rechazar \(H_0\) siendo verdadera, el falso positivo de arriba. La probabilidad de cometer este tipo de error es \(\alpha\), es el nivel de significación que definimos nosotros de antemano y que, por convención, suele ser 0.05. Esto implica que aceptamos un 5% de probabilidad de recomendar el nuevo método sin que realmente sea mejor.
Nivel de confianza (1−\(\alpha\)): el complemento del nivel de significación, y habla de la probabilidad de no rechazar \(H_0\) cuando efectivamente es verdadera. Con \(\alpha\) = 0.05, el nivel de confianza es 95%.
Error de Tipo II (\(\beta\)): Nos habla de la probabilidad de no rechazar \(H_0\) siendo falsa. Es el falso negativo. A diferencia de \(\alpha\), \(\beta\) no se fija de antemano, sino que depende del tamaño real de la diferencia entre métodos, del tamaño muestral y de la varianza. Por eso, en la mayoría de los casos, no se puede calcular \(\beta\) con precisión sin antes asumir un tamaño del efecto específico.
Poder (1−\(\beta\)): es el complemento de \(\beta\), la probabilidad de detectar correctamente que la práctica de recuperación sí funciona mejor, dado que efectivamente funciona mejor. Es el poder de nuestra prueba de hipótesis. Esta es la casilla que nos interesa maximizar, y es lo que vamos a calcular durante el resto del tutorial.
Los riesgos de ambos errores están relacionados. A igual tamaño muestral, bajar \(\alpha\) (exigir más evidencia antes de declarar que el método nuevo funciona) generalmente sube \(\beta\) (aumenta el riesgo de no detectar una mejora real). La única forma de bajar ambos simultáneamente es aumentar el tamaño muestral, es decir, testear a más estudiantes. Y ese es, en el fondo, el problema que resuelve un análisis de poder: dado un \(\alpha\) que estamos dispuestos a aceptar y una diferencia (efecto) que nos interesa detectar, ¿qué n necesitamos para tener un \(\beta\) aceptablemente bajo?
¿Qué es el poder estadístico de la prueba?
Sigamos con nuestro ejemplo. Supongamos que en base a una prueba piloto pequeña que realizamos, tenemos una primera estimación. El grupo que estudió con el método tradicional obtuvo un puntaje medio de 70 en el examen, con un desvío estándar de 10; en cambio, quienes utilizaron la práctica de recuperación obtuvieron un puntaje medio de 75 (mismo desvío). Con estos números ya podemos preguntarnos directamente cuántos estudiantes necesitamos para tener una buena chance de detectar esa diferencia de 5 puntos, si realmente existe en la población.
Esa “buena chance” es el poder estadístico: la probabilidad de rechazar correctamente \(H_0\) cuando efectivamente existe un efecto real, en este caso, la probabilidad de que el estudio detecte la mejora de 5 puntos, dado que esa mejora realmente existe. Se calcula en función de cuatro elementos interrelacionados:
- El tamaño del efecto: acá, los 5 puntos de diferencia entre medias, relativos a la variabilidad de los puntajes
- El tamaño muestral (n): cuántos estudiantes por grupo
- El nivel de significación (\(\alpha\), típicamente .05)
- La variabilidad de la variable de interés: el desvío estándar de 10 puntos
Fijados tres de estos cuatro valores, el cuarto queda determinado. Esto es exactamente lo que hacen las funciones de R que vamos a usar: les damos tres valores y nos devuelven el cuarto. Típicamente resolvemos el n necesario dado un poder deseado (convencionalmente .80).
Cálculo del poder con R
Algunas cuestiones claves antes de iniciar con el código
Para este tutorial vamos a utilizar el paquete pwr(Champely 2020) ejecutado en R (R Core Team 2024).
Este paquete implementa los cálculos de poder para los diseños clásicos, usando las convenciones y tamaños del efecto estandarizados que propuso Cohen (1988). Algo importante a tener en cuenta es que las funciones de pwr generalmente esperan tamaños del efecto estandarizados (d de Cohen, f de Cohen) como argumento, en lugar de estadísticos crudos como medias o desvíos directamente. Esto significa que antes de llamar a la función tenemos que convertir los datos del piloto a un tamaño del efecto estandarizado.
Para el caso de dos grupos, la d de Cohen es la diferencia de medias dividida por el desvío estándar común.
\[d = \frac{\bar{x}_1 - \bar{x}_2}{s}\] Donde:
\(\bar{x}_1\) y \(\bar{x}_2\) son las medias de los dos grupos que se comparan
\(s\) es el desvío estándar de cada grupo (cuando son iguales, solo se utiliza uno de los valores)
Un detalle importante! Si los dos grupos no tienen exactamente el mismo desvío estándar (como en nuestro ejemplo, donde asumimos homogeneidad de varianzas para simplificar), \(s\) no es simplemente el desvío de un grupo, es el desvío combinado, que pondera los desvíos de ambos grupos según su tamaño muestral:
\[s = \sqrt{\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1+n_2-2}}\]
Donde \(n_1\) y \(n_2\) son los tamaños muestrales de los grupos 1 y 2, y \(s_1\) y \(s_2\) son los desvíos estándar de cada grupo.
Con los datos de nuestro estudio:
\[d = \frac{\bar{x}_1 - \bar{x}_2}{s} = \frac{75 - 70}{10} = 0.5\]
Este valor coincide con lo que Cohen (1988) definió como un efecto “mediano”. Pero acá no lo estamos tomando de una tabla de valores convencionales sino que lo derivamos directamente de nuestros datos piloto, que siempre es preferible a usar una convención genérica.
Poder para un t-test de dos muestras
Con d = 0.5 y queriendo 80% de poder con alfa = .05, le preguntamos directamente a R:
pwr.t.test(d = 0.5, sig.level = 0.05, power = 0.80, type = "two.sample")
Two-sample t test power calculation
n = 63.76561
d = 0.5
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group
En base a los datos que tenemos, el cálculo nos muestra que necesitamos aproximadamente 64 estudiantes por grupo (128 en total) para tener 80% de probabilidad de detectar una diferencia de 5 puntos, si esa diferencia efectivamente existe.
pwr.t.test() calcula el poder (o el n, o el tamaño del efecto, o el \(\alpha\)) para tests t de una muestra o de dos muestras de igual tamaño, con argumentos n, d, sig.level, power y type ("two.sample", "one.sample", o "paired"). Se deja vacío (NULL) exactamente el que se quiere resolver. Si tuvieramos un n fijo (por ejemplo, porque la evaluación se realiza sobre un mismo curso y ese cursto tiene 40 estudiantes) y queremos saber qué poder tenemos con ese n, simplemente hacemos lo siguiente:
pwr.t.test(d = 0.5, sig.level = 0.05, n = 40, type = "two.sample")
Two-sample t test power calculation
n = 40
d = 0.5
sig.level = 0.05
power = 0.5981469
alternative = two.sided
NOTE: n is number in *each* group
Si quisieramos calcular el n para un tamaño de efecto más pequeño, simplemente cambiamos d:
pwr.t.test(d = 0.3, sig.level = 0.05, power = 0.80, type = "two.sample")
Two-sample t test power calculation
n = 175.3847
d = 0.3
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group
Podemos ver que a igual \(\alpha\) (.05) y poder (.80), para detectar un tamaño del efecto más pequeño, necesitamos una muestra muchísimo más grande. Los invito a probar distintos valores de d para ver cómo se modifica el n mínimo.
Poder para un ANOVA de un factor
Supongamos que queremos comparar no dos, sino tres métodos de estudio: además del tradicional y la práctica de recuperación, incluimos repetición espaciada (distribuir el estudio en el tiempo en vez de concentrarlo). Con tres grupos, un t-test ya no alcanza. Hace falta un ANOVA de un factor.
Las hipótesis cambian de forma:
- \(H_0\): las medias de puntaje son iguales entre los tres métodos.
- \(H_1\): al menos una de las medias difiere de las demás.
Con base en el piloto y en literatura sobre repetición espaciada, estimamos las tres medias: tradicional 70, práctica de recuperación 75, repetición espaciada 78. Mismo desvío estándar de 10 en los tres grupos.
A diferencia de la d de Cohen (que compara exactamente dos medias), acá necesitamos un tamaño del efecto que resuma la dispersión de tres medias respecto de la variabilidad dentro de los grupos: la f de Cohen.
\[f = \frac{\sigma_{medias}}{\sigma_{población}}\]
Donde:
- \(\sigma_{medias}\) es el desvío estándar de las medias de los grupos
- \(\sigma_{población}\) es el desvío estándar común dentro de los grupos
Con las medias que estimamos antes, lo calculamos de la siguiente forma:
medias <- c(70, 75, 78)
sd_comun <- 10
k <- length(medias)
sigma_medias <- sqrt(sum((medias - mean(medias))^2) / k)
f <- sigma_medias / sd_comun
f[1] 0.3299832
Esto da f ≈ 0.33. Este es el desvío estándar de las tres medias de grupo, relativo al desvío común dentro de los grupos. Con ese valor calculo el n necesario para poner a prueba mi hipótesis:
pwr.anova.test(k = 3, f = 0.33, power = 0.80, sig.level = 0.05)
Balanced one-way analysis of variance power calculation
k = 3
n = 30.51201
f = 0.33
sig.level = 0.05
power = 0.8
NOTE: n is number in each group
El cálculo nos indica que necesitamos aproximadamente 31 estudiantes por grupo (93 en total). ¿Por qué necesitamos menos por grupo que en el t-test (64)? Porque la diferencia relativa entre el grupo más bajo y el más alto (70 a 78, 8 puntos) es proporcionalmente mayor que la diferencia de 5 puntos que comparamos antes. Y como venimos viendo, si el tamaño del efecto es más grande, necesitamos menos muestra para rechazar \(H_0\) si esta es falsa.
pwr.anova.test() toma k (número de grupos), n, f, sig.level y power, dejando NULL el que se quiere resolver, igual que las funciones anteriores.
Una aclaración importante para no llevarse una idea equivocada: cuando el ANOVA es significativo y rechazamos \(H_0\), solo podemos concluir al menos una media difiere de las demás, no cuál. Si queremos saber específicamente si, por ejemplo, la repetición espaciada es mejor que la práctica de recuperación, y no solo que “alguno de los tres difiere”, vamos a necesitar comparaciones post-hoc entre pares de grupos, algo que quedan fuera del alcance de este tutorial.
Visualizar la relación entre n y poder
Reportar un único número (n = 31) a veces esconde qué tan sensible es esa decisión a pequeños cambios en los supuestos. Una forma más completa de comunicar el análisis, sobre todo en un protocolo o un proyecto de investigación, es graficar cómo cambia el poder a medida que aumenta el tamaño muestral. El paquete pwr tiene soporte para esto vía plot() sobre el objeto devuelto (por defecto intenta usar ggplot2, si está instalado):
resultado <- pwr.anova.test(k = 3, f = 0.33, power = 0.80, sig.level = 0.05)
plot(resultado)
Esto es especialmente útil si nos preocupa que la diferencia real entre métodos sea algo menor a la estimada en el piloto. La curva muestra de un vistazo cuánto más n haría falta en ese escenario más conservador.
Poder en correlación y regresión lineal
Hasta acá comparamos grupos categóricos (métodos de enseñanza). Pero también podría interesarnos preguntas como las siguientes:
- ¿Las horas de estudio semanales se correlacionan con el puntaje de examen?
- ¿Un modelo con varios predictores (horas de estudio y método de enseñanza) explica una proporción considerable de la variabilidad en el puntaje final?
Estas dos preguntas requieren dos funciones distintas de pwr, ninguna de las cuales usa d ni f como tamaño del efecto.
Nuevamente, necesitamos tener una idea de cuál será el tamaño del efecto. Nuestras opciones son ir a la bibliografía y buscar tamaños del efecto para análisis similares reportados por otros estudios o realizar un estudio piloto para estimar esos valores. Otra alternativa es usar valores estándar y asumir un tamaño del efecto moderado (ej. una d de Cohen de 0.5), pero se recomienda evitar esta opción.
Poder para una correlación
Ahora bien, digamos que a partir de nuestro estudio piloto estimamos una correlación de r = 0.35 entre horas de estudio semanales y puntaje. ¿Cuántos estudiantes necesitamos para un 80% de poder con un alfa = .05?
pwr.r.test(r = 0.35, sig.level = 0.05, power = 0.80)
approximate correlation power calculation (arctangh transformation)
n = 60.93514
r = 0.35
sig.level = 0.05
power = 0.8
alternative = two.sided
Este cálculo indica que necesitamos aproximadamente 61 estudiantes para tener 80% de probabilidad de detectar una correlación de esa magnitud, si efectivamente existe.
Acá el tamaño del efecto es directamente el coeficiente de correlación de Pearson, r (Cohen propuso r = 0.1 chico, 0.3 mediano, 0.5 grande como convención genérica, pero, igual que con la d, siempre es preferible derivar r de datos propios o estudios previos de otros grupos).
Un detalle no tan obvio: como la distribución muestral de r no es normal (está acotada entre −1 y 1 y se vuelve más asimétrica cuanto más se aleja de 0), pwr.r.test() no calcula el poder sobre r directamente. Primero aplica la transformación Z de Fisher, que sí se distribuye aproximadamente normal, con una corrección de sesgo adicional, y calcula el poder sobre esa Z’ transformada.
Poder para un modelo de regresión (modelo global)
Ahora nos interesa si saber si al incluir horas de estudio y método de enseñanza en un mismo modelo explican una proporción determinada de la varianza del puntaje del examen. En base al bibliografía previa, estimamos que, en conjunto, horas de estudio y método de enseñanza expliquen 20% de la variabilidad en el puntaje. En este caso calcularemos tamaño de la muestra para el modelo global, no para un predictor específico, y el tamaño del efecto que nos interesa es el \(R^2\) (que esperamos que sea de 0.20 0 20%). En la regresión lineal, la \(H_0\) es que \(R^2\) = 0. Tenemos que encontrar cuántas observaciones necesitamos para rechazar \(H_0\) si en la realidad \(R^2\) = 0.20.
Para el modelo de regresión múltiple se usa la función pwr.f2.test(), que calcula el poder para el modelo lineal general, con el tamaño del efecto \(f^2\) definido a partir del \(R^2\):
\[f^2 = \frac{R^2}{1-R^2}\] En nuestro ejemplo:
R2 <- 0.20
f2 <- R2 / (1 - R2)
f2[1] 0.25
Esto da \(f^2\) = 0.25 (convenciones de Cohen: 0.02 chico, 0.15 mediano, 0.35 grande). Ahora lo usamos con u = 2 (los dos predictores, horas de estudio y método de estudio):
pwr.f2.test(u = 2, f2 = 0.25, sig.level = 0.05, power = 0.80)
Multiple regression power calculation
u = 2
v = 38.68562
f2 = 0.25
sig.level = 0.05
power = 0.8
¡Importante! Este cálculo devuelve v (grados de libertad del denominador), no n directamente. Para obtener el tamaño muestral total hay que despejar:
\[n = v + u + 1\]
n_total <- 38.68562 + 3 + 1
n_total[1] 42.68562
Entonces, en base al cálculo del poder estadístico, necesitamos 43 estudiantes en total para tener 80% de poder de detectar que el modelo completo explica una proporción de varianza distinta de cero, si el \(R^2\) real es de 0.20.
Como mencioné antes, esto evalúa el modelo en conjunto, no dice si cada predictor individual (por ejemplo, el método de enseñanza controlando por las otras dos variables) es significativo por separado. Eso requeriría un \(R^2\) parcial, que queda fuera del alcance de este tutorial.
¿Por qué este tutorial no me sirve para diseños mixtos?
El diseño que planteamos para este tutorial tiene una propiedad conveniente: observaciones independientes (cada estudiante fue asignado a un solo método de estudio y no consideramos otras agrupaciones como escuelas o aulas) y puntajes que nos permiten asumir una distribución aproximadamente normal dentro de cada grupo. Bajo esas condiciones, la relación entre poder, n, tamaño del efecto y el \(\alpha\) tiene una solución analítica, hay una fórmula que se puede despejar directamente. Esto es posible porque el diseño asume una sola fuente de variación aleatoria: la variabilidad entre estudiantes dentro de cada grupo. Ahora bien, esto no siempre se cumple. Si en cambio cada estudiante rindiera el examen varias veces, o los estudiantes estuvieran agrupados en distintas aulas o colegios, habría múltiples fuentes de variación aleatoria simultáneamente, y esa fórmula cerrada dejaría de aplicar. Sobre esto vamos a hablar es la segunda parte de este tutorial, con modelos mixtos y simulación de datos.
Cómo citar este tutorial
Si te resultó útil te cuento que este tutorial está disponible bajo una licencia Creative Commons Attribution 4.0 International (CC BY 4.0). Esto quiere decir que podés compartirlo y adaptarlo libremente siempre que cites la fuente.
Formoso, J. (2026, July 12). ¿Cuántas observaciones necesito para poner a prueba mi hipótesis? Cálculo del tamaño muestral - parte 1. Zenodo. https://doi.org/10.5281/zenodo.21326331
¿Preguntas o sugerencias? Dejá un issue aquí o escribime a jesica.formoso@gmail.com con tus comentarios.