Cómo obtener un valor p en R
R tiene una función de valor p para cada distribución y una función de contraste para cada diseño habitual. Aquí está el mapa completo, más el argumento que decide en silencio si tu respuesta es exacta en la cola lejana.
8 min de lectura · Última revisión: 7 de agosto de 2026
La respuesta corta
Si ya tienes un estadístico de contraste, R lo convierte con una función de distribución.
Todas aceptan lower.tail = FALSE para darte directamente el área de la cola
superior.
| Estadístico | Llamada en R (unilateral, superior) |
|---|---|
| z | pnorm(z, lower.tail = FALSE) |
| t | pt(t, df, lower.tail = FALSE) |
| chi-cuadrado | pchisq(x, df, lower.tail = FALSE) |
| F | pf(f, df1, df2, lower.tail = FALSE) |
Para un contraste bilateral sobre una distribución simétrica, duplica la cola del valor absoluto:
2 * pt(-abs(2.31), 27)
#> 0.02876857
Chi-cuadrado y F son la excepción. Ya son de cola derecha, y duplicarlas no es una opción conservadora: carece de sentido. El conversor de chi-cuadrado explica por qué.
El argumento que decide tu exactitud
Hay dos formas de escribir una cola superior en R, y no son igual de buenas:
# Correcto
pnorm(9, lower.tail = FALSE)
#> 1.128588e-19
# Incorrecto en la cola lejana
1 - pnorm(9)
#> 0
La segunda forma calcula un número muy cercano a 1 y luego lo resta de 1. La doble precisión no puede representar la diferencia, así que la respuesta se desploma exactamente a cero, y R informa de que un resultado que debería ser 1.13 × 10⁻¹⁹ es imposible.
lower.tail = FALSE calcula la cola directamente y nunca forma la diferencia.
Úsalo siempre. Esta calculadora está construida sobre el mismo principio, y por eso no
imprime p = 0.000; la página de metodología
muestra las comparaciones publicadas.
A partir de datos en bruto
Si tienes las observaciones en lugar del estadístico, las funciones de contraste hacen los dos pasos:
# Prueba t de Welch: la opción predeterminada de R, y la más segura
t.test(group_a, group_b)
# Prueba t de Student, suponiendo varianzas iguales
t.test(group_a, group_b, var.equal = TRUE)
# Emparejada
t.test(before, after, paired = TRUE)
# Una muestra frente a un valor objetivo
t.test(x, mu = 100)
# Chi-cuadrado sobre una tabla de contingencia
chisq.test(matrix(c(31, 19, 22, 28), nrow = 2))
# Correlación de Pearson
cor.test(x, y)
# ANOVA de un factor
summary(aov(value ~ group, data = df))
Merece la pena conocer dos valores predeterminados. t.test ejecuta la versión de
Welch salvo que pidas otra cosa, que es la opción correcta porque no supone
varianzas iguales. Y chisq.test aplica la corrección de continuidad de
Yates a las tablas de 2 × 2 de forma predeterminada, así que su valor p será algo
mayor que uno sin corregir. Pasa correct = FALSE para desactivarla si estás
comparando contra una calculadora que no la aplica.
Cómo extraer el número
Todo objeto htest lleva el valor p como un elemento con nombre, así que nunca
necesitas leerlo de lo impreso:
result <- t.test(group_a, group_b)
result$p.value
#> 0.02876857
result$conf.int
result$estimate
Para una regresión, los tiene la tabla de coeficientes:
coef(summary(model))[, "Pr(>|t|)"]
Por qué R imprime "< 2.2e-16"
Los métodos de impresión de R ponen un suelo de 2.2e-16 a los valores p muy
pequeños, que es el épsilon de máquina de la doble precisión. Es una convención de
presentación, no el valor real: el número que hay en result$p.value suele ser
mucho menor y perfectamente utilizable. Si necesitas informarlo, imprime el elemento
directamente en lugar del objeto.
De todos modos, un valor p así de pequeño rara vez es la parte interesante de un resultado. Dice que la nula es implausible; no dice nada sobre si el efecto es lo bastante grande como para importar. Informa el tamaño del efecto y el intervalo a su lado.
Cómo contrastar R con otra cosa
R, SciPy y esta calculadora coinciden dentro del ruido de coma flotante, porque implementan las mismas funciones subyacentes. Si quieres verificar un resultado concreto, pega tu estadístico y sus grados de libertad en la calculadora y compara. Una discrepancia en la tercera cifra significativa casi siempre significa que se ejecutó un contraste distinto —Welch frente a Student, con corrección frente a sin ella, una cola frente a dos— y no un error numérico.