dnorm是如何工作的?

7

我对统计学和R非常陌生。也许这是一个非常琐碎的问题,但我真的不明白这是如何工作的。

假设我使用 dnorm(5, 0, 2.5)。这是什么意思?

我看到一些资源告诉我,这个函数计算密度曲线上某点的高度。

现在我又读到,在连续分布中,一个数的确切概率为0。那么,我的问题是,如果我可以找出某个值的高度或概率,那么为什么它是0呢?

我知道我混淆了一些概念。但我找不到我错在哪里。如果您能抽出时间帮助我理解这个问题,那将是非常棒的。提前感谢您。

1个回答

9
密度返回一个数字,它本身不能直接翻译成概率。但它给出了一条曲线的高度,如果在可能的所有数字范围内绘制该曲线,则其下面的面积相加为1。
考虑这个例子。如果我创建从-7.5到7.5、间隔为0.1的等间距数字向量x,并获取每个x值下具有均值为0和标准差为2.5的正态变量的密度。
x <- seq(from = -7.5, to = 7.55, by = 0.1)
y <- dnorm(x, 0, 2.5)

这些密度形成的曲线下面积的近似值(我已将其存储为y),乘以它们之间的距离(0.1),接近于1:

> sum(y * 0.1)
[1] 0.9974739

如果您使用微积分进行正确计算,而不是用数字进行近似计算,那么结果将恰好为1。

这有什么用处呢?曲线下部分的累积面积可用于估计变量出现在特定范围内的概率,尽管正如您的某些来源指出的那样,连续变量的任何精确数字的概率技术上都为零。

考虑一下这个图形。阴影空间的面积显示了取自正态分布(平均值为零,标准偏差为2.5)的变量在-7.5到4之间的概率。这导致了许多有用的应用。

enter image description here

Made with:

library(ggplot2)

d <- data.frame(x, y)

ggplot(d, aes(x = x, y = y)) +
  geom_line() +
  geom_point() +
  geom_ribbon(fill = "steelblue", aes(ymax = y), ymin = 0, alpha = 0.5, data = subset(d, x <= 4)) +
  annotate("text", x= -4, y = 0.13, label = "Each point is an individual density\nestimate of dnorm(x, 0, 2.5)") +
  annotate("text", x = -.3, y = 0.02, label = "Filled area under the curve shows the cumulative probability\nof getting a number as high as a given x, in this case 4") +
  ggtitle("Density of a random normal variable with mean zero and standard deviation 2.5")

1
哇!太感谢了!这让事情变得非常清晰.. :) - lu5er
如果均值是矩阵会发生什么?我有一些代码,其中x是一个向量(1x315),均值是一个矩阵(315x315),标准差是大小为1x99225的向量,我无法弄清楚为什么它能工作。它返回一个大小为315x315的矩阵。 - Math4Life
1
嗨@Math4Life,这似乎需要一个单独的问题。 - Peter Ellis
嗨,@PeterEllis。非常好的答案。我该如何解释 dnorm(1.12, mean = 1.0888677, sd = 0.030749282) 等于 7.771136?dnorm 的输出不应该在 0 和 1 之间吗? - Krantz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接