请求协助绘制贝叶斯Beta回归模型预测的可信区间(附代码数据)
没问题!我来帮你一步步搞定用zoib模型的预测结果绘制贝叶斯可信区间的事儿~先把你的代码补全,再结合ggplot2实现可视化:
步骤1:补全预测代码并提取可信区间
你的pred.zoib调用没写完,我们先完整生成预测数据,再从MCMC预测样本里提取均值和可信区间的上下限:
library(ggplot2) library(plotly) library(zoib) data("GasolineYield", package = "zoib") # 拟合贝叶斯Beta回归模型 re.md <- zoib(yield ~ temp | 1 | 1, data=GasolineYield, joint = FALSE, random=1, EUID=GasolineYield$batch, zero.inflation = FALSE, one.inflation = FALSE, n.iter=3200, n.thin=15, n.burn=200) # 生成用于预测的温度序列(步长可以根据需求调整,这里用10方便演示) new_temp <- seq(100, 600, by = 10) new_data <- data.frame(temp = new_temp) # 执行预测,返回所有MCMC抽样的预测值(核心是return.samples = TRUE) pred_results <- pred.zoib(re.md, newdata = new_data, type = "response", return.samples = TRUE) # 计算每个温度对应的预测均值、95%可信区间(2.5%和97.5%分位数) pred_summary <- data.frame( temp = new_temp, pred_mean = apply(pred_results, 2, mean), pred_lower = apply(pred_results, 2, quantile, probs = 0.025), pred_upper = apply(pred_results, 2, quantile, probs = 0.975) )
步骤2:用ggplot2绘制带可信区间的回归曲线
接下来把原始数据、预测均值线和可信区间都可视化出来,还可以转成交互式的plotly图:
# 绘制静态ggplot图 p <- ggplot() + # 绘制原始数据点,增加透明度避免重叠 geom_point(data = GasolineYield, aes(x = temp, y = yield), alpha = 0.5, color = "#636EFA") + # 绘制预测均值线 geom_line(data = pred_summary, aes(x = temp, y = pred_mean), color = "#EF553B", size = 1) + # 填充95%可信区间区域 geom_ribbon(data = pred_summary, aes(x = temp, ymin = pred_lower, ymax = pred_upper), fill = "#EF553B", alpha = 0.2) + # 设置图表标签和主题 labs(title = "汽油收率 vs 温度:贝叶斯Beta回归预测", x = "温度", y = "收率") + theme_minimal() # 转成交互式plotly图(可选) ggplotly(p)
关键细节说明
return.samples = TRUE是核心:这个参数让pred.zoib返回所有MCMC抽样的预测值,而不是只返回均值,这样我们才能通过分位数计算得到贝叶斯可信区间。- 可信区间灵活调整:如果你需要其他置信水平的可信区间,只要修改
quantile函数里的probs参数就行,比如改成c(0.1, 0.9)就能得到80%可信区间。 - 模型适配性:因为你关闭了零膨胀和一膨胀选项,这是标准的Beta回归,完美适配收率这类(0,1)区间的变量。
内容的提问来源于stack exchange,提问作者Krantz
相关产品推荐
相关产品推荐

