使用偏移变量时,如何在R中绘制负二项回归拟合值及95%置信带?
使用偏移变量时提取负二项模型拟合值置信限并绘图的方法
你可以借助predict()函数在链接尺度(log尺度)上提取拟合值与标准误,再转换回响应尺度并结合偏移变量调整,无需手动推导置信区间公式。以下是具体步骤:
1. 准备预测数据集
为了得到平滑的拟合曲线,建议创建包含连续x序列的新数据集,若要聚焦x对响应的影响,可将偏移变量固定为均值:
# 创建预测用数据集,x取序列值,offset固定为原始数据均值 pred_data <- data.frame( x = seq(min(x), max(x), length.out = 100), offset_1 = mean(offset_1) )
2. 提取链接尺度的拟合值与标准误
在链接尺度(log)下计算置信区间更可靠(近似正态分布),通过se.fit = TRUE参数获取标准误:
# 获取log尺度的拟合值和标准误 pred_log <- predict(nb.model, newdata = pred_data, type = "link", se.fit = TRUE) # 计算95%置信区间(log尺度) pred_log$upper <- pred_log$fit + 1.96 * pred_log$se.fit pred_log$lower <- pred_log$fit - 1.96 * pred_log$se.fit
3. 转换为单位偏移的响应尺度
由于模型中使用了offset(log(offset_1)),需将log尺度结果转换为响应尺度后,再除以偏移变量得到单位偏移的响应值:
# 转换到响应尺度,并除以offset得到单位值 pred_data$fit <- exp(pred_log$fit) / pred_data$offset_1 pred_data$upper <- exp(pred_log$upper) / pred_data$offset_1 pred_data$lower <- exp(pred_log$lower) / pred_data$offset_1
4. 绘制拟合曲线与置信区间
以ggplot2为例,同时展示原始数据点和拟合结果:
library(ggplot2) ggplot(pred_data, aes(x = x)) + geom_point(data = newdata, aes(y = y / offset_1), color = "gray50") + # 原始单位偏移数据点 geom_line(aes(y = fit), color = "blue", linewidth = 1) + # 拟合线 geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2, fill = "blue") + # 95%置信区间 labs(x = "x", y = "单位偏移的响应值", title = "负二项模型拟合结果") + theme_bw()
关键提示
- 不建议直接在响应尺度计算置信区间:负二项模型的响应尺度数据不符合正态分布,在链接尺度计算后再转换,结果更准确。
- 若需保留原始数据的偏移值进行预测,只需将
pred_data中的offset_1替换为对应原始值即可,其余步骤不变。
内容的提问来源于stack exchange,提问作者Sergio Nolazco
相关产品推荐
相关产品推荐

