考虑下面的绘图,在该绘图中,我模拟了以下数据。我们看一下二元结果,用黑线表示真实概率为1。协变量x和p (y o b s = 1 | x )之间的函数关系是具有逻辑链接的三阶多项式(因此在双向过程中是非线性的)。
绿线是GLM logistic回归拟合,其中被引入为三阶多项式。虚线绿线是围绕预测的95%置信区间p (Ý ø b 小号 = 1 | X ,β),其中β拟合回归系数。我曾经和这个。R
glm
predict.glm
类似地,pruple线与95%可信区间的平均后的使用均匀现有贝叶斯逻辑回归模型的。为此,我使用了具有功能的软件包(设置提供了统一的先验信息)。MCMCpack
MCMClogit
B0=0
红点表示数据集中的观测值,黑点表示y o b s = 0的观测值。请注意,在分类/离散分析中常见的是y,但没有观察到p (y o b s = 1 | x )。
可以看到几件事:
- 我故意模拟了左手稀疏。我希望由于缺乏信息(观察)而在这里扩大信心和可信区间。
- 置信区间会按预期变宽,而可信区间则不会。实际上,由于缺乏信息,置信区间会包围整个参数空间。
- 是什么原因呢?
- 我可以采取哪些步骤来达到更好的可信度?(也就是说,至少包含真正的函数形式,或者更好的是与置信区间一样宽)
用于获得图形中预测间隔的代码在此处打印:
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
输出作为代码包含在帖子中。