Розглянемо сюжет нижче, в якому я моделював дані наступним чином. Ми дивимось на двійковий результат для якого справжня ймовірність дорівнює 1 позначена чорною лінією. Функціональний взаємозв'язок між коваріатним і p (y_ {obs} = 1 | x) - поліном 3-го порядку з логістичним зв’язком (тому він є нелінійним у подвійному напрямку).
Зелена лінія - це логістична регресія GLM, де вводиться як поліном 3-го порядку. Пунктирні зелені лінії - це 95% довірчі інтервали навколо прогнозування , де відповідні коефіцієнти регресії. Я використовував R
glm
і predict.glm
для цього.
Аналогічно, пружкова лінія - це середнє значення заднього з 95% достовірним інтервалом для байєсівської логістичної регресійної моделі з використанням рівномірного попереднього. Я використовував для цього пакет MCMCpack
з функцією MCMClogit
(налаштування B0=0
дає рівномірний неінформативний попередній характер).
Червоні точки позначають спостереження в наборі даних, для яких , чорні точки - спостереження з . Зауважимо, що, як часто в класифікації / дискретному аналізі, спостерігається але не .
Можна побачити кілька речей:
- Я спеціально моделював, що - ліва рука. Я хочу, щоб довіра та надійний інтервал стали широкими тут через брак інформації (спостережень).
- Обидва прогнози є упередженими вгору зліва. Цей ухил обумовлений чотирма червоними точками, що позначають спостереження, що помилково говорить про те, що справжня функціональна форма підніметься тут. Алгоритм не має достатньо інформації для висновку, що справжня функціональна форма є зігнутою вниз.
- Інтервал довіри стає ширшим, як очікувалося, тоді як вірогідний інтервал - ні . Насправді довірчий інтервал охоплює повний простір параметрів, як це має бути через брак інформації.
Здається, достовірний інтервал тут неправильний / занадто оптимістичний для частини . Дійсно небажана поведінка для достовірного інтервалу звужуватися, коли інформація стає рідкою або повністю відсутня. Зазвичай на це не реагує надійний інтервал. Може хтось пояснить:
- Які причини цього?
- Які кроки я можу зробити, щоб прийти до кращого достовірного інтервалу? (тобто та, яка охоплює хоча б справжню функціональну форму або краще стає такою ж широкою, як інтервал довіри)
Код для отримання інтервалів прогнозування у графіці друкується тут:
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)
Доступ до даних : https://pastebin.com/1H2iXiew спасибі @DeltaIV та @AdamO
dput
в кадрі даних, що містить дані, а потім включити dput
вихід у якості коду у свою посаду.