Maestría en Inteligencia Artificial - Universidad de La Salle

Materia: Ciencia de Datos

Actividad #5: Pruebas de Hipótesis y Visualización Interactiva.

Profesor: Manuel Francisco Romero Ospina

Alumno: Jofran José Aparicio Jaspe


Introducción

Las pruebas de hipótesis son una herramienta fundamental en ciencias de datos para determinar la validez de suposiciones sobre un conjunto de datos y evaluar la significancia estadística de los resultados obtenidos. Estas pruebas permiten a los analistas de datos confirmar o refutar hipótesis iniciales, lo que ayuda a guiar decisiones estratégicas basadas en evidencia. Al aplicar estas técnicas en Python y RStudio, los estudiantes podrán manejar datos complejos y obtener información valiosa que respalde la toma de decisiones informadas. Las pruebas de hipótesis son esenciales para identificar patrones y relaciones en los datos, proporcionando una base sólida para inferencias estadísticas y análisis predictivos.


Desarrollo de la actividad

Paso 1. Cargar paquetes necesarios

# Paso 1. Cargar paquetes necesarios
# ******************************************************************************
library(readr)
library(dplyr)
library(tidyr)
library(stringr)
library(BSDA)

Paso 2. Cargar y preparar la base de datos

# Paso 2. Cargar y preparar la base de datos
# ******************************************************************************
df_hd = read_csv("smoking_health_data_final.csv")
df_hd = as.data.frame(unclass(df_hd),
                           stringsAsFactors = TRUE)

Paso 3. Limpieza de datos

# Paso 3. Limpieza de datos
# ******************************************************************************
df_hd <- df_hd %>% distinct()
colSums(is.na(df_hd))
##            age            sex current_smoker     heart_rate blood_pressure 
##              0              0              0              0              0 
##   cigs_per_day           chol 
##             14              7
summary(df_hd)
##       age            sex       current_smoker   heart_rate     blood_pressure
##  Min.   :32.00   female:2081   no :1968       Min.   : 44.00   130/80 :  18  
##  1st Qu.:42.00   male  :1819   yes:1932       1st Qu.: 68.00   120/80 :  17  
##  Median :49.00                                Median : 75.00   110/70 :  15  
##  Mean   :49.54                                Mean   : 75.69   125/80 :  15  
##  3rd Qu.:56.00                                3rd Qu.: 82.00   105/70 :   9  
##  Max.   :70.00                                Max.   :143.00   107/73 :   9  
##                                                                (Other):3817  
##   cigs_per_day         chol      
##  Min.   : 0.000   Min.   :113.0  
##  1st Qu.: 0.000   1st Qu.:206.0  
##  Median : 0.000   Median :234.0  
##  Mean   : 9.169   Mean   :236.6  
##  3rd Qu.:20.000   3rd Qu.:263.0  
##  Max.   :70.000   Max.   :696.0  
##  NA's   :14       NA's   :7
unique(df_hd$sex)
## [1] male   female
## Levels: female male
unique(df_hd$current_smoker)
## [1] yes no 
## Levels: no yes
age_sex <- df_hd %>% arrange(age, sex)

Paso 4. Transformación de datos (Columnas con valores NA)

# Paso 4. Transformación de datos (Columnas con valores NA)
# ******************************************************************************
df_hd <- df_hd %>%
  mutate(
    cigs_per_day = as.numeric(cigs_per_day),
    chol = as.numeric(chol)
  )

# Imputar columna 'cigs_per_day'
# Si es fumador y NA → imputar con mediana de fumadores
# Si no es fumador y NA → imputar con 0

mediana_fumadores <- df_hd %>%
  filter(current_smoker == "yes", !is.na(cigs_per_day)) %>%
  summarise(mediana = median(cigs_per_day)) %>%
  pull(mediana)

df_hd <- df_hd %>%
  mutate(
    cigs_per_day = case_when(
      is.na(cigs_per_day) & current_smoker == "yes" ~ mediana_fumadores,
      is.na(cigs_per_day) & current_smoker == "no" ~ 0,
      TRUE ~ cigs_per_day
    )
  )

# Imputar columna 'chol' con mediana general
mediana_chol <- median(df_hd$chol, na.rm = TRUE)
df_hd <- df_hd %>%
  mutate(chol = ifelse(is.na(chol), mediana_chol, chol))

# Verifico que ya no haya valores NA
colSums(is.na(df_hd))
##            age            sex current_smoker     heart_rate blood_pressure 
##              0              0              0              0              0 
##   cigs_per_day           chol 
##              0              0

Paso 5. Creación de nuevas variables requeridas para la actividad

# Paso 5. Creación de nuevas variables requeridas para la actividad
# ******************************************************************************
df_hd <- df_hd %>%
  mutate(
    chol_binary = ifelse(chol > 240, 1, 0),
    heart_rate_binary = ifelse(heart_rate > 100, 1, 0)
  )

Prueba hipótesis para una muestra media

Ejercicio 1

Se desea comprobar si la frecuencia cardíaca promedio de los individuos en la muestra es igual a 75 latidos por minuto, valor que podría considerarse una referencia general para adultos sanos en reposo.

Hipótesis:

  • Hipótesis nula (H₀): La media poblacional de la frecuencia cardíaca es igual a 75.

  • Hipótesis alternativa (H₁): La media poblacional de la frecuencia cardíaca es diferente de 75.

z.test(x = df_hd$heart_rate,
       sigma.x = sd(df_hd$heart_rate, na.rm = TRUE),
       mu = 75,
       alternative = "two.sided",
       conf.level = 0.95)
## 
##  One-sample z-Test
## 
## data:  df_hd$heart_rate
## z = 3.5809, p-value = 0.0003423
## alternative hypothesis: true mean is not equal to 75
## 95 percent confidence interval:
##  75.31188 76.06607
## sample estimates:
## mean of x 
##  75.68897

Explicación del resultado de la prueba de hipótesis

  • Esta prueba compara la media muestral de la frecuencia cardíaca (heart_rate) con el valor de referencia de 75 latidos por minuto.

  • La hipótesis nula (H₀) es que la media poblacional es igual a 75.

  • La hipótesis alternativa (H₁) es que la media poblacional es diferente de 75.

  • La prueba Z devuelve un valor Z y un p-valor que nos ayuda a decidir si rechazamos o no la hipótesis nula.

¿Qué podemos decir del p-valor?

  • Si el p-valor < 0.05: hay evidencia suficiente para rechazar H₀ → la media poblacional de heart_rate es significativamente diferente de 75.

  • Si el p-valor ≥ 0.05: no se rechaza H₀ → no hay evidencia suficiente para decir que la media es distinta de 75.


Ejercicio 2

Se quiere evaluar si los niveles medios de colesterol en la muestra superan el valor umbral de 200 mg/dL, punto a partir del cual se considera que existe hipercolesterolemia.

Hipótesis:

  • Hipótesis nula (H₀): El nivel medio de colesterol en la población es menor o igual a 200.

  • Hipótesis alternativa (H₁): El nivel medio de colesterol en la población es mayor a 200.

z.test(x = df_hd$chol,
       sigma.x = sd(df_hd$chol, na.rm = TRUE),
       mu = 200,
       alternative = "greater",
       conf.level = 0.95)
## 
##  One-sample z-Test
## 
## data:  df_hd$chol
## z = 51.541, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
##  235.4235       NA
## sample estimates:
## mean of x 
##  236.5913

Explicación del resultado de la prueba de hipótesis

  • Se evalúa si el nivel medio de colesterol en la muestra supera 200 mg/dL (umbral de riesgo).

  • Hipótesis nula (H₀): El nivel medio poblacional de colesterol es 200 mg/dL.

  • Hipótesis alternativa (H₁): El nivel medio poblacional de colesterol es > 200 mg/dL.

  • La prueba Z calculará si la diferencia entre la media muestral y el umbral es estadísticamente significativa con base en la desviación estándar y el tamaño de muestra.

¿Qué podemos decir del p-valor?

  • Si el p-valor < 0.05: hay evidencia suficiente para rechazar H₀, lo que indica que el nivel medio de colesterol es significativamente mayor a 200 mg/dL.

  • Si el p-valor ≥ 0.05: no se rechaza H₀, por tanto, no hay evidencia suficiente para afirmar que el colesterol medio es mayor a 200.


Prueba hipótesis de una muestra proporcional

Ejercicio 3

Se considera que una persona tiene colesterol alto si su nivel es mayor a 240 mg/dL (según criterios médicos comunes).

Hipótesis:

  • H₀: La proporción de personas con colesterol alto es igual al 20%.

  • H₁: La proporción de personas con colesterol alto es mayor al 20%.

tabla_chol <- table(df_hd$chol_binary)
prop.test(x = tabla_chol["1"],
          n = sum(tabla_chol),
          p = 0.20,
          alternative = "greater",
          conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  tabla_chol["1"] out of sum(tabla_chol), null probability 0.2
## X-squared = 1265.1, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
##  0.4148435 1.0000000
## sample estimates:
##         p 
## 0.4279487

¿Qué indica la prueba de hipótesis?
La prueba evalúa si la proporción de personas con colesterol alto (>240 mg/dL) en la muestra es mayor al 20%, valor de referencia.

¿Qué podemos decir del p-valor?

  • Si el p-valor < 0.05, hay evidencia estadísticamente significativa para rechazar la hipótesis nula. Es decir, la proporción de personas con colesterol alto sería significativamente mayor al 20%.

  • Si el p-valor ≥ 0.05, no se rechaza la hipótesis nula, lo cual indica que no hay suficiente evidencia para afirmar que la proporción es mayor al 20%.


Ejercicio 4

Se considera que una persona tiene taquicardia si su frecuencia cardíaca es mayor a 100 lpm (según criterios clínicos).

Hipótesis:

  • H₀: La proporción de personas con taquicardia es igual al 5%.

  • H₁: La proporción de personas con taquicardia es diferente del 5%.

tabla_hr <- table(df_hd$heart_rate_binary)
prop.test(x = tabla_hr["1"],
          n = sum(tabla_hr),
          p = 0.05,
          alternative = "two.sided",
          conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  tabla_hr["1"] out of sum(tabla_hr), null probability 0.05
## X-squared = 55.613, df = 1, p-value = 8.825e-14
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
##  0.01939026 0.02926409
## sample estimates:
##          p 
## 0.02384615

¿Qué indica la prueba de hipótesis?
Evalúa si la proporción de personas con taquicardia (frecuencia cardíaca > 100 lpm) es diferente del 5%.

¿Qué podemos decir del p-valor?

  • Si el p-valor < 0.05, se rechaza la hipótesis nula: la proporción de taquicardia es significativamente distinta del 5%.

  • Si el p-valor ≥ 0.05, no se rechaza H₀: no hay suficiente evidencia para afirmar que la proporción es diferente del 5%.


Prueba hipótesis para la diferencia de medias

En el estudio sobre la salud cardiovascular de adultos, se recopilaron datos fisiológicos de un grupo de individuos clasificados como fumadores y no fumadores. Entre las variables medidas se encuentra el nivel de colesterol en sangre (mg/dL), un indicador importante de riesgo cardiovascular. Con el objetivo de evaluar si existe una diferencia significativa en los niveles promedio de colesterol entre fumadores y no fumadores, se solicita realizar una prueba de hipótesis para comparar las medias de colesterol entre ambos grupos. Asuma independencia entre las muestras y considere una significancia del 5%.

Ejercicio 5

Se desea evaluar si existen diferencias significativas en los niveles promedio de colesterol entre personas fumadoras y no fumadoras.

Hipótesis:

  • H₀: No hay diferencia en los niveles medios de colesterol entre fumadores y no fumadores.

  • H₁: Existe una diferencia significativa entre los niveles medios de colesterol.

t.test(chol ~ current_smoker,
       data = df_hd,
       alternative = "two.sided",
       var.equal = FALSE,          
       conf.level = 0.95)
## 
##  Welch Two Sample t-test
## 
## data:  chol by current_smoker
## t = 2.9129, df = 3892, p-value = 0.003601
## alternative hypothesis: true difference in means between group no and group yes is not equal to 0
## 95 percent confidence interval:
##  1.351271 6.914781
## sample estimates:
##  mean in group no mean in group yes 
##          238.6387          234.5057

¿Qué indica la prueba?

Compara los niveles promedio de colesterol entre quienes fuman actualmente y quienes no.

¿Qué podemos decir del p-valor?

  • Si p-valor < 0.05: hay diferencia significativa → el hábito de fumar está asociado con niveles distintos de colesterol.

  • Si p-valor ≥ 0.05: no hay diferencia significativa → no se evidencia que fumar afecte el colesterol en esta muestra.


Ejercicio 6

Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no.

Hipótesis:

  • H₀: No hay diferencia en la frecuencia cardíaca promedio entre fumadores y no fumadores.

  • H₁: La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.

t.test(heart_rate ~ current_smoker,
       data = df_hd,
       alternative = "greater",   
       var.equal = FALSE,         
       conf.level = 0.95)
## 
##  Welch Two Sample t-test
## 
## data:  heart_rate by current_smoker
## t = -3.5809, df = 3896.4, p-value = 0.9998
## alternative hypothesis: true difference in means between group no and group yes is greater than 0
## 95 percent confidence interval:
##  -2.007336       Inf
## sample estimates:
##  mean in group no mean in group yes 
##          75.00762          76.38302

¿Qué indica la prueba?

Compara si la media de heart_rate (frecuencia cardíaca) es mayor en fumadores que en no fumadores.

¿Qué podemos decir del p-valor?

  • Si p-valor < 0.05, rechazamos H₀ → hay evidencia estadística de que los fumadores tienen una frecuencia cardíaca promedio mayor.

  • Si p-valor ≥ 0.05, no se puede rechazar H₀ → no hay evidencia suficiente para afirmar que los fumadores tengan mayor frecuencia cardíaca.


Ejercicio 7

En el estudio se analiza si existe una diferencia significativa en la proporción de personas con colesterol alto (definido como un nivel superior a 240 mg/dL) entre fumadores y no fumadores. Para ello, se utilizaron los datos recolectados en una base que incluye variables clínicas y hábitos personales. Con base en esta información, formule y realice una prueba de hipótesis que permita determinar si la proporción de individuos con colesterol elevado difiere entre quienes fuman y quienes no lo hacen. Utilice un nivel de significancia del 5%.

Se define colesterol alto como un valor de colesterol > 240 mg/dL.

Hipótesis:

  • H₀: La proporción de personas con colesterol alto es la misma en fumadores y no fumadores.

  • H₁: La proporción de personas con colesterol alto es diferente entre fumadores y no fumadores.

tabla_chol_2 <- table(df_hd$chol_binary, df_hd$current_smoker)
prop.test(tabla_chol_2, alternative = "two.sided", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  tabla_chol_2
## X-squared = 5.6732, df = 1, p-value = 0.01723
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.070226679 -0.006854829
## sample estimates:
##    prop 1    prop 2 
## 0.4881219 0.5266627

¿Qué indica la prueba?

Compara si la proporción de personas con colesterol alto (chol_binary = 1) difiere entre fumadores y no fumadores.

¿Qué podemos decir del p-valor?

  • Si p-valor < 0.05, se rechaza H₀ → existe evidencia estadística de que la proporción de personas con colesterol alto difiere entre fumadores y no fumadores.

  • Si p-valor ≥ 0.05, no se rechaza H₀ → no hay suficiente evidencia para afirmar que las proporciones sean diferentes.

!Fin de la actividad!