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.
# Paso 1. Cargar paquetes necesarios
# ******************************************************************************
library(readr)
library(dplyr)
library(tidyr)
library(stringr)
library(BSDA)
# 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
# ******************************************************************************
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)
# ******************************************************************************
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
# ******************************************************************************
df_hd <- df_hd %>%
mutate(
chol_binary = ifelse(chol > 240, 1, 0),
heart_rate_binary = ifelse(heart_rate > 100, 1, 0)
)
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.
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.
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%.
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%.
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%.
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.
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.
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.