在 R 中绘制对数正态密度的高度错误

Plotting log normal density in R has wrong height

我的对数正态密度平均值为 -0.4,标准差为 2.5。

x = 0.001 高度超过 5(我用对数正态 PDF 的公式仔细检查了这个值):

dlnorm(0.001, -0.4, 2.5)

5.389517

当我在输入范围 0-6 上使用 curve 函数绘制它时,它看起来高度刚好超过 1.5:

curve(dlnorm(x, -.4, 2.5), xlim = c(0, 6), ylim = c(0, 6))

当我将输入范围调整为0-1时高度接近4:

curve(dlnorm(x, -.4, 2.5), xlim = c(0, 1), ylim = c(0, 6))


ggplot2 类似(输出未显示,但看起来像上面的 curve 图):

library(ggplot2)

ggplot(data = data.frame(x = 0), mapping = aes(x = x)) + 
  stat_function(fun = function(x) dlnorm(x, -0.4, 2.5)) + 
  xlim(0, 6) + 
  ylim(0, 6)

ggplot(data = data.frame(x = 0), mapping = aes(x = x)) + 
  stat_function(fun = function(x) dlnorm(x, -0.4, 2.5)) + 
  xlim(0, 1) + 
  ylim(0, 6)

有人知道为什么调整x轴刻度时密度高度会变化吗?为什么以上两种尝试似乎都没有达到正确的高度?我只用正常密度试过这个,但没有发生。

curves 在你给它的范围内生成一组离散点。默认情况下它会生成 n = 101 点,因此存在 step 问题。如果你增加点数,你将得到几乎正确的值:

curve(dlnorm(x, -.4, 2.5), xlim = c(0, 1), ylim = c(0, 6), n = 1000)

第一种情况你建议curve在区间x <- c(0,6)内生成101个点,而第二种情况在区间x <- c(0,1)内生成101个点,所以步长更多密集