title: “ACTIVIDAD 5. Pruebas de Hipótesis y Visualización Interactiva”
output: html_document
date: “2025-05-29”
autor: “Arevalo Vasquez Brayan Estiven”
##########################################
# 1. Cargar paquetes necesarios
##########################################
library(readr)
library(dplyr)
library(ggplot2)
library(stringr)
library(tidyr)
#library(tigerstats)
library(BSDA)
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.
df <- as.data.frame(unclass(df),
stringsAsFactors = TRUE)
# 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"
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 |
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.
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.
# 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%
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%.
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.
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.