1 Introducción

En esta actividad se analiza un conjunto de datos sobre salud y tabaquismo (Smokers Health Data) con el propósito de:

  • Describir el comportamiento de variables clave: edad, frecuencia cardíaca, colesterol, consumo de cigarrillos.
  • Explorar visualmente las diferencias entre fumadores y no fumadores.
  • Formular y contrastar pruebas de hipótesis sobre medias y proporciones.
  • Relacionar los resultados con el contexto del riesgo cardiovascular y el impacto del tabaquismo.

El documento integra:

  • Carga y preparación de datos.
  • Descripción estadística global y por subgrupos.
  • Visualización avanzada (histogramas, densidades, boxplots, violines, gráficos de dispersión, barras).
  • Pruebas de hipótesis para medias y proporciones, cada una con su gráfico y análisis interpretativo.
  • Interpretaciones y conclusiones.

2 Carga, estructura y limpieza de datos

2.1 Carga de librerías

library(readr)
library(dplyr)
library(ggplot2)
library(janitor)
library(scales)
library(tidyr)
library(plotly)   # Visualización interactiva opcional
library(tibble)

2.2 Carga del conjunto de datos

smoke_raw <- read_csv(
  "smoking_health_data_final(1).csv",
  show_col_types = FALSE
)

glimpse(smoke_raw)
## Rows: 3,900
## Columns: 7
## $ age            <dbl> 54, 45, 58, 42, 42, 57, 43, 42, 37, 49, 55, 39, 53, 45,…
## $ sex            <chr> "male", "male", "male", "male", "male", "male", "male",…
## $ current_smoker <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes",…
## $ heart_rate     <dbl> 95, 64, 81, 90, 62, 62, 75, 66, 65, 93, 70, 85, 58, 83,…
## $ blood_pressure <chr> "110/72", "121/72", "127.5/76", "122.5/80", "119/80", "…
## $ cigs_per_day   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ chol           <dbl> 219, 248, 235, 225, 226, 223, 222, 196, 188, 256, 214, …
summary(smoke_raw)
##       age            sex            current_smoker       heart_rate    
##  Min.   :32.00   Length:3900        Length:3900        Min.   : 44.00  
##  1st Qu.:42.00   Class :character   Class :character   1st Qu.: 68.00  
##  Median :49.00   Mode  :character   Mode  :character   Median : 75.00  
##  Mean   :49.54                                         Mean   : 75.69  
##  3rd Qu.:56.00                                         3rd Qu.: 82.00  
##  Max.   :70.00                                         Max.   :143.00  
##                                                                        
##  blood_pressure      cigs_per_day         chol      
##  Length:3900        Min.   : 0.000   Min.   :113.0  
##  Class :character   1st Qu.: 0.000   1st Qu.:206.0  
##  Mode  :character   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

2.2.1 Análisis de resultados – Exploración inicial de estructura

El conjunto de datos contiene información de adultos con variables relacionadas con tabaquismo (fumador actual, cigarrillos por día) y salud cardiovascular (frecuencia cardíaca, colesterol, presión arterial). La inspección con glimpse() y summary() permite verificar el tipo de cada variable y detectar valores faltantes, especialmente en cigs_per_day y chol. Este paso es clave para asegurar coherencia en el análisis inferencial posterior.

En el contexto del riesgo cardiovascular, disponer de colesterol total y frecuencia cardíaca es especialmente relevante, pues son indicadores vinculados directamente a la probabilidad de eventos coronarios. La variable current_smoker permite contrastar si el hábito de fumar se asocia con cambios sistemáticos en estos indicadores, conectando con teorías epidemiológicas sobre el impacto del tabaco en la salud cardiometabólica.

2.3 Limpieza básica y creación de variables derivadas

smoke <- smoke_raw %>%
  mutate(
    sex = factor(sex),
    current_smoker = factor(
      current_smoker,
      levels = c("no", "yes"),
      labels = c("No fumador", "Fumador")
    )
  ) %>%
  filter(
    !is.na(heart_rate),
    !is.na(chol),
    !is.na(current_smoker)
  ) %>%
  mutate(
    chol_high   = ifelse(chol > 240, 1, 0),
    tachycardia = ifelse(heart_rate > 100, 1, 0),
    age_group = cut(
      age,
      breaks = c(30, 40, 50, 60, 70),
      include.lowest = TRUE,
      right = FALSE,
      labels = c("30–39", "40–49", "50–59", "60–69")
    ),
    cigs_cat = case_when(
      is.na(cigs_per_day)                  ~ "No dato",
      cigs_per_day == 0                    ~ "No fuma",
      cigs_per_day > 0  & cigs_per_day <= 10  ~ "1–10 cig/día",
      cigs_per_day > 10 & cigs_per_day <= 20  ~ "11–20 cig/día",
      cigs_per_day > 20                     ~ ">20 cig/día"
    )
  )

smoke %>% tabyl(current_smoker)
##  current_smoker    n   percent
##      No fumador 1965 0.5047521
##         Fumador 1928 0.4952479
summary(smoke$chol)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   113.0   206.0   234.0   236.6   263.0   696.0
summary(smoke$heart_rate)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    44.0    68.0    75.0    75.7    82.0   143.0

2.3.1 Análisis de resultados – Limpieza y variables derivadas

La conversión de sex y current_smoker a factores facilita el análisis por grupos. El filtrado de observaciones con valores faltantes en frecuencia cardíaca, colesterol y condición de fumador garantiza que las pruebas de hipótesis se basen en datos completos para las variables clave.

La creación de chol_high (colesterol > 240 mg/dL) y tachycardia (frecuencia cardíaca > 100 lpm) transforma variables continuas en indicadores clínicamente interpretables, útiles para pruebas de proporciones. La clasificación en age_group y cigs_cat permite explorar patrones asociados al ciclo vital y la intensidad del hábito tabáquico, aspectos centrales en la epidemiología del tabaquismo y riesgo cardiovascular acumulado.

3 Descripción estadística ampliada

3.1 Descriptivos globales

desc_global <- smoke %>%
  summarise(
    n              = n(),
    age_mean       = mean(age, na.rm = TRUE),
    age_sd         = sd(age, na.rm = TRUE),
    hr_mean        = mean(heart_rate, na.rm = TRUE),
    hr_sd          = sd(heart_rate, na.rm = TRUE),
    chol_mean      = mean(chol, na.rm = TRUE),
    chol_sd        = sd(chol, na.rm = TRUE),
    prop_chol_high = mean(chol_high, na.rm = TRUE),
    prop_tachy     = mean(tachycardia, na.rm = TRUE)
  )

desc_global
## # A tibble: 1 × 9
##       n age_mean age_sd hr_mean hr_sd chol_mean chol_sd prop_chol_high
##   <int>    <dbl>  <dbl>   <dbl> <dbl>     <dbl>   <dbl>          <dbl>
## 1  3893     49.5   8.56    75.7  12.0      237.    44.4          0.429
## # ℹ 1 more variable: prop_tachy <dbl>

3.1.1 Análisis de resultados – Descriptivos globales

Los resultados globales muestran una muestra de adultos de mediana edad, con frecuencia cardíaca alrededor de 75–76 lpm y colesterol promedio claramente por encima de 200 mg/dL. Las proporciones de colesterol alto (~43%) y taquicardia (~2–3%) reflejan un perfil de riesgo donde la dislipidemia es un problema masivo, mientras que la taquicardia es relativamente infrecuente. Esto coincide con la idea de factores de riesgo crónicos y “silenciosos” (colesterol) frente a indicadores agudos como la taquicardia.

3.2 Descriptivos por condición de fumador

desc_fumador <- smoke %>%
  group_by(current_smoker) %>%
  summarise(
    n               = n(),
    age_mean        = mean(age, na.rm = TRUE),
    hr_mean         = mean(heart_rate, na.rm = TRUE),
    hr_sd           = sd(heart_rate, na.rm = TRUE),
    chol_mean       = mean(chol, na.rm = TRUE),
    chol_sd         = sd(chol, na.rm = TRUE),
    prop_chol_high  = mean(chol_high, na.rm = TRUE),
    prop_tachy      = mean(tachycardia, na.rm = TRUE),
    .groups         = "drop"
  )

desc_fumador
## # A tibble: 2 × 9
##   current_smoker     n age_mean hr_mean hr_sd chol_mean chol_sd prop_chol_high
##   <fct>          <int>    <dbl>   <dbl> <dbl>     <dbl>   <dbl>          <dbl>
## 1 No fumador      1965     51.4    75.0  12.2      239.    43.9          0.447
## 2 Fumador         1928     47.7    76.4  11.8      235.    44.8          0.410
## # ℹ 1 more variable: prop_tachy <dbl>

3.2.1 Análisis de resultados – Descriptivos por fumador/no fumador

Ambos grupos (fumadores y no fumadores) presentan medias de colesterol elevadas, lo que confirma que la dislipidemia es un problema transversal. Sin embargo, la frecuencia cardíaca media resulta mayor en fumadores, coherente con los efectos de la nicotina sobre el sistema nervioso simpático. Esto sugiere que el impacto del tabaco se expresa más en variables hemodinámicas (frecuencia) que en el colesterol total, que está muy influido por otros factores.

3.3 Descriptivos por grupo de edad y condición de fumador

desc_edad_fumador <- smoke %>%
  group_by(age_group, current_smoker) %>%
  summarise(
    n              = n(),
    chol_mean      = mean(chol, na.rm = TRUE),
    hr_mean        = mean(heart_rate, na.rm = TRUE),
    prop_chol_high = mean(chol_high, na.rm = TRUE),
    .groups        = "drop"
  )

desc_edad_fumador
## # A tibble: 8 × 6
##   age_group current_smoker     n chol_mean hr_mean prop_chol_high
##   <fct>     <fct>          <int>     <dbl>   <dbl>          <dbl>
## 1 30–39     No fumador       209      210.    74.4          0.196
## 2 30–39     Fumador          307      219.    75.8          0.283
## 3 40–49     No fumador       625      228.    75.5          0.352
## 4 40–49     Fumador          903      232.    76.6          0.379
## 5 50–59     No fumador       692      248.    74.6          0.527
## 6 50–59     Fumador          523      244.    76.7          0.503
## 7 60–69     No fumador       439      251.    75.2          0.576
## 8 60–69     Fumador          195      243.    75.6          0.503

3.3.1 Análisis de resultados – Edad, tabaquismo y riesgo

El desglose por grupos de edad permite identificar subgrupos especialmente vulnerables (por ejemplo, mayores de 50 años con alto colesterol y condición de fumador). Estos resultados son útiles para segmentar la población e implementar intervenciones focalizadas (programas de cesación, educación nutricional, tamizaje intensivo).

4 Exploración visual avanzada

4.1 Histogramas y densidades de frecuencia cardíaca

p_hist_hr <- ggplot(smoke, aes(x = heart_rate, fill = current_smoker)) +
  geom_histogram(alpha = 0.6, bins = 30, position = "identity") +
  geom_vline(xintercept = 75, linetype = "dashed") +
  labs(
    title = "Distribución de frecuencia cardíaca por condición de fumador",
    x = "Frecuencia cardíaca (lpm)",
    y = "Frecuencia",
    fill = "Condición"
  )

p_dens_hr <- ggplot(smoke, aes(x = heart_rate, color = current_smoker, fill = current_smoker)) +
  geom_density(alpha = 0.2) +
  geom_vline(xintercept = 75, linetype = "dashed") +
  labs(
    title = "Densidad de frecuencia cardíaca por condición de fumador",
    x = "Frecuencia cardíaca (lpm)",
    y = "Densidad",
    color = "Condición",
    fill  = "Condición"
  )

p_hist_hr

p_dens_hr

4.1.1 Análisis de resultados – Distribución de frecuencia cardíaca

Las distribuciones muestran una concentración alrededor de 70–80 lpm, con ligeras diferencias entre fumadores y no fumadores. La referencia en 75 lpm permite visualizar que una fracción importante de fumadores se sitúa por encima de ese valor, alineándose con la teoría sobre el efecto de la nicotina en la frecuencia cardíaca.

4.2 Histogramas y densidades de colesterol

p_hist_chol <- ggplot(smoke, aes(x = chol, fill = current_smoker)) +
  geom_histogram(alpha = 0.6, bins = 30, position = "identity") +
  geom_vline(xintercept = 200, linetype = "dashed") +
  geom_vline(xintercept = 240, linetype = "dotted") +
  labs(
    title = "Distribución de colesterol por condición de fumador",
    x = "Colesterol (mg/dL)",
    y = "Frecuencia",
    fill = "Condición"
  )

p_dens_chol <- ggplot(smoke, aes(x = chol, color = current_smoker, fill = current_smoker)) +
  geom_density(alpha = 0.2) +
  geom_vline(xintercept = 200, linetype = "dashed") +
  geom_vline(xintercept = 240, linetype = "dotted") +
  labs(
    title = "Densidad de colesterol por condición de fumador",
    x = "Colesterol (mg/dL)",
    y = "Densidad",
    color = "Condición",
    fill  = "Condición"
  )

p_hist_chol

p_dens_chol

4.2.1 Análisis de resultados – Distribución de colesterol

Se evidencia una cola derecha importante, con muchos casos por encima de 240 mg/dL. La separación por condición de fumador no es muy marcada, lo que indica que el colesterol elevado es un problema compartido y no exclusivo de fumadores.

4.3 Boxplots y violines por condición de fumador

ggplot(smoke, aes(x = current_smoker, y = chol, fill = current_smoker)) +
  geom_violin(alpha = 0.3, trim = FALSE) +
  geom_boxplot(width = 0.15, outlier.alpha = 0.3) +
  labs(
    title = "Distribución de colesterol por condición de fumador",
    x = "Condición de fumador",
    y = "Colesterol (mg/dL)"
  ) +
  theme(legend.position = "none")

ggplot(smoke, aes(x = current_smoker, y = heart_rate, fill = current_smoker)) +
  geom_violin(alpha = 0.3, trim = FALSE) +
  geom_boxplot(width = 0.15, outlier.alpha = 0.3) +
  labs(
    title = "Distribución de frecuencia cardíaca por condición de fumador",
    x = "Condición de fumador",
    y = "Frecuencia cardíaca (lpm)"
  ) +
  theme(legend.position = "none")

4.3.1 Análisis de resultados – Boxplots y violines

Los violines muestran la forma de la distribución, evidenciando colas hacia valores altos de colesterol en ambos grupos, y un leve desplazamiento de la frecuencia cardíaca hacia valores mayores en fumadores. Esto refuerza la visión de riesgo compartido pero con matices distintos.

4.4 Relación entre colesterol y frecuencia cardíaca

p_scatter <- ggplot(smoke, aes(x = chol, y = heart_rate, color = current_smoker)) +
  geom_point(alpha = 0.3) +
  geom_smooth(method = "lm", formula = y ~ x, se = FALSE) +
  labs(
    title  = "Relación entre colesterol y frecuencia cardíaca",
    x      = "Colesterol (mg/dL)",
    y      = "Frecuencia cardíaca (lpm)",
    color  = "Condición de fumador"
  )

p_scatter

ggplotly(p_scatter)

4.4.1 Análisis de resultados – Colesterol vs frecuencia cardíaca

La relación entre colesterol y frecuencia cardíaca es moderada, pero se observa cierta tendencia creciente. Esto sugiere que los perfiles de riesgo tienden a agruparse: individuos con peor perfil lipídico pueden presentar también frecuencia cardíaca algo más elevada.

4.5 Distribución de cigarrillos por día en fumadores

smoke %>%
  filter(current_smoker == "Fumador", !is.na(cigs_per_day)) %>%
  ggplot(aes(x = cigs_per_day)) +
  geom_histogram(bins = 20, color = "white") +
  labs(
    title = "Distribución de cigarrillos por día entre fumadores",
    x = "Cigarrillos por día",
    y = "Frecuencia"
  )

smoke %>%
  filter(current_smoker == "Fumador", !is.na(cigs_per_day)) %>%
  count(cigs_cat) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(aes(x = cigs_cat, y = prop)) +
  geom_col() +
  scale_y_continuous(labels = percent_format()) +
  labs(
    title = "Categorías de consumo de cigarrillos entre fumadores",
    x = "Categoría de consumo",
    y = "Proporción"
  )

4.5.1 Análisis de resultados – Intensidad del hábito tabáquico

Conocer la distribución de cigarrillos por día es clave para dimensionar la “dosis” de exposición al tabaco y orientar estrategias de reducción o cesación de acuerdo con la intensidad del consumo.

5 Pruebas de hipótesis

5.1 Medias: frecuencia cardíaca vs 75 lpm (una muestra)

Alpha <- 0.05

t_heart <- t.test(
  x           = smoke$heart_rate,
  mu          = 75,
  alternative = "two.sided",
  conf.level  = 1 - Alpha
)

t_heart
## 
##  One Sample t-test
## 
## data:  smoke$heart_rate
## t = 3.6136, df = 3892, p-value = 0.0003058
## alternative hypothesis: true mean is not equal to 75
## 95 percent confidence interval:
##  75.31856 76.07420
## sample estimates:
## mean of x 
##  75.69638

5.1.1 Gráfico asociado – Frecuencia cardíaca vs valor hipotético

mean_hr <- as.numeric(t_heart$estimate)
ci_hr   <- t_heart$conf.int

ggplot(smoke, aes(x = heart_rate)) +
  geom_density(fill = "grey80", alpha = 0.5) +
  geom_vline(xintercept = 75, color = "red", linetype = "dashed", size = 1) +
  geom_vline(xintercept = mean_hr, color = "blue", size = 1) +
  geom_vline(xintercept = ci_hr[1], color = "blue", linetype = "dotted") +
  geom_vline(xintercept = ci_hr[2], color = "blue", linetype = "dotted") +
  labs(
    title = "Prueba de hipótesis para la media de frecuencia cardíaca",
    x = "Frecuencia cardíaca (lpm)",
    y = "Densidad"
  )
## 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.

5.1.2 Análisis de resultados – Media de frecuencia cardíaca

El estadístico t obtenido y su p-valor muy pequeño indican que la media de frecuencia cardíaca de la población difiere de 75 lpm. El intervalo de confianza al 95% se sitúa ligeramente por encima de este valor (aproximadamente entre 75,3 y 76,1 lpm), lo que significa que, en promedio, la frecuencia cardíaca está algo elevada respecto al valor de referencia planteado. Teóricamente, esta es una aplicación clásica de la prueba t de una muestra, apoyada en el teorema del límite central y adecuada cuando la desviación estándar poblacional es desconocida.

Sin embargo, la interpretación práctica debe ir más allá del p-valor: la diferencia absoluta es pequeña (menos de 1 lpm), por lo que desde una perspectiva clínica aislada podría no representar un riesgo importante por sí sola. No obstante, el hecho de que la media esté sistemáticamente por encima de 75 lpm sugiere que la población analizada no corresponde a un grupo “ideal” de adultos sanos, sino a personas en las que coexisten otros factores de riesgo (como colesterol elevado, tabaquismo u otros hábitos de vida) que, junto con esta ligera elevación de la frecuencia, pueden contribuir a una mayor carga cardiovascular a largo plazo.


5.2 Medias: colesterol vs 200 mg/dL (una cola)

t_chol_one <- t.test(
  x           = smoke$chol,
  mu          = 200,
  alternative = "greater",
  conf.level  = 1 - Alpha
)

t_chol_one
## 
##  One Sample t-test
## 
## data:  smoke$chol
## t = 51.456, df = 3892, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
##  235.4258      Inf
## sample estimates:
## mean of x 
##  236.5959

5.2.1 Gráfico asociado – Colesterol vs valor hipotético

mean_chol <- as.numeric(t_chol_one$estimate)
ci_chol   <- t_chol_one$conf.int

ggplot(smoke, aes(x = chol)) +
  geom_density(fill = "grey80", alpha = 0.5) +
  geom_vline(xintercept = 200, color = "red", linetype = "dashed", size = 1) +
  geom_vline(xintercept = mean_chol, color = "blue", size = 1) +
  geom_vline(xintercept = ci_chol[1], color = "blue", linetype = "dotted") +
  labs(
    title = "Prueba de hipótesis para la media de colesterol",
    x = "Colesterol (mg/dL)",
    y = "Densidad"
  )

5.2.2 Análisis de resultados – Media de colesterol

En este caso, la prueba t de una muestra con hipótesis de cola derecha muestra un estadístico t muy elevado y un p-valor prácticamente nulo, lo que permite rechazar con total claridad la hipótesis de que la media de colesterol sea menor o igual a 200 mg/dL. El intervalo de confianza se sitúa alrededor de 235 mg/dL como límite inferior, confirmando que el promedio realmente está muy por encima del umbral de referencia. Teóricamente, esto ejemplifica una situación donde no solo hay significancia estadística, sino también un tamaño de efecto grande.

En términos prácticos, este resultado tiene una lectura directa: la población analizada presenta un desplazamiento sistemático hacia niveles de colesterol considerados de riesgo, no se trata de casos aislados. Esta realidad se conecta con las estrategias de salud pública y clínica, donde el colesterol elevado es un objetivo prioritario de intervención mediante cambios en el estilo de vida (dieta, ejercicio) y, en muchos casos, tratamiento farmacológico. El gráfico asociado refuerza visualmente esta idea, mostrando cómo la distribución de colesterol se concentra en valores claramente superiores a 200 mg/dL.


5.3 Proporciones: colesterol alto vs 20%

prueba_prop_una_muestra <- function(x, n, p0, alternative = "two.sided") {
  prop.test(
    x           = x,
    n           = n,
    p           = p0,
    alternative = alternative,
    correct     = FALSE
  )
}
x_chol_high <- sum(smoke$chol_high == 1, na.rm = TRUE)
n_chol_high <- sum(!is.na(smoke$chol_high))

prop_chol_high <- prueba_prop_una_muestra(
  x           = x_chol_high,
  n           = n_chol_high,
  p0          = 0.20,
  alternative = "greater"
)

prop_chol_high
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability p0
## X-squared = 1272.8, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
##  0.4157256 1.0000000
## sample estimates:
##         p 
## 0.4287182

5.3.1 Gráfico asociado – Proporción de colesterol alto vs hipótesis nula

p_obs_chol <- x_chol_high / n_chol_high

df_prop_chol <- data.frame(
  tipo = c("Hipótesis (p0)", "Muestra"),
  prop = c(0.20, p_obs_chol)
)

ggplot(df_prop_chol, aes(x = tipo, y = prop)) +
  geom_col() +
  scale_y_continuous(labels = percent_format()) +
  labs(
    title = "Proporción de colesterol alto: observada vs hipótesis nula",
    x = "",
    y = "Proporción"
  )

5.3.2 Análisis de resultados – Proporción de colesterol alto

La prueba de proporciones arroja un estadístico χ² muy grande y un p-valor prácticamente cero, indicando que la proporción observada de individuos con colesterol alto es mucho mayor que el 20% propuesto en la hipótesis nula. La proporción empírica se ubica alrededor de 43%, más del doble de lo esperado. Desde el punto de vista teórico, esta prueba se fundamenta en la aproximación normal de la distribución binomial cuando el tamaño muestral es grande, condición que se cumple en este caso.

En el plano práctico, este resultado es especialmente preocupante: casi la mitad de la población se encuentra por encima del punto de corte de 240 mg/dL, lo que sugiere que el riesgo de enfermedades cardiovasculares asociadas a dislipidemia no es un fenómeno marginal, sino un problema masivo. El gráfico de barras permite visualizar de manera inmediata la brecha entre la proporción esperada (20%) y la observada (~43%), convirtiéndose en una herramienta clara para comunicar la magnitud del problema a tomadores de decisiones y a la propia población.


5.4 Proporciones: taquicardia vs 5%

x_tachy <- sum(smoke$tachycardia == 1, na.rm = TRUE)
n_tachy <- sum(!is.na(smoke$tachycardia))

prop_tachy <- prueba_prop_una_muestra(
  x           = x_tachy,
  n           = n_tachy,
  p0          = 0.05,
  alternative = "two.sided"
)

prop_tachy
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability p0
## X-squared = 55.877, df = 1, p-value = 7.713e-14
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
##  0.01954099 0.02917576
## sample estimates:
##          p 
## 0.02388903

5.4.1 Gráfico asociado – Proporción de taquicardia vs hipótesis nula

p_obs_tachy <- x_tachy / n_tachy

df_prop_tachy <- data.frame(
  tipo = c("Hipótesis (p0)", "Muestra"),
  prop = c(0.05, p_obs_tachy)
)

ggplot(df_prop_tachy, aes(x = tipo, y = prop)) +
  geom_col() +
  scale_y_continuous(labels = percent_format()) +
  labs(
    title = "Proporción de taquicardia: observada vs hipótesis nula",
    x = "",
    y = "Proporción"
  )

5.4.2 Análisis de resultados – Proporción de taquicardia

En contraste con el colesterol, la proporción observada de taquicardia es significativamente menor que el 5% planteado en la hipótesis nula, situándose alrededor del 2–3%. La prueba de proporciones rechaza la hipótesis de igualdad, mostrando que el valor esperado del 5% sobrestima la frecuencia real de taquicardia en esta población. Teóricamente, esto ejemplifica cómo una diferencia moderada en términos absolutos puede ser estadísticamente relevante cuando la muestra es grande y el modelo binomial-normal está bien justificado.

Desde la perspectiva práctica, este hallazgo sugiere que, aunque el colesterol elevado es un problema ampliamente extendido, la mayoría de los individuos no presenta aún taquicardia en el momento de la medición. Esto refuerza la idea de que los riesgos cardiovasculares presentes son más bien crónicos y silenciosos, ligados a alteraciones metabólicas (como la dislipidemia), y no tanto a manifestaciones agudas como la frecuencia cardíaca extremadamente elevada. En términos de intervención, la prioridad se orienta hacia la prevención y manejo del colesterol, sin descuidar el monitoreo de casos puntuales con taquicardia que sí pueden requerir atención inmediata.


5.5 Comparación de medias: colesterol fumadores vs no fumadores

t_chol <- t.test(
  chol ~ current_smoker,
  data        = smoke,
  alternative = "two.sided",
  var.equal   = FALSE
)

t_chol
## 
##  Welch Two Sample t-test
## 
## data:  chol by current_smoker
## t = 2.9119, df = 3884.8, p-value = 0.003612
## alternative hypothesis: true difference in means between group No fumador and group Fumador is not equal to 0
## 95 percent confidence interval:
##  1.352281 6.925837
## sample estimates:
## mean in group No fumador    mean in group Fumador 
##                 238.6458                 234.5067

5.5.1 Gráfico asociado – Medias de colesterol por condición de fumador

chol_means <- smoke %>%
  group_by(current_smoker) %>%
  summarise(
    mean_chol = mean(chol, na.rm = TRUE),
    sd_chol   = sd(chol, na.rm = TRUE),
    n         = n(),
    se_chol   = sd_chol / sqrt(n),
    .groups   = "drop"
  )

ggplot(chol_means, aes(x = current_smoker, y = mean_chol)) +
  geom_col() +
  geom_errorbar(aes(ymin = mean_chol - 1.96 * se_chol,
                    ymax = mean_chol + 1.96 * se_chol),
                width = 0.2) +
  labs(
    title = "Media de colesterol con IC 95% por condición de fumador",
    x = "Condición de fumador",
    y = "Colesterol medio (mg/dL)"
  )

5.5.2 Análisis de resultados – Medias de colesterol por tabaquismo

La prueba t de Welch indica que existe una diferencia estadísticamente significativa entre las medias de colesterol de fumadores y no fumadores, aunque la magnitud de dicha diferencia es pequeña. Llama la atención que la media de colesterol resulta ligeramente mayor en los no fumadores que en los fumadores. Desde el punto de vista teórico, esto no contradice el hecho de que el tabaco sea un factor de riesgo cardiovascular, sino que pone de manifiesto la existencia de variables de confusión (edad, dieta, actividad física, tratamiento farmacológico, entre otras) que pueden influir de forma importante en el perfil lipídico.

El gráfico de barras con intervalos de confianza muestra cómo las medias de ambos grupos se encuentran en rangos muy similares, con colesteroles elevados en general. En la práctica, este hallazgo refuerza la idea de que la intervención sobre el riesgo cardiovascular no puede limitarse únicamente a la cesación del tabaquismo: también se requiere una atención sistemática a otros determinantes, como los hábitos alimentarios y el sedentarismo, incluso en personas que no fuman.


5.6 Comparación de medias: frecuencia cardíaca fumadores vs no fumadores

hr_smokers    <- smoke$heart_rate[smoke$current_smoker == "Fumador"]
hr_nonsmokers <- smoke$heart_rate[smoke$current_smoker == "No fumador"]

t_hr <- t.test(
  x           = hr_smokers,
  y           = hr_nonsmokers,
  alternative = "greater",
  var.equal   = FALSE
)

t_hr
## 
##  Welch Two Sample t-test
## 
## data:  hr_smokers and hr_nonsmokers
## t = 3.5748, df = 3889.6, p-value = 0.0001774
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  0.7423398       Inf
## sample estimates:
## mean of x mean of y 
##  76.39056  75.01527

5.6.1 Gráfico asociado – Medias de frecuencia cardíaca por condición de fumador

hr_means <- smoke %>%
  group_by(current_smoker) %>%
  summarise(
    mean_hr = mean(heart_rate, na.rm = TRUE),
    sd_hr   = sd(heart_rate, na.rm = TRUE),
    n       = n(),
    se_hr   = sd_hr / sqrt(n),
    .groups = "drop"
  )

ggplot(hr_means, aes(x = current_smoker, y = mean_hr)) +
  geom_col() +
  geom_errorbar(aes(ymin = mean_hr - 1.96 * se_hr,
                    ymax = mean_hr + 1.96 * se_hr),
                width = 0.2) +
  labs(
    title = "Media de frecuencia cardíaca con IC 95% por condición de fumador",
    x = "Condición de fumador",
    y = "Frecuencia cardíaca media (lpm)"
  )

5.6.2 Análisis de resultados – Medias de frecuencia cardíaca por tabaquismo

En este contraste, la prueba t con hipótesis alternativa de cola derecha confirma que la frecuencia cardíaca media de los fumadores es significativamente mayor que la de los no fumadores. Aunque la diferencia absoluta ronda 1–1,5 lpm, la consistencia del resultado y su dirección son relevantes desde la perspectiva fisiológica: la nicotina y otros componentes del tabaco incrementan el tono simpático, elevan la frecuencia cardíaca y generan una mayor carga de trabajo para el corazón incluso en reposo.

El gráfico de barras con intervalos de confianza muestra de forma clara cómo la media de los fumadores se sitúa por encima de la de los no fumadores. En el contexto práctico, esta diferencia, sumada a otros factores de riesgo (colesterol alto, presión arterial, etc.), contribuye a un riesgo acumulativo de eventos cardiovasculares. Aunque el incremento aislado pueda parecer modesto, su persistencia en el tiempo y su interacción con otros factores hacen que no deba ser subestimado.


5.7 Proporciones: colesterol alto fumadores vs no fumadores

prueba_prop_dos_muestras <- function(x1, n1, x2, n2, alternative = "two.sided") {
  prop.test(
    x = c(x1, x2),
    n = c(n1, n2),
    alternative = alternative,
    correct = FALSE
  )
}
x_high_fum <- sum(smoke$chol_high == 1 & smoke$current_smoker == "Fumador")
n_fum      <- sum(smoke$current_smoker == "Fumador")

x_high_nofum <- sum(smoke$chol_high == 1 & smoke$current_smoker == "No fumador")
n_nofum      <- sum(smoke$current_smoker == "No fumador")

prop_chol_smokers <- prueba_prop_dos_muestras(
  x1 = x_high_fum, n1 = n_fum,
  x2 = x_high_nofum, n2 = n_nofum,
  alternative = "two.sided"
)

prop_chol_smokers
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(x1, x2) out of c(n1, n2)
## X-squared = 5.6106, df = 1, p-value = 0.01785
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.068644839 -0.006509575
## sample estimates:
##    prop 1    prop 2 
## 0.4097510 0.4473282

5.7.1 Gráfico asociado – Proporción de colesterol alto por condición de fumador

p_fum   <- x_high_fum   / n_fum
p_nofum <- x_high_nofum / n_nofum

df_prop_groups <- data.frame(
  grupo = c("Fumador", "No fumador"),
  prop  = c(p_fum, p_nofum)
)

ggplot(df_prop_groups, aes(x = grupo, y = prop)) +
  geom_col() +
  scale_y_continuous(labels = percent_format()) +
  labs(
    title = "Proporción de colesterol alto por condición de fumador",
    x = "Condición de fumador",
    y = "Proporción con colesterol > 240 mg/dL"
  )

5.7.2 Análisis de resultados – Proporción de colesterol alto por tabaquismo

La prueba de dos proporciones muestra que la prevalencia de colesterol alto es ligeramente mayor en no fumadores que en fumadores, y esta diferencia resulta estadísticamente significativa. Este resultado puede parecer contraintuitivo si se parte de la idea simple de que “fumar siempre implica peor colesterol”. Teóricamente, esto ilustra la importancia de considerar el efecto de múltiples variables a la vez: la edad promedio, la dieta, el nivel de actividad física, la historia familiar y el uso de medicamentos pueden estar distribuidos de manera distinta entre fumadores y no fumadores.

El gráfico de barras permite visualizar cómo ambos grupos presentan proporciones altas de colesterol elevado, aunque la barra de los no fumadores se sitúa por encima. En la práctica, esto refuerza el mensaje de que el tabaquismo es un factor clave, pero no el único determinante del riesgo cardiovascular. Por tanto, las intervenciones deben ir más allá de la cesación del tabaco e incorporar estrategias integrales que aborden el control del colesterol y otros determinantes en toda la población, independientemente de su condición de fumador.


6 Resumen sintético de pruebas de hipótesis

resumen_tests <- tibble(
  prueba = c(
    "FC media vs 75 (t una muestra)",
    "Colesterol medio vs 200 (t una muestra)",
    "Prop. colesterol alto vs 20% (1 prop)",
    "Prop. taquicardia vs 5% (1 prop)",
    "Colesterol: No fumador vs Fumador (t 2 muestras)",
    "FC: Fumador vs No fumador (t 2 muestras, cola derecha)",
    "Prop. colesterol alto: Fumador vs No fumador (2 props)"
  ),
  estadistico = c(
    unname(t_heart$statistic),
    unname(t_chol_one$statistic),
    unname(prop_chol_high$statistic),
    unname(prop_tachy$statistic),
    unname(t_chol$statistic),
    unname(t_hr$statistic),
    unname(prop_chol_smokers$statistic)
  ),
  p_value = c(
    t_heart$p.value,
    t_chol_one$p.value,
    prop_chol_high$p.value,
    prop_tachy$p.value,
    t_chol$p.value,
    t_hr$p.value,
    prop_chol_smokers$p.value
  )
)

resumen_tests
## # A tibble: 7 × 3
##   prueba                                                 estadistico   p_value
##   <chr>                                                        <dbl>     <dbl>
## 1 FC media vs 75 (t una muestra)                                3.61 3.06e-  4
## 2 Colesterol medio vs 200 (t una muestra)                      51.5  0        
## 3 Prop. colesterol alto vs 20% (1 prop)                      1273.   4.57e-279
## 4 Prop. taquicardia vs 5% (1 prop)                             55.9  7.71e- 14
## 5 Colesterol: No fumador vs Fumador (t 2 muestras)              2.91 3.61e-  3
## 6 FC: Fumador vs No fumador (t 2 muestras, cola derecha)        3.57 1.77e-  4
## 7 Prop. colesterol alto: Fumador vs No fumador (2 props)        5.61 1.79e-  2

6.0.1 Análisis de resultados – Visión global

La tabla resume que todas las pruebas muestran p-valores muy pequeños, lo que indica diferencias claras respecto a las hipótesis nulas planteadas. Sin embargo, la magnitud de los efectos es heterogénea: muy grande en el caso del colesterol medio y de la proporción de colesterol alto, y más moderada en las diferencias entre fumadores y no fumadores. Esto subraya la importancia de complementar la lectura de p-valores con la interpretación de tamaños de efecto y su relevancia clínica, para evitar conclusiones exageradas a partir de diferencias pequeñas que solo son significativas por el gran tamaño muestral.

7 Conclusiones

En conjunto, el análisis muestra que la población estudiada presenta un perfil de riesgo cardiovascular claramente elevado, especialmente en lo referente al colesterol. La media de colesterol y la alta proporción de individuos con valores superiores a 240 mg/dL confirman que la dislipidemia es un problema ampliamente distribuido, no limitado a un subgrupo pequeño. Esto tiene implicaciones directas para la planificación de estrategias de prevención y manejo clínico, que deben contemplar tamizaje sistemático y educación en estilos de vida saludables.

Asimismo, aunque la frecuencia cardíaca promedio se desvía poco del valor de referencia de 75 lpm, el incremento es consistente y se acentúa en el grupo de fumadores. Este hallazgo es coherente con la literatura sobre los efectos de la nicotina y sugiere que el tabaquismo añade una carga hemodinámica adicional que, combinada con el colesterol elevado, puede potenciar el riesgo de eventos cardiovasculares. Sin embargo, la baja proporción de taquicardia indica que la mayoría de los individuos aún no muestra signos de descompensación aguda.

Las comparaciones entre fumadores y no fumadores revelan un patrón matizado: los fumadores muestran una frecuencia cardíaca significativamente mayor, pero el colesterol no es necesariamente peor en ellos; de hecho, la proporción de colesterol alto es ligeramente mayor en no fumadores. Esto subraya que el riesgo cardiovascular es un fenómeno multicausal y que los estilos de vida de los no fumadores no son necesariamente “saludables” por el solo hecho de no fumar. Factores como dieta, actividad física, edad y adherencia a tratamientos farmacológicos deben ser considerados de manera conjunta.

8 Referencias

Agresti, A. (2018). Statistical methods for the social sciences (5th ed.). Pearson.

Fayea, A., & Pagano, M. (2018). Principios de bioestadística (2.ª ed.). Cengage Learning.

Kutner, M. H., Nachtsheim, C. J., Neter, J., & Li, W. (2005). Applied linear statistical models (5th ed.). McGraw-Hill.

Montgomery, D. C., & Runger, G. C. (2014). Probabilidad y estadística aplicadas a la ingeniería (5.ª ed.). Limusa Wiley.

Triola, M. F. (2018). Estadística (12.ª ed.). Pearson.

World Health Organization. (2019). WHO report on the global tobacco epidemic 2019: Offer help to quit tobacco use. World Health Organization.

Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer.