Integrantes:
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:
- Intervalos de confianza.
- Prueba de hipótesis
En esta parte se muestran las funciones que hay disponibles en R para construir intervalos de confianza para:
- la media \(\ μ\) de una población normal,
- la proporción \(p\),
- la varianza \(\ σ^2\) de una población normal,
- la diferencia de medias \(\ μ_1− \ μ_2\) de dos poblaciones normales independientes,
- 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)
ftPrueba | 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
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:
[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:
x: vector numérico con la información de la muestra 1,
y: vector numérico con la información de la muestra 2,
conf.level: nivel de confianza.
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]
===== Histograma de las medias muestrales =====
hist(media_muestral,
main = "Histograma",
xlab = "Media muestral",
col = "lightblue",
border = "white")