0. Importar datos

En esta sección se importa el conjunto de datos smoking_health_data_final.csv y se verifica su estructura para asegurar que esté listo para el análisis.

library(readr)

datos <- read_csv("C:/Users/zooco/OneDrive/1AMAESTRIA/Segundo Semestre/Ciencia de Datos/Actividad 3/smoking_health_data_final.csv")

# Verificar estructura y resumen estadístico
str(datos)
## spc_tbl_ [3,900 × 7] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ age           : num [1:3900] 54 45 58 42 42 57 43 42 37 49 ...
##  $ sex           : chr [1:3900] "male" "male" "male" "male" ...
##  $ current_smoker: chr [1:3900] "yes" "yes" "yes" "yes" ...
##  $ heart_rate    : num [1:3900] 95 64 81 90 62 62 75 66 65 93 ...
##  $ blood_pressure: chr [1:3900] "110/72" "121/72" "127.5/76" "122.5/80" ...
##  $ cigs_per_day  : num [1:3900] NA NA NA NA NA NA NA NA NA NA ...
##  $ chol          : num [1:3900] 219 248 235 225 226 223 222 196 188 256 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   age = col_double(),
##   ..   sex = col_character(),
##   ..   current_smoker = col_character(),
##   ..   heart_rate = col_double(),
##   ..   blood_pressure = col_character(),
##   ..   cigs_per_day = col_double(),
##   ..   chol = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary(datos)
##       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

1. Prueba de Hipótesis para una Media

¿La frecuencia cardíaca promedio es igual a 75 lpm?

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.

Hipótesis:

  • H₀: La media poblacional de la frecuencia cardíaca es igual a 75 lpm.
  • H₁: La media poblacional de la frecuencia cardíaca es distinta de 75 lpm.
library(BSDA)

z.test(x = datos$heart_rate,
       mu = 75,
       sigma.x = sd(datos$heart_rate, na.rm = TRUE),
       alternative = "two.sided",
       conf.level = 0.95)
## 
##  One-sample z-Test
## 
## data:  datos$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

¿Explique el resultado de la prueba hipótesis?, ¿qué podemos decir del p-valor?.

La prueba z realizada tiene como objetivo evaluar si la frecuencia cardíaca media de la población es diferente de 75 latidos por minuto (lpm).

  • El valor del estadístico z = 3.5809 indica cuántas desviaciones estándar se encuentra la media muestral respecto a la media hipotética (75 lpm).

  • El valor p = 0.0003423 es significativamente menor que el nivel de significancia habitual (α = 0.05), lo cual indica que la probabilidad de obtener un resultado igual o más extremo que el observado, si la media poblacional fuera realmente 75, es extremadamente baja.

Conclusión: Dado que el valor p es menor que 0.05, se rechaza la hipótesis nula (H₀). Esto significa que existe evidencia estadísticamente significativa para afirmar que la frecuencia cardíaca media de la muestra es diferente de 75 lpm.

Además, el intervalo de confianza del 95% [75.31, 76.07] no contiene el valor 75, lo cual refuerza esta conclusión.

2. Prueba de Hipótesis para una Media

¿El colesterol medio supera los 200 mg/dL?

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.

Hipótesis:

  • H₀: La media poblacional del colesterol es menor o igual a 200 mg/dL.
  • H₁: La media poblacional del colesterol es mayor a 200 mg/dL.
z.test(x = datos$chol,
       mu = 200,
       sigma.x = sd(datos$chol, na.rm = TRUE),
       alternative = "greater",
       conf.level = 0.95)
## 
##  One-sample z-Test
## 
## data:  datos$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

¿Explique el resultado de la prueba hipótesis?, ¿qué podemos decir del p-valor?

La prueba de hipótesis buscaba determinar si la proporción de personas con colesterol alto en la muestra es mayor al 20%, utilizando como criterio el umbral de 240 mg/dL.

La proporción observada fue de 42.87%, lo cual es visiblemente superior al 20% propuesto en la hipótesis nula.

El estadístico chi-cuadrado fue de 1271.4, con un valor p < 2.2e-16, prácticamente cero.

¿Qué nos dice el valor p? El valor p tan pequeño indica que la probabilidad de observar una proporción tan alta (o mayor) si en realidad solo el 20% de la población tuviera colesterol alto es extremadamente baja. En otras palabras, es muy improbable que esta diferencia se deba al azar.

Conclusión (α = 0.05): Dado que el valor p es menor al nivel de significancia (0.05), se rechaza la hipótesis nula. Por lo tanto, se concluye que más del 20% de las personas en la muestra tienen colesterol superior a 240 mg/dL, con evidencia estadística sólida que respalda esta afirmación.

Además, el intervalo de confianza del 95% para la proporción está entre 41.6% y 100%, lo que refuerza aún más la conclusión de que la proporción real supera el 20%.

3. Prueba de Hipótesis para una Proporción

¿Más del 20% de las personas tienen colesterol alto (> 240 mg/dL)?

Se considera que una persona tiene colesterol alto si su nivel es mayor a 240 mg/dL, según criterios médicos comunes. Se desea comprobar si la proporción de personas con colesterol alto es mayor al 20% en la muestra analizada. Nueva variable binaria \[ Z = \begin{cases} 1 & \text{si } chol > 240 \\\\ 0 & \text{si } chol \leq 240 \end{cases} \]

Hipótesis:

  • H₀: La proporción de personas con colesterol alto es igual al 20% (p = 0.20).
  • H₁: La proporción de personas con colesterol alto es mayor al 20% (p > 0.20).
# Crear variable binaria
datos <- datos %>%
  mutate(colesterol_alto = ifelse(chol > 240, 1, 0))

# Prueba de proporciones
prop.test(x = sum(datos$colesterol_alto == 1, na.rm = TRUE),
          n = sum(!is.na(datos$colesterol_alto)),
          p = 0.20,
          alternative = "greater",
          conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(datos$colesterol_alto == 1, na.rm = TRUE) out of sum(!is.na(datos$colesterol_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

Conclusión: La proporción observada (42.87%) es significativamente mayor al 20% propuesto, con un intervalo de confianza de [41.56%, 100%] y p < 2.2e-16. Se rechaza la hipótesis nula y se concluye que más del 20% de la población tiene colesterol alto, con fuerte respaldo estadístico.

4. Prueba de Hipótesis para una Proporción

¿La proporción de personas con taquicardia (> 100 lpm) es distinta al 5%?

Se considera que una persona presenta taquicardia si su frecuencia cardíaca supera los 100 latidos por minuto. Se desea evaluar si la proporción de personas con taquicardia es diferente al valor de referencia del 5%.

Nueva variable binaria:

\[ W = \begin{cases} 1 & \text{si } heart\_rate > 100 \\\\ 0 & \text{si } heart\_rate \leq 100 \end{cases} \]

Hipótesis:

  • H₀: La proporción de personas con taquicardia es igual al 5% (p = 0.05).
  • H₁: La proporción de personas con taquicardia es diferente del 5% (p ≠ 0.05).
# Crear variable binaria
datos <- datos %>%
  mutate(taquicardia = ifelse(heart_rate > 100, 1, 0))

# Prueba de proporciones
prop.test(x = sum(datos$taquicardia == 1, na.rm = TRUE),
          n = sum(!is.na(datos$taquicardia)),
          p = 0.05,
          alternative = "two.sided",
          conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(datos$taquicardia == 1, na.rm = TRUE) out of sum(!is.na(datos$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

Conclusión: La prueba arrojó un valor p < 0.05, lo que indica que la proporción de personas con taquicardia es significativamente diferente del 5% esperado. El resultado sugiere que la prevalencia de frecuencia cardíaca alta no se ajusta al valor de referencia propuesto.

5. Prueba de Hipótesis para Diferencia de Medias

¿Existen diferencias en los niveles promedio de colesterol entre fumadores y no fumadores?

Se recopilaron datos de colesterol para individuos clasificados como fumadores y no fumadores. El objetivo es evaluar si existe una diferencia significativa en los niveles promedio de colesterol entre ambos grupos.

Hipótesis:

  • H₀: No hay diferencia en los niveles medios de colesterol entre fumadores y no fumadores (μ₁ = μ₂).
  • H₁: Existe una diferencia significativa en los niveles medios de colesterol entre los grupos (μ₁ ≠ μ₂).
# Extraer grupos
grupo_fumador <- datos %>% filter(current_smoker == "yes") %>% pull(chol)
grupo_no_fumador <- datos %>% filter(current_smoker == "no") %>% pull(chol)

# Prueba z de diferencia de medias (dos colas)
z.test(x = grupo_fumador,
       y = grupo_no_fumador,
       sigma.x = sd(grupo_fumador, na.rm = TRUE),
       sigma.y = sd(grupo_no_fumador, na.rm = TRUE),
       alternative = "two.sided",
       conf.level = 0.95)
## 
##  Two-sample z-Test
## 
## data:  grupo_fumador and grupo_no_fumador
## 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

Conclusión: El valor p obtenido fue menor a 0.05, lo que permite rechazar la hipótesis nula. Se concluye que existe una diferencia significativa en los niveles medios de colesterol entre fumadores y no fumadores, lo que podría reflejar efectos del tabaquismo en la salud cardiovascular.

6. Prueba de Hipótesis para Diferencia de Medias (una cola)

¿La frecuencia cardíaca promedio es mayor en fumadores?

Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no. En particular, se plantea la hipótesis de que los fumadores tienen una frecuencia cardíaca promedio más alta.

Hipótesis:

  • H₀: La frecuencia cardíaca media de los fumadores es igual o menor a la de los no fumadores (μ₁ ≤ μ₂).
  • H₁: La frecuencia cardíaca media de los fumadores es mayor que la de los no fumadores (μ₁ > μ₂).
# Extraer datos por grupo
hr_fumadores <- datos %>% filter(current_smoker == "yes") %>% pull(heart_rate)
hr_no_fumadores <- datos %>% filter(current_smoker == "no") %>% pull(heart_rate)

# Prueba z de diferencia de medias (una cola)
z.test(x = hr_fumadores,
       y = hr_no_fumadores,
       sigma.x = sd(hr_fumadores, na.rm = TRUE),
       sigma.y = sd(hr_no_fumadores, na.rm = TRUE),
       alternative = "greater",
       conf.level = 0.95)
## 
##  Two-sample z-Test
## 
## data:  hr_fumadores and hr_no_fumadores
## z = 3.5809, p-value = 0.0001712
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  0.7436161        NA
## sample estimates:
## mean of x mean of y 
##  76.38302  75.00762

Conclusión: La prueba arrojó un valor p < 0.05, lo que indica que la frecuencia cardíaca promedio es significativamente mayor en fumadores que en no fumadores. Se rechaza la hipótesis nula, lo que apoya la evidencia sobre los efectos del tabaquismo en la aceleración del ritmo cardíaco.

7. Prueba de Hipótesis para Diferencia de Proporciones

¿La proporción de personas con colesterol alto difiere entre fumadores y no fumadores?

Se desea determinar si la proporción de individuos con colesterol alto (definido como un valor superior a 240 mg/dL) es diferente entre personas fumadoras y no fumadoras.

Se define colesterol alto como un valor de colesterol > 240 mg/dL.
Se crea una variable binaria:

\[ Z = \begin{cases} 1 & \text{si } chol > 240 \quad (\text{colesterol alto}) \\\\ 0 & \text{si } chol \leq 240 \quad (\text{colesterol normal o saludable}) \end{cases} \]

Hipótesis:

  • H₀: La proporción de personas con colesterol alto es la misma en fumadores y no fumadores (p₁ = p₂).
  • H₁: La proporción de personas con colesterol alto es diferente entre los dos grupos (p₁ ≠ p₂).
# Crear tabla de contingencia
tabla_colesterol <- table(datos$current_smoker, datos$colesterol_alto)

# Prueba de proporciones
prop.test(x = c(tabla_colesterol["yes", "1"], tabla_colesterol["no", "1"]),
          n = c(sum(tabla_colesterol["yes", ]), sum(tabla_colesterol["no", ])),
          alternative = "two.sided",
          conf.level = 0.95)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(tabla_colesterol["yes", "1"], tabla_colesterol["no", "1"]) out of c(sum(tabla_colesterol["yes", ]), sum(tabla_colesterol["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

Conclusión: La diferencia observada en la proporción de personas con colesterol alto entre fumadores y no fumadores es estadísticamente significativa (p < 0.05). Se rechaza la hipótesis nula, lo que indica que el riesgo de hipercolesterolemia varía entre ambos grupos.

9. Visualización: Boxplots Comparativos

A continuación se presentan gráficos de boxplot que permiten observar la distribución de colesterol y frecuencia cardíaca entre fumadores y no fumadores. Estas visualizaciones ayudan a interpretar las diferencias observadas en los análisis estadísticos anteriores.

# Cargar librerías necesarias
library(ggplot2)
library(dplyr)

# Boxplot de colesterol según condición de fumador
ggplot(datos, aes(x = current_smoker, y = chol, fill = current_smoker)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Distribución de Colesterol por Condición de Fumador",
       x = "¿Fumador?",
       y = "Colesterol (mg/dL)") +
  theme_minimal() +
  theme(legend.position = "none")

# Boxplot de frecuencia cardíaca según condición de fumador
ggplot(datos, aes(x = current_smoker, y = heart_rate, fill = current_smoker)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Distribución de Frecuencia Cardíaca por Condición de Fumador",
       x = "¿Fumador?",
       y = "Frecuencia Cardíaca (lpm)") +
  theme_minimal() +
  theme(legend.position = "none")

10. Visualización: Histogramas Comparativos

Los siguientes histogramas muestran la distribución de las variables colesterol y frecuencia cardíaca, diferenciando entre fumadores y no fumadores. Estas visualizaciones permiten observar la forma, dispersión y posibles sesgos de las distribuciones.

# Histograma de colesterol por grupo de fumadores
ggplot(datos, aes(x = chol, fill = current_smoker)) +
  geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
  labs(title = "Histograma de Colesterol por Condición de Fumador",
       x = "Colesterol (mg/dL)",
       y = "Frecuencia",
       fill = "¿Fumador?") +
  theme_minimal()

# Histograma de frecuencia cardíaca por grupo de fumadores
ggplot(datos, aes(x = heart_rate, fill = current_smoker)) +
  geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
  labs(title = "Histograma de Frecuencia Cardíaca por Condición de Fumador",
       x = "Frecuencia Cardíaca (lpm)",
       y = "Frecuencia",
       fill = "¿Fumador?") +
  theme_minimal()