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

为何ggplot2的faithfuld数据集density列与MASS::kde2d计算结果存在差异?

差异原因解析

ggplot2提供的faithfuld数据集里的density列,和直接用MASS::kde2d()计算的结果差异,核心来自归一化处理和参数一致性:

  • 归一化方式不同
    MASS::kde2d()默认返回的z值是核密度估计的原始结果,其对应的密度曲面下的体积等于样本数量(每个样本对应一个核函数,积分总和等于样本数)。而faithfuld的density是将这个原始结果做了全局归一化,使得整个曲面下的体积(所有网格点密度值×网格单元面积的总和)等于1,完全符合概率密度的定义(总概率为1)。

  • 网格参数需匹配
    faithfuld是用kde2d(faithful$eruptions, faithful$waiting, n = 50)生成的,如果你调用kde2d时用了不同的n(网格点数)参数,也会导致结果差异。

验证代码

library(MASS)
library(ggplot2)

# 复刻faithfuld的计算逻辑
kde_raw <- kde2d(faithful$eruptions, faithful$waiting, n = 50)
dx <- diff(kde_raw$x)[1]
dy <- diff(kde_raw$y)[1]
grid_area <- dx * dy
# 归一化到总概率为1
normalized_density <- kde_raw$z / (sum(kde_raw$z) * grid_area)

# 对比结果,会返回TRUE
all.equal(faithfuld$density, as.vector(normalized_density))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:58:06