mean(rnorm(100,mean=0,sd=1))不等于0;而sd(rnorm(100,mean=0,sd=1))也不等于1。为什么?

6

(添加可重复示例。)

我对rnorm函数有点困惑。

我期望 mean(rnorm(100,mean=0,sd=1)) 的结果是0; 而 sd(rnorm(100,mean=0,sd=1)) 的结果是1。但结果不同。我错在哪里了?

可重复示例:

mean(rnorm(100,mean=0,sd=1))
# [1] 0.07872548
sd(rnorm(100,mean=0,sd=1))
# [1] 1.079348

非常感谢您的帮助。


3
你的样本量太小了,样本量越大,均值越接近0,标准差越接近1。 - John Paul
2
rnorm 给出的是具有正态分布、均值为0、标准差为1的随机变量。 "随机" 意味着这些值是从分布中随机取出的,因此可能会有更大比例的值来自右侧而不是左侧(例如)。 但是,您的 meansd 非常接近。 根据LLN理论,数据集越大,它们就会越接近。 - David Arenburg
1
@JohnPaul,你应该是对的。但有趣的是,在“?rnorm”帮助文档中,似乎没有关于这个rnorm均值和标准差在渐近情况下有效性的说明! - Erdogan CEVHER
2
另外,尝试运行 plot(sapply(1L:1e4, function(x) mean(rnorm(x))))plot(sapply(1L:1e4, function(x) sd(rnorm(x)))) - David Arenburg
1
非常密切相关:https://dev59.com/n2Mk5IYBdhLWcg3w2BXJ - Ben Bolker
显示剩余2条评论
3个回答

14

rnorm(100)会给你一个从均值为0,标准差为1的分布中随机抽取的100个值的样本。由于它是随机的,mean(rnorm(100)) 的实际值取决于返回的特定值。不能保证均值为0,但在使用更大的样本量时,统计上应该会收敛于0。例如,尝试 mean(rnorm(10000)); 它可能会比之前更接近0。

编辑:如果您想强制样本具有特定的均值和标准偏差,请查看这个问题:“生成具有固定均值和标准偏差的随机数”。


我曾将rnorm(100,mean=0,sd=1)理解为“平均值为0,标准差为1的100个值”,而不是“从平均值为0,标准差为1的分布中取100个值”。你的解释非常清晰,我明白了。非常感谢。 - Erdogan CEVHER

0

rnorm 会生成随机数。

set.seed(4)
x <- rnorm(5, mean=0, sd=1)
x
# [1]  0.2167549 -0.5424926  0.8911446  0.5959806  1.6356180
mean(c(0.2167549, -0.5424926, 0.8911446, 0.5959806, 1.6356180))
# [1] 0.5594011

我得到了它的平均值为0.5594011。 - John Paul
谢谢 @JohnPaul,我忘记在 mean 中加上 c 了。 - JasonAizkalns
平均值(mean)函数如下:mean(0.2167549, -0.5424926, 0.8911446, 0.5959806, 1.6356180) # 0.2167549。我不太明白mean(c(...))mean()之间的差别,它们为什么不相等呢?难道我们不是在两种情况下都取5个数字的平均值吗? - Erdogan CEVHER

0

这是由于噪音引起的。我建议尝试使用更大的数据集来接近目标,或更改种子以查看不同的结果。


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