El conjunto de datos Smokers Health Data permite examinar la relación entre el tabaquismo y múltiples variables fisiológicas en adultos. Se trabajó con variables como colesterol, frecuencia cardíaca, presión arterial, entre otras, y se aplicaron pruebas estadísticas inferenciales para evaluar diferencias significativas entre grupos de fumadores y no fumadores.
Antes de iniciar el análisis, se instalaron y cargaron los siguientes paquetes necesarios para el procesamiento, análisis y visualización de datos:
# Carga de paquetes necesarios
library(readr)
library(dplyr)
library(ggplot2)
library(stringr)
library(tidyr)
library(BSDA)
library(estadistica)
if (!require("remotes")) install.packages("remotes")
remotes::install_github("homerhanumat/tigerstats")
library(tigerstats)
# Cargar y preparar la base de datos
insurance <- read_csv("smoking_health_data_final.csv")
insurance <- as.data.frame(unclass(insurance),
stringsAsFactors = TRUE)
View(insurance)
Se eliminaron duplicados y columnas irrelevantes (e.g., cigs_per_day), Se generaron variables adicionales como:
colesterol_alto: si
chol > 240.
taquicardia: si
heart_rate > 100.
También se descompuso la presión arterial en valores numéricos de sistólica y diastólica.
# Eliminar duplicados y columnas sin informacion
insurance <- insurance %>% distinct()
insurance <- insurance %>% select(-cigs_per_day)
# Conteo de valores faltantes por columna
colSums(is.na(insurance))
## age sex current_smoker heart_rate blood_pressure
## 0 0 0 0 0
## chol
## 7
#Eliminar filas con valores faltantes
insurance <- insurance %>% drop_na(chol)
# Valores únicos por categoría
unique(insurance$sex)
## [1] male female
## Levels: female male
unique(insurance$current_smoker)
## [1] yes no
## Levels: no yes
age_sex <- insurance %>% arrange(age, sex)
# Enriquecer la base con nuevas variables
insurance <- insurance %>%
mutate(niveles_colesterol = ifelse(chol > 240, "Colesterol Alto", "Normal"))
insurance <- insurance %>%
mutate(taquicardia = ifelse(heart_rate > 100, "Taquicardia", "Normal"))
# Separar presión arterial en dos columnas
# Separar presión arterial en sistólica y diastólica
insurance <- insurance %>%
separate(blood_pressure, into = c("systolic", "diastolic"), sep = "/", convert = TRUE)
# Resumen estadístico
summary(insurance)
## age sex current_smoker heart_rate systolic
## Min. :32.00 female:2081 no :1965 Min. : 44.0 Min. : 83.5
## 1st Qu.:42.00 male :1812 yes:1928 1st Qu.: 68.0 1st Qu.:117.0
## Median :49.00 Median : 75.0 Median :128.0
## Mean :49.53 Mean : 75.7 Mean :132.4
## 3rd Qu.:56.00 3rd Qu.: 82.0 3rd Qu.:144.0
## Max. :70.00 Max. :143.0 Max. :295.0
## diastolic chol niveles_colesterol taquicardia
## Min. : 48.00 Min. :113.0 Length:3893 Length:3893
## 1st Qu.: 75.00 1st Qu.:206.0 Class :character Class :character
## Median : 82.00 Median :234.0 Mode :character Mode :character
## Mean : 82.98 Mean :236.6
## 3rd Qu.: 90.00 3rd Qu.:263.0
## Max. :142.50 Max. :696.0
Se generó un heatmap que muestra cómo el colesterol promedio varía según grupos de edad y frecuencia cardíaca. Se observan mayores niveles de colesterol en adultos mayores con frecuencia cardíaca más elevada.
resumen_heatmap <- insurance %>%
mutate(
age_group = cut(age, breaks = seq(30, 80, by = 5), right = FALSE),
hr_group = cut(heart_rate, breaks = seq(50, 130, by = 5), right = FALSE)
) %>%
group_by(age_group, hr_group) %>%
summarise(promedio_chol = mean(chol, na.rm = TRUE), .groups = "drop")
ggplot(resumen_heatmap, aes(x = age_group,
y = hr_group,
fill = promedio_chol)) +
geom_tile(color = "white") +
geom_text(aes(label = round(promedio_chol, 0)), size = 3) +
scale_fill_gradient(low = "lightblue", high = "darkred") +
labs(
title = "Promedio de colesterol por grupo de edad y frecuencia cardiaca",
x = "Grupo de Edad",
y = "Grupo de Frecuencia Cardiaca",
fill = "Colesterol"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Se presentan a continuacion las estadisticas descriptivas adicionales
# Función para calcular la moda
moda <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
# Estadísticas descriptivas para colesterol (chol)
insurance %>%
summarise(media_col = mean(chol, na.rm = TRUE),
sd_col = sd(chol, na.rm = TRUE),
mediana_col = median(chol, na.rm = TRUE),
moda_col = moda(chol))
## media_col sd_col mediana_col moda_col
## 1 236.5959 44.37537 234 240
# Estadísticas por sexo
insurance %>%
group_by(sex) %>%
summarise(media_col = mean(chol, na.rm = TRUE),
sd_col = sd(chol, na.rm = TRUE))
## # A tibble: 2 × 3
## sex media_col sd_col
## <fct> <dbl> <dbl>
## 1 female 240. 46.0
## 2 male 233. 42.1
# Estadísticas por sexo y condición de fumador
insurance %>%
group_by(sex, current_smoker) %>%
summarise(media_col = mean(chol, na.rm = TRUE),
sd_col = sd(chol, na.rm = TRUE),
media_heart = mean(heart_rate, na.rm = TRUE),
sd_heart = sd(heart_rate, na.rm = TRUE))
## `summarise()` has grouped output by 'sex'. You can override using the `.groups`
## argument.
## # A tibble: 4 × 6
## # Groups: sex [2]
## sex current_smoker media_col sd_col media_heart sd_heart
## <fct> <fct> <dbl> <dbl> <dbl> <dbl>
## 1 female no 243. 45.8 76.6 12.2
## 2 female yes 234. 45.9 77.5 12.0
## 3 male no 231. 39.1 72.3 11.8
## 4 male yes 235. 44.0 75.6 11.6
Se utilizó una función personalizada en R para calcular intervalos de confianza del 95% para la media de las variables frecuencia cardíaca (heart_rate) y colesterol (chol). Estos intervalos permiten estimar el rango en el cual es probable que se encuentre la media poblacional, con base en la muestra analizada.
intervalo_confianza_media <- function(data, variable, alpha = 0.05) {
x <- data[[variable]]
media_x <- mean(x, na.rm = TRUE)
sd_x <- sd(x, na.rm = TRUE)
n <- sum(!is.na(x))
z <- qnorm(1 - alpha / 2)
inf <- media_x - z * (sd_x / sqrt(n))
sup <- media_x + z * (sd_x / sqrt(n))
data.frame(Variable = variable, Media = media_x, Desviacion = sd_x,
n = n, Z = z, Limite_Inferior = inf, Limite_Superior = sup)
}
intervalo_confianza_media(insurance, "heart_rate")
## Variable Media Desviacion n Z Limite_Inferior Limite_Superior
## 1 heart_rate 75.69638 12.02395 3893 1.959964 75.31867 76.07408
intervalo_confianza_media(insurance, "chol")
## Variable Media Desviacion n Z Limite_Inferior Limite_Superior
## 1 chol 236.5959 44.37537 3893 1.959964 235.202 237.9899
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.
H₀: μ₁ = μ₂
H₁: μ₁ ≠ μ₂
z.test(x = insurance$heart_rate,
sigma.x = sd(insurance$heart_rate),
mu = 75,
alternative = "two.sided",
conf.level = 0.95)
##
## One-sample z-Test
##
## data: insurance$heart_rate
## z = 3.6136, p-value = 0.000302
## alternative hypothesis: true mean is not equal to 75
## 95 percent confidence interval:
## 75.31867 76.07408
## sample estimates:
## mean of x
## 75.69638
Se rechaza la hipotesis en la frecuencia cardiaca promedio esta en 75 latidos por minutos, ya que como se observa en el resultado la frecuencia cardia esta en promedio entre 75.31867 y 76.07408
El p-value tiene un valor de probabilidad de resultado de 0.000302, es decir casi cero, lo que significa tambien que se recha la hipotesis
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.
H₀: μ ≤ 200
H₁: μ > 200
z.test(x = insurance$chol,
sigma.x = sd(insurance$chol),
mu = 200,
alternative = "greater",
conf.level = 0.95)
##
## One-sample z-Test
##
## data: insurance$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
La probabilidad de observar una media ≥ 236.5959 si H₀ fuera cierta (μ ≤ 200) es casi nula. Se rechaza H₀ (p-value < α)
El límite inferior (235.4261) confirma que la verdadera media es mayor a 235.43 con 95% de confianza.
Se considera que una persona tiene colesterol alto si su nivel es mayor a 240 mg/dL (según criterios médicos comunes).
H₀: p = 0.20
H₁: p > 0.20
# Variable binaria (colesterol alto)
insurance <- insurance %>%
mutate(colesterol_alto = ifelse(chol > 240, 1, 0))
# Estadísticos descriptivos
n <- nrow(insurance) # Tamaño de muestra
exitos <- sum(insurance$colesterol_alto) # Casos con colesterol alto
p_muestral <- exitos/n # Proporción muestral
p_hipotesis <- 0.20 # Proporción bajo H₀
# Resumen descriptivo
cat(" RESUMEN DESCRIPTIVO ")
## RESUMEN DESCRIPTIVO
cat("Muestra (n):", n, "\n")
## Muestra (n): 3893
cat("Personas con colesterol > 240:", exitos, "\n")
## Personas con colesterol > 240: 1669
cat("Proporcion muestral:", round(p_muestral, 4), "(", round(p_muestral*100, 1), "% )\n")
## Proporcion muestral: 0.4287 ( 42.9 % )
# Verificar condiciones para prueba Z de proporción
# - np ≥ 10 y n(1-p) ≥ 10
condicion1 <- n * p_hipotesis >= 10
condicion2 <- n * (1 - p_hipotesis) >= 10
cat("\n--- VERIFICACION DE SUPUESTOS ---\n")
##
## --- VERIFICACION DE SUPUESTOS ---
cat("¿np ≥ 10?", condicion1, "\n")
## ¿np ≥ 10? TRUE
cat("¿n(1-p) ≥ 10?", condicion2, "\n")
## ¿n(1-p) ≥ 10? TRUE
if (!condicion1 | !condicion2) {
warning("Las condiciones para la prueba Z no se cumplen. Considerar prueba exacta de binomial.")
}
# Prueba de proporciones (prueba Z)
prueba_prop <- prop.test(
x = exitos,
n = n,
p = p_hipotesis,
alternative = "greater", # Prueba unilateral derecha (H₁: p > 0.20)
conf.level = 0.95,
correct = FALSE # Sin corrección de continuidad de Yates
)
# Resultados de la prueba
cat("\n--- RESULTADOS DE LA PRUEBA DE HIPOTESIS ---\n")
##
## --- RESULTADOS DE LA PRUEBA DE HIPOTESIS ---
print(prueba_prop)
##
## 1-sample proportions test without continuity correction
##
## data: exitos out of n
## 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
# Interpretación de resultados
cat("\n--- INTERPRETACION ---\n")
##
## --- INTERPRETACION ---
if (prueba_prop$p.value < 0.05) {
cat("Con un valor-p de", format.pval(prueba_prop$p.value, digits = 4),
"rechazamos la hipótesis nula (H₀).\n")
cat("Existe evidencia estadística (α = 0.05) de que la proporción de personas\n")
cat("con colesterol alto (>240 mg/dL) es MAYOR al 20%.\n")
cat("Estimacion puntual:", round(p_muestral*100, 1), "%\n")
cat("IC95% unilateral inferior:", round(prueba_prop$conf.int[1]*100, 1), "% o mas\n")
} else {
cat("Con un valor-p de", format.pval(prueba_prop$p.value, digits = 4),
"NO rechazamos la hipótesis nula (H₀).\n")
cat("No hay evidencia suficiente (α = 0.05) para afirmar que la proporción\n")
cat("de personas con colesterol alto (>240 mg/dL) sea mayor al 20%.\n")
}
## Con un valor-p de < 2.2e-16 rechazamos la hipótesis nula (H₀).
## Existe evidencia estadística (α = 0.05) de que la proporción de personas
## con colesterol alto (>240 mg/dL) es MAYOR al 20%.
## Estimacion puntual: 42.9 %
## IC95% unilateral inferior: 41.6 % o mas
Se considera que una persona tiene taquicardia si su frecuencia cardíaca es mayor a 100 lpm (según criterios clínicos).
H₀: p = 0.05
H₁: p ≠ 0.05
# Variable binaria (taquicardia)
insurance <- insurance %>%
mutate(taquicardia = ifelse(heart_rate > 100, 1, 0))
# Estadísticos descriptivos
n <- nrow(insurance) # Tamaño de muestra
exitos <- sum(insurance$taquicardia) # Casos con colesterol alto
p_muestral <- exitos/n # Proporción muestral
p_hipotesis <- 0.05 # Proporción bajo H₀
# Resumen descriptivo
cat("\n--- RESUMEN DESCRIPTIVO ---\n")
##
## --- RESUMEN DESCRIPTIVO ---
cat("Muestra (n):", n, "\n")
## Muestra (n): 3893
cat("Personas con taquicardia > 100:", exitos, "\n")
## Personas con taquicardia > 100: 93
cat("Proporcion muestral:", round(p_muestral, 4), "(", round(p_muestral*100, 1), "% )\n")
## Proporcion muestral: 0.0239 ( 2.4 % )
# Verificar condiciones para prueba Z de proporción
# - np ≥ 10 y n(1-p) ≥ 10
condicion1 <- n * p_hipotesis >= 10
condicion2 <- n * (1 - p_hipotesis) >= 10
cat("\n--- VERIFICACION DE SUPUESTOS ---\n")
##
## --- VERIFICACION DE SUPUESTOS ---
cat("¿np ≥ 10?", condicion1, "\n")
## ¿np ≥ 10? TRUE
cat("¿n(1-p) ≥ 10?", condicion2, "\n")
## ¿n(1-p) ≥ 10? TRUE
if (!condicion1 | !condicion2) {
warning("Las condiciones para la prueba Z no se cumplen. Considerar prueba exacta de binomial.")
}
# Prueba de proporciones (prueba Z)
prueba_prop <- prop.test(
x = exitos,
n = n,
p = p_hipotesis,
alternative = "greater", # Prueba unilateral derecha (H₁: p > 0.05)
conf.level = 0.95,
correct = FALSE # Sin corrección de continuidad de Yates
)
# Resultados de la prueba
cat("\n--- RESULTADOS DE LA PRUEBA DE HIPOTESIS ---\n")
##
## --- RESULTADOS DE LA PRUEBA DE HIPOTESIS ---
print(prueba_prop)
##
## 1-sample proportions test without continuity correction
##
## data: exitos out of n
## X-squared = 55.877, df = 1, p-value = 1
## alternative hypothesis: true p is greater than 0.05
## 95 percent confidence interval:
## 0.02018189 1.00000000
## sample estimates:
## p
## 0.02388903
# Interpretacion de resultados
cat("\n--- INTERPRETACION ---\n")
##
## --- INTERPRETACION ---
if (prueba_prop$p.value < 0.05) {
cat("Con un valor-p de", format.pval(prueba_prop$p.value, digits = 4),
"rechazamos la hipótesis nula (H₀).\n")
cat("Existe evidencia estadística (α = 0.05) de que la proporción de personas\n")
cat("con taquicardia (>100 lmp) es MAYOR al 5%.\n")
cat("Estimación puntual:", round(p_muestral*100, 1), "%\n")
cat("IC95% unilateral inferior:", round(prueba_prop$conf.int[1]*100, 1), "% o más\n")
} else {
cat("Con un valor-p de", format.pval(prueba_prop$p.value, digits = 4),
"NO rechazamos la hipótesis nula (H₀).\n")
cat("No hay evidencia suficiente (α = 0.05) para afirmar que la proporción\n")
cat("de personas con taquicardia (>100 lmp) sea mayor al 5%.\n")
}
## Con un valor-p de 1 NO rechazamos la hipótesis nula (H₀).
## No hay evidencia suficiente (α = 0.05) para afirmar que la proporción
## de personas con taquicardia (>100 lmp) sea mayor al 5%.
Se desea evaluar si existen diferencias significativas en los niveles promedio de colesterol entre personas fumadoras y no fumadoras.
H₀: μ₁ = μ₂
H₁: μ₁ ≠ μ₂
chol.current_smoker <- split(insurance, insurance$current_smoker)
z.test(x = chol.current_smoker$yes$chol,
y = chol.current_smoker$no$chol,
sigma.x = sd(chol.current_smoker$yes$chol),
sigma.y = sd(chol.current_smoker$no$chol),
mu = 0,
alternative = "two.sided",
conf.level = 0.95)
##
## Two-sample z-Test
##
## data: chol.current_smoker$yes$chol and chol.current_smoker$no$chol
## z = -2.9119, p-value = 0.003592
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -6.924969 -1.353149
## sample estimates:
## mean of x mean of y
## 234.5067 238.6458
El valor-p de 0.0036 es menor que el nivel de significancia convencional de 0.05. Se rechaza la hipótesis nula (H₀). Existe evidencia estadísticamente significativa de una diferencia en los niveles medios de colesterol entre fumadores y no fumadores.
Los fumadores presentan en promedio niveles de colesterol más bajos (234.51 mg/dL) que los no fumadores (238.65 mg/dL).
Esta diferencia es estadísticamente significativa pero clínicamente pequeña (4.14 mg/dL).
El intervalo de confianza no incluye el cero (desde -6.92 hasta -1.35 mg/dL), confirmando la significancia.
La diferencia real en la población probablemente está entre 1.35 y 6.92 mg/dL.
Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no.
H₀: μ₁ = μ₂
H₁: μ₁ > μ₂
heart_rate.current_smoker <- split(insurance, insurance$current_smoker)
z.test(x = heart_rate.current_smoker$yes$heart_rate,
y = heart_rate.current_smoker$no$heart_rate,
sigma.x = sd(heart_rate.current_smoker$yes$heart_rate),
sigma.y = sd(heart_rate.current_smoker$no$heart_rate),
mu = 0,
alternative = "two.sided",
conf.level = 0.95)
##
## Two-sample z-Test
##
## data: heart_rate.current_smoker$yes$heart_rate and heart_rate.current_smoker$no$heart_rate
## z = 3.5748, p-value = 0.0003505
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 0.6212624 2.1293235
## sample estimates:
## mean of x mean of y
## 76.39056 75.01527
Existe evidencia estadísticamente significativa (p < 0.001) de que los fumadores presentan mayor frecuencia cardíaca promedio que los no fumadores, con una diferencia estimada de +1.38 lpm (IC95%: +0.62 a +2.13 lpm). Estos resultados apoyan la hipótesis de que el tabaquismo se asocia con elevación de la frecuencia cardíaca en reposo.
Determinar si la proporción de individuos con colesterol elevado difiere entre quienes fuman y quienes no lo hacen.
H₀: p₁ = p₂
H₁: p₁ ≠ p₂
# Variable binaria de colesterol alto (>240 mg/dL)
insurance <- insurance %>%
mutate(colesterol_alto = ifelse(chol > 240, 1, 0))
# Estadísticos descriptivos
tabla_resumen <- insurance %>%
group_by(current_smoker) %>%
summarise(
n = n(),
n_col_alto = sum(colesterol_alto),
prop_col_alto = mean(colesterol_alto)
) %>%
mutate(grupo = ifelse(current_smoker == "yes", "Fumadores", "No Fumadores"))
cat("\n--- RESUMEN DESCRIPTIVO ---\n")
##
## --- RESUMEN DESCRIPTIVO ---
print(tabla_resumen)
## # A tibble: 2 × 5
## current_smoker n n_col_alto prop_col_alto grupo
## <fct> <int> <dbl> <dbl> <chr>
## 1 no 1965 879 0.447 No Fumadores
## 2 yes 1928 790 0.410 Fumadores
# Verificación de supuestos
# Condiciones para prueba Z de dos proporciones:
# - n*p ≥ 5 y n*(1-p) ≥ 5 para ambos grupos
condiciones <- tabla_resumen %>%
mutate(
condicion1 = n * prop_col_alto >= 5,
condicion2 = n * (1 - prop_col_alto) >= 5
)
cat("\n--- VERIFICACIÓN DE SUPUESTOS ---\n")
##
## --- VERIFICACIÓN DE SUPUESTOS ---
print(condiciones[, c("grupo", "condicion1", "condicion2")])
## # A tibble: 2 × 3
## grupo condicion1 condicion2
## <chr> <lgl> <lgl>
## 1 No Fumadores TRUE TRUE
## 2 Fumadores TRUE TRUE
if (any(!condiciones$condicion1) | any(!condiciones$condicion2)) {
warning("No se cumplen los supuestos para prueba Z. Considerar prueba exacta de Fisher.")
}
# Prueba de hipótesis para dos proporciones (prueba Z)
prueba_prop <- prop.test(
x = c(tabla_resumen$n_col_alto[1], tabla_resumen$n_col_alto[2]),
n = c(tabla_resumen$n[1], tabla_resumen$n[2]),
alternative = "two.sided", # Prueba bilateral (H₁: p1 ≠ p2)
conf.level = 0.95,
correct = FALSE # Sin corrección de continuidad de Yates
)
# Resultados de la prueba
cat("\n--- RESULTADOS DE LA PRUEBA ---\n")
##
## --- RESULTADOS DE LA PRUEBA ---
print(prueba_prop)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c out of ctabla_resumen$n_col_alto[1] out of tabla_resumen$n[1]tabla_resumen$n_col_alto[2] out of tabla_resumen$n[2]
## X-squared = 5.6106, df = 1, p-value = 0.01785
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.006509575 0.068644839
## sample estimates:
## prop 1 prop 2
## 0.4473282 0.4097510
# Interpretación de resultados
cat("\n--- INTERPRETACIÓN ---\n")
##
## --- INTERPRETACIÓN ---
if (prueba_prop$p.value < 0.05) {
cat("Con un valor-p de", format.pval(prueba_prop$p.value, digits = 4),
"rechazamos la hipótesis nula (H₀).\n")
cat("Existe evidencia estadística (α = 0.05) de que la proporción de personas\n")
cat("con colesterol alto (>240 mg/dL) es DIFERENTE entre fumadores y no fumadores.\n\n")
# Dirección de la diferencia
dif_prop <- tabla_resumen$prop_col_alto[1] - tabla_resumen$prop_col_alto[2]
if (dif_prop > 0) {
cat("Los fumadores tienen mayor proporción de colesterol alto (diferencia =",
round(abs(dif_prop)*100, 1), "%)\n")
} else {
cat("Los no fumadores tienen mayor proporción de colesterol alto (diferencia =",
round(abs(dif_prop)*100, 1), "%)\n")
}
cat("Intervalo de confianza 95% para la diferencia: [",
round(prueba_prop$conf.int[1]*100, 1), "%, ",
round(prueba_prop$conf.int[2]*100, 1), "%]\n")
} else {
cat("Con un valor-p de", format.pval(prueba_prop$p.value, digits = 4),
"NO rechazamos la hipótesis nula (H₀).\n")
cat("No hay evidencia suficiente (α = 0.05) para afirmar que la proporción\n")
cat("de personas con colesterol alto difiera entre fumadores y no fumadores.\n")
}
## Con un valor-p de 0.01785 rechazamos la hipótesis nula (H₀).
## Existe evidencia estadística (α = 0.05) de que la proporción de personas
## con colesterol alto (>240 mg/dL) es DIFERENTE entre fumadores y no fumadores.
##
## Los fumadores tienen mayor proporción de colesterol alto (diferencia = 3.8 %)
## Intervalo de confianza 95% para la diferencia: [ 0.7 %, 6.9 %]
# Visualización de resultados
grafico <- ggplot(tabla_resumen, aes(x = grupo, y = prop_col_alto, fill = grupo)) +
geom_bar(stat = "identity") +
geom_text(aes(label = paste0(round(prop_col_alto*100, 1), "%")),
vjust = -0.5, size = 5) +
scale_y_continuous(labels = scales::percent, limits = c(0, 0.5)) +
labs(title = "Proporcion de colesterol alto (>240 mg/dL)",
subtitle = "Comparacion entre fumadores y no fumadores",
x = "",
y = "Proporcion",
fill = "Grupo") +
theme_minimal(base_size = 14) +
theme(legend.position = "top")
print(grafico)
El tabaquismo tiene un impacto estadísticamente significativo en la frecuencia cardíaca y los niveles de colesterol.
Aunque algunas diferencias son pequeñas en magnitud, su significancia sugiere posibles riesgos cardiovasculares asociados al hábito de fumar.
Se recomienda utilizar estos hallazgos para fortalecer campañas de salud pública orientadas a reducir el tabaquismo y monitorear sus efectos.