Intervalos de Confianza

📅 08 diciembre 2025

Nikole Gutierrez
💙 Ingeniería Mecánica
🥅
Antonio Garcia
💙 Ingeniería Civil
👟
Luisa De Angel
💙 Ingeniería Civil
``` r 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\)

Para calcular intervalos de confianza bilaterales para la media a partir de la función t.test es necesario definir 2 argumentos:

  • x: vector numérico con los datos.
  • conf.level: nivel de confianza a usar, por defecto es 0.95.

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:

library(dplyr)
library(flextable)
library(nortest)

url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/medidas_cuerpo'

datos <- read.table(file = url, header = TRUE)

flextable(head(datos, 10))

edad

peso

altura

sexo

muneca

biceps

43

87.3

188.0

Hombre

12.2

35.8

65

80.0

174.0

Hombre

12.0

35.0

45

82.3

176.5

Hombre

11.2

38.5

37

73.6

180.3

Hombre

11.2

32.2

55

74.1

167.6

Hombre

11.8

32.9

33

85.9

188.0

Hombre

12.4

38.5

25

73.2

180.3

Hombre

10.6

38.3

35

76.3

167.6

Hombre

11.3

35.0

28

65.9

183.0

Hombre

10.2

32.1

26

90.9

183.0

Hombre

12.0

40.4

hombres <- datos %>% filter(sexo == "Hombre")

flextable(head(hombres, 5))

edad

peso

altura

sexo

muneca

biceps

43

87.3

188.0

Hombre

12.2

35.8

65

80.0

174.0

Hombre

12.0

35.0

45

82.3

176.5

Hombre

11.2

38.5

37

73.6

180.3

Hombre

11.2

32.2

55

74.1

167.6

Hombre

11.8

32.9

# Pruebas de normalidad

pruebas <- c(
  Lilliefors       = lillie.test(hombres$altura)$p.value,
  CramerVonMises   = cvm.test(hombres$altura)$p.value,
  Pearson          = pearson.test(hombres$altura)$p.value,
  AndersonDarling  = ad.test(hombres$altura)$p.value,
  ShapiroFrancia   = sf.test(hombres$altura)$p.value
)

tabla_norm <- data.frame(
  Prueba = names(pruebas),
  `p-value` = round(pruebas, 5)
)

flextable(tabla_norm)

Prueba

p.value

Lilliefors

0.38398

CramerVonMises

0.23038

Pearson

0.69496

AndersonDarling

0.26597

ShapiroFrancia

0.37647

if (all(pruebas > 0.05)) {
  cat("Conclusión: Todas las pruebas sugieren que la altura de los hombres es compatible con una distribución normal.")
} else {
  cat("Conclusión: Al menos una prueba sugiere que la altura de los hombres no proviene de una distribución normal.")
}
## Conclusión: Todas las pruebas sugieren que la altura de los hombres es compatible con una distribución 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 confianza del 90% para μ está entre:", res)
## El intervalo de confianza del 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:

mujeres <- datos[datos$sexo == "Mujer", ]

lillie.test(hombres$altura)$p.value
## [1] 0.3839829
lillie.test(mujeres$altura)$p.value
## [1] 0.51194
res1 <- t.test(
x = hombres$altura,
y = mujeres$altura,
var.equal = FALSE,
conf.level = 0.95
)$conf.int

cat("El intervalo de confianza del 95% es:", res1)
## El intervalo de confianza del 95% es: 10.05574 20.03315

Función var.test

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\luisc\AppData\Local\Temp\RtmpaWifrG\remotes6aa825016c5\fhernanb-stests-b25bf7e/DESCRIPTION' ...     checking for file 'C:\Users\luisc\AppData\Local\Temp\RtmpaWifrG\remotes6aa825016c5\fhernanb-stests-b25bf7e/DESCRIPTION' ...   ✔  checking for file 'C:\Users\luisc\AppData\Local\Temp\RtmpaWifrG\remotes6aa825016c5\fhernanb-stests-b25bf7e/DESCRIPTION'
##       ─  preparing 'stests': (2s)
##    checking DESCRIPTION meta-information ...  ✔  checking DESCRIPTION meta-information
##       ─  checking for LF line-endings in source and make files and shell scripts (405ms)
##   ─  checking for empty or unneeded directories
##      Omitted 'LazyData' from DESCRIPTION
##       ─  building 'stests_0.1.0.tar.gz' (453ms)
##      
## 
library(stests)

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

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.

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

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

resp1
## [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.

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?

Solución

resp2 <- prop.test(x = 275, n = 500, conf.level = 0.90)$conf.int
resp2
## [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.

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.

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.

resp3 <- prop.test(x=c(75, 80), n=c(1500, 2000), conf.level=0.90)$conf.int
resp3
## [1] -0.002314573  0.022314573
## attr(,"conf.level")
## [1] 0.9