Ok, tengo una regresión logística y he usado la predict()
función para desarrollar una curva de probabilidad basada en mis estimaciones.
## LOGIT MODEL:
library(car)
mod1 = glm(factor(won) ~ as.numeric(bid), data=mydat, family=binomial(link="logit"))
## PROBABILITY CURVE:
all.x <- expand.grid(won=unique(won), bid=unique(bid))
y.hat.new <- predict(mod1, newdata=all.x, type="response")
plot(bid<-000:1000,predict(mod1,newdata=data.frame(bid<-c(000:1000)),type="response"), lwd=5, col="blue", type="l")
Esto es genial, pero tengo curiosidad por trazar los intervalos de confianza para las probabilidades. Lo intenté plot.ci()
pero no tuve suerte. ¿Alguien puede señalarme algunas formas de hacer esto, preferiblemente con el car
paquete o la base R.
r
logistic
confidence-interval
ATMathew
fuente
fuente
Respuestas:
El código que usó estima un modelo de regresión logística usando la
glm
función. No incluiste datos, así que solo inventaré algunos.Un modelo de regresión logística modela la relación entre una variable de respuesta binaria y, en este caso, un predictor continuo. El resultado es una probabilidad transformada de logit como una relación lineal con el predictor. En su caso, el resultado es una respuesta binaria correspondiente a ganar o no ganar en el juego y se predice por el valor de la apuesta. Los coeficientes de
mod1
se dan en probabilidades registradas (que son difíciles de interpretar), de acuerdo con:Para convertir las probabilidades registradas en probabilidades, podemos traducir lo anterior a
Puede usar esta información para configurar la trama. Primero, necesita un rango de la variable predictora:
Luego
predict
, usando , puede obtener predicciones basadas en su modeloTenga en cuenta que los valores ajustados también se pueden obtener a través de
Al especificar
se.fit=TRUE
, también obtiene el error estándar asociado con cada valor ajustado. El resultadodata.frame
es una matriz con los siguientes componentes: las predicciones ajustadas (fit
), los errores estándar estimados (se.fit
) y un escalar que proporciona la raíz cuadrada de la dispersión utilizada para calcular los errores estándar (residual.scale
). En el caso de un logit binomial, el valor será 1 (que se puede ver mediante la introducciónpreddat$residual.scale
enR
). Si desea ver un ejemplo de lo que ha calculado hasta ahora, puede escribirhead(data.frame(preddat))
.El siguiente paso es configurar la trama. Me gusta configurar un área de trazado en blanco con los parámetros primero:
Ahora puede ver dónde es importante saber cómo calcular las probabilidades ajustadas. Puede dibujar la línea correspondiente a las probabilidades ajustadas siguiendo la segunda fórmula anterior. Usando el
preddat data.frame
puede convertir los valores ajustados a probabilidades y usar eso para trazar una línea contra los valores de su variable predictiva.Finalmente, responda su pregunta, los intervalos de confianza se pueden agregar a la gráfica calculando la probabilidad de los valores ajustados por
+/- 1.96
el error estándar:La gráfica resultante (de los datos generados aleatoriamente) debería verse así:
Por conveniencia, aquí está todo el código en un fragmento:
(Nota: esta es una respuesta muy editada en un intento de hacerla más relevante para stats.stackexchange).
fuente
se.fit
define la variable ?predict(..., se.fit=TRUE)
.Aquí hay una modificación de la solución de @ smillig. Aquí utilizo herramientas tidyverse, y también uso la
linkinv
función que forma parte del objeto modelo GLMmod1
. De esa manera, no tiene que invertir manualmente la función logística, y este enfoque funcionará independientemente de qué GLM específico se ajuste.fuente