You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggdist::stat_halfeye()如何缩放后验预测密度?

stat_halfeye的密度缩放逻辑与零膨胀数据的适配问题

为什么stat_halfeye的图会异常平坦?

stat_halfeye底层依赖stat_slabinterval,它默认的缩放逻辑是按概率质量占比来归一化:把整个分布的总概率质量设为1,y轴的数值代表对应位置的概率占总样本的比例,而非传统意义上积分等于1的概率密度。

在你的零膨胀数据场景中:

  • 零值的概率质量占比接近30%(对应模型的零膨胀率),所以x=0处的密度高度直接拉到0.3左右
  • 剩余beta分布部分的总概率占比仅70%,导致这部分的密度曲线最高值不超过0.7,视觉上就显得异常平坦

而geom_density(aes(y=after_stat(scaled)))是将密度的最大值拉伸到1,完全不考虑概率质量的实际占比,因此能正常展示beta分布的形态。

怎么让stat_halfeye的图正常显示?

只需给stat_halfeye添加scale = "density"参数,切换到传统概率密度的缩放模式即可:

combined_obs %>%
  add_predicted_draws(beta_zero_model) %>%
  ggplot(aes(x = .prediction)) +
  stat_halfeye(.width = c(.95), scale = "density") + 
  ggtitle("stat_halfeye (scale = 'density')")

调整后曲线形态会和geom_density一致,同时保留stat_halfeye自带的区间标注功能。

关于scale参数的补充说明

stat_slabinterval的scale参数有三个可选值:

  • "probability"(默认):y轴为概率占比,范围[0,1],适合观察各部分的概率权重
  • "density":y轴为传统概率密度,积分等于1,适合展示分布形态
  • "count":y轴为核密度估计的近似样本计数

这就是两种绘图函数结果差异的核心原因。


内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:12:52