Integrantes:

• Michael Andres Ortiz Bernal
• Magda Sofia Carvajal Burgos
• Samuel Rodriguez Marañon
• Darwin Samir Padilla Viloria
library(ggplot2)
library(dplyr)
library(flextable)
library(nortest)

Introducción

La rama de la estadítica que utiliza técnicas para estimar parametros que caracetrizan una distribución se conoce com estadística inferencial.

En este curso se van a estudiar dos técnicas:

  1. Intervalos de confianza.
  2. Prueba de hipótesis

En esta parte se muestran las funciones que hay disponibles en R para construir intervalos de confianza para:

  1. la media \(\ μ\) de una población normal,
  2. la proporción \(p\),
  3. la varianza \(\ σ^2\) de una población normal,
  4. la diferencia de medias \(\ μ_1− \ μ_2\) de dos poblaciones normales independientes,
  5. la diferencia de proporciones \(p_1−p_2\), de poblaciones normales.

Para ilustrar el uso de las funciones se utilizará la base de datos medidas del cuerpo.

Función t.test

La función t.test se usa para calcular intervalos de confianza para la media y para diferencia de medias, con muestras independientes.

Intervalo de confianza bilateral para la media \(\small \mu\)

Argumentos relevantes:

*x: vector numérico con los datos.

*y: segundo vector (si se comparan dos grupos).

*conf.level: nivel de confianza (0.95 por defecto).

*paired: TRUE para muestras pareadas.

*var.equal: TRUE si se asume igualdad de varianzas.

Ejemplo

Suponga que se quiere obtener un intervalo de confianza bilateral del 90% para la altura promedio de los hombres de la base de datos medidas del cuerpo.

A continuación un conjunto de medidas corporales tomadas a un grupo de estudiantes en una universidad de Medellín. A continuación la variables de la base de datos: edad: edad del estudiante en años peso: peso del estudiante en kilogramos altura: estatura del estudiante en centímetros sexo: género del estudiante muneca: diametro de la muñeca derecha en centímetros biceps: diametro del biceps derecho en centímetros

Solución

Para iniciar el cálculo del intervalo de confianza, se procede primero a cargar la base de datos desde la URL de github indicada. Posteriormente, se seleccionan únicamente las observaciones correspondientes al grupo de interés en este caso, los individuos clasificados como Hombre y se almacenan en el objeto hombres. Este subconjunto servirá como base para realizar las pruebas de normalidad y los análisis estadísticos posteriores.

url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/medidas_cuerpo'
datos <- read.table(url, header = TRUE)


hombres <- subset(datos, sexo == "Hombre")

pruebas <- list(
  "Lilliefors" = lillie.test(hombres$altura),
  "Cramer-von Mises" = cvm.test(hombres$altura),
  "Pearson" = pearson.test(hombres$altura),
  "Anderson-Darling" = ad.test(hombres$altura),
  "Shapiro-Francia" = sf.test(hombres$altura)
)


tabla_normalidad <- data.frame(
  Prueba = names(pruebas),
  p_value = sapply(pruebas, function(x) x$p.value)
)


ft <- flextable(tabla_normalidad)
ft <- autofit(ft)
ft

Prueba

p_value

Lilliefors

0.3839829

Cramer-von Mises

0.2303828

Pearson

0.6949630

Anderson-Darling

0.2659667

Shapiro-Francia

0.3764676

if(all(tabla_normalidad$p_value > 0.05)){
  cat("\nConclusión: Todas las pruebas sugieren normalidad. 
La altura de los hombres puede considerarse normal.\n")
} else {
  cat("\nConclusión: Al menos una prueba sugiere no-normalidad. 
Se recomienda revisar outliers o usar métodos no paramétricos.\n")
}

Conclusión: Todas las pruebas sugieren normalidad. La altura de los hombres puede considerarse normal.

Una vez chequeado el supuesto de normalidad se puede usar la función t.test sobre la variable de interés para construir el intervalo de confianza. El resultado de usar t.test es una lista, uno de los elementos de esa lista es justamente el intevalo de confianza y para extraerlo es que se usa $conf.int al final de la instrucción. A continuación se muestra el código utilizado.

res <- t.test(x = hombres$altura, conf.level = 0.90)$conf.int

cat("El intervalo de confianzadel 90% para μ está entre:",res)

El intervalo de confianzadel 90% para μ está entre: 176.4384 181.7172

Intervalo de confianza bilateral para la diferencia de medias (\(μ_1−μ_2\)) de muestras independientes

Para construir intervalos de confianza bilaterales para la diferencia de medias (μ1−μ2)de muestras independientes se usa la función t.test y es necesario definir 5 argumentos:

x: vector numérico con la información de la muestra 1.

y: vector numérico con la información de la muestra 2.

paired=FALSE: indica que el intervalo de confianza se hará para muestras independientes.

var.equal=FALSE: indica que las varianzas son desconocidas y diferentes, si la varianzas se pueden considerar desconocidas e iguales se coloca var.equal=TRUE.

conf.level: nivel de confianza.

Ejemplo

Se quiere saber si existe diferencia estadísticamente significativa entre las alturas de los hombres y las mujeres.

Para responder esto se va a construir un intervalo de confianza del 95% para la diferencia de las altura promedio de los hombres y de las mujeres \(\mu_{hombres}−\mu_{mujeres}\)

Solución

Para construir el intervalo de confianza, primero se carga la base de datos usando la url apropiada, luego se crean dos subconjuntos de datos y se alojan en los objetos hombres y mujeres como sigue a continuación:

# Crear subconjunto para mujeres
mujeres <- subset(datos, sexo == "Mujer")

# Pruebas de normalidad para ambas poblaciones
p_hombres  <- lillie.test(hombres$altura)$p.value
p_mujeres  <- lillie.test(mujeres$altura)$p.value

cat("p-value Lilliefors (Hombres):", p_hombres, "\n")

p-value Lilliefors (Hombres): 0.3839829

cat("p-value Lilliefors (Mujeres):", p_mujeres, "\n")

p-value Lilliefors (Mujeres): 0.51194

# Cálculo del intervalo de confianza para la diferencia de medias
res1 <- t.test(
  x = hombres$altura,
  y = mujeres$altura,
  var.equal = FALSE,
  conf.level = 0.95
)$conf.int

cat("\nEl intervalo de confianza del 95% para (μ_hombres − μ_mujeres) es:\n")

El intervalo de confianza del 95% para (μ_hombres − μ_mujeres) es:

print(res1)

[1] 10.05574 20.03315 attr(,“conf.level”) [1] 0.95

Función var.test

Para la construcción de intervalos de confianza para una varianza poblacional, es posible utilizar la función var.test incluida en el paquete básico stats o la función del mismo nombre disponible en el paquete stests (Hernandez et al., 2024). Ambas funciones permiten estimar intervalos basados en la distribución chi–cuadrado, pero difieren en su implementación y en la forma como presentan los resultados.

En la nota siguiente se explica de manera detallada la diferencia entre ambas versiones y cuándo conviene utilizar cada una.

Nota: La función var.test del paquete básico stats está limitada a comparar varianzas de dos muestras, mientras que la función var.test del paquete stests permite calcular intervalos de confianza para la varianza de una sola muestra, así como razones de varianzas con más opciones de niveles de confianza y salida más amigable.

if (!require('stests')) {
  if (!require('devtools')) {
    install.packages('devtools')
  }
  library(devtools)
  install_github('fhernanb/stests')
}

library(stests)

cat("Paquete 'stests' cargado correctamente.\n")

Paquete ‘stests’ cargado correctamente.

Intervalo de confianza bilateral para la varianza \(σ^2\)

Ejemplo

Considerando la información del ejemplo de intervalos de confianza bilaterales para la media, se quiere construir un intervalo de confianza del 98% para la varianza de la altura de los estudiantes hombres.

Solución

Siempre que se quiera hacer inferencia sobre la varianza poblacional, \(\small \sigma^2\) se debe probar la noramalidad de los datos.

Asi mismo,primero se verifica la normalidad de los datos (ya realizada anteriormente). Luego se calcula el intervalo de confianza del 98% usando la función var.test del paquete stests:

# Intervalo de confianza del 98% para la varianza
res2 <- stests::var.test(x = hombres$altura, conf.level = 0.98)$conf.int
cat("El intervalo de confianza del 98% para la varianza poblacional está entre:", res2)

El intervalo de confianza del 98% para la varianza poblacional está entre: 21.08468 109.9309

Intervalo de confianza bilateral para la razón de varianzas \(\frac{\sigma_1^2}{\sigma_2^2}\)

Para calcular intervalos de confianza bilaterales para la razón de varianzas a partir de la función var.test es necesario definir 3 argumentos:

Ejemplo

Usando la información del ejemplo de diferencia de medias para muestras independientes se quiere obtener un intervalo de confianza del 95% para la razón de las varianzas de las alturas de los estudiantes hombres y mujeres.

Solución

resp1 <- stests::var.test(x=hombres$altura, y=mujeres$altura, conf.level=0.95)$conf.int

cat("El intervalo de confianza del 95% para la razón de varianzas es: [",
round(resp1[1], 4), ", ", round(resp1[2], 4), "]\n")

El intervalo de confianza del 95% para la razón de varianzas es: [ 0.2327 , 1.6633 ]

Así, el intervalo de confianza del 95% indica que la razón de varianzas se encuentra entre 0.2327 y 1.6633. Puesto que el intervalo de confianza incluye el 1, se concluye que las varianzas de las alturas de los hombres y las mujeres son iguales.

Función prop.test

La función prop.test se usa para calcular intervalos de confianza para la porporción y diferencia de proporciones.

Intervalo de confianza bilateral para la proporción \(p\)

Ejemplo

El gerente de una estación de televisión debe determinar en la ciudad qué porcentaje de casas tienen más de dos televisores. Una muestra aleatoria de 500 casas revela que 275 tienen dos o más televisores. ¿Cuál es el intervalo de confianza del 90% para estimar la proporción de todas las casas que tienen dos o más televisores?

resp2 <- prop.test(x = 275, n = 500, conf.level = 0.90)$conf.int

cat("El intervalo de confianza del 90% para la proporción de casas con 2 o más televisores es: [",
round(resp2[1], 4), ", ", round(resp2[2], 4), "]\n")

El intervalo de confianza del 90% para la proporción de casas con 2 o más televisores es: [ 0.5122 , 0.5872 ]

A partir del resultado obtenido se puede concluir, con un nivel de confianza del
90%, que la proporción \(p\)de casas que tienen dos o más televisores se encuentra entre 0.5122 y 0.5872.

Intervalo de confianza bilateral para la diferencia de proporciones \(p_1−p_2\)

Ejemplo

Se quiere determinar si un cambio en el método de fabricación de una piezas ha sido efectivo o no. Para esta comparación se tomaron 2 muestras, una antes y otra después del cambio en el proceso y los resultados obtenidos son los siguientes.

tabla2 <- data.frame(Num_piezas=c("Defectuosas", "Analizadas"), Antes=c(75,1500), 
                     Después=c(80,2000))
flextable(tabla2)

Num_piezas

Antes

Después

Defectuosas

75

80

Analizadas

1,500

2,000

Construir un intervalo de confianza del 90% para decidir si el cambio tuvo efecto positivo o no.

resp3 <- prop.test(x=c(75, 80), n=c(1500, 2000), conf.level=0.90)$conf.int

cat("El intervalo de confianza del 90% para la diferencia de proporciones es: [",
round(resp3[1], 4), ", ", round(resp3[2], 4), "]\n")

El intervalo de confianza del 90% para la diferencia de proporciones es: [ -0.0023 , 0.0223 ]

Simulaciones para mostrar el Teorema Central del Límite

Las simulaciones del Teorema Central del Límite permiten observar cómo, al tomar muchas muestras de una población, las medias muestrales tienden a formar una distribución aproximadamente normal, sin importar la forma original de la población. Esto demuestra experimentalmente que la media muestral es un estimador estable y que su distribución se vuelve más concentrada y predecible, lo cual justifica el uso de métodos inferenciales basados en la normalidad.

Ejemplo

En una universidad se desea estudiar el gasto semanal promedio que realizan los estudiantes en transporte, alimentación y material académico. Sin embargo, medir el gasto de toda la población estudiantil es costoso y poco práctico, por lo que se recurre a tomar muestras aleatorias de estudiantes y estimar el gasto promedio a partir de ellas. El objetivo es analizar cómo varía la media muestral entre diferentes muestras y evaluar qué tan precisas son estas estimaciones. Para ello, se propone realizar una simulación donde se tomen múltiples muestras del mismo tamaño y se calcule para cada una su media y su intervalo de confianza del 95%, permitiendo observar la variabilidad natural que surge al muestrear y cómo esta se relaciona con los principios del Teorema Central del Límite.

Solución

set.seed(123)

n <- 25       
m <- 10000 #Número de simulaciones       

media_muestral <- numeric(m)
lim_inf_vec <- numeric(m)
lim_sup_vec <- numeric(m)

cat("=== SIMULACIÓN ===\n\n")

=== SIMULACIÓN ===

for(i in 1:m) {
    x <- rnorm(n, mean = 100, sd = 15)
    media_muestral[i] <- mean(x)
    desv <- sd(x)
    t_val <- qt(0.975, df = n-1)
    error <- desv / sqrt(n)
    lim_inf_vec[i] <- media_muestral[i] - t_val * error
    lim_sup_vec[i] <- media_muestral[i] + t_val * error
}

cat("La media muestral es", media_muestral[22], "\n")

La media muestral es 103.5121

cat("El intervalo de confianza del 95% para la media es: [",
    round(lim_inf_vec[22], 3), ", ",
    round(lim_sup_vec[22], 3), "]\n", sep = "")

El intervalo de confianza del 95% para la media es: [97.621, 109.403]

cat("===== Histograma de las medias muestrales =====")

===== Histograma de las medias muestrales =====

hist(media_muestral,
main = "Histograma",
xlab = "Media muestral",
col = "lightblue",
border = "white")