Intervalos de confianza

Jose Garcia, Nicolas Mora, David Rodriguez

2025-11-07

set.seed(356)
library(stests)
## 
## Adjuntando el paquete: 'stests'
## The following object is masked from 'package:stats':
## 
##     var.test
library(ggplot2)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(flextable)
library(nortest)
## Warning: package 'nortest' was built under R version 4.5.2
install.packages("nortest")
## Warning: package 'nortest' is in use and will not be installed

Introducción

En esta parte del curso se estimarán parámetros, que son las medidas númericas que caracterizan una distribución de probabilidad.

Esto se hará a través de muestras tomadas aleatoriamente de poblaciones, casi siempre con distribución normal y lo que se persigue es estimar, a través de estadísticos cuáles son los parámetros.

Lo primero que se hará será estimar el parámetro \(\mu\) que caracteriza una distribución de probabilidad normal con varianza poblacional \(\sigma^2\) desconocida.

Función t.test

La función t.test se usa para calcular intervalos de confianza para la media, \(\scriptsize \mu\) 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,)#

Intervalo de confianza bilateral para la media \(\mu\) con varianza \(\sigma^2\) desconocida.

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", ]
hombres
##    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
## 11   43 89.1  179.1 Hombre   11.3   36.5
## 12   30 62.3  170.2 Hombre   11.5   34.2
## 13   26 82.7  177.8 Hombre   11.5   35.2
## 14   51 79.1  179.1 Hombre   11.8   34.0
## 15   30 98.2  190.5 Hombre   10.7   34.8
## 16   24 84.1  177.8 Hombre   11.5   38.6
## 17   35 83.2  180.3 Hombre   11.1   36.4
## 18   37 83.2  180.3 Hombre   10.5   34.0
library(nortest)

ad.test(x = hombres$altura)
## 
##  Anderson-Darling normality test
## 
## data:  hombres$altura
## A = 0.43553, p-value = 0.266
cvm.test(x = hombres$altura)
## 
##  Cramer-von Mises normality test
## 
## data:  hombres$altura
## W = 0.074395, p-value = 0.2304
lillie.test(x = hombres$altura)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  hombres$altura
## D = 0.14693, p-value = 0.384

Ya sabiendo que los datos de las alturas de los hombres provienen de una normal, se encuentra el intervalo para la media de las alturas de todos los hombres de esa universidad.

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

cat("Con una confianza del 90% se estima que las alturas de los hombres en esa U está entre",res)
## Con una confianza del 90% se estima que las alturas de los hombres en esa U está entre 176.4384 181.7172

Ejemplo

Encontrar un intervalo de confianza para el peso de las estudiantes en esa U

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

lillie.test(x = muj_peso$peso)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  muj_peso$peso
## D = 0.14245, p-value = 0.4335
sol_p <- t.test(x = muj_peso$peso,conf.level = 0.95)$conf.int

cat("Con una confianza del 95% se estima que los pesos de las mujeres en esa U está entre",sol_p)
## Con una confianza del 95% se estima que los pesos de las mujeres en esa U está entre 52.57902 61.96542

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

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:

hombres <- datos[datos$sexo=="Hombre", ]

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

lillie.test(x = mujeres$altura)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  mujeres$altura
## D = 0.13578, p-value = 0.5119
resp.1 <- t.test(x=hombres$altura, y=mujeres$altura,
               var.equal=TRUE, conf.level = 0.95)$conf.int

resp.2 <- t.test(x=hombres$altura, y=mujeres$altura,
               var.equal=FALSE, conf.level = 0.95)$conf.int

cat("Se estima que las diferencias en altura entre hombres y mujeres con 95% de confianza y varianzas iguales está entre:", resp.1)
## Se estima que las diferencias en altura entre hombres y mujeres con 95% de confianza y varianzas iguales está entre: 10.06571 20.02318
cat("Se estima que las diferencias en altura entre hombres y mujeres con 95% de confianza  varianzas diferentes está entre:", resp.2)
## Se estima que las diferencias en altura entre hombres y mujeres con 95% de confianza  varianzas diferentes está entre: 10.05574 20.03315
if (!require('devtools')) install.packages('devtools')
## Warning: package 'devtools' was built under R version 4.5.2
## Warning: package 'usethis' was built under R version 4.5.2
devtools::install_github('fhernanb/stests', force=TRUE)
## 
## ── R CMD build ─────────────────────────────────────────────────────────────────
##          checking for file 'C:\Users\joseg\AppData\Local\Temp\RtmpG08aSW\remotes51e828476cec\fhernanb-stests-b25bf7e/DESCRIPTION' ...     checking for file 'C:\Users\joseg\AppData\Local\Temp\RtmpG08aSW\remotes51e828476cec\fhernanb-stests-b25bf7e/DESCRIPTION' ...   ✔  checking for file 'C:\Users\joseg\AppData\Local\Temp\RtmpG08aSW\remotes51e828476cec\fhernanb-stests-b25bf7e/DESCRIPTION' (490ms)
##       ─  preparing 'stests': (7.2s)
##    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 (619ms)
##   ─  checking for empty or unneeded directories
##      Omitted 'LazyData' from DESCRIPTION
##       ─  building 'stests_0.1.0.tar.gz' (783ms)
##      
## 
## Warning: package 'stests' is in use and will not be installed
resp <- stests:: var.test(x=hombres$altura , conf.level = 0.9)$conf.int

cat("el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre:",round(sqrt(resp),2))
## el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre: 5.05 9.01
resp1 <- stests:: var.test(x=hombres$altura , conf.level = 0.9)$conf.int

cat("el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre:",resp1)
## el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre: 25.53407 81.23046

Intervalo de confianza bilateral para la varianza $frac{_1^2}{_2^2}

resp <- stats:: var.test(x=hombres$altura , y=mujeres$altura, conf.level = 0.9)$conf.int

cat("el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre:",resp)
## el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre: 0.2738612 1.413534
resp2 <- stests:: var.test(x=hombres$altura , y=mujeres$altura, conf.level = 0.9)$conf.int

cat("el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre:",resp2)
## el intervalo de confianza del 90% indica que la desviacion estandar de la estatura de los estudiantes hombres encuentra netre: 0.2738612 1.413534

Intervalo de confianza bilateral para la proporción 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

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

cat("la proporcion de casas con dos tv o mas en casa esta entre:",resp3)
## la proporcion de casas con dos tv o mas en casa esta entre: 0.512231 0.5872162

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.

df1<- data.frame(Num_piezas= c("defectuosas", "analizadas"), antes= c(75,1500), despues=c (80,2000))
                 
flextable(df1)

Num_piezas

antes

despues

defectuosas

75

80

analizadas

1,500

2,000