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:
En esta parte se muestran las funciones que hay disponibles en R para construir intervalos de confianza para:
Para ilustrar el uso de las funciones se utilizará la base de datos medidas del cuerpo.
La función t.test se usa para calcular intervalos de confianza para la media y para diferencia de medias, con muestras independientes.
Para calcular intervalos de confianza bilaterales para la media a partir de la función t.test es necesario definir 2 argumentos:
Los demás argumentos se usan cuando se desea obtener intervalos de confianza para diferencia de media con muestras independientes y dependientes (o pareadas).
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 calcular el intervalo de confianza, primero se carga la base de datos usando la url apropiada, luego se crea un subconjunto de datos y se aloja en el objeto hombres como sigue a continuación:
url <- "https://raw.githubusercontent.com/fhernanb/datos/master/medidas_cuerpo"
datos <- read.table(file = url, header = TRUE)
head(datos, 10)## edad peso altura sexo muneca biceps
## 1 43 87.3 188.0 Hombre 12.2 35.8
## 2 65 80.0 174.0 Hombre 12.0 35.0
## 3 45 82.3 176.5 Hombre 11.2 38.5
## 4 37 73.6 180.3 Hombre 11.2 32.2
## 5 55 74.1 167.6 Hombre 11.8 32.9
## 6 33 85.9 188.0 Hombre 12.4 38.5
## 7 25 73.2 180.3 Hombre 10.6 38.3
## 8 35 76.3 167.6 Hombre 11.3 35.0
## 9 28 65.9 183.0 Hombre 10.2 32.1
## 10 26 90.9 183.0 Hombre 12.0 40.4
## edad peso altura sexo muneca biceps
## 1 43 87.3 188.0 Hombre 12.2 35.8
## 2 65 80.0 174.0 Hombre 12.0 35.0
## 3 45 82.3 176.5 Hombre 11.2 38.5
## 4 37 73.6 180.3 Hombre 11.2 32.2
## 5 55 74.1 167.6 Hombre 11.8 32.9
pruebas <- c(
lillie = lillie.test(hombres$altura)$p.value,
cvm = cvm.test(hombres$altura)$p.value,
pearson = pearson.test(hombres$altura)$p.value,
ad = ad.test(hombres$altura)$p.value,
sf = sf.test(hombres$altura)$p.value
)
pruebas## lillie cvm pearson ad sf
## 0.3839829 0.2303828 0.6949630 0.2659667 0.3764676
##
## Conclusión: No se rechaza la normalidad de las alturas de los hombres (p-values > 0.05).
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 confianza del 90% para μ es:", res)## El intervalo de confianza del 90% para μ es: 176.4384 181.7172
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:
mujeres <- datos %>% filter(sexo == "Mujer")
# Normalidad en ambas muestras
lillie.test(hombres$altura)$p.value## [1] 0.3839829
## [1] 0.51194
# IC para la diferencia de medias
res1 <- t.test(
x = hombres$altura,
y = mujeres$altura,
paired = FALSE,
var.equal = FALSE,
conf.level = 0.95
)$conf.int
cat("El IC del 95% para la diferencia de medias (hombres - mujeres) es:", res1)## El IC del 95% para la diferencia de medias (hombres - mujeres) es: 10.05574 20.03315
Esta funcion requiere de 2 muestras, pero no se puede, por eso se usa el paquete stests.
Para construir intervalos de confianza para la varianza se puede usar la función var.test del paquete básico stats o la función var.test del paquete stests (Hernandez et al. 2024) disponible en este repositorio. En la siguiente nota se aclara la diferencia entre estas dos funciones.
if (!require('devtools')) install.packages('devtools')
devtools::install_github('fhernanb/stests', force=TRUE)##
## ── R CMD build ─────────────────────────────────────────────────────────────────
## ✔ checking for file 'C:\Users\123se\AppData\Local\Temp\Rtmp6JubUL\remotesabc63dc6be7\fhernanb-stests-b25bf7e/DESCRIPTION' (336ms)
## ─ preparing 'stests': (551ms)
## checking DESCRIPTION meta-information ... checking DESCRIPTION meta-information ... ✔ checking DESCRIPTION meta-information
## ─ checking for LF line-endings in source and make files and shell scripts
## ─ checking for empty or unneeded directories
## Omitted 'LazyData' from DESCRIPTION
## ─ building 'stests_0.1.0.tar.gz' (434ms)
##
##
Ejemplo
Considerando la información del ejemplo de intervalos de confianza bilaterales para la media, 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.
# Para cargar el paquete
res2 <- stests::var.test(x = hombres$altura, conf.level = 0.90)$conf.int
cat("Un intervalo de confianza del 90% para la varianza poblacional cae entre:",res2)## Un intervalo de confianza del 90% para la varianza poblacional cae entre: 25.53407 81.23046
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
## [1] 0.2327398 1.6632830
## attr(,"conf.level")
## [1] 0.95
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.
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?
Solución
## [1] 0.5122310 0.5872162
## attr(,"conf.level")
## [1] 0.9
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.
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.
library(flextable)
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.
Otra muestra, Nuevo dataset
set.seed(123)
personas2 <- data.frame(
sexo = sample(c("Hombre", "Mujer"), size = 60, replace = TRUE),
altura = rnorm(60, mean = 165, sd = 10),
peso = rnorm(60, mean = 70, sd = 12),
edad = sample(18:60, 60, replace = TRUE)
)
head(personas2)## sexo altura peso edad
## 1 Hombre 169.2646 81.92205 43
## 2 Hombre 162.0493 76.58076 59
## 3 Hombre 173.9513 72.86478 34
## 4 Mujer 173.7813 62.46513 46
## 5 Hombre 173.2158 86.32783 43
## 6 Mujer 171.8864 62.79688 44
Filtrar hombres y mujeres
hombres2 <- personas2[personas2$sexo == "Hombre", ]
mujeres2 <- personas2[personas2$sexo == "Mujer", ]¨
Pruebas de normalidad para alturas de hombres
pruebas2 <- c(
lillie = lillie.test(hombres2$altura)$p.value,
cvm = cvm.test(hombres2$altura)$p.value,
pearson = pearson.test(hombres2$altura)$p.value,
ad = ad.test(hombres2$altura)$p.value,
sf = sf.test(hombres2$altura)$p.value
)
pruebas2## lillie cvm pearson ad sf
## 0.5124502 0.2907391 0.4231901 0.3200617 0.2690742
if (all(pruebas2 > 0.05)) {
cat("✔ Las alturas de hombres parecen normales (todas las p > 0.05)\n")
} else {
cat("✘ Alguna prueba sugiere no normalidad (alguna p ≤ 0.05)\n")
}## ✔ Las alturas de hombres parecen normales (todas las p > 0.05)
Intervalo de confianza del 90% para la media de altura de las mujeres
res_m <- t.test(x = mujeres2$altura, conf.level = 0.90)$conf.int
cat("IC del 90% para la media de altura de mujeres:", res_m)## IC del 90% para la media de altura de mujeres: 160.5905 167.7101
IC 95% para la diferencia de medias (hombres – mujeres)
res_comp <- t.test(
x = hombres2$altura,
y = mujeres2$altura,
paired = FALSE,
var.equal = FALSE,
conf.level = 0.95
)$conf.int
cat("IC del 95% para la diferencia de medias:", res_comp)## IC del 95% para la diferencia de medias: -1.724705 7.93625
IC del 98% para la varianza de altura en las mujeres
res_var <- stests::var.test(x = mujeres2$altura, conf.level = 0.98)$conf.int
cat("IC del 98% para la varianza:", res_var)## IC del 98% para la varianza: 57.19213 233.5676