为什么我不能正确地绘制这个 dnorm?

Why I can't plot this dnorm properly?

我' 运行 一个小的 Monte Carlo 测试,其中 n 是 i.i.d 的数量。 generated 和 R 是迭代。这是我的代码:

R=50
n=100
lambda=30
v<-c()
for (i in 1:R){
  u <- rpois(n, lambda)
  v[i] <- n*mean(u)
}

hist(v, breaks=30, main = "")
curve(dnorm(n*x, n*lambda, sd = n*lambda), col="Red", add = TRUE)

我们现在确实知道参数lambda的n个独立泊松之和是参数n乘以lambda的泊松。因此,通过中的中心限制,用均值和方差等于 n*lambda 的正态近似它们的总和是有意义的。 但是每当我尝试绘制曲线(dnorm)时,R 绘制它时就好像它一直是 0,我不明白为什么会这样。

其实很简单。你的治疗在 -100 到 150 之间是非零的(我凭经验发现的,所以它不是很准确),你的直方图从 2850 到 3100。

这是你的曲线:

curve(dnorm(n*x, n*lambda, sd = n*lambda), from = -100, to = 150, col="Red")

这是您的直方图:

hist(v, breaks=30, main = "", freq = FALSE)

我会说这个问题比 Érico Patto 的(正确)发现更根本,即代码行:

curve(dnorm(n*x, n*lambda, sd = n*lambda), col="Red", add = TRUE)

由于三个错误,

不适合叠加在直方图上:

  1. 指定的标准偏差不正确。
  2. dnorm()的拳头参数不正确。
  3. 垂直比例与直方图的垂直比例不兼容。

我现在详细解释这些要点。

1) 标准差: 您的代码行说明正态的标准差为 n*lambda 而此表达式给出 方差 的总和 n 独立泊松参数 lambda.

2) dnorm() 的第一个参数: 第一个参数应该是 x,而不是 n*x,因为第一个参数表示值dnorm() 函数应在其上进行评估。默认情况下,这些值是 101 个等距点,范围从添加曲线的图的最小 x 值到最大 x 值(因为您使用的是 add=TRUE --c.f。[ 的文档=21=]).在这种情况下,这是直方图的 X 轴范围。

3)垂直刻度:为了使密度曲线在直方图上可见,直方图的垂直刻度应与垂直刻度“兼容”的密度。由于您的直方图在垂直刻度上绘制了 FREQUENCY,因此它的值远大于密度曲线的值(在千分之一刻度);所以 1/1000 的比例覆盖在 1 的比例上,因此曲线不可见。

就是说,最后两行代码应该用于实现您的目标,即用参数 [=15= 覆盖 n 独立泊松随机变量之和的极限正态分布的密度] 在它的直方图上是:

hist(v, breaks = 30, main = "", freq = FALSE)
curve(dnorm(x, mean = n*lambda, sd = sqrt(n*lambda)), col = "Red", add = TRUE)

其中有三个不同点w.r.t。到您的代码,并给出以下图片(对于向量 v 中一组特定的随机生成值):

如果您使用 R=500 次复制而不是 100 次复制,您将获得更好的正常近似值: