Considere o gráfico abaixo no qual simulei os dados da seguinte maneira. Observamos um resultado binário para o qual a verdadeira probabilidade de ser 1 é indicada pela linha preta. A relação funcional entre uma covariável e é 3 polinomial ordem com ligação logístico (por isso é não linear num modo duplo-). x p ( y o b s = 1 | x )
A linha verde é o ajuste de regressão logística GLM, onde é introduzido como polinômio de terceira ordem. As linhas verdes tracejadas são os intervalos de confiança de 95% em torno da previsão , onde os coeficientes de regressão ajustados. Eu usei e para isso.p ( y o b s = 1 | x , β ) βR
glm
predict.glm
Da mesma forma, a linha do pruple é a média do posterior com intervalo credível de 95% para de um modelo de regressão logística bayesiana usando um uniforme anterior. Eu usei o pacote com a função para isso (a configuração fornece o uniforme não informativo anterior).MCMCpack
MCMClogit
B0=0
Os pontos vermelhos indicam observações no conjunto de dados para o qual , os pontos pretos são observações com . Observe que, como comum na classificação / análise discreta, mas não é observado.y o b s = 0 y p ( y o b s = 1 | x )
Várias coisas podem ser vistas:
- Simulei de propósito que é escasso na mão esquerda. Quero que o intervalo de confiança e credibilidade se amplie aqui devido à falta de informações (observações).
- Ambas as previsões são tendenciosas para cima à esquerda. Esse viés é causado pelos quatro pontos vermelhos que observações, o que sugere erroneamente que a verdadeira forma funcional aqui. O algoritmo possui informações insuficientes para concluir que a verdadeira forma funcional está dobrada para baixo.
- O intervalo de confiança aumenta conforme o esperado, enquanto o intervalo credível não . De fato, o intervalo de confiança inclui o espaço completo dos parâmetros, como deveria devido à falta de informações.
Parece que o intervalo credível está errado / muito otimista aqui para uma parte de . É realmente um comportamento indesejável que o intervalo credível seja reduzido quando as informações ficam escassas ou totalmente ausentes. Geralmente não é assim que um intervalo confiável reage. Alguém pode explicar:
- Quais são as razões para isso?
- Que medidas posso tomar para obter um intervalo melhor credível? (ou seja, um que inclua pelo menos a verdadeira forma funcional, ou melhor, alcance o intervalo de confiança)
O código para obter intervalos de previsão no gráfico é impresso aqui:
fit <- glm(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
x_pred <- seq(0, 1, by=0.01)
pred <- predict(fit, newdata = data.frame(x=x_pred), se.fit = T)
plot(plogis(pred$fit), type='l')
matlines(plogis(pred$fit + pred$se.fit %o% c(-1.96,1.96)), type='l', col='black', lty=2)
library(MCMCpack)
mcmcfit <- MCMClogit(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
gibbs_samps <- as.mcmc(mcmcfit)
x_pred_dm <- model.matrix(~ x + I(x^2) + I(x^3), data=data.frame('x'=x_pred))
gibbs_preds <- apply(gibbs_samps, 1, `%*%`, t(x_pred_dm))
gibbs_pis <- plogis(apply(gibbs_preds, 1, quantile, c(0.025, 0.975)))
matlines(t(gibbs_pis), col='red', lty=2)
Acesso a dados : https://pastebin.com/1H2iXiew, obrigado @DeltaIV e @AdamO
dput
o quadro de dados que contém os dados e incluir a dput
saída como código na sua postagem.