Ir al contenido principal

Introducción a los t-tests en Python

Aprende a realizar t-tests en Python con este tutorial. Entiende los distintos tipos de t-tests —de una muestra, de dos muestras, pareado y test de Welch— y cuándo usarlos.
Actualizado 17 sept 2026  · 13 min leer

Explorar con IA

ChatGPTClaudePerplexity

En un mundo cada vez más basado en datos, las empresas no pueden fiarse solo de la intuición para tomar decisiones clave. Necesitan respaldarlas con técnicas estadísticas como las pruebas de hipótesis. Una de las más usadas es el t-test, que te permite comparar las medias de dos grupos y determinar si son estadísticamente diferentes.

\n

Pero, ¿cómo aplicar un t-test en la práctica y cómo interpretar sus resultados? En este tutorial resolveremos estas dudas y más. Te guiaremos con un ejemplo en el que quieres evaluar el éxito de una nueva funcionalidad que ha lanzado una empresa. Verás cómo usar t-tests en Python y sus potentes librerías para analizar los resultados.

\n

Al terminar, tendrás una comprensión sólida de los t-tests y sabrás aplicarlos a tus propios datos con seguridad.

\n

En este tutorial, exploraremos los distintos tipos de t-tests —t-test de una muestra, de dos muestras, t-test pareado y test de Welch—, sus aplicaciones y cuándo utilizarlos.  

\n

Terminología explicada

\n

Antes de profundizar en los detalles del t-test, repasemos rápidamente algunos términos clave que te ayudarán a asentar los conceptos de esta prueba estadística.

\n

Prueba de hipótesis

\n

La prueba de hipótesis parte de una suposición inicial o hipótesis nula e intenta encontrar evidencias para rechazarla. La hipótesis nula representa la situación de referencia, mientras que la hipótesis alternativa refleja lo contrario.

\n

Por ejemplo, podemos usar una prueba de hipótesis para determinar si una nueva funcionalidad lanzada por una empresa recibe una buena respuesta de los clientes y eso se refleja en la métrica de éxito. Echa un vistazo a nuestro curso de pruebas de hipótesis para saber más.

\n

Valor p 

\n

El valor p es la probabilidad de obtener resultados tan extremos como los observados asumiendo que la hipótesis nula es cierta. Un valor p pequeño indica que, si la hipótesis nula fuese correcta, la probabilidad de observar esos resultados sería muy baja.

\n

Nivel de significación

\n

El nivel de significación, denotado por alfa, representa la probabilidad de rechazar la hipótesis nula siendo esta verdadera. También se conoce como error de Tipo I.

\n

Significación estadística

\n

La significación estadística se refiere a la confianza de que el resultado observado no se debe al azar. Es importante destacar que la significación estadística no implica necesariamente relevancia práctica, ya que el efecto observado podría ser insignificante en términos reales. Además, si la muestra no representa bien a la población, el error muestral puede contribuir a la significación estadística. 

\n

Supuestos del t-test

\n

Entender los supuestos de una prueba estadística es clave para obtener resultados precisos y fiables. El t-test no es una excepción. Cualquier violación de sus supuestos puede llevar a conclusiones erróneas. Veamos en detalle los cuatro supuestos del t-test:

\n

Propiedad de independencia

\n

En primer lugar, la independencia establece que las observaciones no están influidas por ningún factor implícito en los datos y no están correlacionadas en el tiempo. Para asegurar la independencia, se pueden aplicar varias técnicas para tratar datos dependientes, como explica la Universidad de Texas en Austin.

\n

Idénticamente distribuidos 

\n

En segundo lugar, la presencia de valores atípicos o registros anómalos puede reducir el valor de la estadística t y aumentar la varianza de los datos, afectando a la probabilidad de rechazar la hipótesis nula. Por ello, es crucial identificar y entender las causas del comportamiento anómalo para determinar si es legítimo o un error. Consultar con una persona experta en el dominio puede ayudar a comprender el comportamiento real de los datos.

\n

Distribución normal 

\n

En tercer lugar, el t-test solo es válido con datos aproximadamente normales. Datos sesgados pueden llevar a rechazar incorrectamente la hipótesis nula. Sin embargo, con pocos datos es difícil comprobar la normalidad. En esos casos, se pueden usar pruebas no paramétricas que no asumen una distribución concreta o aplicar transformaciones de datos para aproximar la normalidad.

\n

Varianzas iguales 

\n

Por último, para que el t-test estándar sea válido, las dos poblaciones comparadas deben tener varianzas iguales. Esto puede comprobarse de forma gráfica con un diagrama Q-Q.

\n

Ahora que entendemos mejor los supuestos del t-test, veamos los distintos tipos de t-tests con un ejemplo en Python. Al final, tendrás los conocimientos necesarios para realizarlos e interpretar sus resultados con confianza.

\n

T-test de una muestra 

\n

El t-test de una muestra es una prueba de hipótesis que ayuda a determinar si una media poblacional desconocida (mu) es distinta de un valor establecido.

\n

\"t-test

\n

Donde:

\n

x = media muestral

\n

𝝁 = media poblacional

\n

S = desviación estándar muestral

\n

n = número de observaciones en la muestra

\n

t = estadístico t

\n

Veámoslo con un ejemplo. Una empresa afirma producir rodamientos de bolas de 10 cm de diámetro (hipótesis nula) y decides auditar si es cierto. Recoges 21 rodamientos en distintas tiendas de la ciudad y mides su diámetro. Debes determinar, con esas medidas, si la afirmación de la empresa es falsa (hipótesis alternativa).

\n

Planteamos la prueba así:

\n

Hipótesis nula:            H0 : x  = 𝝁

\n

Hipótesis alternativa:  Ha : x  ≠ 𝝁 

\n

\"T-test

\n

Para declarar falsa la afirmación, necesitas demostrar estadísticamente que las medidas de la muestra difieren de los 10 cm anunciados por la empresa. Como el tamaño muestral es 21 (menor que 30), usamos un t-test. Aquí la media muestral es 11 cm y la desviación estándar es 1 cm.

\n

Ejemplo de t-test de una muestra en Python

\n

Aprendamos a realizar un t-test de una muestra en Python con la función scipy.stats.ttest_1samp()

\n
import numpy as np  \nfrom scipy import stats  \n\n# Population Mean \nmu = 10\n\n# Sample Size\nN1 = 21\n\n# Degrees of freedom  \ndof = N1 - 1\n\n# Generate a random sample with mean = 11 and standard deviation = 1\nx = np.random.randn(N1) + 11\n\n# Using the Stats library, compute t-statistic and p-value\nt_stat, p_val = stats.ttest_1samp(a=x, popmean = mu)\nprint(\"t-statistic = \" + str(t_stat))  \nprint(\"p-value = \" + str(p_val)) \n
\n
t-statistic = 4.689539773390642\np-value = 0.0001407967502139183
\n

Interpretación de los resultados

\n

El valor del estadístico t es 4,69, claramente alejado de la media cero de una t-distribución. Para cuantificar un valor tan extremo recurrimos al valor p. Como el valor p es menor que el nivel de significación habitual de 0,05, la probabilidad de un resultado tan extremo es casi nula y podemos rechazar la hipótesis nula.

\n

Ten en cuenta que el nivel de significación se fija al inicio del experimento.

\n

Un enfoque alternativo

\n

Realicemos el t-test de una muestra sin la función ttest_1samp(). En este caso, la estadística t se define como la diferencia entre las medias muestral y poblacional dividida por el error estándar, tal y como se comentó antes. 

\n
    \n
  • Primero, calcula la media muestral (x_bar).
  • \n
  • Después, calcula la desviación estándar muestral con un grado de libertad (representa la desviación estándar de la muestra).
  • \n
  • Calcula el error estándar dividiendo la desviación estándar entre la raíz cuadrada del tamaño muestral.
  • \n
  • Usa la fórmula del t-test de una muestra explicada antes.
  • \n
  • Calcula el valor p para establecer la significación del estadístico t.
  • \n
\n
# Sample Mean\nx_bar = x.mean()\n\n# Standard Deviation  \nstd = np.std(x, ddof=1)\n\n# Standard Error\nste = std/np.sqrt(N1)\n\n# Calculating the T-Statistics  \nt_stat = (x_bar - mu) / ste\n\n# p-value of the t-statistic\np_val = 2*(1 - stats.t.cdf(abs(t_stat), df = dof))\nprint(\"t-statistic = \" + str(t_stat))  \nprint(\"p-value = \" + str(p_val)) 
\n
t-statistic = 4.689539773390642\np-value = 0.0001407967502139183
\n

Cómo realizar un t-test de dos muestras en Python

\n

Ampliemos el ejemplo suponiendo que la empresa monta otra fábrica para producir los mismos rodamientos. Queremos saber si los rodamientos de ambas fábricas tienen tamaños diferentes. Para este caso usamos el t-test de dos muestras. La estadística t se define así: 

\n

\"Two

\n

Donde:

\n

X1= media de la primera muestra

\n

X2 = media de la segunda muestra

\n

S1 = desviación estándar de la primera muestra

\n

S2 = desviación estándar de la segunda muestra

\n

N1 = tamaño de la primera muestra

\n

N2 = tamaño de la segunda muestra

\n

Ejemplo de t-test de dos muestras en Python

\n

Supongamos que la primera fábrica comparte 21 muestras con una media de 10,5 cm. La segunda fábrica comparte 25 muestras con una media de 9,5 cm. Ambas con desviación estándar de 1 cm. 

\n
# Sample Sizes\nN1, N2 = 21, 25\n\n# Degrees of freedom  \ndof = min(N1,N2) - 1\n\n# Gaussian distributed data with mean = 10.5 and var = 1  \nx = np.random.randn(N1) + 10.5\n\n# Gaussian distributed data with mean = 9.5 and var = 1  \ny = np.random.randn(N2) + 9.5\n\n## Using the internal function from SciPy Package  \nt_stat, p_val = stats.ttest_ind(x, y)  \nprint(\"t-statistic = \" + str(t_stat))  \nprint(\"p-value = \" + str(p_val))
\n
t-statistic = 3.18913308431476\np-value = 0.0026296199823557754
\n

Interpretación de los resultados

\n

Como el valor p (0,0026) es menor que el nivel de significación de 0,05, rechazamos la hipótesis nula y concluimos que los rodamientos de las dos fábricas no son idénticos.

\n

Cómo realizar un t-test pareado en Python

\n

Tras compartir estos resultados, la empresa decide mejorar su tecnología de fabricación instalando una nueva máquina de colada. Inicia un piloto en una de las fábricas y realiza una prueba para identificar si la nueva máquina cambia el diámetro de los rodamientos comparando dos muestras de 25 unidades: una antes y otra después de introducirla. 

\n

Las medias resultan ser 10,5 cm y 9,9 cm, respectivamente. 

\n

Ejemplo de t-test pareado en Python

\n

Hagamos un t-test pareado para verificar si el cambio es estadísticamente significativo.

\n
# Sample Sizes\nN = 25\n\n# Degrees of freedom  \ndof = N - 1\n\n# Gaussian distributed data with mean = 10.5 and var = 1  \nx = np.random.randn(N) + 10.5\n\n# Gaussian distributed data with mean = 9.9 and var = 1  \ny = np.random.randn(N) + 9.9\n\n\nt_stat, p_val = stats.ttest_rel(x,y)\nprint(\"t-statistic = \" + str(t_stat))  \nprint(\"p-value = \" + str(p_val))
\n
t-statistic = 3.446152658909739\np-value = 0.0021043953630465787
\n

Interpretación de los resultados

\n

El valor p bajo indica que se rechaza la hipótesis nula; es decir, sí hay un cambio en el diámetro de los rodamientos tras introducir la nueva máquina de colada. 

\n

Precauciones del t-test pareado

\n

Los supuestos del t-test pareado se aplican a las diferencias entre pares, no a las observaciones originales. Por tanto, es importante que las diferencias entre pares estén distribuidas de forma aproximadamente simétrica y sin valores atípicos. 

\n

Cómo realizar el t-test de Welch en Python

\n

Tras el piloto exitoso con la nueva máquina de colada en una fábrica, la empresa quiere probar en la segunda fábrica una nueva máquina de acabado. Esta máquina produce rodamientos muy precisos, pero es sensible a cambios de temperatura y fluctuaciones de energía. La empresa necesita identificar si los rodamientos de ambas fábricas difieren comparando 21 muestras de la primera y 25 de la segunda. 

\n

Ejemplo de t-test de Welch en Python

\n

La media del diámetro en la primera fábrica es 9,9 cm con desviación estándar 1 cm, mientras que en la segunda es 10 cm con desviación estándar 3 cm. Como las desviaciones estándar son distintas, usaremos el t-test de Welch.

\n
# Sample Sizes\nN1, N2 = 21, 25\n\n# Degrees of freedom  \ndof = min(N1,N2) - 1\n\n# Gaussian distributed data with mean = 9.9 and var = 1  \nx = np.random.randn(N1) + 9.9\n\n# Gaussian distributed data with mean = 10 and var = 3\ny = 3*np.random.randn(N2) + 10\n\n## Using SciPy Package  \nt_stat, p_val = stats.ttest_ind(x, y, equal_var = False) \nprint(\"t-statistic = \" + str(t_stat))  \nprint(\"p-value = \" + str(p_val))
\n
t-statistic = 1.3828843424092643\np-value = 0.17753505304053804
\n

Interpretación de los resultados

\n

El valor p observado es mayor que 0,05, por lo que no rechazamos la hipótesis nula: los rodamientos de ambas fábricas podrían ser equivalentes. Dada la alta desviación estándar de la segunda fábrica, sería conveniente recoger más muestras para aumentar la potencia del análisis (por ejemplo, con una prueba z si se cumplen sus supuestos). 

\n

Precauciones del t-test de Welch 

\n

A diferencia de otros t-tests, el t-test de Welch es aplicable cuando las varianzas poblacionales son desiguales.

\n

Conclusión

\n

Los datos pueden desvelar los verdaderos fenómenos que afectan a las decisiones de negocio solo si se analizan correctamente. Para ello hace falta entender bien las diferentes pruebas estadísticas y saber cuándo aplicar cada una. Este tutorial se centra en los t-tests y explica sus supuestos, como la independencia e idéntica distribución de las observaciones y la normalidad. 

\n

Además de un breve repaso a las pruebas de hipótesis, el tutorial ofrece una visión completa de los distintos tipos de t-tests con un ejemplo. Te animamos a practicar la realización de un t-test en Python y evaluar cuál conviene usar para comprobar la significación estadística de tu experimento.    

\n

Referencias y recursos recomendados:

\n
Temas
Python
Análisis de datos
Relacionado

Tutorial

Tutorial de pruebas T en R: Aprende a realizar pruebas T

Determina si existe una diferencia significativa entre las medias de los dos grupos utilizando t.test() en R.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Tutorial

Funciones en Python: cómo llamar y escribir funciones

Descubre cómo escribir funciones en Python reutilizables y eficientes. Domina los parámetros, las sentencias return y temas avanzados como las funciones lambda. Organiza mejor tu código con main() y otras buenas prácticas.
Karlijn Willems's photo

Karlijn Willems

14 min

Machine Learning Jobs Header

Tutorial

Cómo utilizar Pytest para pruebas unitarias

Explore qué es Pytest y para qué se utiliza mientras lo compara con otros métodos de prueba de software.
Kurtis Pykes 's photo

Kurtis Pykes

13 min

Tutorial

Tipos de gráficos de datos y cómo crearlos en Python

Explore varios tipos de gráficos de datos, desde los más comunes hasta los más avanzados y poco convencionales, qué muestran, cuándo utilizarlos, cuándo evitarlos y cómo crearlos y personalizarlos en Python.
Elena Kosourova's photo

Elena Kosourova

15 min

Tutorial

Tutorial y ejemplos de funciones y métodos de listas en Python

Aprende sobre las funciones y métodos de las listas de Python. ¡Sigue ahora los ejemplos de código para list() y otras funciones y métodos de Python!
Abid Ali Awan's photo

Abid Ali Awan

7 min

Tutorial

Tutorial de Python sobre conjuntos y teoría de conjuntos

Aprende sobre los conjuntos en Python: qué son, cómo crearlos, cuándo usarlos, funciones incorporadas y su relación con las operaciones de la teoría de conjuntos.
DataCamp Team's photo

DataCamp Team

13 min

Ver MásVer Más