Herramientas · Bioestadística abierta
Tamaño de muestra para detectar una correlación (transformación z de Fisher)
Captura la correlación que quieres poder detectar, el nivel de significación y el poder deseado, y obtén cuántos pares de observaciones necesitas, el poder que alcanzarías con los que ya tienes, la interpretación y el código de R equivalente.
https://udgca1190.com.mx/herramientas/bioestadistica/muestra-correlacion
Este enlace no incluye los datos pegados: son demasiado largos para una URL.
Resultados
Cuantil de α (z)
1.960
Cuantil del poder (z)
0.842
z de Fisher de r (C)
0.3095
Pares necesarios
85
valor exacto 84.93
Pares según pwr.r.test
85
comparación (corrección de sesgo y cuantil t)
Pares con pérdidas previstas
95
valor exacto 94.36
Poder con los pares disponibles
sin n disponible
Interpretación
Para detectar una correlación de al menos 0.30 con un poder de 80 % y α = 0.050 (bilateral) se requieren 85 pares de observaciones.
La transformación z de Fisher da C = 0.3095 y un tamaño exacto de 84.93 pares. El paquete pwr de R, que corrige el sesgo de C y usa el cuantil de la t, pide 85: las dos rutas responden a la misma pregunta y la diferencia es de redondeo, no de método.
Previendo un 10 % de pérdidas o exclusiones, hay que reclutar 95 pares para terminar con 85 analizables.
Si ya cuentas con una muestra, captura su número de pares y la calculadora te dirá qué poder alcanzas con ella para esta correlación.
- Las cifras dependen por entero de la correlación que se suponga: tómala de estudios previos o de un piloto y documenta su origen en el protocolo. La fórmula supone además pares independientes de una normal bivariada.
Explicación
El coeficiente de correlación r no se reparte como una normal: su distribución se apelmaza contra 1 conforme la correlación crece. Fisher (1915, 1921) resolvió el problema con un cambio de escala, C = ½·ln((1 + r)/(1 − r)), que sí es casi normal y cuyo error estándar depende solo del tamaño de muestra: 1/√(n − 3).
Con esa escala, el cálculo del tamaño de muestra es el de siempre: se pide que la distancia entre el valor nulo (C = 0) y el valor que se quiere detectar cubra z de α más z del poder, en unidades de error estándar. De ahí sale n = ((z + z)/C)² + 3, la fórmula que aparece en los manuales de investigación clínica.
Lo que cuenta es la magnitud de la correlación, no su signo: detectar r = −0.30 cuesta exactamente lo mismo que detectar r = 0.30. Y el costo crece muy deprisa cuando la correlación es pequeña, porque C ≈ r para valores bajos y n va con 1/C²: pasar de r = 0.30 a r = 0.10 multiplica el tamaño por nueve.
El paquete `pwr` de R resuelve el mismo problema con dos refinamientos: corrige el sesgo de C y usa el cuantil de la t en vez del de la normal. Da uno o dos sujetos menos, y aquí aparece como comparación para que el resultado sea reproducible en cualquiera de las dos rutas. La calculadora informa cuándo las dos cifras difieren tras redondear.
Ecuaciones
- correlación de Pearson que se quiere poder detectar
- transformación z de Fisher de r, casi normal
- número de pares de observaciones
- cuantil normal de α, en la cola que corresponda al contraste
- 2 si el contraste es bilateral, 1 si es unilateral
- cuantil normal del poder
- función de distribución de la normal estándar
- pérdidas previstas, como proporción
- techo: el redondeo hacia arriba se aplica una sola vez, al final
Código R
# Sample size to detect a correlation (Fisher's z transformation) - Bioestadistica abierta, UDG-CA-1190
# Runs as is in R, RStudio or webR; prints the results as JSON at the end.
library(jsonlite)
library(pwr)
r <- 0.3 # correlation worth detecting (not 0, |r| <= 0.98)
alfa <- 0.05 # significance level
lateralidad <- "bilateral" # "bilateral" or "unilateral"
poder <- 0.8 # target power
perdidas <- 0.1 # expected losses (0-0.5)
n_dado <- 0 # pairs already available (inverse mode); 0 = not given
tside <- if (lateralidad == "bilateral") 2 else 1
z_alfa <- qnorm(alfa / tside, lower.tail = FALSE)
z_beta <- qnorm(poder)
# Fisher (1915, 1921): atanh(r) is nearly normal with standard error 1/sqrt(n - 3)
c_fisher <- atanh(r) # 0.5 * log((1 + r) / (1 - r))
n_clasico <- ((z_alfa + z_beta) / c_fisher)^2 + 3
n_ajustado <- n_clasico / (1 - perdidas) # Lwanga & Lemeshow (1991)
# pwr adds the bias correction r/(2*(n - 1)) and uses the t quantile instead of
# the normal one, so it lands one or two subjects below the classic formula.
# With a very large r and a modest power its uniroot finds no sign change (the
# four pairs of the lower bound already exceed the power) and it stops: that
# combination is reported as NA instead of aborting the whole script.
alternativa <- if (tside == 2) "two.sided" else if (r > 0) "greater" else "less"
n_pwr <- tryCatch(pwr.r.test(r = r, sig.level = alfa, power = poder, alternative = alternativa)$n,
error = function(e) NA_real_)
# Inverse mode: power reached with the pairs already available.
poder_dado <- if (n_dado >= 4) pnorm(abs(c_fisher) * sqrt(n_dado - 3) - z_alfa) else NA_real_
# Values travel WITHOUT rounding: the interface takes the ceiling once, at the end.
res <- list(z_alfa = z_alfa, z_beta = z_beta, c_fisher = c_fisher, n_clasico = n_clasico,
n_pwr = n_pwr, n_ajustado = n_ajustado, poder_dado = poder_dado)
cat(toJSON(res, auto_unbox = TRUE, digits = NA))
# Equivalent in RStudio: presize::prec_cor(r = r, conf.width = 0.2, conf.level = 1 - alfa, method = "fisher")
Este es el mismo código que valida la calculadora: cópialo y ejecútalo en R o RStudio para reproducir el resultado.
La verificación con R dentro del navegador llegará en una próxima versión; mientras tanto, copia el código y ejecútalo en RStudio.
Métodos para manuscrito
El tamaño de muestra se calculó para detectar una correlación de Pearson de 0.30 con un poder de 80 % y α = 0.050 (bilateral), mediante la transformación z de Fisher [1,2]: 85 pares de observaciones. Se añadió un 10 % por pérdidas o exclusiones previstas, con lo que el reclutamiento previsto asciende a 95 pares. El resultado se contrastó con la función pwr.r.test del paquete pwr [4], que da 85 pares. Los cálculos se realizaron con la calculadora «Muestra para una correlación» de Bioestadística abierta (Cuerpo Académico UDG-CA-1190, https://udgca1190.com.mx/herramientas/bioestadistica/muestra-correlacion), verificada contra R.
Párrafo listo para la sección de Métodos; los números entre corchetes remiten a la lista de referencias.
Referencias
- 01 Fisher RA. Frequency distribution of the values of the correlation coefficient in samples from an indefinitely large population. Biometrika. 1915;10(4):507–521. doi:10.1093/biomet/10.4.507 Fuente original
- 02 Fisher RA. On the “probable error” of a coefficient of correlation deduced from a small sample. Metron. 1921;1:3–32. Fuente original
- 03 Cohen J. Statistical Power Analysis for the Behavioral Sciences. 2.ª ed. Hillsdale, NJ: Lawrence Erlbaum Associates; 1988. Complementaria
- 04 Champely S. pwr: Basic Functions for Power Analysis. R package version 1.3-0. CRAN; 2020. Complementaria
- 05 Hulley SB, Cummings SR, Browner WS, Grady DG, Newman TB. Designing Clinical Research. 4.ª ed. Philadelphia: Lippincott Williams & Wilkins; 2013. Lectura didáctica
- 06 Altman DG. Practical Statistics for Medical Research. London: Chapman & Hall; 1991. Lectura didáctica