Ok, eu tenho uma regressão logística e usei a predict()
função para desenvolver uma curva de probabilidade com base em minhas estimativas.
## 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")
Isso é ótimo, mas estou curioso para traçar os intervalos de confiança para as probabilidades. Eu tentei, plot.ci()
mas não tive sorte. Alguém pode me indicar algumas maneiras de fazer isso, de preferência com o car
pacote ou a base R.
r
logistic
confidence-interval
ATMathew
fonte
fonte
Respostas:
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.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:Para converter probabilidades registradas em probabilidades, podemos traduzir o acima para
Você pode usar essas informações para configurar o gráfico. Primeiro, você precisa de um intervalo da variável preditora:
Em seguida
predict
, usando , você pode obter previsões com base no seu modeloObserve que os valores ajustados também podem ser obtidos via
Ao especificar
se.fit=TRUE
, você também obtém o erro padrão associado a cada valor ajustado. O resultadodata.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 entrarpreddat$residual.scale
noR
). Se você quiser ver um exemplo do que você calculou até agora, digitehead(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:
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.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: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:
(Nota: esta é uma resposta muito editada, na tentativa de torná-la mais relevante para stats.stackexchange.)
fonte
se.fit
definida?predict(..., se.fit=TRUE)
.Aqui está uma modificação da solução do @ smillig. Eu uso ferramentas tidyverse aqui e também uso a
linkinv
função que faz parte do objeto de modelo GLMmod1
. Dessa forma, você não precisa inverter manualmente a função logística, e essa abordagem funcionará independentemente do GLM específico que você ajustar.fonte