Prueba hipótesis para una muestra media

El presente conjunto de datos, titulado Smokers Health Data, constituye una fuente valiosa para el análisis de los efectos del hábito de fumar sobre diversas variables fisiológicas y condiciones de salud en individuos adultos.

##########################################
# 1. Cargar paquetes necesarios
##########################################
library(readr)
library(dplyr)
library(ggplot2)
library(stringr)
library(tidyr)
library(BSDA)
library(estadistica)
##########################################
# 2. Cargar y preparar la base de datos
##########################################
insurance <- read_csv("smoking_health_data_final.csv")
insurance <- as.data.frame(unclass(insurance),
                           stringsAsFactors = TRUE)
str(insurance)
## '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 ...
dim(insurance)
## [1] 3900    7

Resumen:

summary(insurance)
##       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

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.

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.

# Prueba de hipótesis

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

Conclusión:

Estadístico de prueba (z = 3.5809): Indica que la media observada (75.68897) está 3.58 desviaciones estándar por encima de 75. Esto es una diferencia significativa, ya que valores de ∣z∣>1.96∣z∣>1.96 (para α = 0.05) son considerados estadísticamente significativos.

Decisión: Dado que el p-valor (0.00034) es mucho menor que el nivel de significancia α = 0.05, rechazamos la hipótesis nula (H₀). Esto significa que hay evidencia estadística suficiente para afirmar que la frecuencia cardíaca promedio no es igual a 75 lat/min en la población estudiada.

El p-valor (p-value = 0.0003423) es la probabilidad de obtener una media muestral tan extrema como 75.68897 (o más) si la verdadera media poblacional fuera 75.

En este caso, 0.00034 implica que hay solo un 0.034% de probabilidad de que la media muestral difiera de 75 por casualidad.

La evidencia en contra de H₀ es muy fuerte. La frecuencia cardíaca promedio en la población es estadísticamente diferente de 75 lat/min, y el intervalo de confianza (75.31, 76.07) confirma que la verdadera media está por encima de 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.

Hipótesis:

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.

# Prueba de hipótesis

z.test(x = insurance$chol, 
       sigma.x = sd(insurance$chol), 
       mu = 200, 
       alternative = "greater")
## 
##  One-sample z-Test
## 
## data:  insurance$chol
## z = NA, p-value = NA
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
##  NA NA
## sample estimates:
## mean of x 
##  236.5959
summary(insurance$chol) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   113.0   206.0   234.0   236.6   263.0   696.0       7
is.numeric(insurance$chol)  # Debe ser TRUE
## [1] TRUE
any(is.infinite(insurance$chol))  # Debe ser FALSE
## [1] FALSE
mean_chol <- mean(insurance$chol, na.rm = TRUE)  # Media ignorando NA

insurance$chol_imputed <- ifelse(is.na(insurance$chol), mean_chol, insurance$chol)
# Imputar con la media
insurance$chol_imputed <- ifelse(is.na(insurance$chol), mean(insurance$chol, na.rm = TRUE), insurance$chol)
t.test(insurance$chol_imputed, mu = 200, alternative = "greater")
## 
##  One Sample t-test
## 
## data:  insurance$chol_imputed
## t = 51.548, df = 3899, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
##  235.4279      Inf
## sample estimates:
## mean of x 
##  236.5959

Conclusión:

Estadístico t (t = 51.548): Indica que la media observada (236.5959) está 51.55 errores estándar por encima del valor hipotético (200). Un valor tan extremo confirma que la diferencia es altamente significativa.

Grados de libertad (df = 3899): Muestra un tamaño de muestra muy grande (n ≈ 3900), lo que hace que la prueba t sea prácticamente equivalente a una prueba z.

p-valor (< 2.2e-16): Este valor es prácticamente 0 (el límite inferior de cálculo en R). Significa que la probabilidad de observar una media ≥ 236.5959 mg/dL si H₀ fuera cierta (μ ≤ 200) es casi nula. Decisión estadística: Como p-valor < α (0.05), se rechaza H₀ con evidencia extremadamente fuerte. Conclusión: El nivel medio de colesterol en la población es significativamente mayor a 200 mg/dL.

Con un 95% de confianza, la verdadera media poblacional es al menos 235.43 mg/dL, lo que supera claramente el umbral de 200 mg/dL.

Prueba hipótesis de una muestra proporcional

3.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:

H₀: La proporción de personas con colesterol alto es igual al 20% .

H₁: La proporción de personas con colesterol alto es mayor al 20%.

insurance$Z <- ifelse (insurance$chol > 240, 1, 0)
n <- length(insurance$Z)  # Tamaño de muestra
sum_Z <- sum(insurance$Z)  # Número de personas con colesterol alto
p_hat <- sum_Z / n         # Proporción muestral

print(n)
## [1] 3900
print(sum_Z)
## [1] NA
print(p_hat)
## [1] NA
sum(is.na(insurance$Z))  # Cuenta cuántos NA hay
## [1] 7
# Reemplazar NA con 0 (asumiendo que NA = colesterol normal)
insurance$Z_imputed <- ifelse(is.na(insurance$Z), 0, insurance$Z)

sum_Z <- sum(insurance$Z_imputed)  # Suma de Z con NA = 0
n <- length(insurance$Z_imputed)   # Tamaño de muestra original
resultado <- prop.test(
  x = sum_Z,               
  n = n,                   
  p = 0.20,                
  alternative = "greater",  
  conf.level = 0.95,
  correct = FALSE          
)
print(resultado)
## 
##  1-sample proportions test without continuity correction
## 
## data:  sum_Z out of n, null probability 0.2
## X-squared = 1266.5, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
##  0.4149712 1.0000000
## sample estimates:
##         p 
## 0.4279487

Conclusión:

Proporción observada en la muestra (p): 42.79% (0.4279) de los individuos tienen colesterol alto (>240 mg/dL). Hipótesis nula (H₀): Proporción poblacional = 20% (0.20). Hipótesis alternativa (H₁): Proporción poblacional > 20% (prueba unilateral). Estadístico de prueba (X-squared): 1266.5 (equivalente a un valor z muy alto). p-valor: < 2.2e-16 (prácticamente 0). Intervalo de confianza del 95%: (41.50%, 100%).

La proporción real de personas con colesterol alto en la población es significativamente 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).

Hipótesis:

H₀: La proporción de personas con taquicardia es igual al 5%.

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

insurance$W <- ifelse(insurance$heart_rate > 100, 1, 0)
n <- length(insurance$W)        # Tamaño de muestra
sum_W <- sum(insurance$W, na.rm = TRUE)  # Personas con taquicardia (ignorando NA)
p_hat <- sum_W / n             # Proporción observada
resultado <- prop.test(
  x = sum_W,                   # Número de "éxitos" (W = 1)
  n = n,                       # Tamaño de muestra
  p = 0.05,                    # Proporción bajo H₀
  alternative = "two.sided",    # Prueba bilateral (H₁: p ≠ 0.05)
  conf.level = 0.95,
  correct = FALSE              # Sin corrección de Yates (muestra grande)
)
print(resultado)
## 
##  1-sample proportions test without continuity correction
## 
## data:  sum_W out of n, null probability 0.05
## X-squared = 56.162, df = 1, p-value = 6.674e-14
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
##  0.01950584 0.02912355
## sample estimates:
##          p 
## 0.02384615

Conclusión:

Proporción observada en la muestra (p): 2.38% (0.0238) de los individuos presentan taquicardia (frecuencia cardíaca > 100 lpm). Hipótesis nula (H₀): Proporción poblacional = 5% (0.05). Hipótesis alternativa (H₁): Proporción poblacional ≠ 5% (prueba bilateral). Estadístico de prueba (X-squared): 56.162. p-valor: 6.674e-14 (≈ 0.00000000000006674). Intervalo de confianza del 95%: (1.95%, 2.91%).

La proporción real de taquicardia en la población es significativamente diferente del 5%.

Prueba hipótesis para la diferencia de medias:

5.Se desea evaluar si existen diferencias significativas en los niveles promedio de colesterol entre personas fumadoras y no fumadoras.

Hipótesis:

H₀: No hay diferencia en los niveles medios de colesterol entre fumadores y no fumadores.

H₁: Existe una diferencia significativa entre los niveles medios de colesterol.

# Filtrar datos
colesterol_fumadores <- insurance$chol[insurance$current_smoker == "yes"]
colesterol_no_fumadores <- insurance$chol[insurance$current_smoker == "no"]

# Resumen estadístico
summary(colesterol_fumadores)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   113.0   204.0   232.0   234.5   260.0   696.0       4
summary(colesterol_no_fumadores)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   124.0   208.0   235.0   238.6   266.0   600.0       3
# Verificar normalidad (opcional, para muestras pequeñas)
shapiro.test(colesterol_fumadores)  # Si p > 0.05, distribución normal
## 
##  Shapiro-Wilk normality test
## 
## data:  colesterol_fumadores
## W = 0.95785, p-value < 2.2e-16
shapiro.test(colesterol_no_fumadores)
## 
##  Shapiro-Wilk normality test
## 
## data:  colesterol_no_fumadores
## W = 0.97497, p-value < 2.2e-16
# Prueba t de Student (asumiendo varianzas iguales)
resultado_t <- t.test(chol ~ current_smoker, data = insurance, var.equal = TRUE)

# Prueba t de Welch (varianzas desiguales)
resultado_welch <- t.test(chol ~ current_smoker, data = insurance, var.equal = FALSE)

# Prueba no paramétrica (Wilcoxon)
resultado_wilcox <- wilcox.test(chol ~ current_smoker, data = insurance)

print(resultado_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

Conclusión:

Medias de colesterol observadas: No fumadores (grupo “no”): 238.65 mg/dL. Fumadores (grupo “yes”): 234.51 mg/dL. Diferencia de medias: 4.14 mg/dL (los no fumadores tienen niveles ligeramente más altos). Estadístico t: 2.9119. p-valor: 0.003612. Intervalo de confianza del 95% (IC): (1.35, 6.93) mg/dL.

Existe una diferencia significativa en los niveles medios de colesterol entre fumadores y no fumadores. Contrario a lo esperado, los no fumadores tienen en promedio 4.14 mg/dL más de colesterol que los fumadores (IC95%: 1.35 a 6.93 mg/dL).

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

Hipótesis:

H₀: No hay diferencia en la frecuencia cardíaca promedio entre fumadores y no fumadores.

H₁: La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.

# Filtrar datos
heartrate_fumadores <- insurance$heart_rate[insurance$current_smoker == "yes"]
heartrate_no_fumadores <- insurance$heart_rate[insurance$current_smoker == "no"]

# Verificar normalidad (opcional, para muestras pequeñas)
shapiro.test(heartrate_fumadores)  # Si p > 0.05, distribución normal
## 
##  Shapiro-Wilk normality test
## 
## data:  heartrate_fumadores
## W = 0.97775, p-value < 2.2e-16
shapiro.test(heartrate_no_fumadores)
## 
##  Shapiro-Wilk normality test
## 
## data:  heartrate_no_fumadores
## W = 0.96767, p-value < 2.2e-16
# Prueba t de Welch (asumiendo varianzas desiguales)
resultado <- t.test(
  heartrate_fumadores, 
  heartrate_no_fumadores, 
  alternative = "greater",  # Prueba unilateral (H₁: μ_fumadores > μ_no_fumadores)
  conf.level = 0.95
)

# Mostrar resultados
print(resultado)
## 
##  Welch Two Sample t-test
## 
## data:  heartrate_fumadores and heartrate_no_fumadores
## t = 3.5809, df = 3896.4, p-value = 0.0001733
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  0.7434658       Inf
## sample estimates:
## mean of x mean of y 
##  76.38302  75.00762

Conclusión:

Medias Observadas: Fumadores: 76.38 lpm. No fumadores: 75.01 lpm. Diferencia de Medias: +1.37 lpm (los fumadores tienen una frecuencia cardíaca más alta). Estadístico t: 3.5809. p-valor (unilateral): 0.0001733 (≈ 0.00017). Intervalo de Confianza del 95% (IC): (0.74, Inf) lpm.

La frecuencia cardíaca promedio es significativamente mayor en fumadores que en no fumadores (p < 0.001). Los fumadores tienen en promedio 1.37 lpm más que los no fumadores (IC95%: desde +0.74 lpm).

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

Hipótesis:

H₀: La proporción de personas con colesterol alto es la misma en fumadores y no fumadores.

H₁: La proporción de personas con colesterol alto es diferente entre fumadores y no fumadores.

insurance$Z <- ifelse(insurance$chol > 240, 1, 0)
# Número de personas con colesterol alto en cada grupo
sum_fumadores <- sum(insurance$Z[insurance$current_smoker == "yes"], na.rm = TRUE)
sum_no_fumadores <- sum(insurance$Z[insurance$current_smoker == "no"], na.rm = TRUE)

# Tamaño de cada grupo
n_fumadores <- sum(insurance$current_smoker == "yes", na.rm = TRUE)
n_no_fumadores <- sum(insurance$current_smoker == "no", na.rm = TRUE)

# Proporciones
p_fumadores <- sum_fumadores / n_fumadores
p_no_fumadores <- sum_no_fumadores / n_no_fumadores
resultado <- prop.test(
  x = c(sum_fumadores, sum_no_fumadores),  # Éxitos (Z = 1) en cada grupo
  n = c(n_fumadores, n_no_fumadores),      # Tamaños de grupo
  alternative = "two.sided",               # Prueba bilateral
  conf.level = 0.95,
  correct = FALSE                          # Sin corrección de Yates
)
print(resultado)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(sum_fumadores, sum_no_fumadores) out of c(n_fumadores, n_no_fumadores)
## X-squared = 5.6732, df = 1, p-value = 0.01723
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.068776154 -0.006711146
## sample estimates:
##    prop 1    prop 2 
## 0.4089027 0.4466463

Conclusión:

Proporciones observadas: Fumadores (prop 1): 40.89% con colesterol alto. No fumadores (prop 2): 44.66% con colesterol alto. Diferencia: -3.77% (los fumadores tienen una proporción menor de colesterol alto). Estadístico de prueba (X-squared): 5.6732. p-valor: 0.01723 (< 0.05). Intervalo de confianza del 95% (IC): (-6.88%, -0.67%).

Existe una diferencia significativa en la proporción de colesterol alto entre fumadores y no fumadores.