##Introducción
El conjunto de datos Smokers Health Data incluye información variada sobre la salud de personas fumadoras y no fumadoras. Contiene datos numéricos como edad, ritmo cardíaco, nivel de oxígeno, temperatura, colesterol, glucosa, IMC, hemoglobina y funciones respiratorias. También incluye datos cualitativos como sexo, si la persona fuma, presión arterial en texto y presencia de enfermedades respiratorias o cardíacas. Esta información permite comparar la salud entre fumadores y no fumadores, identificar patrones relacionados con el tabaquismo y crear modelos para predecir riesgos en la salud.
A continuación, las librearías necesarias para el despliegue del model y análisis descriptivo e inferencial.
Para comenzar, es importante garantizar un entorno limpio o para asegurarse de que no haya conflictos de nombres de variables al ejecutar el código.
rm(list = ls())
Se procede a la carga del dataset correspondiente.
ruta<-"smoking_health_data_final.csv"
df_smokers <- read_csv(ruta)
## Rows: 3900 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): sex, current_smoker, blood_pressure
## dbl (4): age, heart_rate, cigs_per_day, chol
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_smokers <- as.data.frame(unclass(df_smokers),
stringsAsFactors = TRUE)
str(df_smokers)
## 'data.frame': 3900 obs. of 7 variables:
## $ age : num 54 45 58 42 42 57 43 42 37 49 ...
## $ sex : Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 2 ...
## $ current_smoker: Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ heart_rate : num 95 64 81 90 62 62 75 66 65 93 ...
## $ blood_pressure: Factor w/ 2317 levels "100.5/62","100.5/66",..: 230 642 869 671 572 143 198 723 709 874 ...
## $ cigs_per_day : num NA NA NA NA NA NA NA NA NA NA ...
## $ chol : num 219 248 235 225 226 223 222 196 188 256 ...
dim(df_smokers)
## [1] 3900 7
A continuación, se procede a la limpieza de los datos.
df_smokers <- df_smokers %>% distinct()
colSums(is.na(df_smokers))
## age sex current_smoker heart_rate blood_pressure
## 0 0 0 0 0
## cigs_per_day chol
## 14 7
summary(df_smokers)
## 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_smokers$sex)
## [1] male female
## Levels: female male
unique(df_smokers$current_smoker)
## [1] yes no
## Levels: no yes
age_sex <- df_smokers %>% arrange(age, sex)
A continuación, se definen las nuevas variables para el estudio.
df_smokers <- df_smokers %>%
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)
)
Se procede a mostrar la visualización de Fumador Vs Colesterol.
ggplot(df_smokers, aes(x = current_smoker, y = chol)) +
geom_boxplot(fill = "red") +
labs(title = "Distribucion de colesterol segun condicion de fumador",
x = "Fumador", y = "Colesterol (mg/dL)")
## Warning: Removed 7 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
Se procede a mostrar el respectivo análisis descriptivo.
df_smokers %>%
summarise(media_colesterol = mean(chol), sd_colesterol = sd(chol))
## media_colesterol sd_colesterol
## 1 NA NA
df_smokers %>%
group_by(current_smoker) %>%
summarise(media_colesterol = mean(chol), sd_colesterol = sd(chol))
## # A tibble: 2 × 3
## current_smoker media_colesterol sd_colesterol
## <fct> <dbl> <dbl>
## 1 no NA NA
## 2 yes NA NA
df_smokers %>%
group_by(current_smoker, sex) %>%
summarise(media_colesterol = mean(chol), sd_colesterol = sd(chol))
## `summarise()` has grouped output by 'current_smoker'. You can override using
## the `.groups` argument.
## # A tibble: 4 × 4
## # Groups: current_smoker [2]
## current_smoker sex media_colesterol sd_colesterol
## <fct> <fct> <dbl> <dbl>
## 1 no female 243. 45.8
## 2 no male NA NA
## 3 yes female 234. 45.9
## 4 yes male NA NA
A. Hipótesis nula (\(H_0\)): la media poblacional es igual a 75 (\(μ\) = 75).
B. Hipótesis alternativa (\(H_1\)): la media poblacional es distinta de 75 (\(μ\) ≠ 75).
z.test(x = df_smokers$heart_rate,
sigma.x = sd(df_smokers$heart_rate, na.rm = TRUE),
mu = 75,
alternative = "two.sided",
conf.level = 0.95)
##
## One-sample z-Test
##
## data: df_smokers$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
Los resultados muestran lo siguiente:
-Como el valor p es menor a 0.05, hay evidencia suficiente para rechazar la hipótesis nula, lo que indica que la frecuencia cardíaca promedio de la población no es igual a 75 latidos por minuto.
-El intervalo de confianza del 95% (entre 75.31 y 76.07) y la media estimada de 75.69 confirman que, según los datos analizados, la frecuencia cardíaca promedio es significativamente diferente del valor de referencia.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
-Hipótesis nula (\(H_0\)): El nivel medio de colesterol en la población es menor o igual a 200 mg/dL.
-Hipótesis alternativa (\(H_1\)): El nivel medio de colesterol en la población es mayor a 200 mg/dL.
z.test(x = df_smokers$chol,
sigma.x = sd(df_smokers$chol, na.rm = TRUE),
mu = 200,
alternative = "greater",
conf.level = 0.95)
##
## One-sample z-Test
##
## data: df_smokers$chol
## z = 51.456, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
## 235.4261 NA
## sample estimates:
## mean of x
## 236.5959
-El valor p menor a 0.05 indica que hay evidencia estadística suficiente para rechazar la hipótesis nula y afirmar que el nivel promedio de colesterol supera los 200 mg/dL.
-El intervalo de confianza del 95% muestra que el colesterol medio es mayor a 235.42 mg/dL, lo que respalda que, en la población analizada, el promedio de colesterol es significativamente superior al valor de referencia.
-Hipótesis nula (\(H_0\)): La proporción de personas con colesterol alto es igual al 20%.
-Hipótesis alternativa (\(H_1\)): La proporción de personas con colesterol alto es mayor al 20%.
df_smokers$chol_alto <- ifelse(df_smokers$chol > 240, 1, 0)
prop.test(x = sum(df_smokers$chol_alto, na.rm = TRUE),
n = sum(!is.na(df_smokers$chol_alto)),
p = 0.20,
alternative = "greater",
conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(df_smokers$chol_alto, na.rm = TRUE) out of sum(!is.na(df_smokers$chol_alto)), null probability 0.2
## X-squared = 1271.4, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
## 0.4155977 1.0000000
## sample estimates:
## p
## 0.4287182
-Dado que el valor p es menor a 0.05, hay evidencia estadística suficiente para rechazar la hipótesis nula y concluir que la proporción de personas con colesterol elevado es mayor al 20%.
-El intervalo de confianza del 95% indica que al menos el 41.56% presenta colesterol alto, y la proporción estimada en la muestra es del 42.8%, lo que confirma que este problema afecta a una parte significativa de la población analizada.
-Hipótesis nula (\(H_0\)): La proporción de personas con taquicardia es igual al 5%.
-Hipótesis alternativa (\(H_1\)): La proporción de personas con taquicardia es diferente del 5%.
df_smokers$taquicardia <- ifelse(df_smokers$heart_rate > 100, 1, 0)
prop.test(x = sum(df_smokers$taquicardia, na.rm = TRUE),
n = sum(!is.na(df_smokers$taquicardia)),
p = 0.05,
alternative = "two.sided",
conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(df_smokers$taquicardia, na.rm = TRUE) out of sum(!is.na(df_smokers$taquicardia)), 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
-Como el valor p es menor a 0.05, se rechaza la hipótesis nula y se concluye que la proporción de personas con taquicardia es significativamente diferente al 5%.
-El intervalo de confianza del 95% (1.93% a 2.92%) y la proporción estimada del 2.38% indican que la frecuencia de taquicardia en la muestra es considerablemente menor al valor de referencia.
-Hipótesis nula (\(H_0\)): No hay diferencia en los niveles medios de colesterol entre fumadores y no fumadores.
-Hipótesis alternativa (\(H_1\)): Existe una diferencia significativa entre los niveles medios de colesterol.
smokers <- df_smokers[df_smokers$current_smoker == "yes", ]
non_smokers <- df_smokers[df_smokers$current_smoker == "no", ]
t.test(smokers$chol, non_smokers$chol,
alternative = "two.sided",
var.equal = FALSE)
##
## Welch Two Sample t-test
##
## data: smokers$chol and non_smokers$chol
## t = -2.9119, df = 3884.8, p-value = 0.003612
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -6.925837 -1.352281
## sample estimates:
## mean of x mean of y
## 234.5067 238.6458
-Un valor p menor a 0.05 señala que hay una diferencia significativa desde el punto de vista estadístico en los niveles promedio de colesterol entre quienes fuman y quienes no.
-En este análisis, el valor p fue 0.0036, lo cual confirma que se puede rechazar la hipótesis nula y que hay evidencia sólida para afirmar que los niveles promedio de colesterol varían entre fumadores y no fumadores.
-Linea vertical negra: media de colesterol en fumadores. -Linea vertical verde: media en no fumadores. Área azul: intervalo de confianza del 95% para la diferencia de medias. - Texto: valor p que indica si la diferencia encontrada es estadísticamente significativa.
Hipótesis nula (\(H_0\)): No hay diferencia en la frecuencia cardíaca promedio entre fumadores y no fumadores.
Hipótesis alternativa (\(H_1\)): La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.
t.test(smokers$heart_rate, non_smokers$heart_rate,
alternative = "greater",
var.equal = FALSE)
##
## Welch Two Sample t-test
##
## data: smokers$heart_rate and non_smokers$heart_rate
## t = 3.5809, df = 3896.4, p-value = 0.0001733
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
## 0.7434658 Inf
## sample estimates:
## mean of x mean of y
## 76.38302 75.00762
-El valor p obtenido fue 0.00017, mucho menor a 0.05, lo que permite rechazar la hipótesis nula y confirma que hay evidencia estadísticamente significativa para afirmar que los fumadores tienen una mayor frecuencia cardíaca promedio que los no fumadores.
-El intervalo de confianza del 95% para la diferencia de medias está en el rango \([0.74, ∞)\), lo que indica que, con un 95% de certeza, los fumadores presentan al menos 0.74 latidos por minuto más en su frecuencia cardíaca promedio.
-Linea azul: media de frecuencia cardíaca en fumadores. Recta -Linea verde: media en no fumadores. -Área roja: intervalo de confianza unilaterial (desde 0.74 en adelante). - valor p muy bajo, lo que indica que la frecuencia cardíaca en fumadores es significativamente mayor.
-Hipótesis nula (\(H_0\)): La proporción de personas con colesterol alto es la misma en fumadores y no fumadores.
-Hipótesis alternativa (\(H_1\)): La proporción de personas con colesterol alto es diferente entre fumadores y no fumadores.
table_chol <- table(df_smokers$current_smoker, df_smokers$chol_alto)
prop.test(x = c(table_chol["yes", "1"], table_chol["no", "1"]),
n = c(sum(table_chol["yes", ]), sum(table_chol["no", ])),
alternative = "two.sided",
conf.level = 0.95)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(table_chol["yes", "1"], table_chol["no", "1"]) out of c(sum(table_chol["yes", ]), sum(table_chol["no", ]))
## X-squared = 5.4583, df = 1, p-value = 0.01948
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.069158628 -0.005995786
## sample estimates:
## prop 1 prop 2
## 0.4097510 0.4473282
-El valor p de 0.0195, al ser menor que 0.05, indica que se puede rechazar la hipótesis nula y que hay evidencia estadística suficiente para afirmar que las proporciones de colesterol alto difieren entre fumadores y no fumadores.
-El intervalo de confianza del 95% para la diferencia de proporciones es [−0.0692, −0.0060], lo cual refuerza la significancia de la diferencia al no incluir el cero. Dado que ambos extremos son negativos, se concluye que la proporción de colesterol alto es significativamente más baja en fumadores que en no fumadores.
Las siguientes son las conclusiones a nivel general del estudio realizado:
Se encontró evidencia estadísticamente significativa (valor p = 0.00017) de que los fumadores tienen una frecuencia cardíaca promedio más alta que los no fumadores, con una diferencia mínima estimada de 0.74 latidos por minuto.
Aunque los fumadores presentaron niveles promedio de colesterol ligeramente más bajos, esta diferencia fue significativa (valor p = 0.0036), lo que indica una variación real entre ambos grupos.
La proporción de personas con colesterol alto fue significativamente menor en fumadores (intervalo de confianza del 95%: [−0.0692, −0.0060]; valor p = 0.0195), lo que evidencia diferencias relevantes para orientar decisiones en salud pública.