##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.

1. Librerías

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

2. Carga del dataset

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

3. Limpieza de los datos

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)

4. Nuevas variables asociadas

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

5. Visualización

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

6. Análisis descriptivo.

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

Pruebas de hipótesis.

1.Prueba de hipótesis: media (frecuencia cardíaca = 75 Latidos por minuto)

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

Resultados:

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.

2. Prueba de hipótesis: media (colesterol > 200 mg/dL)

-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

Resultados:

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

3. Prueba de hipótesis: (colesterol alto > 20%)

-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

Resultados:

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

4. Prueba de hipótesis proporción (taquicardia ≠ 5%)

-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

Resultados

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

5. Diferencia de medias (colesterol entre fumadores y no fumadores)

-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

Resultados

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

Resultados

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

6. Diferencia de medias (frecuencia cardíaca: fumadores > no fumadores)

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

Resultados

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

Resultados

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

7. Diferencia de proporciones (colesterol alto entre fumadores y no fumadores)

-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

Resultados:

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

Conclusiones finales del estudio

Las siguientes son las conclusiones a nivel general del estudio realizado:

  1. 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.

  2. 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.

  3. 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.