Caso1

Se aplicará un bootstrap para establecer los intervalos de confianza de los coeficientes de regresión de un modelo lineal entre el éxito reproductivo de Cyclopogon elatus (medido como número de polinarios exportados) y características de sus flores (número de flores y profundidas del nectario). (Volvemos a un ejemplo del práctico 2, del que conocíamos su violación de supuestos).

library(boot)
cyc <- read.table("cyclop.txt", header = TRUE)

reg <- lm(pol.exp ~ flores + nectario, data = cyc)
summary(reg)

layout(matrix(1:4, 2, 2))
plot(reg)
layout(1)

# Guardamos los coeficientes observados
Bobs <- reg$coeff
Bobs

# PASO 1: crear una función para "bootstrapear"
REG <- function(datos, indices) {
  newdata <- datos[indices, ]  #sobre esta línea actuará la función boot  
  fit <- lm(pol.exp ~ flores + nectario, data = newdata)
  fit$coeff
}

# PASO 2: el bootstrap en sí
boot.reg <- boot(cyc, REG, 9999)
boot.reg
summary(boot.reg)

# histograma de los resultados
layout(matrix(1:4, 2, 2))
hist(boot.reg$t[, 1], main = "intercept") 
abline(v = Bobs[1], col="red") 
hist(boot.reg$t[, 2], main = "flores") 
abline(v = Bobs[2], col="red") 
hist(boot.reg$t[, 3], main = "nectario") 
abline(v = Bobs[3], col = "red") 
layout(1)

## PASO 3: intervalos de confianza
?boot.ci #examinar la ayuda

# prueba, los 5 intervalos distintos que calcula R
int3.95<-boot.ci(boot.reg, conf = 0.90, type = "all", index = 3)
int3.95

# Examinamos que el intervalo de confianza NO incluya al 0
# (nos salteamos la significancia de la ordenada al origen)
# intervalos para la pendiente de "flores"
int2.90 <- boot.ci(boot.reg, conf = 0.90, type = "bca", index = 2)
int2.95 <- boot.ci(boot.reg, conf = 0.95, type = "bca", index = 2)
int2.99 <- boot.ci(boot.reg, conf = 0.99, type = "bca", index = 2)
int2.999 <- boot.ci(boot.reg, conf = 0.999, type = "bca", index = 2)

int2.90
int2.95
int2.99
int2.999

# intervalos para la pendiente de "nectario"
int3.90 <- boot.ci(boot.reg, conf = 0.90, type = "bca", index = 3)
int3.95 <- boot.ci(boot.reg, conf = 0.95, type = "bca", index = 3)
int3.99 <- boot.ci(boot.reg, conf = 0.99, type = "bca", index = 3)
int3.999 <- boot.ci(boot.reg, conf = 0.999, type = "bca", index = 3)

int3.90
int3.95
int3.99
int3.999

# PASO 4: plots de diagnóstico (salteamos el de intercepto)
plot(boot.reg, index = 2, jack = T)
plot(boot.reg, index = 3, jack = T)

# el jack-after-boot en más detalle
# influencia de las observaciones individuales sobre la pendiente de 
# "flores"

jack.after.boot(boot.reg, index = 2) 

# ídem sobre la pendiente de "nectario"
jack.after.boot(boot.reg, index = 3) 

# la línea horizontal es una medida de la influencia de cada observación
# la línea vertical presenta los percentiles 5, 10, 16, 50, 84, 90 y 95 de 
# la distribución del coeficiente

Ejercicios

  1. Modifique la rutina anterior para calcular el boostrap un componente cuadrático de la relación entre el número de polinios exportados y la profundidad del nectario. Obtenga el intervalo de confianza para el nuevo coeficiente.

  2. El número de ramas y el número de semillas en ulmifolia.txt no son variables de distribución normal. Obtenga intervalos de confianza del 95% utilizando bootstraps para el índice de correlación (r de Pearson) entre estas 2 variables. Comparar los resultados con el intervalo de confianza obtenido de aplicar la función cor.test, que asume normalidad de las variables.

  3. Utilice un bootstrap para calcular un intervalo de confianza para el índice de diversidad de Shannon, obtenido en el práctico 8.