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

如何在ggplot2中绘制拟合的Ex-gaussian密度曲线?

绘制基于已知参数的平滑Ex-Gaussian拟合曲线

我懂你现在的困扰:用模拟数据生成的密度图每次跑出来形态都有点不一样,毕竟抽样有随机性嘛。你想要的是一条完全基于你手里的mu、sigma、tau参数的平滑拟合曲线,不管运行多少次都能保持完全一致的形态,对吧?

你之前用rexgauss()生成模拟样本再画密度图的思路,问题就出在随机抽样的波动上——每次模拟的样本都有差异,自然曲线形态不稳定。咱们换个思路,直接用理论密度函数来计算,就能得到绝对稳定的平滑曲线了。

这里咱们用retimes包自带的dexgauss()函数(专门用来计算Ex-Gaussian分布的概率密度值),步骤很清晰:

  • 先生成一个足够密集的x轴数值序列,覆盖这个分布的主要取值范围(可以根据你的参数调整区间,确保包含大部分概率密度)
  • 用dexgauss()计算每个x对应的理论密度值
  • 最后用ggplot直接绘制这条理论曲线

下面是完整的代码示例,我用你给出的参数(mu=1, sigma=1, tau=1)来演示:

library(retimes)
library(ggplot2)

# 1. 定义你已有的Ex-Gaussian参数
mu <- 1
sigma <- 1
tau <- 1

# 2. 生成密集的x值序列(这里取0到8,覆盖该参数下分布的主要区间)
x_vals <- seq(from = 0, to = 8, by = 0.01)

# 3. 计算每个x对应的理论概率密度
density_vals <- dexgauss(x_vals, mu = mu, sigma = sigma, tau = tau)

# 4. 转换成ggplot能用的数据框格式
exgauss_fit_df <- data.frame(x = x_vals, density = density_vals)

# 5. 绘制平滑的理论拟合曲线
ggplot(exgauss_fit_df, aes(x = x, y = density)) +
  geom_line(size = 1, color = "#2E86AB") +
  labs(x = "观测值", y = "概率密度", title = "平滑Ex-Gaussian拟合曲线") +
  theme_minimal()

如果你想同时对比模拟数据的密度图和理论曲线,也可以把两者放在一起:

# 保留你原来的模拟数据步骤
sim_data <- as.data.frame(rexgauss(1000, mu=mu, sigma=sigma, tau=tau))
colnames(sim_data) <- "obs"

# 同时绘制模拟密度和理论曲线
ggplot() +
  geom_density(data = sim_data, aes(x = obs), size=1, alpha=.4, fill = "#F2D388") +
  geom_line(data = exgauss_fit_df, aes(x = x, y = density), size = 1.2, color = "#2E86AB") +
  labs(x = "观测值", y = "概率密度", title = "Ex-Gaussian:模拟数据vs理论曲线") +
  theme_minimal()

这样每次运行,理论曲线都是完全一致的,模拟密度图会有抽样波动,但能直观看到两者的对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:33:50