No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
18 Hrs
42 Min
38 Seg

Pruebas de hipótesis en Python: t de Student

16/22
Recursos

Aportes 28

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

Aclaraciones respecto a los resultados de los ejemplos:

  1. 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):

  1. 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.

  2. 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.

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.

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

Para quienes quieran tener las fórmulas no con imágenes sino como código en Latex dentro del Markdown.

SE

$$
SE = \frac{\sigma}{\sqrt{N}}
$$

SED

$$
SED = \sqrt{\frac{\sigma_1^2}{N_1}+\frac{\sigma_2^2}{N_2}}
$$

t de Student

$$
t = \frac{\bar{x_1}-\bar{x_2}}{SED}=\frac{x_1-x_2}{\sqrt{\frac{(s_1)^2}{n_1}+\frac{(s_2)^2}{n_2}}}
$$

En este video explican un poco mejor la prueba de hipótesis T Student https://youtu.be/RA9mPkbrZqU

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.stats import 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.

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

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

se_length = df['sepal-length'].std()/np.sqrt(len(df)) #standar error
se_width = df['sepal-width'].std()/np.sqrt(len(df)) #standar error

osea así

de esta forma si te da lo mismo que la function final

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.

Si les genera error como as mi error las siguineets formulas: ej: “se_length = iris.std()[‘sepal.length’]/np.sqrt(10)” deben cambiar la funcion al final de la columna. P.e.:.se_length = iris[‘sepal.length’].std()/np.sqrt(10)

No me queda claro la formula SED. La profe calculo el valor de las variables se_length y se_width con la formula SE, LUEGO APLICO la formula SED y elevo al cuadrado cada variable, diciendo que ese valor es el mismo que el SE, haciendo una simplificacion algebraica i da los mismo (aplicado la raiz cuadrada a la fraccion), en todo caso los valores N1 y N2 ya no deberían considerarse puesto que ya se consideró en el SE. Salvo que alguien pudiera aclarar al respecto

Les proporcionaré dos reportes uno un reporte que explique el código y las variables involucradas y en el segundo reporte explicare los resultados:

Reporte 1:

Código y Resultados: Análisis de Dos Muestras con Prueba t

En este análisis, se están comparando dos muestras (var_length y var_width) de las características “sepal-length” y “sepal-width” de la base de datos Iris. El objetivo es evaluar si hay diferencias significativas entre las medias de estas dos características.

import numpy as np
from scipy.stats import ttest_ind
import pandas as pd

# Configuración de la semilla aleatoria para reproducibilidad
np.random.seed(42)

# Tomando 10 muestras aleatorias de "sepal-length" y "sepal-width" de la base de datos Iris
var_length = iris["sepal-length"].sample(n=10)
var_width = iris["sepal-width"].sample(n=10)

# Cálculo del error estándar de las medias de las muestras
se_length = var_length.std() / np.sqrt(10)
se_width = var_width.std() / np.sqrt(10)

# Imprimir los resultados del error estándar para longitud y ancho del sépalo
print("se-length:", se_length)
print("se-width:", se_width)

# Cálculo del error estándar combinado (Standard Error of the Difference)
sed = np.sqrt((se_length**2) + (se_width**2))

# Imprimir el resultado del error estándar combinado
print("sed:", sed)

# Cálculo de la estadística t
t_stat = (var_length.mean() - var_width.mean()) / sed

# Imprimir el resultado de la estadística t
print("t_stat:", t_stat)

# Realizar la prueba t de dos muestras (independientes)
p = ttest_ind(var_length, var_width)

# Imprimir el resultado de la prueba t
print("p:", p)

Resultados Explicados:

  1. se-length y se-width: Estos son los errores estándar de las medias de las muestras para la longitud y el ancho del sépalo, respectivamente. El valor del error estándar es una medida de cuánta variabilidad hay en las medias de las muestras.

  2. sed: Este es el error estándar combinado (Standard Error of the Difference) que se utiliza en la fórmula para calcular la estadística t. Es una medida de la variabilidad combinada entre las dos muestras.

  3. t_stat: Este es el valor de la estadística t, que se calcula dividiendo la diferencia de las medias de las muestras entre el error estándar combinado. Representa cuántas desviaciones estándar está separada la diferencia de medias del valor esperado (cero) bajo la hipótesis nula.

  4. p: Este es el resultado de la prueba t de dos muestras. Proporciona la estadística t calculada y el valor p asociado. El valor p es la probabilidad de obtener un resultado tan extremo o más extremo que el observado si las dos muestras se comportaran igual (hipótesis nula).

En resumen, el código realiza un análisis de dos muestras utilizando la prueba t, calculando errores estándar, estadísticas t y valores p para evaluar si hay diferencias significativas entre las medias de las muestras de “sepal-length” y “sepal-width” en la base de datos Iris. El valor p se utiliza para determinar si estas diferencias son estadísticamente significativas.

Les recomiendo esta página para comprender mejor los cálculos realizados en esta clase. Saludos, y a seguir estudiando!

Para los que no les quedo muy claro sobre que trata de probar la prueba t-test en este ejemplo, prueba que 2 medias poblacionales son iguales o no. El SED en esencia es igual que el SE, es el error estandar, solo que el SE es el error estandar de la distribucion muestral de las medias muestrales de una poblacion y el SED es el error estandar de la distribucion muestral de (x media 1 - x media 2) osea la distribucion de las diferencias entre ambas medias, en otras palabras SE es para relizar inferencias acerca de la media de una poblacion y el SED para realizar inferencias de la media con 2 poblaciones.

Algunas imagenes que necesite para entender el P - Value

Ya no funcionan algunas lineas del código que se menciona en esta clase. Yo lo resolví así (me ayudé de Gemini) se\_length = iris\['sepal-length'].std()/np.sqrt(10)se\_width = iris\['sepal-width'].std()/np.sqrt(10) t\_stat = (iris\['sepal-length'].mean() - iris\['sepal-width'].mean()) / sed p = ttest\_ind(iris\['sepal-length'], iris\['sepal-width'])
Con la base de datos cars del curso de Estadística Descriptiva, hice el ejercicio para probar la hipótesis nula que no hay diferencias entre las medias de los precios de los vehículos Toyota y de los vehículos Suzuki. Lo resultados son: t\_stat = `14.114195350124266` p = `6.079117649427607e-20` Se rechaza la hipótesis nula, esto significa que los datos proporcionan suficiente evidencia que hay una diferencia significativa entre el precio de las marcas Toyota y Suzuki A continuación el código: `df = pd.read_csv('cars_1.csv')` `df.head() ` ```python toyota_cars = df.loc[df['manufacturer_name'] == 'Toyota'] std_price_usd = toyota_cars['price_usd'].std() n_toyota = len(toyota_cars) se_price_t = std_price_usd / np.sqrt(n_toyota) ``````python suzuki_cars = df.loc[df['manufacturer_name'] == 'Suzuki'] std_price_usd_s = suzuki_cars['price_usd'].std() n_suzuki = len(suzuki_cars) se_price_s = std_price_usd_s / np.sqrt(n_suzuki) ```Error estándar para los precios de autos Toyota: 204.94709278859372 Error estándar para los precios de autos Suzuki: 243.81791323571133Cálculo de SED```python sed_1=np.sqrt((se_price_t**2) + (se_price_s**2)) print(sed_1) ```sed = 318.51292855567624Cálculo de t\_stat```python media_toyota = toyota_cars['price_usd'].mean() media_suzuki = suzuki_cars['price_usd'].mean() print(media_toyota) print(media_suzuki) t_stat = (media_toyota - media_suzuki)/sed_1 t_stat ```Media precio Toyota = 9798.15 Media precio Suzuki = 5302.59`t_stat = 14.114195350124266`Cálculo de p```python p = ttest_ind(toyota_cars['price_usd'], suzuki_cars['price_usd']) ````pvalue=6.079117649427607e-20)`
Hice el ejercicio de pruebas de hipótesis, utilizando la base de datos cars del curso de Estadística Descriptiva. Comparé los precios de los vehículos Toyota con los precios de los vehículos Suzuki, usando las herramientas del curso: `df = pd.read_csv('cars_1.csv')` `df.head()`
Chequen esta pagina aqui le entendi mas <https://www.statology.org/t-value-vs-p-value/#:~:text=For%20each%20test%2C%20the%20t-value%20is%20a%20way>,data%20if%20the%20null%20hypothesis%20is%20actually%20true.
No me queda claro cuál es la hipótesis nula que quiero rechazar en este caso. Hasta donde escuché, era saber si las distribuciones de `sepal_length` y `sepal_width` eran parecidas.
No entendi un jacaro de esa clase!!

Código para importar la base de datos

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
names = ['sepal-length','sepal-width','petal-length','petal-width','class']
iris = pd.read_csv(url,names = names)
iris.head()

Les comparto una tabla que me ha sido muy util a la hora de saber que prueba usar.

https://help.xlstat.com/es/6443-que-prueba-estadistica-deberia-utilizar

ademas hay que saber plantear la prueba de hipotesis en un experimento.
https://help.xlstat.com/es/6761-what-difference-between-two-tailed-and-one-tailed-test

recomiendo usar esta nomenclatura ya que igual manda un aviso que un futuro la forma que escribio la profesora sera reconocida como error:

p = ttest_ind(iris['sepal-length'],iris['sepal-width'])

Es decir indicamos primero en donde queremos sacar el mean, y le ponemos la funcion mean, en vez de llamar el mean y luego decir donde queremos ver.

Les dejo el código del ejemplo que se trata en este video

Consigna:
Para obtener que los alimentos tengan una buena asimilación deben de tener un PH menos a 7, es por eso que se analizaron 13 muestras de un alimento obteniendo los siguientes resultados, ¿Se puede decir estadísticamente con un nivel de confianza de 95% que este alimento es apto para el consumo humano?

import pandas as pd
import numpy as np

""" Ejercicio video Yt """

muestra_1 = [6.4,5.3,8.2,7.6,4.7,6.4,7.2,7.1,6.4,5.7,8.1,6.7,7.2]
muestra_1 = pd.Series(muestra_1)
muestra_1_list = list(muestra_1) 

mu = 7
muestra_1_mean = muestra_1.mean()
muestra_1_std = muestra_1.std()
muestra_1_var = muestra_1.var()
muestra_1_cant = muestra_1.count()
muestra_Grado_libertad = muestra_1_cant -1

t_test = (muestra_1_mean - mu) / (muestra_1_std / np.sqrt(muestra_1_cant))
t_test = round(t_test,3)


print(f """
Muestra: {muestra_1_list} \n

H0 = mu < 7
H1 = mu > 7 \n

Nivel de Confianza: 95%\n
Nivel de Significancia: 5%\n
t table: 1.78\n
Mu: {mu}\n
Media: {muestra_1_mean} \n
Desviación estándar: {muestra_1_std} \n
Varianza: {muestra_1_var} \n
n: {muestra_1_cant}  \n
GL: {muestra_Grado_libertad}  \n
t_test: {t_test} \n


Conclusión:
Al ser el t test ({t_test}) < (1.78) valor crítico obtenido en t table
No se rechaza Ho -> es un alimento apto para el consumo
""")

Solo para hacer notar un punto, la media de la distribución y la media muestral no son lo mismo. De la misma forma que la desviación estándar y la desviación muestral. Hay un concepto que tal vez este fuera del alcance de este curso, que son los grados de libertad que hace que el cálculo sea un poquito diferente para cada caso.

Les dejo este canal de You-Tube que me aclaro muchas cosas (en inglés): https://www.youtube.com/c/zedstatistics