23 Intervalos de confianza

En este capítulo se muestran las funciones que hay disponibles en R para construir intervalos de confianza para:

  1. la media \(\mu\) de una población normal,
  2. la proporción \(p\),
  3. la varianza \(\sigma^2\) de una población normal,
  4. la diferencia de medias \(\mu_1-\mu_2\) de dos poblaciones normales independientes,
  5. la diferencia de medias \(\mu_1-\mu_2\) con muestras pareadas,
  6. la diferencia de proporciones \(p_1 - p_2\),
  7. la razón de varianzas \(\sigma_1^2 / \sigma_2^2\) de poblaciones normales.

Para ilustrar el uso de las funciones se utilizará la base de datos medidas del cuerpo presentada en el Capítulo 11.

23.1 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 y con muestras dependientes (o pareadas). La función y sus argumentos son los siguientes:

t.test(x, y=NULL,
       alternative=c("two.sided", "less", "greater"),
       mu=0, paired=FALSE, var.equal=FALSE,
       conf.level=0.95, ...)

23.1.1 Intervalo de confianza bilateral para la media \(\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.

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)
hombres <- datos[datos$sexo=="Hombre", ]

Una vez leídos los datos, se analiza la normalidad de la variable altura de los hombres, a partir de un QQplot y un histograma

par(mfrow=c(1, 2))
require(car)  # Debe instalar antes el paquete car
qqPlot(hombres$altura, pch=19, id=FALSE,
       main='QQplot para la altura de hombres',
       xlab='Cuantiles teóricos',
       ylab='Cuantiles muestrales')
hist(hombres$altura, freq=TRUE,
     main='Histograma para la altura de hombres',
     xlab='Altura (cm)',
     ylab='Frecuencia')
QQplot e histograma para la altura de los hombres.

Figure 23.1: QQplot e histograma para la altura de los hombres.

En la Figura 23.1 se muestra el QQplot e histograma para la variable altura, de estas figuras no se observa un claro patrón normal, sin embargo, al aplicar la prueba Shapiro-Wilk a la muestra de alturas de los hombres se obtuvo un valor-P de 0.3599, por lo tanto, se asume que la muestra de alturas provienen de una població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)
res$conf.int
## [1] 176.4384 181.7172
## attr(,"conf.level")
## [1] 0.9

A partir del resultado obtenido se puede concluir, con un nivel de confianza del 90%, que la altura promedio de los estudiantes hombres se encuentra entre 176.4 cm y 181.7 cm.

La función t.test entrega como resultado un objeto de la clase “htest” con diez elementos: statistic, parameter, p.value, conf.int, estimate, null.value, stderr, alternative, method y data.name. Como estamos en Intervalos de Confianza, necesitamos sólo la información del intervalo, por esa razón le colocamos $conf.int al final del objeto res para obtener sólo el resultado del intervalo de confianza.

23.1.2 Intervalo de confianza bilateral para la diferencia de medias (\(\mu_1-\mu_2\)) de muestras independientes

Para construir intervalos de confianza bilaterales para la diferencia de medias (\(\mu_1-\mu_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, en el caso de que sean dependientes (o pareadas) este argumento será paired=TRUE.
  • 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:

url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/medidas_cuerpo'
datos <- read.table(file=url, header=TRUE)
hombres <- datos[datos$sexo=="Hombre", ]
mujeres <- datos[datos$sexo=="Mujer", ]

Una vez leídos los datos, se analiza la normalidad de la variable altura de los hombres y las mujeres, a partir de un QQplot y un histograma

par(mfrow=c(2,2))
library(car)  # Debe instalar antes el paquete car
qqPlot(hombres$altura, pch=19, las=1, id=FALSE,
       main='QQplot altura hombres',
       xlab='Cuantiles teóricos', 
       ylab='Cuantiles muestrales')
hist(hombres$altura, las=1,
     main='Histograma altura hombres',
     xlab='Altura', 
     ylab='Frecuencia')

qqPlot(mujeres$altura, pch=19, las=1, id=FALSE,
       main='QQplot altura mujeres',
       xlab='Cuantiles teóricos', 
       ylab='Cuantiles muestrales')
hist(mujeres$altura, las=1, 
     main='Histograma altura mujeres',
     xlab='Altura', 
     ylab='Frecuencia')
QQplot e histograma para la altura de hombres y mujeres.

Figure 23.2: QQplot e histograma para la altura de hombres y mujeres.

De la Figura 23.2 se puede concluir que las alturas de los estudiantes hombres y mujeres siguen una distribución normal. Al aplicar la prueba Shapiro-Wilk para estudiar la normalidad de la altura se encontró un valor-P de 0.3599 para el grupo de hombres y un valor-P de 0.5921 para el grupo de mujeres, esto confirma que se cumple el supuesto de normalidad.

Como se cumple el supuesto de normalidad se puede usar la función t.test para construir el intervalo de confianza requerido. A continuación se muestra el código

res <- t.test(x=hombres$altura, y=mujeres$altura,
              paired=FALSE, var.equal=TRUE, conf.level = 0.95)
res$conf.int
## [1] 10.06571 20.02318
## attr(,"conf.level")
## [1] 0.95

A partir del intervalo de confianza anterior se puede concluir, con un nivel de confianza del \(95\%\), que la altura promedio de los hombres es superior a la altura promedio de las mujeres, ya que el intervalo de confianza NO incluye el cero, y por ser positivos sus límites, se puede afirmar con un nivel de confianza del \(95\%\) que \(\mu_{hombres} > \mu_{mujeres}\).

En este ejemplo usamos var.equal=TRUE porque en el ejemplo de la sección 23.2.2 llegamos a la conclusión de que las varianzas son iguales, \(\sigma_{hombres}^2 = \sigma_{mujeres}^2\).

Siempre que estemos interesados en un intervalo de confianza para \(\mu_1-\mu_2\), debemos revisar antes si las varianzas se pueden considerar iguales \(\sigma_{1}^2 = \sigma_{2}^2\) o diferentes \(\sigma_{1}^2 \neq \sigma_{2}^2\).

23.1.3 Intervalo de confianza bilateral para la diferencia de medias (\(\mu_1-\mu_2\)) de muestras dependientes o pareadas

Para construir intervalos de confianza bilaterales para la diferencia de medias de muestras dependientes a partir de la función t.test es necesario definir 4 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=TRUE indica que el intervalo de confianza se hará para muestras dependientes o pareadas.
  • conf.level: nivel de confianza.

Ejemplo

Los desórdenes musculoesqueléticos del cuello y hombro son comunes entre empleados de oficina que realizan tareas repetitivas mediante pantallas de visualización. Se reportaron los datos de un estudio para determinar si condiciones de trabajo más variadas habrían tenido algún impacto en el movimiento del brazo. Los datos que siguen se obtuvieron de una muestra de \(n=16\) sujetos. Cada observación es la cantidad de tiempo, expresada como una proporción de tiempo total observado, durante el cual la elevación del brazo fue de menos de 30 grados. Las dos mediciones de cada sujeto se obtuvieron con una separación de 18 meses. Durante este período, las condiciones de trabajo cambiaron y se permitió que los sujetos realizaran una variedad más amplia de tareas. ¿Sugieren los datos que el tiempo promedio verdadero durante el cual la elevación es de menos de 30 grados luego del cambio difiere de lo que era antes? Calcular un intervalo de confianza del \(95\%\) para responder la pregunta.

Sujeto 1 2 3 4 5 6 7 8
Antes 81 87 86 82 90 86 96 73
Después 78 91 78 78 84 67 92 70
Diferencia 3 -4 8 4 6 19 4 3
Sujeto 9 10 11 12 13 14 15 16
Antes 74 75 72 80 66 72 56 82
Después 58 62 70 58 66 60 65 73
Diferencia 16 13 2 22 0 12 -9 9

Solución

Para construir el intervalo de confianza primero se crean dos vectores con los datos y se nombran Antes y Despues, luego se calcula la diferencia y se aloja en el vector Diferencia, como sigue a continuación:

Antes   <- c(81, 87, 86, 82, 90, 86, 96, 73,
             74, 75, 72, 80, 66, 72, 56, 82)
Despues <- c(78, 91, 78, 78, 84, 67, 92, 70,
             58, 62, 70, 58, 66, 60, 65, 73)
Diferencia <- Antes - Despues

En seguida se analiza la normalidad de la variable Diferencia de los cambios en las condiciones de trabajo, a partir de un qqplot y una densidad.

par(mfrow=c(1,2))
require(car)
qqPlot(Diferencia, pch=19, las=1, id=FALSE,
       main='QQplot para Diferencias',  
       xlab='Cuantiles teóricos', 
       ylab='Cuantiles muestrales')
plot(density(Diferencia), las=1,
     main='Densidad para Diferencias', 
     xlab='Diferencia de tiempo', 
     ylab='Densidad')
QQplot y densidad para Diferencias.

Figure 23.3: QQplot y densidad para Diferencias.

De la Figura 23.3 se observa que la diferencia de los tiempos sigue una distribución normal, debido a que en el QQplot se observa un patron lineal y la densidad muestra una forma cercana a la simétrica.

Luego de chequear la normalidad de la variable Diferencia se usa la función t.test para construir el intervalo. A continuación se muestra el código utilizado.

res <- t.test(x=Antes, y=Despues, paired=TRUE, conf.level=0.95)
res$conf.int
## [1]  2.362371 11.137629
## attr(,"conf.level")
## [1] 0.95

A partir del resultado obtenido se puede concluir con un nivel de confianza del \(95\%\), que el tiempo promedio verdadero durante el cual la elevación es de menos de 30 grados luego del cambio difiere de lo que era antes del mismo. Como el intervalo de confianza es \(2.362< \mu_D < 11.138\), esto indica que \(\mu_{antes} - \mu_{despues}>0\) y por lo tanto \(\mu_{antes} > \mu_{despues}\).

23.1.4 Intervalo de confianza unilateral para la media \(\mu\)

Para construir intervalos de confianza unilaterales se usa el argumento alternative = 'less' o alternative='greater', a continuación un ejemplo.

Ejemplo

Simule una muestra aleatoria de una \(N(18, 3)\) y calcule un intervalo de confianza unilateral superior del \(90\%\) para la media.

Solución

x <- rnorm(n=50, mean=18, sd=3)
res <- t.test(x, alternative="greater", conf.level=0.90)
res$conf.int
## [1] 17.07872      Inf
## attr(,"conf.level")
## [1] 0.9

En el resultado anterior se muestra el intervalo de confianza unilateral y vemos que el intervalo de confianza si contiene el verdadero de \(\mu=18\).

Siempre es necesario verificar si se cumple el supuesto de normalidad. A diferencia de los ejemplos anteriores, aquí no lo hicimos porque la muestra aleatoria x fue tomada de una \(N(18, 3)\) y por lo tanto se cumple el supuesto.

Recuerde: siempre se debe verificar el supuesto de normalidad.

23.2 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.

var.test() de stats sólo sirve para 1 población mientras que var.test() de stests sirve para 1 o 2 poblaciones.

Para instalar el paquete stests desde GitHub se debe copiar el siguiente código en la consola de R:

if (!require('devtools')) install.packages('devtools')
devtools::install_github('fhernanb/stests', force=TRUE)

Una vez instalado el paquete stests se puede usar la función var.test, la cual es una generalización de la función var.test del paquete stats y por esa razón aparecerá el siguiente mensaje en la consola cuando se carga el paquete.

library(stests)
## 
## The following object is masked from ‘package:stats’:
## 
##     var.test

Si usted desea usar var.test del paquete stats o var.test del paquete stests, puede invocar las funciones explícitamente así:

stats::var.test()   # Para usar la función var.test del paquete stats
stests::var.test()  # Para usar la función var.test del paquete stests

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

Para calcular intervalos de confianza bilaterales para la varianza \(\sigma^2\) a partir de la función var.test es necesario definir 2 argumentos:

  • x: vector numérico con la información de la muestra,
  • conf.level: nivel de confianza.

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

require(stests)  # Para cargar el paquete
res <- stests::var.test(x=hombres$altura, conf.level=0.98)
res$conf.int
## [1]  21.08468 109.93095
## attr(,"conf.level")
## [1] 0.98

El intervalo de confianza del \(98\%\) indica que la varianza de la estatura de los estudiantes hombres se encuentra entre 21.08 y 109.93 \(cm^{2}\).

En este ejemplo no verificamos que la muestra aleatoria de alturas proviene de una población normal porqe eso ya lo habíamos hecho en el primer ejemplo de la sección 23.1.2.

Recuerde: siempre se debe verificar el supuesto de normalidad.

23.2.2 Intervalo de confianza bilateral para la razón de varianzas \(\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

Primero lo vamos a construir con var.test de stests.

res1 <- stests::var.test(x=hombres$altura, y=mujeres$altura, conf.level=0.95)
res1$conf.int
## [1] 0.2327398 1.6632830
## attr(,"conf.level")
## [1] 0.95

Ahora los vamos a construir con var.test de stats.

res2 <- stats::var.test(x=hombres$altura, y=mujeres$altura, conf.level=0.95)
res2$conf.int
## [1] 0.2327398 1.6632830
## attr(,"conf.level")
## [1] 0.95

Los intervalos obtenidos con stests::var.test y stats::var.test coinciden en los resultados.

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, en otras palabras, \(\sigma_{hombres}^2 = \sigma_{mujeres}^2\).

En este ejemplo no verificamos que la muestra aleatoria de alturas de hombres y mujeres proviene de una población normal, eso ya lo habíamos hecho en un ejemplo de este capítulo.

Recuerde: siempre se debe verificar el supuesto de normalidad.

¿Notó que las funciones stats::var.test y stests::var.test son diferentes?

stats::var.test solo sirve para construir IC para \(\sigma_1^2 / \sigma_2^2\).

stests::var.test sirve para construir IC para \(\sigma^2\) y para \(\sigma_1^2 / \sigma_2^2\).

23.3 Función prop.test

La función prop.test se usa para calcular intervalos de confianza para la porporción y diferencia de proporciones. La función y sus argumentos son los siguientes:

prop.test(x, n, p=NULL,
          alternative=c("two.sided", "less", "greater"),
          conf.level=0.95, correct=TRUE)

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

Para calcular intervalos de confianza bilaterales para la proporción con la función prop.test es necesario definir 3 argumentos:

  • x considera el conteo de éxitos,
  • n indica el número de eventos,
  • conf.level corresponde al nivel de confianza.

Ejemplo

El gerente de una estación de televisión debe determinar en la ciudad qué porcentaje de casas tienen más de un televisor. 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

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

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

Para construir intervalos de confianza bilaterales para la proporción a partir de la función prop.test es necesario definir 3 argumentos:

  • x: vector con el conteo de éxitos de las dos muestras,
  • n: vector con el número de ensayos,
  • conf.level: nivel de confianza.

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.

Num piezas Antes Después
Defectuosas 75 80
Analizadas 1500 2000

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

Solución

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

A partir del resultado obtenido se puede concluir, con un nivel de confianza del \(90\%\), que la diferencia de proporción de defectos (\(p_1 - p_2\)) se encuentra entre -0.002315 y 0.022315. Como el cero está dentro del intervalo se concluye que el cambio en el método de fabricación no ha disminuído el porcentaje de defectos.

References

Hernandez, Freddy, Olga Usuga, Valentina Garcia, and Jean Paul Piedrahita. 2024. Stests: Package with Useful Statistical Tests. https://fhernanb.github.io/stests.