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.
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
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:
logit ( p ) = log( p( 1 - p )) = β0 0+ β1X1
Para convertir las probabilidades registradas en probabilidades, podemos traducir lo anterior a
p = exp( β0 0+ β1X1)( 1 + exp( β0 0+ β1X1) )
Puede usar esta información para configurar la trama. Primero, necesita un rango de la variable predictora:
plotdat <- data.frame(bid=(0:1000))
Luego predict
, usando , puede obtener predicciones basadas en su modelo
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
Tenga en cuenta que los valores ajustados también se pueden obtener a través de
mod1$fitted
Al especificar se.fit=TRUE
, también obtiene el error estándar asociado con cada valor ajustado. El resultado data.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ón preddat$residual.scale
en R
). Si desea ver un ejemplo de lo que ha calculado hasta ahora, puede escribir head(data.frame(preddat))
.
El siguiente paso es configurar la trama. Me gusta configurar un área de trazado en blanco con los parámetros primero:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
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.
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
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:
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
La gráfica resultante (de los datos generados aleatoriamente) debería verse así:
Por conveniencia, aquí está todo el código en un fragmento:
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
plotdat <- data.frame(bid=(0:1000))
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
(Nota: esta es una respuesta muy editada en un intento de hacerla más relevante para stats.stackexchange).