Fundamentos de estadística inferencial

1

Estadística Inferencial para Ciencia de Datos e IA

2

Componentes Básicos de la Estadística

3

Distribución Normal: Conceptos y Ejemplos Prácticos

4

Tipos de Muestreo y Teorema del Límite Central

5

Funciones de muestra en Python: aleatorio y sistemático

6

Muestreo Estratificado: Creación y Aplicación en Python

Quiz: Fundamentos de estadística inferencial

Estadísticos y cálculos

7

Cálculo de la Media Muestral y Conceptos de Estadística Básica

8

Diferencias entre varianza y desviación estándar muestral y poblacional

9

Varianza y Desviación Estándar Automatizadas en Python

10

Intervalos de Confianza en Estadística y Ciencia de Datos

11

Cálculo de Intervalos de Confianza paso a paso

12

Cálculo y visualización de intervalos de confianza en Python

Quiz: Estadísticos y cálculos

Pruebas de hipótesis y validación

13

Pruebas de Hipótesis en Ciencia de Datos e Inteligencia Artificial

14

Pruebas de Hipótesis: Test-Student, Pearson y ANOVA

15

Errores Tipo I y II en Pruebas de Hipótesis

16

Pruebas de Hipótesis con Python: Distribución t de Student

17

Análisis de Correlación y ANOVA en Python

18

Técnica de Bootstrapping para Muestras Pequeñas

19

Bootstrapping y Remuestreo en Python: Automatización Práctica

20

Validación Cruzada en Modelos de Inteligencia Artificial

21

Automatización de Validación Cruzada en Python para Modelos Predictivos

Quiz: Pruebas de hipótesis y validación

Cierre del curso

22

Estadística para Ciencia de Datos y Machine Learning

No tienes acceso a esta clase

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

Pruebas de Hipótesis con Python: Distribución t de Student

16/22
Recursos

¿Cómo realizar pruebas de hipótesis en Python?

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 dataset
url = "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 dataset
print(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.

# Calcular el error estándar
se_length_sd = iris["sepal_length"].std() / np.sqrt(10)
se_width_sd = iris["sepal_width"].std() / np.sqrt(10)

Paso 2: Calcular la desviación estándar conjunta

Utilizamos el error estándar previamente calculado para obtener la desviación estándar más amplia (set).

# Calcular la desviación estándar conjunta
set_sd = np.sqrt(se_length_sd**2 + se_width_sd**2)

Paso 3: Calcular el valor t

El valor t es esencial para determinar si la diferencia entre las medias es estadísticamente significativa.

# Calcular la estadística t
tstat = (iris["sepal_length"].mean() - iris["sepal_width"].mean()) / set_sd
print(f"Valor t: {tstat}")

Paso 4: Obtener el valor p

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 relacionado
t_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!

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.

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()

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!!

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