我使用以下代码在R中创建标准正态分布:
x <- seq(-4, 4, length=200)
y <- dnorm(x, mean=0, sd=1)
plot(x, y, type="l", lwd=2)
Run Code Online (Sandbox Code Playgroud)
我需要在平均值和平均值上下三个标准偏差处标记x轴.我该如何添加这些标签?
Dav*_*uer 19
最简单(但不是一般)的方法是限制x轴的限制.+/- 1:3 sigma将被标记为这样,并且平均值将被标记为0 - 表示与平均值的0偏差.
plot(x,y, type = "l", lwd = 2, xlim = c(-3.5,3.5))
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用更具体的标签:
plot(x,y, type = "l", lwd = 2, axes = FALSE, xlab = "", ylab = "")
axis(1, at = -3:3, labels = c("-3s", "-2s", "-1s", "mean", "1s", "2s", "3s"))
Run Code Online (Sandbox Code Playgroud)
Sac*_*amp 15
使用此答案中的代码,您可以跳过创建x并只使用curve()该dnorm函数:
curve(dnorm, -3.5, 3.5, lwd=2, axes = FALSE, xlab = "", ylab = "")
axis(1, at = -3:3, labels = c("-3s", "-2s", "-1s", "mean", "1s", "2s", "3s"))
Run Code Online (Sandbox Code Playgroud)
但是这不再使用给定的代码了.
基于蒙特卡罗模拟思想的极其低效且不寻常但又美观的解决方案是:
rnorm.所述rnorm函数接受作为参数(A,B,C)并返回的向量甲从正态分布中心在样本乙,与标准偏差Ç.因此,从标准法线(即平均值为0且标准差为1的法线)中取出大小为50,000的样本,并绘制其密度,我们执行以下操作:
x = rnorm(50000,0,1)
plot(density(x))
Run Code Online (Sandbox Code Playgroud)
随着绘制数量达到无穷大,这将在向正常分布的方向上收敛.为了说明这一点,请参见下图,其中显示了从左到右,从上到下的5000,50000,500000和500万个样本.
如果您喜欢在不使用 R 内置函数的情况下以困难的方式做某事,或者您想在 R 之外执行此操作,则可以使用以下公式。
x<-seq(-4,4,length=200)
s = 1
mu = 0
y <- (1/(s * sqrt(2*pi))) * exp(-((x-mu)^2)/(2*s^2))
plot(x,y, type="l", lwd=2, col = "blue", xlim = c(-3.5,3.5))
Run Code Online (Sandbox Code Playgroud)