Рассмотрим график ниже, на котором я смоделировал данные следующим образом. Мы смотрим на двоичный результат для которого истинная вероятность быть 1 указана черной линией. Функциональная связь между ковариатой и является полиномом 3-го порядка с логистической связью (поэтому она является нелинейной в двустороннем порядке).
Зеленая линия - это логистическая регрессия GLM, где вводится как полином 3-го порядка. Пунктирные зеленые линии - это 95% доверительные интервалы вокруг прогноза , где - подогнанные коэффициенты регрессии. Я использовал и для этого.R
glm
predict.glm
Точно так же линия pruple - это среднее значение апостериорного с 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
вывод в виде кода в своем посте.