逻辑回归预测的置信区间

uni*_*ue2 61 statistics r confidence-interval glm

在R predict.lm中,根据线性回归的结果计算预测,并提供计算这些预测的置信区间.根据手册,这些间隔是基于拟合的误差方差,而不是基于系数的误差间隔.

另一方面,基于逻辑和泊松回归计算预测的predict.glm(在其他几个中)没有置信区间的选项.我甚至很难想象如何计算这种置信区间,以便为泊松和逻辑回归提供有意义的见解.

是否存在为此类预测提供置信区间有意义的情况?他们怎么解释?这些案例中的假设是什么?

Rei*_*son 71

通常的方法是在线性预测器的比例上计算置信区间,其中事物将更正常(高斯),然后应用链接函数的逆以将置信区间从线性预测器比例映射到响应比例.

要做到这一点,你需要两件事;

  1. 打电话predict()type = "link"
  2. 打电话predict()se.fit = TRUE.

第一个产生线性预测器的尺度预测,第二个返回预测的标准误差.在伪代码中

## foo <- mtcars[,c("mpg","vs")]; names(foo) <- c("x","y") ## Working example data
mod <- glm(y ~ x, data = foo, family = binomial)
preddata <- with(foo, data.frame(x = seq(min(x), max(x), length = 100)))
preds <- predict(mod, newdata = preddata, type = "link", se.fit = TRUE)
Run Code Online (Sandbox Code Playgroud)

preds然后用成分列表fitse.fit.

然后是线性预测器的置信区间

critval <- 1.96 ## approx 95% CI
upr <- preds$fit + (critval * preds$se.fit)
lwr <- preds$fit - (critval * preds$se.fit)
fit <- preds$fit
Run Code Online (Sandbox Code Playgroud)

critval根据需要从tz(正常)分布中选择(我现在完全忘记用于哪种类型的GLM以及属性是什么).这1.96是高斯分布的值,覆盖率为95%:

> qnorm(0.975) ## 0.975 as this is upper tail, 2.5% also in lower tail
[1] 1.959964
Run Code Online (Sandbox Code Playgroud)

现在fit,uprlwr我们需要的链接函数的反函数适用于他们.

fit2 <- mod$family$linkinv(fit)
upr2 <- mod$family$linkinv(upr)
lwr2 <- mod$family$linkinv(lwr)
Run Code Online (Sandbox Code Playgroud)

现在您可以绘制所有三个和数据.

preddata$lwr <- lwr2 
preddata$upr <- upr2 
ggplot(data=foo, mapping=aes(x=x,y=y)) + geom_point() +         
   stat_smooth(method="glm", method.args=list(family=binomial)) + 
   geom_line(data=preddata, mapping=aes(x=x, y=upr), col="red") + 
   geom_line(data=preddata, mapping=aes(x=x, y=lwr), col="red") 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这些间隔要小心!它们是置信区间,而不是在这种情况下所需的预测区间.请点击caracal的评论:http://stats.stackexchange.com/q/41074/5509 (5认同)
  • @skan`exp(confint(fit))`将给出模型的**参数**上的Wald或轮廓似然(取决于加载的pkgs)置信区间,而不是模型的拟合值. (2认同)
  • @skan 不,我们不应该对我展示的内容使用二项式分布(以生成拟合值的置信区间)。渐近地,事物在线性预测器的尺度上呈高斯分布。此外,如果您的意思是与模拟有关:通过模拟为二项式数据生成预测区间几乎没有意义,因为唯一会生成的两个值是 1 和 0,因此区间是 0(全为 1 或 0)或 1 (1 和 0 的混合)用于给定模型拟合的模拟数据。 (2认同)
  • @GavinSimpson我完成了代码,完成了一些数学计算,阅读了`predict.glm`和你的帖子的文档,但仍然没有得到这里的'preds $ se.fit`.我们假设在线性预测中存在逻辑分布的噪声,然后在斜率和截距的估计中产生误差.但是如何计算预测误差?我使用预测概率将结果与Wald CI进行了比较.但他们不一样.所以*如何计算`preds $ se.fit`?* (2认同)