O código que você usou estima um modelo de regressão logística usando a glm
função Você não incluiu dados, então eu vou inventar.
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"))
Um modelo de regressão logística modela a relação entre uma variável de resposta binária e, neste caso, um preditor contínuo. O resultado é uma probabilidade transformada em logit como uma relação linear com o preditor. No seu caso, o resultado é uma resposta binária correspondente a ganhar ou não ganhar no jogo e está sendo predito pelo valor da aposta. Os coeficientes de mod1
são dados em probabilidades registradas (que são difíceis de interpretar), de acordo com:
logit ( p ) = log( p( 1 - p )) = β0 0+ β1x1
Para converter probabilidades registradas em probabilidades, podemos traduzir o acima para
p = exp( β0 0+ β1x1)( 1 + exp( β0 0+ β1x1) ))
Você pode usar essas informações para configurar o gráfico. Primeiro, você precisa de um intervalo da variável preditora:
plotdat <- data.frame(bid=(0:1000))
Em seguida predict
, usando , você pode obter previsões com base no seu modelo
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
Observe que os valores ajustados também podem ser obtidos via
mod1$fitted
Ao especificar se.fit=TRUE
, você também obtém o erro padrão associado a cada valor ajustado. O resultado data.frame
é uma matriz com os seguintes componentes: as previsões ajustadas ( fit
), os erros padrão estimados ( se.fit
) e um escalar que fornece a raiz quadrada da dispersão usada para calcular os erros padrão ( residual.scale
). No caso de um logit binomial, o valor será de 1 (que você pode ver ao entrar preddat$residual.scale
no R
). Se você quiser ver um exemplo do que você calculou até agora, digite head(data.frame(preddat))
.
O próximo passo é configurar o gráfico. Eu gosto de configurar uma área de plotagem em branco com os parâmetros primeiro:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
Agora você pode ver onde é importante saber como calcular as probabilidades ajustadas. Você pode desenhar a linha correspondente às probabilidades ajustadas, seguindo a segunda fórmula acima. Usando o, preddat data.frame
você pode converter os valores ajustados em probabilidades e usá-los para plotar uma linha contra os valores da sua variável preditora.
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
Por fim, responda à sua pergunta, os intervalos de confiança podem ser adicionados ao gráfico calculando a probabilidade dos valores ajustados +/- 1.96
vezes o erro padrão:
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))
O gráfico resultante (dos dados gerados aleatoriamente) deve se parecer com isso:
Por conveniência, aqui está todo o código em um pedaço:
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 é uma resposta muito editada, na tentativa de torná-la mais relevante para stats.stackexchange.)