R中用boot、envelope包做逻辑回归参数自助法绘制置信区间问题排查
问题错误原因与修正方案
你代码的核心问题是预测输出的尺度不统一,具体错误点和修正方法如下:
- 核心错误:尺度不匹配
你在自助法统计量函数f1中调用predict(res, newdata=data2)时,没有指定type参数,逻辑回归的predict.glm默认输出的是link尺度(也就是对数几率值,取值范围为全体实数),但你后续绘图时用的拟合线YP是指定了type='response'输出的概率值(取值范围0~1),两者尺度完全不同,因此画在同一张图上会出现完全不符合预期的结果。
这也刚好解释了你说的「相同流程处理线性回归场景时一切正常」的现象:线性回归的link函数为恒等函数,predict默认输出的link尺度结果就是响应变量本身的尺度,不会出现不匹配问题,但逻辑回归的link是对数几率转换,和原始0/1响应的概率尺度完全不同,因此会出错。 - 修正方法
只需要统一两边的预测输出尺度即可,推荐调整f1函数的predict语句,使其输出概率尺度的结果,和后续绘图逻辑匹配:
如果你需要绘制对数几率尺度的结果,则反过来修改绘图时的YP计算语句:f1 = function(data1){ res = glm(formula = Y~ Z, data = data1, family =binomial) # 这里增加type = 'response'参数,输出概率尺度的预测值 YP = predict(res, newdata=data2, type = 'response') return(YP) }# 对数几率尺度的拟合值,和自助法输出匹配 YP = predict.glm(fit, type='link') - 额外注意事项
从你给出的样本数据来看,当前展示的样本Y取值全部为0,如果全数据集存在完全分离/近似分离的情况,逻辑回归的参数估计本身会不稳定,也会导致自助法的置信带出现异常,建议先检查原始数据的Y分布和逻辑回归拟合的合理性。
内容的提问来源于stack exchange,提问作者Hoda Fakharzadeh
相关产品推荐
相关产品推荐

