Las pruebas de hipótesis son herramientas esenciales en análisis estadístico, y hoy exploraremos cómo automatizarlas usando Python. Al comprender cómo configurar estas pruebas en un entorno de codificación, podrás realizar análisis más robustos y precisos con tus datos. Vamos a desglosar este proceso paso a paso.
¿Cuáles son los pasos previos en el análisis de datos?
Antes de profundizar en las pruebas de hipótesis, es fundamental establecer un entorno adecuado de trabajo. Esto implica importar las librerías necesarias y asegurarnos de que tenemos acceso a los datos correctos para nuestro análisis. En este ejemplo, usaremos el famoso dataset de "Iris" para ilustrar los conceptos.
Importación de librerías básicas: Utilizamos pandas para manipulación de datos, numpy para cálculos matemáticos, y seaborn para visualizaciones gráficas.
Preparación del dataset: Importamos el dataset de Iris y definimos las columnas de datos como sepal length, sepal width, petal length, y petal width, además de la categoría de clase.
import pandas as pd
import numpy as np
import seaborn as sns
import scipy.stats as st
from scipy import stats
# URL del dataseturl ="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"column_names =["sepal_length","sepal_width","petal_length","petal_width","class"]iris = pd.read_csv(url, names=column_names)# Mostrar las primeras filas para verificar el datasetprint(iris.head())
¿Cómo implementar la prueba de hipótesis t-distribution de Student?
La t-distribution de Student es una de las pruebas más utilizadas para comparar las medias de dos grupos. Aquí, centraremos nuestra atención en las variables sepal_length y sepal_width.
Paso 1: Calcular el error estándar
El error estándar es un componente crucial en la prueba de hipótesis y se calcula usando la desviación estándar dividida por la raíz cuadrada del tamaño de la muestra.
Con la librería scipy, podemos comparar los valores objetivos y determinar la significancia estadística.
# Calcular el valor p usando el módulo t-test relacionadot_statistic, p_value = stats.ttest_ind(iris["sepal_length"], iris["sepal_width"])print(f"Valor p: {p_value}")
¿Conclusiones sobre los resultados de la hipótesis?
Al analizar nuestros resultados, podemos sacar conclusiones significativas:
Si el valor absoluto de t es mayor que el valor crítico (en este contexto representado como valor p), esto indica que las distribuciones son significativamente diferentes. Esto significa que la hipótesis nula de equivalencia es rechazada.
En nuestro ejemplo, el valor t fue alto (9.43) en comparación al valor crítico, lo que sugiere que las distribuciones de sepal_length y sepal_width difieren.
Entender y aplicar estas pruebas de hipótesis correctamente puede ser complejo, pero con la práctica te volverás competente en su implementación. Continua explorando y llevando tu análisis estadístico a un nuevo nivel con Python. ¡Sigue aprendiendo y retándote a ti mismo para dominar estos conceptos!
La fórmula de SED que aparece en 5:51 no está bien. Aparece 2 veces sigma sub-1, lo que hace a uno pensar que son el mismo valor, y no es así, ya que corresponden a los valores de sepal-length y sepal-witdh respectivamente. Atentos a ese detalle.
Buena observación.
arreglado como buenamente se pudo jsjsjs
Este video me ayudo a comprender mejor muchos conceptos que no entendia bien:
t-value
t-test
p values
Básicamente esta clase de Platzi me ayudó a entender como realizar el t-test utilizando Python y la librería de scipy, pero no entendí que significaba o como interpretar cada concepto.
Exactamente, no se entiende que está haciendo porque no se ha tocado esos temas previamente en el curso y tampoco tiene clases sugeridas de otros cursos donde expliquen los conceptos de los tipos de errores. Yo no entendí esta clase.
Excelente video, gracias por el aporte me sirvio
Aclaraciones respecto a los resultados de los ejemplos:
El valor t calculado de manera manual (vía fórmula) se hace para un N = 10, el cual nos da como resultado 9.4:
Al calcularlo con un N igual a la longitud total del conjunto de datos (len(iris)) el resultado es el mismo que el valor t calculado con scipy.stats (df = degreees of freedom):
El valor del t-test no se compara con el p-value. Entonces, ¿Cómo se interpreta este número? El valor esperado de t bajo la hipótesis nula es 0, es decir, si el resultado del t-test es 0 (o cercano), no hay diferencias significativas entre las medias de las muestras comparadas. Por otro lado, un valor t grande en magnitud (ignorando si hay signo negativo) indicaría que sí hay una diferencia.
El p-value se compara con un límite de significancia alfa (0.05, 0.01). Si el p-value es menor a este alfa, rechazamos la hipótesis nula y podemos concluir que sí existe una diferencia significativa entre las medias. En este caso el p-value = 7.02e^-112, por lo que es un valor muy inferior a un alfa de, por ejemplo, 0.05.
En conclusión, con un valor del t-test grande y un p-value inferior a un alfa de 0.05, podemos rechazar la hipótesis nula y decir que si existe una diferencia significativa entre las variables.
Es la explicacion que le faltaba a la clases. Gracias Camilo
Me confunde un poco la sintaxis que usa la profe, desconocía que
iris.mean()['sepal-length']
Podía ser lo mismo que
iris['sepal-length'].mean()
lo use de las dos maneras y da lo mismo, pero aun así prefiero la segunda forma, que me parece, es la más intuitiva
iris.mean()['sepal-length'] calcula la media de todas las columnas y luego recuperas la columna especificada "sepal-length"
iris['sepal-length'].mean() estas seleccionando primero la columna y luego calculas la media únicamente para esa columna, esta sería mas eficiente ya que solo estas calculando los datos que vas a utilizar.
Tambien se podria usar de la siguiente forma
iris.sepal-length.mean()
Para quienes quieran tener las fórmulas no con imágenes sino como código en Latex dentro del Markdown.
La prueba t de Student es una prueba estadística utilizada para comparar dos medias de muestras independientes para determinar si existe una diferencia significativa entre ellas. En Python, se puede realizar una prueba t de Student utilizando la función "ttest_ind" del paquete
"scipy.stats".
Ejemplo:
Copy code
from scipy.statsimport ttest_ind
datos de muestra 1
sample1 =[1,2,3,4,5]
datos de muestra 2
sample2 =[5,6,7,8,9]
realizar la prueba t de Student
t_stat, p_value =ttest_ind(sample1, sample2)
# imprimir el valor t y el valor p
print("t-statistic:", t_stat)print("p-value:", p_value)
En el ejemplo, la variable "t_stat" contiene el valor t calculado y la variable "p_value" contiene el valor p obtenido de la prueba. Si el valor p es menor que un nivel de significancia establecido (generalmente 0,05), se rechaza la hipótesis nula (que las dos medias son iguales) y se concluye que existe una diferencia significativa entre las dos muestras.
Nota: Es importante recordar que, al igual que en cualquier prueba estadística, es necesario cumplir con ciertos supuestos antes de realizar una prueba t de Student, como normalidad y varianza homogenea en las muestras.
Exacto, tienes la razon acerca de los supuestos, estuve aplicando el ejercicio en python y me percate que 'ttest_ind' asume por defecto varianzas iguales y para cambiar ello se agregaria el parametro 'equal_var= False' en el caso de que no sean varianzaas iguales
En que momento se planteó la Ho???
No se si me perdí, pero ella al sacar el estadístico t debió buscar el valor de t al nivel de significancia no? Por que comparo el estadístico t con el p-value? No son diferentes uno es una estadística el otro una probablidad
El P-value me dice cual es la probabilidad de que el valor del t-test sea de puro chance, lo que se compara en la tabla es el valor del t-test correspondiente al p-value de 0.05 (usualmente el que se usa).
También como se ve en la función del final se puede obtener el p-value directamente, que me diría la probabilidad de que se produzca por chance en este caso solo habría que preocuparse por que este me de mayor a 0.05.
Distribución t de student
N -> muestra de 10 --- porque fue escogida de esa forma
no debería de calcularse el tamaño de la muestra ?
esta parte parece algo arbitraria
Lo otro que genera confusion es que se definió a N como la población y a n como la muestra, pueden aclarar por favor los conceptos
si tienes toda la razón de echo si lo haces de ese modo el resultado te da igual que la función
la parte que dice statistic se refiere al t-value
En este caso t_stat es nuestro valor critico y p nos da dos valores el t calculado (36.54) y el alpha ( 3.987 e -112),
Si el valor absoluto del valor t calculado es mayor que el valor crítico, usted rechaza la hipótesis nula. Si el valor absoluto del valor t es menor que el valor crítico, usted no puede rechazar la hipótesis nula.
(Cuanso se usa el igual en la prueba de hipotesis siempre nos referimos a una prueba t de dos colas).
HIPOTESIS NULA :
Las dos muestras provienen de la misma poblacion o tienen la misma distribución
H0=H1
Otra forma de comprobar esto es mirando el valor alpha el cual es menor que el nivel de significancia este alpha esta dentro de la zona de rechazo de la hipoesis nula ya que es menor que nuestro alpha de 0.5
Un aporte, en mi caso me salia un error al momento de calcular las formulas porque estaba tomando strings
lo corregi de la siguiente manera solo en caso les ayude.
Para aquellos que tienen errores por culpa de la columna 'class' es porque Pandas ahora cuando usamos el método .mean() intenta calcular el promedio de todas las columnas incluso antes de que lea la parte en la que especificamos la columna de la que queremos obtener el promedio. Es por eso que aparece un error diciendo que no se pueden hacer operaciones matemáticas para una columna categórica, ese error lo podemos arreglar así: iris.drop('class', axis=1).mean().
El código completo sería:
t_stat =(iris.drop('class', axis=1).mean()['sepal-length']- iris.drop('class'), axis=1).mean()['sepal-width'])/ sed
la profe se equivoco en el minute -6:14 hay que poner el tamaño de la muestra con el tamaño real no con 10
de esta forma si te da lo mismo que la function final
NO me queda claro, ¿si usas el valor de N = a Todos los elementos del conjunto, te da igual que a la profesora que usó N =10 entonces?
tu mismo lo dijiste el "Tamaño de la muestra" y es eso 10 es una muestra, para T student ocupas una muestra no la población, y regularmente es menor al 10% en este caso 10 , y obvio el resultado no podría ser igual por que por lógica la anchura y el largo de los sépalos no son iguales.
Es necesario aclarar algo: El estadistico “t _obs” NO se debe comparar con el p-value, pero sí están relacionados. Para el testing con T-Student:
p-value= Prob( |T | > | t_obs | ),
donde T es una variable aleatoria que sigue una distribución T Student con grados de libertad df=N-1, y t _obs es el valor del estadistico observado.
El p-value es por definición valor más bajo de alpha sobre el cual se rechazaría la hipótesis nula. Si p-value < alpha, donde alpha es el nivel de significancia deseado (normalmente se usa el 5% o alpha=0.05), entonces se rechaza la hipótesis nula.
Igualmente podemos tomar la decicisón del testeo sin necesidad de tomar el p-value. Rechazaremos la hipotesis nula si |t_obs| > t_{df , alpha/2}= F^-1 (1-alpha/2). Donde F^-1 es la inversa de la CDF de la distribución T-Student. También es posible obtener F^-1 (1-alpha/2) a partir de una tabla, similar a como se hace con la distribución Normal.
Quisiera hacer una corrección sobre mi post: Los grados de libertad en este problema de dos poblaciones NO es df= N-1, sino df= 2 N - 2.
Con eso el cálculo de p-value computacional queda como:
que nos entrega el mismo p-value del ttest_ind.
Warning: Este método asume implicitamente que las varianzas de ambas poblaciones son iguales, lo cuál no es claro de buenas a primeras. Tal vez sería bueno hacer una exploración visual sobre esa suposición.
Una alternativa sería no suponer que las varianzas de las poblaciones no son iguales, lo cual se puede hacer incluyendo el parametro "equal_var=False" al método ttest_ind
Comparto otra manera de importar dicha librería desde sns.
También una sintaxis ligeramente diferente y la forma de escribirlo con Markdown en un chunk de texto de colab.
Encuentro algunos errores en la aplicación del concepto de la prueba t. Inicialmente, se está realizando una comparación de poblaciones (variable class) utilizando variables que agrupan poblaciones diferentes. En este caso, lo ideal sería efectuar el análisis entre dos poblaciones claramente diferenciadas. Otra consideración importante es la necesidad de aplicar pruebas de normalidad a las variables de estudio, ya que la normalidad es uno de los supuestos de este tipo de pruebas estadísticas. Adicionalmente, se debe implementar la prueba de Levene con el fin de identificar si las varianzas de las dos poblaciones son homogéneas.
por que compara el t-value con el pvalue?, mejor dicho que significa cada uno de esos numeros...
me perdí un poco en esta clase
No debió, te invito a leer los aportes ahi ayudaron con esta duda
Siento que a esta clase le faltó una clase previa! para ahondar más sobre los tipos de errores
Porque N = 10?, Osea puede ser cualquier dato? Deberia tener alguna explicacion ese detalle.
Por lo que entiendo la profe toma ese número de elementos (N=10) de forma arbitraria
No se justificó, entiendelo como si hubiese dicho 'supongamos que tomo una muestra de 10 para estudiarlos'. Le doy sentido en que las distribuciones de t son para muestras pequeñas, menores de 30.