title: “ACTIVIDAD 5. Pruebas de Hipótesis y Visualización Interactiva”

output: html_document

date: “2025-05-29”

autor: “Arevalo Vasquez Brayan Estiven”

Importar librerias necesarias

##########################################
# 1. Cargar paquetes necesarios
##########################################
library(readr)
library(dplyr)
library(ggplot2)
library(stringr)
library(tidyr)
#library(tigerstats)
library(BSDA)

Importar el dataset

df <- read_csv("smoking_health_data_final.csv")
## 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.

Limpieza de datos

df <- as.data.frame(unclass(df),
                           stringsAsFactors = TRUE)

Nombre de las columnas

# Descripcion de los datos 
str(df)
## '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 ...
# Cantidad de filas y columnas
dim(df)
## [1] 3900    7
# Nombres de las columnas
names(df)
## [1] "age"            "sex"            "current_smoker" "heart_rate"    
## [5] "blood_pressure" "cigs_per_day"   "chol"

Descripcion de los datos

summary(df)
##       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
df <- df %>% distinct()

# Cantidad de Datos nulos
colSums(is.na(df))
##            age            sex current_smoker     heart_rate blood_pressure 
##              0              0              0              0              0 
##   cigs_per_day           chol 
##             14              7
# valores de la columna sex
unique(df$sex)
## [1] male   female
## Levels: female male
# valores de la columna smoker
unique(df$current_smoker)
## [1] yes no 
## Levels: no yes
# tabla de registros 
knitr::kable(head(df, 10))
age sex current_smoker heart_rate blood_pressure cigs_per_day chol
54 male yes 95 110/72 NA 219
45 male yes 64 121/72 NA 248
58 male yes 81 127.5/76 NA 235
42 male yes 90 122.5/80 NA 225
42 male yes 62 119/80 NA 226
57 male yes 62 107.5/72.5 NA 223
43 male yes 75 109.5/69 NA 222
42 male yes 66 123/73 NA 196
37 male yes 65 123.5/77 NA 188
49 male yes 93 127.5/81.5 NA 256

Desarrollo Actividad Tres

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

summary(df)
##       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
# Prueba de hipotesis
t.test(df$heart_rate, mu = 75)
## 
##  One Sample t-test
## 
## data:  df$heart_rate
## t = 3.5809, df = 3899, p-value = 0.0003465
## alternative hypothesis: true mean is not equal to 75
## 95 percent confidence interval:
##  75.31176 76.06619
## sample estimates:
## mean of x 
##  75.68897

Mean : 75.68

p-value : 0.0003465

Respuesta: Se realizó una prueba t de una muestra para evaluar si la frecuencia cardíaca promedio de los individuos difiere de 75 latidos por minuto. La media muestral fue de 75.68. El valor p obtenido fue de 0.0003465, que es mayor al nivel de significancia de 0.05. Por lo tanto, no se rechaza la hipótesis nula, y se concluye que no hay evidencia estadísticamente significativa para afirmar que la frecuencia cardíaca promedio sea diferente de 75.

Hipótesis nula (H₀): La media poblacional de la frecuencia cardíaca es igual a 75.

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

Mean : 236.5959

p-value : 0.0003465

Respuesta: Se realizó una prueba t unilateral para evaluar si el nivel medio de colesterol en la muestra supera los 200 mg/dL. La media observada fue de 204.6 y el valor p obtenido fue 2.2e-16. Como este valor es menor al nivel de significancia de 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadísticamente significativa para afirmar que los niveles medios de colesterol en la muestra superan el umbral de 200 mg/dL, lo cual es indicativo de hipercolesterolemia.

# Prueba de hipotesis
t.test(df$chol, mu = 200, alternative = "greater")
## 
##  One Sample t-test
## 
## data:  df$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

Hipótesis alternativa (H₁): El nivel medio de colesterol en la población es mayor a 200.

3. Se considera que una persona tiene colesterol alto si su nivel es mayor a 240 mg/dL (según criterios médicos comunes)

# Crear columna
df$chol_alto <- ifelse(!is.na(df$chol) & df$chol > 240, 1, 0)

#Cantidad de personas con colesterol alto
x <- sum(df$chol_alto, na.rm = TRUE)

# Total de personas válidas (que tienen dato de colesterol)
n <- sum(!is.na(df$chol))
# tabla actualizada
knitr::kable(head(df, 10))
age sex current_smoker heart_rate blood_pressure cigs_per_day chol chol_alto
54 male yes 95 110/72 NA 219 0
45 male yes 64 121/72 NA 248 1
58 male yes 81 127.5/76 NA 235 0
42 male yes 90 122.5/80 NA 225 0
42 male yes 62 119/80 NA 226 0
57 male yes 62 107.5/72.5 NA 223 0
43 male yes 75 109.5/69 NA 222 0
42 male yes 66 123/73 NA 196 0
37 male yes 65 123.5/77 NA 188 0
49 male yes 93 127.5/81.5 NA 256 1
# prueba de proporciones
prop.test(x = x, n = n, p = 0.20, alternative = "greater", correct = FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability 0.2
## 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
# Tabla de frecuencias
tabla <- table(df$chol_alto)

# Etiquetas con porcentaje
etiquetas <- paste0(names(tabla), ": ", round(100 * tabla / sum(tabla), 1), "%")

# Gráfico de torta
pie(tabla, labels = etiquetas, main = "Porcentaje de personas con colesterol alto")

Proporción observada : p = 0.4287 = 42.87%

p-value : 2.2e-16

Respuesta: Se realizó una prueba de hipótesis para una proporción con el objetivo de evaluar si más del 20% de las personas en la muestra tienen colesterol alto (colesterol > 240 mg/dL). La proporción observada fue de 42.87% y el valor p obtenido fue menor a 0.00000000000000022, lo cual es muchísimo menor al nivel de significancia de 0.05. Por lo tanto, se rechaza la hipótesis nula y se concluye que existe evidencia estadísticamente significativa para afirmar que la proporción de personas con colesterol alto en la muestra es mayor al 20%.

Hipótesis (H₁):La proporción de personas con colesterol alto es mayor al 20%

4. Se considera que una persona tiene taquicardia si su frecuencia cardíaca es

mayor a 100 lpm (según criterios clínicos).

# Crear columna
df$taticardia <- ifelse(!is.na(df$heart_rate) & df$heart_rate > 100, 1, 0)

#Cantidad de personas con frecuencia cardiaca alta
x <- sum(df$taticardia, na.rm = TRUE)

# Total de personascon frecuencia cardiaca mayor a 100
n <- sum(!is.na(df$taticardia))
# tabla actualizada
knitr::kable(head(df, 10))
age sex current_smoker heart_rate blood_pressure cigs_per_day chol chol_alto taticardia
54 male yes 95 110/72 NA 219 0 0
45 male yes 64 121/72 NA 248 1 0
58 male yes 81 127.5/76 NA 235 0 0
42 male yes 90 122.5/80 NA 225 0 0
42 male yes 62 119/80 NA 226 0 0
57 male yes 62 107.5/72.5 NA 223 0 0
43 male yes 75 109.5/69 NA 222 0 0
42 male yes 66 123/73 NA 196 0 0
37 male yes 65 123.5/77 NA 188 0 0
49 male yes 93 127.5/81.5 NA 256 1 0
prop.test(x = x, n = n, p = 0.05, alternative = "greater", correct = FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability 0.05
## X-squared = 56.162, df = 1, p-value = 1
## alternative hypothesis: true p is greater than 0.05
## 95 percent confidence interval:
##  0.02014561 1.00000000
## sample estimates:
##          p 
## 0.02384615
# Tabla de frecuencias
tabla <- table(df$taticardia)

# Etiquetas con porcentaje
etiquetas <- paste0(names(tabla), ": ", round(100 * tabla / sum(tabla), 1), "%")

# Gráfico de torta
pie(tabla, labels = etiquetas, main = "Porcentaje de personas con taticardia")

Proporción observada : p = 0.02041 = 2%

p-value : 0.02384615

Respuesta: Se realizó una prueba de hipótesis para una proporción con el objetivo de evaluar si más del 5% de las personas en la muestra tienen taticardia (heart_rate > 100). La proporción observada fue de 2% y el valor p obtenido fue menor a 0.02384615 , lo cual es muchísimo menor al nivel de significancia de 0.05. Por lo tanto, se rechaza la hipótesis nula y se concluye que existe evidencia estadísticamente significativa para afirmar que la proporción de personas con taticardia es diferente del 5%.

Hipótesis (H₁):La proporción de personas con taquicardia es diferente del 5%.

5. Se desea evaluar si existen diferencias significativas en los niveles promedio

de colesterol entre personas fumadoras y no fumadoras.

table(df$current_smoker)
## 
##   no  yes 
## 1968 1932
t.test(chol ~ current_smoker, data = df, 
       alternative = "two.sided",  # bilateral
       var.equal = FALSE)          # asume varianzas diferentes (prueba de Welch)
## 
##  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 and group yes is not equal to 0
## 95 percent confidence interval:
##  1.352281 6.925837
## sample estimates:
##  mean in group no mean in group yes 
##          238.6458          234.5067
ggplot(df, aes(x = current_smoker, y = chol, fill = current_smoker)) +
  geom_boxplot() +
  labs(title = "Distribucion del colesterol por grupo de fumadores",
       x = "Fumador actual",
       y = "Colesterol (mg/dL)") +
  scale_fill_manual(values = c("no" = "#1f77b4", "yes" = "#ff7f0e")) +
  theme_minimal()
## Warning: Removed 7 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Si Fumadores: 1932 media de colesterol: 234.51 mg/dL No Fumadores: 1968 media de colesterol: 238.65 mg/dL Diferencia promedio: ~4.14 mg/dL p-value : 0.0036

Respuesta: Se realizó una prueba t para muestras independientes con el fin de evaluar si existen diferencias en los niveles medios de colesterol entre personas fumadoras y no fumadoras. El nivel medio de colesterol fue de 238.65 mg/dL en no fumadores y de 234.51 mg/dL en fumadores. El resultado de la prueba arrojó un valor p = 0.0036, que es menor al nivel de significancia del 5%. Por lo tanto, se rechaza la hipótesis nula y se concluye que existe una diferencia estadísticamente significativa entre los niveles medios de colesterol de los dos grupos, siendo mayor en las personas no fumadoras.

Hipótesis (H₁):Existe una diferencia significativa entre los niveles medios de colesterol.

6. Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y

quienes no.

table(df$current_smoker)
## 
##   no  yes 
## 1968 1932
t.test(heart_rate ~ current_smoker, data = df, 
       alternative = "two.sided",  # bilateral
       var.equal = FALSE)          # asume varianzas diferentes (prueba de Welch)
## 
##  Welch Two Sample t-test
## 
## data:  heart_rate by current_smoker
## t = -3.5809, df = 3896.4, p-value = 0.0003466
## alternative hypothesis: true difference in means between group no and group yes is not equal to 0
## 95 percent confidence interval:
##  -2.1284527 -0.6223489
## sample estimates:
##  mean in group no mean in group yes 
##          75.00762          76.38302
ggplot(df, aes(x = current_smoker, y = heart_rate, fill = current_smoker)) +
  geom_boxplot() +
  labs(title = "Distribucion de frecuencia cardiaca por grupo de fumadores",
       x = "Fumador actual",
       y = "Frecuencia cardiaca") +
  scale_fill_manual(values = c("no" = "#16e22f", "yes" = "#e24416")) +
  theme_minimal()

Si Fumadores: 1932 media de colesterol: 76.38 ldp No Fumadores: 1968 media de colesterol: 75.00 ldp Diferencia de medias: ~1.38 lpm más en fumadores p-value : 0.00035

Respuesta: Se realizó una prueba t de muestras independientes para comparar la frecuencia cardíaca promedio entre personas fumadoras y no fumadoras. La frecuencia cardíaca promedio fue de 75.01 lpm en no fumadores y 76.38 lpm en fumadores. La prueba arrojó un p-valor de 0.00035, lo cual es menor al nivel de significancia del 5%. Por lo tanto, se rechaza la hipótesis nula y se concluye que existe una diferencia estadísticamente significativa en la frecuencia cardíaca entre ambos grupos, siendo mayor en los fumadores.

Hipótesis (H₁):La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.