En el presente trabajo se realizará un análisis de datos para comprender las implicaciones del tabaquismo sobre la salud humana. El conjunto de datos utilizado para el presente código es el Smokers Health Data, la cual cuenta con información fisiológica y médica de personas fumadoras y no fumadoras, lo que permite abordar con profundidad la relación entre este hábito y diversos indicadores biomédicos. Mencionada base de datos cuenta con múltiples variables como el colesterol, la frecuencia cardíaca, el índice de masa corporal, y la presión arterial, además de factores cualitativos como el sexo y el estado de fumador.
Aunado a lo anterior, para el presente proyecto se van a desarrollar y resolver diversas pruebas de hipótesis, con el fin de contrastar medias y proporciones de variables de salud relevantes. Las pruebas se ejecutarán a partir de parámetros clínicos de referencia como latidos por minuto en la frecuencia cardíaca en reposo, taquicardia, los umbrales para niveles normales y altos de colesterol, niveles promedio de colesterol entre personas fumadoras y no fumadoras y finalmente se analizará si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no.
Finalmente, este análisis busca validar hipótesis estadísticas y generar interpretaciones que puedan ser útiles en contextos de salud pública, prevención y diagnóstico médico. Al integrar herramientas de visualización con enfoques cuantitativos, se facilita la comprensión de patrones clínicos complejos y se fortalece la toma de decisiones basada en datos.
En la presente investigación se analizará la relación entre el hábito de fumar y diversas condiciones de salud, con el fin de comprobar si existe un efecto significativo del tabaquismo en el bienestar físico. Asimismo, dentro del trabajo se presentarán análisis de enfermedades respiratorias y cardiovasculares de fumadores y no fumadores para contrastar las hipótesis planteadas.
Complementado a lo anterior, durante la presente investigación se tomaron en cuenta variables como Edad, frecuencia cardíaca (heart_rate), nivel de oxígeno en sangre (SpO2), temperatura corporal, colesterol, nivel de glucosa, índice de masa corporal (IMC), nivel de hemoglobina, flujo respiratorio (respiratory_rate) y la capacidad pulmonar (lung_capacity), garantizando así el control de factores claves de la salud.
```{r Cargue de Datos} library(readr) library(dplyr) library(ggplot2) library(stringr) library(tidyr) library(BSDA)
2. Preparar la base de datos
```{r Preparación de Datos message=FALSE, warning=FALSE, paged.print=FALSE}
health_data <- read_csv("smoking_health_data_final.csv")
health_data <- as.data.frame(unclass(health_data),
stringsAsFactors = TRUE)
str(health_data)
dim(health_data)
{r Limpieza de Datos} health_data <- health_data %>% distinct() colSums(is.na(health_data)) summary(health_data) unique(health_data$sex) unique(health_data$current_smoker) age_sex <- health_data %>% arrange(age, sex)
{r Verificación de NA} anyNA(health_data)
{r Reemplazar NA} # Reemplazar NA con la media de la columna health_data$cigs_per_day <- ifelse(is.na(health_data$cigs_per_day), mean(health_data$cigs_per_day, na.rm = TRUE), health_data$cigs_per_day)
{r Reemplazar NA} # Reemplazar NA con la media de la columna health_data$chol <- ifelse(is.na(health_data$chol), mean(health_data$chol, na.rm = TRUE), health_data$chol)
{r Verificación de NA} anyNA(health_data)
{r Mejorar Base de Datos} health_data <- health_data %>% mutate( grupo_edad = case_when( age < 25 ~ "Joven", age < 45 ~ "Adulto joven", age < 65 ~ "Adulto maduro", TRUE ~ "Mayor" ), colesterol_alto = ifelse(chol > 240, 1, 0), taquicardia = ifelse(heart_rate > 100, 1, 0) )
{r Visualización de los datos} ggplot(health_data, aes(x = current_smoker, y = chol)) + geom_boxplot(fill = "skyblue") + labs(title = "Distribución de colesterol según condición de fumador", x = "Fumador actual", y = "Colesterol (mg/dL)")
Esta gráfica de cajas muestra la distribución de los niveles de colesterol según la condición de fumador actual. Se observa que tanto fumadores como no fumadores presentan medianas similares, alrededor de los 230 mg/dL, lo cual indica que, a nivel general, no hay una diferencia notable en la mediana de colesterol entre ambos grupos. Por otro lado,ambos presentan una amplia dispersión de los datos y numerosos valores atípicos, especialmente hacia niveles elevados de colesterol.
```{r Distribución niveles de Colesterol} ggplot(health_data, aes(x = chol)) + geom_histogram(binwidth = 10, fill = “steelblue”, color = “black”) + labs(title = “Distribución de niveles de colesterol”, x = “Colesterol (mg/dL)”, y = “Frecuencia”)
Se observa una forma aproximadamente simétrica con una leve asimetría a la derecha, indicando que la mayoría de los individuos presentan niveles de colesterol entre 180 y 260 mg/dL. La frecuencia máxima se encuentra alrededor de los 230 mg/dL, mientras que hay pocos casos con valores extremos por encima de los 400 mg/dL, considerados atípicos. Esta distribución sugiere que, aunque la mayoría de los participantes tienen niveles de colesterol dentro de un rango moderado, existe un subconjunto con valores significativamente elevados que podrían representar un riesgo para la salud cardiovascular.
```{r Proporción de Colesterol Alto}
ggplot(health_data, aes(x = grupo_edad, fill = factor(colesterol_alto))) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent) +
labs(title = "Proporción de colesterol alto por grupo etario",
x = "Grupo de edad", y = "Proporción",
fill = "Colesterol alto (1 = sí)")
La gráfica de barras apiladas muestra la proporción de personas con colesterol alto (valor 1) y normal (valor 0) según el grupo etario. Se observa que los adultos jóvenes presentan una menor proporción de colesterol alto, con aproximadamente un 30% de los casos. En cambio, los adultos maduros y los mayores muestran proporciones más elevadas, superando el 50% de individuos con colesterol alto en ambos grupos. Esto evidencia una tendencia clara: a mayor edad, mayor es la prevalencia de colesterol elevado, lo cual resalta la importancia de intervenciones preventivas dirigidas especialmente a poblaciones de mayor edad.
```{r Distribución del colesterol por sexo} ggplot(health_data, aes(x = sex, y = chol, fill = sex)) + geom_boxplot() + labs(title = “Distribución del colesterol por sexo”, x = “Sexo”, y = “Colesterol (mg/dL)”)
El diagrama de caja muestra la distribución de los niveles de colesterol por sexo, diferenciando entre mujeres (female) y hombres (male). En ambos grupos se observa una mediana similar, alrededor de los 240 mg/dL, aunque las mujeres presentan una ligera tendencia a tener niveles más altos. También se evidencian valores atípicos en ambos sexos, con algunos casos extremos que superan los 600 mg/dL. La dispersión de los datos es amplia en los dos grupos, lo que indica una variabilidad considerable en los niveles de colesterol independientemente del sexo.
```{r Matriz de correlación entre variables cuantitativas}
# Paso 1: Seleccionar variables numéricas relevantes
datos_corr <- health_data %>%
select(age, chol, heart_rate, cigs_per_day) %>%
na.omit()
# Paso 2: Calcular matriz de correlaciones
matriz_corr <- round(cor(datos_corr), 2)
# Paso 3: Convertir matriz en formato largo para ggplot
corr_df <- as.data.frame(as.table(matriz_corr)) %>%
rename(Var1 = Var1, Var2 = Var2, Correlation = Freq)
# Paso 4: Visualizar con ggplot2 como heatmap
ggplot(corr_df, aes(x = Var1, y = Var2, fill = Correlation)) +
geom_tile(color = "white") +
geom_text(aes(label = Correlation), color = "black", size = 5) +
scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0,
limit = c(-1, 1), space = "Lab", name = "Correlación") +
theme_minimal() +
labs(title = "Matriz de correlación entre variables cuantitativas",
x = "", y = "")
La matriz de correlación muestra la relación entre variables cuantitativas como la edad, el colesterol, la frecuencia cardíaca y el número de cigarrillos consumidos por día. Se observa una correlación positiva débil entre la edad y el colesterol (0.26), lo que indica que a mayor edad, los niveles de colesterol tienden a aumentar. Por otro lado, existe una correlación negativa entre la edad y el consumo de cigarrillos por día (-0.19), sugiriendo que las personas mayores tienden a fumar menos. Las demás correlaciones son muy bajas, lo que refleja relaciones débiles o prácticamente inexistentes entre las variables analizadas.
```{r} health_data %>% summarise(media_colesterol = mean(chol), sd_colesterol = sd(chol))
health_data %>% group_by(current_smoker) %>% summarise(media_colesterol = mean(chol), sd_colesterol = sd(chol))
health_data %>% group_by(current_smoker, sex) %>% summarise(media_colesterol = mean(chol), sd_colesterol = sd(chol))
7. Solución de Hipótesis
```{r Hipotesis 1}
# Prueba de hipótesis para media de frecuencia cardíaca (μ = 75)
z.test(x = health_data$heart_rate, sigma.x = sd(health_data$heart_rate), mu = 75, alternative = "two.sided", conf.level = 0.95)
La prueba de hipótesis 1 busca determinar si la media poblacional de la frecuencia cardíaca difiere de 75 latidos por minuto. Dados los resultados anteriores, se obtuvo un estadístico z de 3.5809 y un p-valor de 0.0003423. Por lo cual, se puede decir que los resultados obtenidos muestran una evidencia para rechazar la hipótesis nula (H₀) y aceptar la hipótesis alternativa (H₁), concluyendo que la media poblacional de la frecuencia cardíaca no es igual a 75. Además, el intervalo de confianza del 95% ([75.31188, 76.06607]) no incluye el valor 75, lo que refuerza la hipótesis alternativa.
{r Hipotesis 2} #Evaluar si los niveles medios de colesterol en la muestra superan el valor umbral de 200 mg/dL anyNA(health_data) z.test(x = health_data$chol, sigma.x = sd(health_data$chol), mu = 200, alternative = "greater", conf.level = 0.95)
En esta hipótesis los niveles medios de colesterol en la muestra superan el umbral de 200 mg/dL. La hipótesis nula (H₀) establece que el nivel medio de colesterol es menor o igual a 200 mg/dL, mientras que la hipótesis alternativa (H₁) plantea que dicho nivel es mayor. Los resultados obtenidos muestran un estadístico Z de 51.548 y un p-valor menor a 2.2e-16. Dado que el p-valor es menor que el nivel de significancia (α = 0.05), se rechaza la hipótesis nula. Por lo tanto, se concluye que el nivel medio de colesterol en la muestra es mayor a 200 mg/dL, lo que evidencia la presencia de hipercolesterolemia en la población analizada dentro de la base de
```{r Hipotesis 3} #Prueba hipótesis de una muestra proporcional #Se considera que una persona tiene colesterol alto si su nivel es mayor a 240 mg/dL
health_data\(colesterol_alto <- ifelse(!is.na(health_data\)chol) & health_data$chol > 240, 1, 0)
table(health_data$colesterol_alto)
prop.test( x = sum(health_data$colesterol_alto),
n = nrow(health_data),
p = 0.20,
alternative = “greater”,
conf.level = 0.95
)
En esta fase se realizó una prueba de hipótesis con el objetivo de evaluar si la proporción de personas con colesterol alto (definido como niveles de colesterol mayores a 240 mg/dL) en la muestra supera el 20%. La hipótesis nula establece que dicha proporción es igual al 20%, mientras que la hipótesis alternativa plantea que es mayor. Los resultados obtenidos muestran una proporción muestral del 42.8%, un estadístico de prueba de 1265.1 y un p-valor inferior a 2.2e-16. Asimismo, el intervalo de confianza al 95% va de 0.4148 a 1.0000, sin incluir el valor 0.20. Por lo tanto, se rechaza la hipótesis nula y se concluye que existe evidencia estadísticamente significativa para afirmar que la proporción de personas con colesterol alto en la muestra es mayor al 20%.
```{r Hipotesis 4}
# Proporción de personas con taquicardia (p ≠ 0.05)
health_data$taquicardia <- ifelse(health_data$heart_rate > 100, 1, 0)
prop.test(
x = sum(health_data$taquicardia),
n = nrow(health_data),
p = 0.05,
alternative = "two.sided",
conf.level = 0.95
)
En esta hipotesis, primero se evaluó si la proporción de personas con una frecuencia cardíaca mayor a 100 lpm, es distinta del 5%. Para ello, se creó una variable binaria que toma el valor de 1 si el paciente presenta taquicardia y 0 en caso contrario. Posteriormente, se aplicó una prueba de proporciones (prop.test) con hipótesis nula (H₀) que establece que la proporción es igual al 5% (p = 0.05), frente a una hipótesis alternativa (H₁) que indica que la proporción es diferente (p ≠ 0.05). Los resultados obtenidos muestran una proporción muestral de 2.38%, un intervalo de confianza del 95% entre 1.94% y 2.93%, y un p-valor de 8.825e-14. Dado que el p-valor es menor que el nivel de significancia (0.05) y que el intervalo de confianza no incluye el valor 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadística que permite afirmar que la proporción de personas con taquicardia en la muestra es diferente al 5%.
```{r Hipotesis 5} # Diferencia en proporción de colesterol alto entre fumadores y no fumadores health_data\(current_smoker <- as.factor(health_data\)current_smoker)
t.test(cholesterol ~ current_smoker, data = health_data, alternative = “two.sided”, conf.level = 0.95, var.equal = FALSE)
La hipótesis planteada tiene como objetivo evaluar si existe una diferencia significativa en los niveles medios de colesterol entre personas fumadoras y no fumadoras. Para lograr esto se aplicó una prueba t para muestras independientes (t.test), utilizando la versión de Welch al no asumir igualdad de varianzas. El resultado obtenido arrojó un valor p de 0.0036, el cual es menor al nivel de significancia del 5% (α = 0.05), lo que conduce al rechazo de la hipótesis nula. Esto indica que sí existe una diferencia significativa en los niveles promedio de colesterol entre los grupos comparados. Además, el intervalo de confianza del 95% para la diferencia de medias, que va de 1.35 a 6.91, no incluye el valor cero, lo que refuerza la hipótesis alternativa.
```{r HIPÓTESIS 6: A.}
# -----------------------------------------------
# Asegurar que las variables clave sean factores
# -----------------------------------------------
health_data$current_smoker <- as.factor(health_data$current_smoker)
# -----------------------------------------------
# Frecuencia cardíaca entre fumadores y no fumadores
# -----------------------------------------------
# Filtrar los datos por condición de fumador
fumadores <- health_data %>% filter(current_smoker == "yes")
nofumadores <- health_data %>% filter(current_smoker == "no")
# Prueba t de medias (H₁: fumadores > no fumadores en frecuencia cardíaca)
t.test(
fumadores$heart_rate,
nofumadores$heart_rate,
alternative = "greater",
var.equal = FALSE
)
En la presente hipótesis se aplicó una prueba t de dos muestras independientes con una hipótesis alternativa unilateral (fumadores > no fumadores). El valor p obtenido fue de 0.0001733, lo cual es menor que el nivel de significancia habitual (α = 0.05). Esto indica que se rechaza la hipótesis nula (H₀) y se acepta la hipótesis alternativa (H₁). Por tanto, se concluye que estadísticamente, la frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.
```{r HIPÓTESIS 6: B.}
health_data <- health_data %>% mutate(colesterol_alto = ifelse(chol > 240, 1, 0))
tabla_fumadores <- table(health_data\(current_smoker, health_data\)colesterol_alto)
fumadores_alto <- tabla_fumadores[“yes”, “1”] fumadores_total <- sum(tabla_fumadores[“yes”, ])
nofumadores_alto <- tabla_fumadores[“no”, “1”] nofumadores_total <- sum(tabla_fumadores[“no”, ])
prop.test( x = c(fumadores_alto, nofumadores_alto), n = c(fumadores_total, nofumadores_total), alternative = “two.sided”, correct = FALSE )
```
En este análisis se evaluó si la proporción de personas con colesterol alto (colesterol > 240 mg/dL) difiere entre fumadores y no fumadores. La prueba de proporciones arrojó un valor p de 0.01723, menor al nivel de significancia del 5%, lo que indica que se rechaza la hipótesis nula y se concluye que existe una diferencia significativa entre ambos grupos. El intervalo de confianza del 95% para la diferencia de proporciones (-0.0688 a -0.0067) no incluye el cero, reforzando esta conclusión. Aunque ambas proporciones son elevadas, se observa que los no fumadores presentan una proporción ligeramente mayor de colesterol alto (44.66%) en comparación con los fumadores (40.89%), lo que sugiere que podrían influir otros factores además del tabaquismo en los niveles de colesterol.
Las pruebas estadísticas aplicadas permitieron analizar diferentes hipótesis relacionadas con los niveles de colesterol en función de variables como el hábito de fumar. Los análisis realizados, incluyendo la prueba t para muestras independientes y la prueba z, ofrecieron evidencia estadística sólida sobre la existencia de diferencias significativas entre los grupos evaluados, especialmente entre fumadores y no fumadores, lo cual genera una relación entre el tabaquismo y niveles elevados de colesterol.
Aunado a lo anterior, la correcta implementación de técnicas de limpieza y transformación de datos fue fundamental para garantizar la validez de los resultados. Se reemplazaron valores faltantes de manera adecuada y se organizaron las variables cualitativas y cuantitativas conforme a los requerimientos del análisis estadístico. Esto permitió evitar sesgos y asegurar la confiabilidad de las pruebas de hipótesis.
Finalmente, el trabajo evidencia cómo el análisis estadístico puede contribuir de manera decisiva a la toma de decisiones clínicas y a la formulación de políticas de salud. Determinar que los niveles de colesterol presentan diferencias significativas según ciertos factores de riesgo permite orientar acciones de prevención y tratamiento más efectivas, basadas en evidencia cuantitativa.