uni*_*ue2 61 statistics r confidence-interval glm
在R predict.lm中,根据线性回归的结果计算预测,并提供计算这些预测的置信区间.根据手册,这些间隔是基于拟合的误差方差,而不是基于系数的误差间隔.
另一方面,基于逻辑和泊松回归计算预测的predict.glm(在其他几个中)没有置信区间的选项.我甚至很难想象如何计算这种置信区间,以便为泊松和逻辑回归提供有意义的见解.
是否存在为此类预测提供置信区间有意义的情况?他们怎么解释?这些案例中的假设是什么?
Rei*_*son 71
通常的方法是在线性预测器的比例上计算置信区间,其中事物将更正常(高斯),然后应用链接函数的逆以将置信区间从线性预测器比例映射到响应比例.
要做到这一点,你需要两件事;
predict()与type = "link"和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然后用成分列表fit和se.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根据需要从t或z(正常)分布中选择(我现在完全忘记用于哪种类型的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,upr和lwr我们需要的链接函数的反函数适用于他们.
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)