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

geom_density绘图与预期不符,求原因及修正方法

问题原因分析
  • 函数定义错误:你命名为r_density的函数并非随机数生成器,它只是计算给定输入的密度值(对应拉普拉斯分布的概率密度函数),没有实现生成服从该分布随机样本的逻辑。
  • 样本生成错误:你用runif(N)生成了均匀分布的数值,然后计算这些数值对应的密度值,再对密度值进行密度估计——这完全违背任务要求,任务需要的是生成服从目标分布的样本,而非对均匀分布样本的密度值做估计。
  • 绘图映射错误:geom_density中把x映射到了密度值density_fkt,而非目标分布的样本值;同时使用..scaled..对估计密度做缩放,导致图形形态与真实密度完全不符。
修正后的实现代码
library(tidyverse)

# 正确的拉普拉斯分布随机数生成函数
r_density <- function(n) {
  # 利用两个独立指数分布的差值生成拉普拉斯样本
  y1 <- rexp(n, rate = 1)
  y2 <- rexp(n, rate = 1)
  y1 - y2
}

N <- 1000
# 生成服从目标分布的样本
samples <- r_density(N)

tb <- tibble(x = samples)

ggplot() +
  # 用生成的样本估计密度
  geom_density(data = tb, mapping = aes(x = x), color = "black", size = 1) +
  # 绘制真实密度函数
  geom_function(
    fun = function(x) exp(-abs(x))/2,
    xlim = c(-6,6),
    color = "red",
    size = 1
  ) +
  theme_minimal() +
  labs(
    x = "x",
    y = "Dichtefunktion f(x)",
    title = "Geschätzte (schwarz) vs echte (rot) Dichte"
  )
关键修正点说明
  • 随机数生成函数:重新实现r_density,通过两个独立指数分布的差值生成拉普拉斯分布样本(拉普拉斯分布的一个核心性质是可分解为两个同速率指数分布的差)。
  • 样本来源:使用修正后的r_density(N)生成目标分布的样本,而非均匀分布样本。
  • 绘图逻辑:geom_density的x映射到生成的样本值,去掉..scaled..参数,保证估计密度的尺度与真实密度一致,便于直接对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:50:24