En este documento se presenta un ejemplo de cómo calcular un intervalo de confianza para una proporción y para la media de una variable aleatoria, utilizando la técnica de “bootstrapping”.
Vamos a usar los datos del consultorio de un médico para ilustrar el método. En particular, vamos a calcular un intervalo de confianza para la proporción de pacientes con complicaciones durante la visita. La proporción de pacientes con complicaciones es una variable binaria, donde 1 indica que el paciente tuvo complicaciones y 0 indica que no las tuvo. La proporción de pacientes con complicaciones en una muestra es de 3/62, según una muestra (n = 62) de los expedientes.
Vamos a calcular un intervalo de confianza (95 %) para la proporción de pacientes con complicaciones en el consultorio del médico. Para ello, vamos a utilizar la técnica de “bootstrapping”.
# Definir la proporción de pacientes con complicaciones
prop_complicaciones <- 3/62
# Realizar bootstrapping de las proporciones
library(boot)
boot_results <- boot(c(rep(1, 3), rep(0, 59)), statistic = function(data, indices) {
return(mean(data[indices]))
}, R = 10000)
# gráfica con puntos de la frecuencia absoluta de las proporciones usando ggplot2
library(ggplot2)
ggplot(data.frame(prop = boot_results$t), aes(x = prop)) +
geom_histogram(binwidth = 0.001, fill = "lightblue", color = "black") +
geom_vline(xintercept = prop_complicaciones, color = "red", linetype = "dashed") +
labs(title = "Distribución de las proporciones", x = "Proporción de complicaciones", y = "Frecuencia")
# graph using box-plot with ggplot2
ggplot(data.frame(prop = boot_results$t), aes(y = prop)) +
geom_boxplot(fill = "lightblue", color = "black") +
geom_hline(yintercept = prop_complicaciones, color = "red", linetype = "dashed") +
labs(title = "Distribución de las proporciones", x = "", y = "Proporción de complicaciones")
# Calcular el intervalo de confianza
boot_ci <- boot.ci(boot_results, type = "basic")
boot_ci
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 10000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = boot_results, type = "basic")
##
## Intervals :
## Level Basic
## 95% (-0.0161, 0.0968 )
## Calculations and Intervals on Original Scale
# includes the intervals in the graphs
# histogram
ggplot(data.frame(prop = boot_results$t), aes(x = prop)) +
geom_histogram(binwidth = 0.001, fill = "lightblue", color = "black") +
geom_vline(xintercept = prop_complicaciones, color = "red", linetype = "dashed") +
geom_vline(xintercept = boot_ci$basic[4:5], color = "blue", linetype = "dashed") +
labs(title = "Distribución de las proporciones", x = "Proporción de complicaciones", y = "Frecuencia")
# boxplot
ggplot(data.frame(prop = boot_results$t), aes(y = prop)) +
geom_boxplot(fill = "lightblue", color = "black") +
geom_hline(yintercept = prop_complicaciones, color = "red", linetype = "dashed") +
geom_hline(yintercept = boot_ci$basic[4:5], color = "blue", linetype = "dashed") +
labs(title = "Distribución de las proporciones", x = "", y = "Proporción de complicaciones")
Para ilustrar el método, se utilizará un conjunto de datos de la
librería datasets
de R. En particular, se utilizará el
conjunto de datos airquality
, que contiene información
sobre la calidad del aire en Nueva York durante el verano de 1973.
data(airquality)
head(airquality)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
Para estimar el intervalo de confianza para la media de la variable
Ozone
, se utilizará la técnica de “bootstrapping”. En este
caso, se realizarán 1000 remuestreos con reemplazo de los datos
originales y se calculará la media de la variable Ozone
en
cada remuestreo.
library(boot)
# Definir la función para calcular la media de la variable Ozone
mean_func <- function(data, indices) {
return(mean(data[indices, "Ozone"], na.rm = TRUE))
}
# Realizar bootstrapping
boot_results <- boot(data = airquality, statistic = mean_func, R = 1000)
# Crear un histograma de las medias obtenidas icluir la media de la variable Ozone
hist(boot_results$t, main = "Distribución de las medias", xlab = "Media de Ozone")
abline(v = mean(airquality$Ozone, na.rm = TRUE), col = "blue", lty = 2)
# Calcular el intervalo de confianza
boot_ci <- boot.ci(boot_results, type = "basic")
boot_ci
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 1000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = boot_results, type = "basic")
##
## Intervals :
## Level Basic
## 95% (36.20, 47.92 )
## Calculations and Intervals on Original Scale
# incluir el intervalo de confianza en la gráfica
hist(boot_results$t, main = "Distribución de las medias", xlab = "Media de Ozone")
abline(v = boot_ci$basic[4:5], col = "red", lty = 2)
abline(v = mean(airquality$Ozone, na.rm = TRUE), col = "blue", lty = 2)