y change
1 0 -1.9396807
2 1 -0.7245350
3 0 -2.2534429
4 0 1.3929212
5 0 -0.5057383
6 0 -2.2307026
Analítica Avanzada de Datos
Sesión #5: Introducción al Bootstrap
Consideremos los siguientes datos de un proceso de inyección:
Los coeficientes del modelo ajustado son:
## modelo de RL
fit <- glm(y ~., data = d, family = 'binomial')
summary(fit)$coefficients Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.03017878 0.1271316 -0.2373821 8.123604e-01
change 1.12436593 0.1106093 10.1651993 2.835417e-24
Homework
Supongamos que el cutoff óptimo para el modelo de Regresión Logística anterior es \(\theta_0 = 0.5826\). Así las cosas, la matriz de confusión es
## matriz de confusión
theta_0 <- 0.5826
theta_hat <- predict(fit, type = 'response')
cm <- table(model = 1*(theta_hat > theta_0), real = d$y)[2:1, 2:1]
cm real
model 1 0
1 79 20
0 81 320
De acuerdo con los resultados, la especificidad es 0.941.
Calcule un intervalo de confianza del 95% para el Jaccard index usando Bootstrap.
Respuesta
Sabemos que al calcular el Jaccard index, se busca medir la similitud entre conjuntos de muestreo, que en prinicipio está definido como el tamaño de la intersección entre el tamaño de la unión. Al hablar de una matriz de confusión, el coeficiente de Jaccard está definido de esta manera:
\[ J = \frac{M_{22}}{M_{22}+M_{12}+M_{21}} \] Donde 1 representa la ausencia del atributo, y 2 representa la presencia del atributo.
Para obtener una estimación del indice, se utiliza el método de bootstrap paramétrico, el cual tomará como base una distribución multinomial, que en este caso, toma como parámetros el vector \(\pi\) (vector de probabilidades de cada uno de los \(M_{ij}\)) y \(\mathbf{n} = n_{11}+ n_{12} + n_{21} + n_{22}\) (suma de todas las combinaciones posibles dentro de la matriz de confunsión).
Primero, se genera una muestra de una distribución multinomial con parámetros \(\pi\) y \(n\) basada en la matriz de confusión cm:
set.seed(015)
n1 <- sum(cm)
probab <- cm/sum(cm)
confu_muestra <- rmultinom(n = 1, size = n1, prob = probab)
confu_muestra <- matrix(confu_muestra, ncol = 2, byrow = F)
confu_muestra [,1] [,2]
[1,] 71 18
[2,] 99 312
Para esta muestra, el coeficiente de Jaccard es:
jac <- confu_muestra[2,2]/sum(confu_muestra[2,2],
confu_muestra[2,1],
confu_muestra[1,2])
jac[1] 0.7272727
Ahora, se realiza este proceso \(B = 10000\) veces
set.seed(015)
B <- 10000
jacc_boot <- replicate(B, {
confu_muestra <- rmultinom(n = 1, size = n1, prob = probab)
confu_muestra <- matrix(confu_muestra, ncol = 2, byrow = F)
jac <- confu_muestra[2,2]/sum(confu_muestra[2,2],
confu_muestra[2,1],
confu_muestra[1,2])
})La distribución muestral del coeficiente de Jaccard es
library(ggplot2)
df0 <- data.frame(statistic = jacc_boot)
ggplot(df0, aes(x = statistic)) +
geom_histogram(fill = 'lightblue', color = 'gray', alpha = 0.7) +
xlab("Coeficiente de Jaccard basado en Bootstrap") +
ylab("Frecuencia") +
theme_minimal()`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Con esto, un intervalo de confianza del 95% para el coeficiente de Jaccard es
quantile(jacc_boot, probs = c(0.025, 0.975)) 2.5% 97.5%
0.7183099 0.7995169
Más recursos
- UCLA
- Introduction to Bootstrapping in R por Evelyn Brie.
- Bootstrap Methods: With Applications in R por Gerhard Dikta y Marsel Scheer.
- Bootstrap Tutorial in R por Matthew Parker.