En esta actividad se pretende adquirir la capacidad para aplicar e interpretar técnicas avanzadas de pruebas y validación de hipótesis estadísticas, Comprendiendo su importancia , exploración de relaciones complejas entre variables y presentación de resultados de manera efectiva mediante visualizaciones interactivas con RStudio.
Aplicando las ténicas mencionadas en la siguiente Prueba Hipótesis 2025
El conjunto de datos Smokers Health Data contiene
una amplia gama de variables tanto cuantitativas como cualitativas que
permiten analizar los efectos del tabaquismo en la salud. Entre las
variables cuantitativas se encuentran la edad
-age,frecuencia cardíaca -
heart_rate, oxígeno en sangre
-blood_pressure, colesterol
-chol, entre otros.
library(readr)
library(ggplot2) #visualización
library(tidyverse) #manipulación y visualización
library(rstatix) # verificar suposiciones
library(naniar) # visualizar datos faltantes
library(skimr) # resumen descriptivo
library(BSDA) #Muestra Hipotesis
SHdf <- read_csv("smoking_health_data_final.csv")
#convertir a DF y Transformación de datos codificados a var tipo factor
SHdf=as.data.frame(unclass(SHdf), stringsAsFactors = TRUE)
SHdf %>%
summarise(
cigs_per_day_na = sum(is.na(cigs_per_day)),
n_chol_na = sum(is.na(chol))
) %>%
print()
## cigs_per_day_na n_chol_na
## 1 14 7
Solo las variables cigs_per_day y
chol tienen datos faltantes, al ser pocos
valores la estrategia es la Imputación por Mediana
Condicional es la mejor, ya que respeta la correlación entre el
tabaquismo current_smokery los factores de riesgo
cardiovasculares.
SHdf_C <- SHdf %>%
group_by(current_smoker) %>%
mutate(
# solo se imputará los fumadores, los Nofumadores tienen 0, y los NA en Nofumadores deben ser corregidos.
cigs_per_day = case_when(
current_smoker == "no" & is.na(cigs_per_day) ~ 0, # Si no fuma y es NA, asumir 0
is.na(cigs_per_day) ~ median(cigs_per_day, na.rm = TRUE), # Si fuma y es NA, usar mediana del grupo "yes"
TRUE ~ cigs_per_day # Mantener el valor existente
),
# Imputación de chol: con la mediana del grupo "current_smoker"
chol = replace_na(chol, median(chol, na.rm = TRUE))
) %>%
ungroup()
cigs_per_day Cigarros por Día: Si el
individuo es NoFumador (current_smoker ==
“no”) y tiene un valor faltante, se
imputa cero (0), pero, Si el individuo es Fumador
(current_smoker == “yes”) y tiene un valor
faltante, se imputa con la
mediana de cigarros por día calculada solo entre los
fumadores.
Para comprobar la imputación verificamos los valores nulos por columna, con el uso de la función across, que aplica una función a múltiples columnas para poder verificar todas las variables del DataFrame.
nulos_resumen <- SHdf_C %>%
summarise(
# Aplicar la función a todas las columnas
across(
.cols = everything(), # Selecciona todas las col
.fns = ~ sum(is.na(.)) # Sumar los valores TRUE (1) de is.na(.)
)
)
print(nulos_resumen) # Imprimir el rta como una fila
## # A tibble: 1 × 7
## age sex current_smoker heart_rate blood_pressure cigs_per_day chol
## <int> <int> <int> <int> <int> <int> <int>
## 1 0 0 0 0 0 0 0
Como podemos observar, la tabla contiene 7 variables donde la suma de sus valores nulos por columna es cero (0) indicando que no existe nulidad en la tabla ni en el DataFrame.
cat("Total de registros limpios:", nrow(SHdf_C), "\n")
## Total de registros limpios: 3900
cat("Fumadores (Smokers):", sum(SHdf_C$current_smoker == "yes"), "\n")
## Fumadores (Smokers): 1932
cat("No Fumadores (Non-Smokers):", sum(SHdf_C$current_smoker == "no"), "\n")
## No Fumadores (Non-Smokers): 1968
Los valores faltantes fueron reemplazados por la mediana calculada a partir de los datos no nulos del mismo dataset, permitiendo utilizar el conjunto completo de observaciones en las pruebas de hipótesis sin sesgar drásticamente las varianzas o las medias.
Los 10 primeros registros
head(SHdf_C, 10)
## # A tibble: 10 × 7
## age sex current_smoker heart_rate blood_pressure cigs_per_day chol
## <dbl> <fct> <fct> <dbl> <fct> <dbl> <dbl>
## 1 54 male yes 95 110/72 20 219
## 2 45 male yes 64 121/72 20 248
## 3 58 male yes 81 127.5/76 20 235
## 4 42 male yes 90 122.5/80 20 225
## 5 42 male yes 62 119/80 20 226
## 6 57 male yes 62 107.5/72.5 20 223
## 7 43 male yes 75 109.5/69 20 222
## 8 42 male yes 66 123/73 20 196
## 9 37 male yes 65 123.5/77 20 188
## 10 49 male yes 93 127.5/81.5 20 256
Veamos la estructura de la base
str(SHdf_C)
## tibble [3,900 × 7] (S3: tbl_df/tbl/data.frame)
## $ age : num [1:3900] 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 [1:3900] 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 [1:3900] 20 20 20 20 20 20 20 20 20 20 ...
## $ chol : num [1:3900] 219 248 235 225 226 223 222 196 188 256 ...
Ahora un análisis estadístico por variables
summary(SHdf_C)
## 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.207 Mean :236.6
## 3rd Qu.:20.000 3rd Qu.:263.0
## Max. :70.000 Max. :696.0
##
y un resumen descriptivo de variables
skim(SHdf_C)
| Name | SHdf_C |
| Number of rows | 3900 |
| Number of columns | 7 |
| _______________________ | |
| Column type frequency: | |
| factor | 3 |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| sex | 0 | 1 | FALSE | 2 | fem: 2081, mal: 1819 |
| current_smoker | 0 | 1 | FALSE | 2 | no: 1968, yes: 1932 |
| blood_pressure | 0 | 1 | FALSE | 2317 | 130: 18, 120: 17, 110: 15, 125: 15 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| age | 0 | 1 | 49.54 | 8.56 | 32 | 42 | 49 | 56 | 70 | ▃▇▆▆▂ |
| heart_rate | 0 | 1 | 75.69 | 12.02 | 44 | 68 | 75 | 82 | 143 | ▂▇▃▁▁ |
| cigs_per_day | 0 | 1 | 9.21 | 12.03 | 0 | 0 | 0 | 20 | 70 | ▇▃▁▁▁ |
| chol | 0 | 1 | 236.59 | 44.34 | 113 | 206 | 234 | 263 | 696 | ▇▇▁▁▁ |
\[ \left\{\begin{matrix} Ho: \mu =\mu _{x}\\ Ha: \mu \neq \mu _{x} \end{matrix}\right. \]
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:
Hipótesis nula (H₀): La media poblacional de la frecuencia cardíaca es igual a 75.
Hipótesis alternativa (H₁): La media poblacional de la frecuencia cardíaca es diferente de 75.
# t.test compara una media muestral contra un valor fijo (mu)
t_test_one_sample_hr <- t.test(
x = SHdf_C$heart_rate, # Variable a analizar (toda la muestra)
mu = 75, # Valor hipotético bajo H₀ (75 lpm)
alternative = "two.sided", # H₁: mu != 75 (Prueba bilateral)
conf.level = 0.95 # Nivel de confianza
)
print(t_test_one_sample_hr) # Imprimir el resultado de la prueba
##
## One Sample t-test
##
## data: SHdf_C$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
Esta prueba comprobó, que la media poblacional de la
frecuencia cardíaca promedio heart_rate
observada en la muestra es de \(75.689 \text{
lpm}\), supera el umbral propuesto de \(75 \text{ lpm}\) por \(H_0\). Confirmado por las medidas, del
valor Estadístico t de \(3.5809\) muy alto indicando una diferencia
real, en unos \(3898\) df
grados de libertad reflejados en el tamaño de la muestra, y un
Intervalo de Confianza de \(95%\), entre \([75.312, 76.066]\) lpm. Este intervalo no
incluye el \(75%\) propuesto por \(H_0\) y conduce a su rechazo.
¿Qué podemos decir del \(p\)-valor?: \(0.0003465\) es la probabilidad de observar una media muestral que se encuentre tan lejos de \(75 \text{ lpm}\), si la hipótesis nula (\(\mu=75\)) fuera cierta, dado que este valor es mucho menor que el nivel de significancia \(\alpha=0.05\), por lo cual se RECHAZA la Hipótesis Nula (\(H_0\)), existiendo evidencia estadística concluyente para afirmar que el la frecuencia cardíaca promedio de la población es significativamente diferente de \(75 \text{ latidos por minuto}\). Específicamente, es significativamente mayor.
# Parámetros del resultado de la prueba
mean_hr_sample <- 75.68897
p_value_hr <- 0.0003465
ggplot(SHdf_C, aes(x = heart_rate)) +
geom_histogram(bins = 30, fill = "#1F77B4", color = "white", alpha = 0.8) +
geom_vline(aes(xintercept = 75, color = "Umbral H₀ (75)"),
linetype = "dashed", linewidth = 1.2) + # Línea del valor de la hipótesis nula
geom_vline(aes(xintercept = mean_hr_sample, color = "Media Muestral"),
linetype = "solid", linewidth = 1.2) + # Línea de la media observada
scale_color_manual(values = c("Umbral H₀ (75)" = "red", "Media Muestral" = "orange")) +
labs(
title = "Distribución de Frecuencia Cardíaca vs. Referencia (75 lpm)",
x = "Frecuencia Cardíaca (latidos/min)",
y = "Frecuencia",
caption = paste0("p-valor (bilateral): ", format(p_value_hr, scientific = TRUE, digits = 4)),
color = "Referencia"
) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
\[ \left\{\begin{matrix} Ho: \mu =\mu _{x}\\ Ha: \mu \neq \mu _{x} \end{matrix}\right. \] Se quiere evaluar si los niveles medios de colesterol en la muestra superan el valor umbral de \(200 \text{ mg/dL}\), punto a partir del cual se considera que existe hipercolesterolemia.
Hipótesis 2:
Hipótesis nula (H₀): El nivel medio de colesterol en la población es menor o igual a \(200\)
Hipótesis alternativa (H₁): El nivel medio de colesterol en la población es mayor a \(200\)
# t.test compar una media muestral contra un valor fijo (mu)
t_test_cholesterol <- t.test(
x = SHdf_C$chol, # Variable de la muestra a analizar
mu = 200, # Valor hipotético bajo Ho (200 mg/dL)
alternative = "greater", # H1: mu > 200 (Prueba unilateral superior)
conf.level = 0.95 # Nivel de confianza del 95%
)
print(t_test_cholesterol)
##
## One Sample t-test
##
## data: SHdf_C$chol
## t = 51.54, df = 3899, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
## 235.422 Inf
## sample estimates:
## mean of x
## 236.59
Esta prueba evaluó, que la media del nivel promedio de
colesterol chol observado en la muestra es de
\(236.59 \text{ mg/dL}\), supera
significativamente el umbral propuesto de \(200 \text{ mg/dL}\) por \(H_0\).
Confirmado por las medidas, del valor Estadístico t de \(51.54\) muy alto indicando una diferencia masiva y altamente significativa, y un Intervalo de Confianza \(235.422 \text{ mg/dL}\) el valor más bajo para la media poblacional, dado que el límite inferior está muy por encima del umbral de \(200 \text{ mg/dL}\).
¿Qué podemos decir del \(p\)-valor?: < 2.2e-16 o virtualmente cero indica que es prácticamente imposible que la media poblacional real sea de \(200\) o menos, dado que el \(p\)-valor es mucho menor que el nivel de significancia \(\alpha=0.05\), por lo cual se RECHAZA la Hipótesis Nula (\(H_0\)), existiendo evidencia estadística concluyente para afirmar que el nivel medio de colesterol en la población de estudio es significativamente mayor a \(200 \text{ mg/dL}\).
ggplot(SHdf_C, aes(x = chol)) +
geom_histogram(bins = 20, fill = "#1F77B4", color = "white", alpha = 0.8) +
geom_vline(aes(xintercept = 200, color = "Umbral H0 (200)"),
linetype = "dashed", linewidth = 1.2) +
geom_vline(aes(xintercept = 236.59, color = "Media Muestral"),
linetype = "solid", linewidth = 1.2) +
scale_color_manual(values = c("Umbral H0 (200)" = "red", "Media Muestral" = "orange")) +
labs(
title = "Distribución del Nivel de Colesterol vs. Umbral de Hipercolesterolemia",
x = "Nivel de Colesterol (mg/dL)",
y = "Frecuencia",
caption = "p-valor <2.2e-16 (unilateral):"
) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
\[ Z = \begin{cases} 1 & \text{si } \text{chol} > 240 \text{ mg/dL} \\ 0 & \text{si } \text{chol} \le 240 \text{ mg/dL} \end{cases} \]
Se considera que una persona tiene colesterol alto si su nivel es mayor a \(240\) mg/dL (según criterios médicos comunes).
Hipótesis 3:
Hipótesis nula (H₀:) La proporción de personas con colesterol alto es igual al \(20%\)
Hipótesis alternativa (H₁): La proporción de personas con colesterol alto es mayor al \(20%\)
Creamos la variable binaria de colesterol alto y
luego usamos prop.test().
SHdf_C <- SHdf_C %>%
mutate(high_chol = as.numeric(chol > 240))
successes <- sum(SHdf_C$high_chol)
total_n <- nrow(SHdf_C)
cat("Total de personas con Colesterol alto", successes)
## Total de personas con Colesterol alto 1669
cat("Total de personas de la encuesta", total_n)
## Total de personas de la encuesta 3900
prop_test_one_sample <- prop.test(
x = successes,
n = nrow(SHdf_C),
p = 0.20, # Valor de p0 bajo la Hipótesis Nula (20%)
alternative = "greater",# H1: p > 0.20 (Prueba unilateral)
conf.level = 0.95,
correct = TRUE
)
print(prop_test_one_sample) #Resultado de la Prueba de Una Muestra
##
## 1-sample proportions test with continuity correction
##
## data: successes out of nrow(SHdf_C), null probability 0.2
## X-squared = 1265.1, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
## 0.4148435 1.0000000
## sample estimates:
## p
## 0.4279487
La prueba estadística evalúa la hipótesis sobre la proporción de personas con colesterol alto (\(chol > 240 \text{ mg/dL}\)) es Nula si igual al \(20%\) o es Alternativa si es mayor.
Las medidas indican una proporción de colesterol alto en la muestra del \(42.8%.\) que está muy lejos de la proporción nula \(20%\), confirmada por un valor estadístico \(1265.1\) extremadamente grande, un p-Valor \(< 2.2e-16\) tan pequeño que es virtualmente cero, junto con un intervalo de confianza de \(95%\), entre \(41.48%\) y \(100%\). Este intervalo no incluye el \(20%\) propuesto por \(H_0\).
¿Qué podemos decir del p-valor?: Que es la probabilidad de observar una proporción de colesterol alto, y si la hipótesis nula (\(p=0.20\)) fuera realmente cierta en la población.Pero, dado que este valor es mucho menor que el nivel de significancia (\(\alpha = 0.05\)), se RECHAZA la Hipótesis Nula (\(H_0\)) y queda aceptada la Hipótesis Alternativa (\(H_1\)), puesto que existe evidencia estadística muy fuerte para concluir que la proporción de personas con colesterol alto en la población de estudio es significativamente mayor que el 20%.
proportion_data <- data.frame(
Category = c("Observada", "Hipótesis (H0)"),
Proportion = c(0.4279487, 0.20)
)
ggplot(proportion_data, aes(x = Category, y = Proportion, fill = Category)) +
geom_bar(stat = "identity", width = 0.5) +
geom_text(aes(label = scales::percent(Proportion, accuracy = 0.1)), vjust = -0.5, size = 5, color = "black") +
geom_hline(yintercept = 0.20, linetype = "dashed", color = "red", linewidth = 1) + # Línea de H0
scale_y_continuous(labels = scales::percent, limits = c(0, max(proportion_data$Proportion) * 1.1)) +
scale_fill_manual(values = c("Observada" = "#1F77B4", "Hipótesis (H0)" = "gray")) +
labs(
title = "Proporción de Colesterol Alto: Muestra vs. Hipótesis (H0 = 20%)",
x = "",
y = "Proporción de Individuos con Colesterol Alto (> 240 mg/dL)",
caption= "p-valor (< 2.2e-16) indica el rechazo de la Hipótesis Nula"
) +
theme_minimal() +
theme(legend.position = "none", plot.title = element_text(hjust = 0.5, face = "bold"))
\[ w = \begin{cases} 1 & \text{si } \text{heart_rate} > 100 \text{ lpm} \\ 0 & \text{si } \text{heart_rate} \le 100 \text{ lpm} \end{cases} \]
Se considera que una persona tiene taquicardia si su frecuencia cardíaca es mayor a \(100\) lpm (según criterios clínicos).
Hipótesis 4:
Hipótesis nula (H₀:) La proporción de personas con taquicardia es igual al \(5\)%
Hipótesis alternativa (H₁): La proporción de personas con taquicardia es diferente al \(5%\)
SHdf_C <- SHdf_C %>%
mutate(tachycardia = as.numeric(heart_rate > 100))
successes_tachy <- sum(SHdf_C$tachycardia)
total_n <- nrow(SHdf_C)
cat("Total de personas con Taquicardia", successes_tachy)
## Total de personas con Taquicardia 93
prop_test_tachycardia <- prop.test(
x = successes_tachy,
n = total_n, # Total de personas de la encuesta 3900
p = 0.05, # Valor de p₀ bajo la Hipótesis Nula (5%)
alternative = "two.sided",# H₁: p != 0.05 (Prueba bilateral)
conf.level = 0.95,
correct = TRUE
)
print(prop_test_tachycardia) #Resultado de la Prueba de Una Muestra
##
## 1-sample proportions test with continuity correction
##
## data: successes_tachy out of total_n, 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
La prueba estadística evalúa la hipótesis sobre la proporción de personas con taquicardia, si es igual al \(5\%\) es Nula y si es diferente al \(5\%\) es bilateral.
Las medidas indican una proporción de taquicardia en la muestra del \(2.38%.\) que es menos de la mitad del valor hipotético del \(5\%\) de la proporción nula, confirmada por un valor estadístico \(55.613\) muy alto, indicando que la proporción muestral está muy lejos de la proporción nula de \(0.05\), junto con un intervalo de confianza de \(95%\), entre \([0.01939, 0.02926]\). Este intervalo no incluye el \(0.05\) o que confirma el rechazo de \(H_0\).
¿Qué podemos decir del p-valor?: (\(8.825 \times 10^{-14}\)) es la probabilidad de que, si la verdadera proporción de taquicardia en la población fuera exactamente \(5\%\), se hubiera observado una proporción muestral supremamente alejada del \(5\%\). Pero un valor tan minúsculo indica que el resultado de la muestra es extremadamente improbable bajo el supuesto de \(H_0\), por lo cal se RECHAZA la Hipótesis Nula, la diferencia entre \(2.38\%\) y \(5\%\) se considera real y no debida al azar.
# Parámetros del resultado de la prueba
prop_obs <- 0.02384615
p_value_tachy <- 8.825e-14
# Preparar los datos para el gráfico
proportion_data_tachy <- data.frame(
Category = c("Observada", "Hipótesis (H₀)"),
Proportion = c(0.02384615, 0.05)
)
# Generar el gráfico de Barras
ggplot(proportion_data_tachy, aes(x = Category, y = Proportion, fill = Category)) +
geom_bar(stat = "identity", width = 0.5) +
geom_text(aes(label = scales::percent(Proportion, accuracy = 0.1)),
vjust = -0.5, size = 5, color = "black") +
geom_hline(yintercept = 0.05, linetype = "dashed", color = "red", linewidth = 1) + # Línea de H0 (5%)
scale_y_continuous(labels = scales::percent, limits = c(0, 0.06)) +
scale_fill_manual(values = c("Observada" = "#1F77B4", "Hipótesis (H0)" = "gray")) +
labs(
title = "Proporción de Taquicardia: Muestra vs. Hipótesis (H0 = 5%)",
x = "",
y = "Proporción de Taquicardia (> 100 lpm)",
caption = paste0("p-valor (bilateral): < ", format(p_value_tachy, scientific = TRUE, digits = 4)),
subtitle = "El 2.38% observado es significativamente menor que el 5% de la H0"
) +
theme_minimal() +
theme(legend.position = "none", plot.title = element_text(hjust = 0.5, face = "bold"))
\[ \left\{\begin{matrix} Ho: \mu_{x1} =\mu _{x2}\\ Ha: \mu_{x1} \neq \mu _{x2} \end{matrix}\right. \]
Se desea evaluar si existen diferencias significativas en los niveles promedio de colesterol entre personas fumadoras y no fumadoras.
Hipótesis 5:
Hipótesis nula (H₀:) No hay diferencia en los niveles medios de colesterol entre fumadores y no fumadores.
Hipótesis alternativa (H₁): Existe una diferencia significativa entre los niveles medios de colesterol
t_test_cholesterol_groups <- t.test(
chol ~ current_smoker, # Var_Dependiente ~ Var_Agrupadora
data = SHdf_C,
alternative = "two.sided", # H₁: mu_1 != mu_2 (Bilateral)
var.equal = TRUE, # Ajustar a T o F según Levene
conf.level = 0.95
)
print(t_test_cholesterol_groups)
##
## Two Sample t-test
##
## data: chol by current_smoker
## t = 2.9175, df = 3898, p-value = 0.003549
## alternative hypothesis: true difference in means between group no and group yes is not equal to 0
## 95 percent confidence interval:
## 1.357470 6.919912
## sample estimates:
## mean in group no mean in group yes
## 238.6402 234.5016
El resultado de la prueba de hipótesis sobre la diferencia en los niveles medios de colesterol entre fumadores es de \(234.50 \text{ mg/dL}\) y no fumadores es de de \(238.64 \text{ mg/dL}\), con una diferencia aproximadamente \(4.14 \text{ mg/dL}\) , por lo tanto, es bilateral puesto que si hay diferencia. Confirmada por un valor estadístico \(t\) \(2.9175\) que es valor moderado indicando que la diferencia observada es improbable si \(H_0\) fuera cierta, junto con un intervalo de confianza de \(95%\), para la diferencia de medias (\(\mu_{\text{No}} - \mu_{\text{Yes}}\)) está completamente por encima de cero, indicando que la diferencia es significativa y positiva (No fumadores \(>\) Fumadores).
¿Qué podemos decir del p-valor?: \(0.003549\) es la probabilidad de observar una diferencia en las medias de colesterol tan grande, si en realidad los niveles de colesterol fueran idénticos en la población de fumadores y no fumadores. Pero un valor tan bajo indica que la diferencia de \(4.14 \text{ mg/dL}\) es poco probable que sea un resultado del azar, justificando la conclusión de la diferencia es real y se RECHAZA la Hipótesis Nula (\(H_0\)). Existe evidencia estadística suficiente, con un \(95\%\) de confianza, para afirmar que existe una diferencia significativa en los niveles promedio de colesterol entre personas fumadoras y no fumadoras. Específicamente, el nivel promedio de colesterol es significativamente mayor en los no fumadores.
ggplot(SHdf_C, aes(x = current_smoker, y = chol, fill = current_smoker)) +
geom_boxplot(alpha = 0.7) +
stat_summary(fun = "mean", geom = "point", shape = 23, size = 4, fill = "white") + # Añade un punto blanco para la media
labs(
title = "Comparación de Niveles de Colesterol entre Fumadores y No Fumadores",
subtitle = paste0("Media No Fumadores: ", round(238.6402, 2), " mg/dL | Media Fumadores: ", round(234.5016, 2), " mg/dL"),
x = "Hábito de Fumar",
y = "Nivel de Colesterol (mg/dL)",
caption = paste0("p-valor (bilateral): ", format(0.003549, digits = 4), " (Diferencia significativa)")
) +
scale_fill_manual(values = c("yes" = "#E69F00", "no" = "#56B4E9"), name = "Fumador Actual") + # Colores para los grupos
theme_minimal() +
theme(legend.position = "bottom", plot.title = element_text(hjust = 0.5, face = "bold"))
\[ \left\{\begin{matrix} Ho: \mu_{x1} =\mu _{x2}\\ Ha: \mu_{x1} \neq \mu _{x2} \end{matrix}\right. \]
Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no.
Hipótesis 6:
Hipótesis nula (H₀:) No hay diferencia en la frecuencia cardíaca promedio entre fumadores y no fumadores.
Hipótesis alternativa (H₁): La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.
heart_rate_groups <- t.test(
heart_rate ~ current_smoker, # Compara heart_rate vs grupos current_smoker
data = SHdf_C,
alternative = "greater", # H₁: La media del 1 grupo no es mayor que la del segundo (yes)
var.equal = TRUE # Ajustar según la prueba de varianza
)
print(heart_rate_groups)
##
## Two Sample t-test
##
## data: heart_rate by current_smoker
## t = -3.5796, df = 3898, p-value = 0.9998
## alternative hypothesis: true difference in means between group no and group yes is greater than 0
## 95 percent confidence interval:
## -2.007561 Inf
## sample estimates:
## mean in group no mean in group yes
## 75.00762 76.38302
ggplot(SHdf_C, aes(x = current_smoker, y = heart_rate, fill = current_smoker)) +
geom_boxplot(alpha = 0.7) +
stat_summary(fun = "mean", geom = "point", shape = 23, size = 4, fill = "white") + # Añade la media
labs(
title = "Frecuencia Cardíaca: Fumadores vs. No Fumadores ",
subtitle = paste0("Media Fumadores: ", round(76.38302, 2), " lpm | Media No Fumadores: ", round(75.00762, 2), " lpm"),
x = "Hábito de Fumar",
y = "Frecuencia Cardíaca (latidos/min)",
caption = paste0("p-valor (unilateral): < ", format(0.0002, digits = 4), " (Rechazo de H₀)")
) +
scale_fill_manual(values = c("yes" = "#E69F00", "no" = "#56B4E9"), name = "Fumador Actual") +
theme_minimal() +
theme(legend.position = "bottom", plot.title = element_text(hjust = 0.5, face = "bold"))
El resultado de la prueba de hipótesis sobre la diferencia de la ** Frecuencia Cardíaca promedio** entre fumadores es de \(76.38302 \text{ lpm}\) mayor de los no fumadores que es de \(75.00762 \text{ lpm}\), con una diferencia aproximadamente \(1.375 \text{ lpm}\), por lo tanto, es ** alternativa** (\(H_1\)), puesto que si hay diferencia confirmada por un valor estadístico \(t\) \(-3.5796\) negativo indicando que la diferencia \((\mu_{\text{No}} - \mu_{\text{Yes}})\) es negativa, lo que significa que \(\mu_{\text{No}} < \mu_{\text{Yes}}\). Esto apoya tu \(H_1\).
¿Qué podemos decir del p-valor?: $ 0.9998$ de que la diferencia de \(\mathbf{1.375 \text{ lpm}}\) a favor de los fumadores se deba solo al azar es casi nula. Por lo tanto, la diferencia observada es estadísticamente significativa y Se RECHAZA la Hipótesis Nula (\(H_0\)). Hay evidencia estadística muy fuerte para afirmar que la frecuencia cardíaca promedio de los fumadores es significativamente mayor que la de los no fumadores.
\[ Z = \begin{cases} 1 & \text{si } \text{chol} > 240 \text{ colesterol alto} \\ 0 & \text{si } \text{chol} \le 240 \text{ colesterol normal o saludable} \end{cases} \]
Se define colesterol alto como un valor de colesterol \(> 240 mg/dL\).
Hipótesis 7:
Hipótesis nula (H₀:) La proporción de personas con colesterol alto es la misma en fumadores y no fumadores.
Hipótesis alternativa (H₁): La proporción de personas con colesterol alto es diferente entre fumadores y no fumadores.
#Crear la variable binaria Z (Colesterol Alto)
SHdf_C <- SHdf_C %>%
mutate(cholesterol_alto = as.numeric(chol > 240))
# tabla de contingencia (Éxitos y Totales por grupo)
successes_cholesterol <- SHdf_C %>%
group_by(current_smoker) %>%
summarise(successes = sum(cholesterol_alto)) %>%
pull(successes)
total_n_cholesterol <- SHdf_C %>%
group_by(current_smoker) %>%
summarise(total = n()) %>%
pull(total)
prop_test_cholesterol <- prop.test(
x = successes_cholesterol,
n = total_n_cholesterol,
alternative = "two.sided", # H₁: p₁ ≠ p₂
conf.level = 0.95,
correct = TRUE
)
print(prop_test_cholesterol)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: successes_cholesterol out of total_n_cholesterol
## X-squared = 5.5201, df = 1, p-value = 0.0188
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.006198282 0.069289018
## sample estimates:
## prop 1 prop 2
## 0.4466463 0.4089027
El resultado de la prueba de hipótesis sobre la proporción de personas con ** Colesterol Alto** No es la misma en fumadores $ 40.89%$ y no fumadores \(44.66%\), con una diferencia de \(\approx 3.77\) puntos porcentuales. por lo tanto, es ** alternativa** (\(H_1\)), puesto que si hay diferencia confirmada por un valor estadístico \(t\) \(5.5201\) indicando una diferencia entre las proporciones observadas.
¿Qué podemos decir del p-valor?: \(0.0188\) es menor que el nivel de significancia \(\alpha=0.05\) por lo tanto se RECHAZA la Hipótesis Nula (\(H_0\)). Existe evidencia estadística suficiente para afirmar que la proporción de personas con colesterol alto difiere significativamente entre fumadores y no fumadores. Contrario a la intuición, la proporción de colesterol alto es significativamente mayor en el grupo de no fumadores, que en el grupo de fumadores.
proportion_data_cholesterol <- data.frame(
current_smoker = factor(c("No Fumador", "Fumador"), levels = c("No Fumador", "Fumador")),
Proportion = c(0.4466463, 0.4089027)
)
ggplot(proportion_data_cholesterol, aes(x = current_smoker, y = Proportion, fill = current_smoker)) +
geom_bar(stat = "identity", width = 0.5) +
geom_text(aes(label = scales::percent(Proportion, accuracy = 0.1)), vjust = -0.5, size = 5) +
scale_y_continuous(labels = scales::percent, limits = c(0, max(0.4466463, 0.4089027) * 1.2)) +
scale_fill_manual(values = c("No Fumador" = "#56B4E9", "Fumador" = "#E69F00")) +
labs(
title = "Proporción de Colesterol Alto (> 240 mg/dL) por Hábito de Fumar",
x = "Hábito de Fumar",
y = "Proporción con Colesterol Alto",
caption = paste0("p-valor (bilateral): ", format(0.0188, digits = 3), " (Diferencia significativa)")
) +
theme_minimal() +
theme(legend.position = "none", plot.title = element_text(hjust = 0.5, face = "bold"))