为什么多项式回归中的贝叶斯可信区间偏向而置信区间正确?


9

考虑下面的绘图,在该绘图中,我模拟了以下数据。我们看一下二元结果,用黑线表示真实概率为1。协变量xp y o b s = 1 | x 之间的函数关系是具有逻辑链接的三阶多项式(因此在双向过程中是非线性的)。yobsxp(yobs=1|x)

绿线是GLM logistic回归拟合,其中被引入为三阶多项式。虚线绿线是围绕预测的95%置信区间p Ý ø b 小号 = 1 | X β,其中β拟合回归系数。我曾经和这个。xp(yobs=1|x,β^)β^R glmpredict.glm

类似地,pruple线与95%可信区间的平均后的使用均匀现有贝叶斯逻辑回归模型的。为此,我使用了具有功能的软件包(设置提供了统一的先验信息)。p(yobs=1|x,β)MCMCpackMCMClogitB0=0

红点表示数据集中的观测值,黑点表示y o b s = 0的观测。请注意,在分类/离散分析中常见的是y,但没有观察到p y o b s = 1 | x yobs=1yobs=0yp(yobs=1|x)

在此处输入图片说明

可以看到几件事:

  1. 我故意模拟了左手稀疏。我希望由于缺乏信息(观察)而在这里扩大信心和可信区间。x
  2. yobs=1
  3. 置信区间会按预期变宽,而可信区间则不会。实际上,由于缺乏信息,置信区间会包围整个参数空间。

x

  1. 是什么原因呢?
  2. 我可以采取哪些步骤来达到更好的可信度?(也就是说,至少包含真正的函数形式,或者更好的是与置信区间一样宽)

用于获得图形中预测间隔的代码在此处打印:

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


如果有人可以向我解释如何与数据共享表,那么我可以这样做。
tomka

您可以dput在包含数据的数据框上使用,然后将dput输出作为代码包含在帖子中。
DeltaIV '17

1
@tomka哦,我明白了。我不是色盲的,但是我很难看到绿色/蓝色的差异!
AdamO

1
@AdamO希望情况会更好
tomka's

Answers:


6

XX

二项式常客GLM与具有身份链接的GLM并无不同,只是方差与平均值成正比。

XX

对于常客预测,预测方差的平方偏差(杠杆)成比例增加将主导这一趋势。这就是为什么到预测间隔大约等于[0,1]的收敛速度快于三阶多项式logit到0或1的概率奇异收敛的速度。

对于贝叶斯后验拟合分位数,情况并非如此。没有明确使用平方偏差,因此我们仅依靠占主导地位的0或1趋势的比例来构建长期预测区间。

X

使用上面提供的代码,我们得到:

> x_pred_dom <- model.matrix(~ x + I(x^2) + I(x^3), data=data.frame('x'=c(1000)))
> gibbs_preds <- plogis(apply(gibbs_samps[1000:10000, ], 1, `%*%`, t(x_pred_dom))) # a bunch of 0/1s basically past machine precision
> prop.table(table(gibbs_preds))
gibbs_preds
         0          1 
0.97733585 0.02266415 
> 

因此,在97.75%的时间内,第三个多项式项为负。这可以从Gibbs示例中得到验证:

> prop.table(table(gibbs_samps[, 4]< 0))

 FALSE   TRUE 
0.0225 0.9775 

X

另一方面,经常性拟合会像预期的那样达到0,1:

freq <- predict(fit, newdata = data.frame(x=1000), se.fit=T)
plogis(freq$fit + c(-1.96, 1.96) %o% freq$se.fit)

给出:

> plogis(freq$fit + c(-1.96, 1.96) %o% freq$se.fit)
     [,1]
[1,]    0
[2,]    1

xB0MCMClogit

@tomka我不知道该如何准确回答,因为它似乎与当前问题相切。最重要的是要指出,这些计算PI的方法并不是真正可比的,特别是因为它们与外推有关。当然,利用贝叶斯推理,如果您使用信息性先验,则当先验正确时,您将获得效率,而当先验错误时,您将失去效率。
AdamO

只是想让您知道,我还在考虑您的答案。我仍然感到奇怪的是,后方并没有对稀疏性做出反应而变大。我相信,对于其他先验,可以在稀疏区域实现更好的行为。我暂时无法确切说明这一点;我也许会举一个例子说明这个问题,即即使在外推的情况下,可信区间也可以按照我期望的方式工作(我正在考虑正态线性贝叶斯回归)。当我这样做时,我会让你知道。
tomka
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.