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
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:
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.
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:
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%.
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:
# 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.
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:
# 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.
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:
# 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.
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:
# 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.
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:
# 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.
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")
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()