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

使用ggplot2比较两个连续分布及动态95%分位数实现方法问询

实现方案

核心调整思路

  • 双指数分布替换:双指数分布又称拉普拉斯分布,直接调用distributional包内置的dist_laplace()即可实现,标准双指数分布的参数为位置参数0、尺度参数1,直接替换原示例中的正态分布配置即可。
  • 动态95%分位数边界:提前为每个分布计算对应的95%分位数存入数据集,绘图时通过after_stat()获取当前点位的x值,匹配当前分布对应的分位数做阈值判断即可,不需要写死固定数值。

完整实现代码

library(dplyr)
library(distributional)
library(ggdist)
library(ggplot2)

# 构建分布数据集,预计算每个分布的95%分位数
dists <- tribble(
  ~dist_name, ~dist_obj,
  "laplace", dist_laplace(0, 1), # 替换原正态分布为双指数分布
  "student_t", dist_student_t(3, 0, 1)
) %>% 
  mutate(q95 = quantile(dist_obj, 0.95)) # 预计算单侧95%分位数,若需要双侧95%范围可分别计算q025和q975

# 绘图
dists %>%
  ggplot(aes(y = dist_name, dist = dist_obj)) +
  stat_dist_halfeye(
    # 动态匹配当前分布的95%分位数做边界判断
    aes(fill = after_stat(abs(x) < q95[match(y, dist_name)]))
  ) +
  labs(fill = "是否在95%分位数范围内")

关键逻辑说明

如果需要判断的是双侧95%取值范围(即覆盖95%概率的区间),只需要调整预计算逻辑和判断条件即可:

  1. 预计算阶段增加mutate(q025 = quantile(dist_obj, 0.025), q975 = quantile(dist_obj, 0.975))
  2. fill的判断条件改为after_stat(x > q025[match(y, dist_name)] & x < q975[match(y, dist_name)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:02