Intervalos de confianza para predicciones de regresión logística
En R predecir.lm calcula las predicciones basadas en los resultados de la regresión lineal y también ofrece calcular los intervalos de confianza para estas predicciones. Según el manual, estos intervalos se basan en la varianza de error del ajuste, pero no en los intervalos de error del coeficiente.
Por otro lado predecir.glm que calcula las predicciones basadas en la regresión logística y Poisson (entre algunos otros) no tiene una opción para intervalos de confianza. E incluso tengo un es difícil imaginar cómo tales intervalos de confianza podrían computarse para proporcionar una visión significativa de Poisson y regresión logística.
¿Hay casos en los que es significativo proporcionar intervalos de confianza para tales predicciones? ¿Cómo se pueden interpretar? ¿Y cuáles son las suposiciones en estos casos?
1 answers
La forma habitual es calcular un intervalo de confianza en la escala del predictor lineal, donde las cosas serán más normales (Gaussiano) y luego aplicar la inversa de la función de enlace para mapear el intervalo de confianza de la escala del predictor lineal a la escala de respuesta.
Para hacer esto se necesitan dos cosas;{[18]]}
- llame a
predict()
contype = "link"
, y - llame a
predict()
conse.fit = TRUE
.
El primero produce predicciones en la escala del predictor lineal, el segundo devuelve los errores estándar de las predicciones. En pseudo código
## foo <- mtcars[,c("mpg","vs")]; names(foo) <- c("x","y") ## Working example data
mod <- glm(y ~ x, data = foo, family = binomial)
preddata <- with(foo, data.frame(x = seq(min(x), max(x), length = 100)))
preds <- predict(mod, newdata = preddata, type = "link", se.fit = TRUE)
preds
es entonces una lista con los componentes fit
y se.fit
.
El intervalo de confianza en el predictor lineal es entonces
critval <- 1.96 ## approx 95% CI
upr <- preds$fit + (critval * preds$se.fit)
lwr <- preds$fit - (critval * preds$se.fit)
fit <- preds$fit
critval
se elige de una distribución t o z (normal) según sea necesario (ahora olvido exactamente cuál usar para qué tipo de GLM y cuáles son las propiedades) con la cobertura requerida. El 1.96
es el valor de la distribución Gaussiana dando 95% de cobertura:
> qnorm(0.975) ## 0.975 as this is upper tail, 2.5% also in lower tail
[1] 1.959964
Ahora para fit
, upr
y lwr
tenemos que aplicar la inversa de la función de enlace a ellos.
fit2 <- mod$family$linkinv(fit)
upr2 <- mod$family$linkinv(upr)
lwr2 <- mod$family$linkinv(lwr)
Ahora puede trazar los tres y los datos.
preddata$lwr <- lwr2
preddata$upr <- upr2
ggplot(data=foo, mapping=aes(x=x,y=y)) + geom_point() +
stat_smooth(method="glm", method.args=list(family=binomial)) +
geom_line(data=preddata, mapping=aes(x=x, y=upr), col="red") +
geom_line(data=preddata, mapping=aes(x=x, y=lwr), col="red")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-12 08:15:48