我想生成一个平均值 = 0、sd = 1 和大小 n = 100 的样本,其分布尽可能正常。单独使用 rnorm 会返回很多可变性。
我发现的唯一方法是平均多个 rnorms。
rowMeans(replicate(10000, sort(rnorm(100, 0, 1))))
这会返回一个相当令人满意的结果,但我不确定这是最有效的方法。
编辑:
我不希望均值和 sd 严格等于 0 和 1,而是让分布“看起来”像正态分布(在绘制密度曲线时)。
似乎 qnorm 方法比“平均”方法效果更差:
# qnorm method
x <- qnorm(seq(.00001, .99999, length.out = 100), mean=0, sd=1)
plot(density(x))
# average method
x <- rowMeans(replicate(10000, sort(rnorm(100, mean=0, sd=1))))
plot(density(x))
我会对确定性解决方案以更有效的方式返回接近平均方法的结果感到满意。
编辑 2:可能的解决方案
根据答案,以下似乎可行,相对于 n 调整边界:
x <- qnorm(seq(1/n, 1-1/n, length.out = n), mean=0, sd=1)
下面是不同 n 值的 qnorm 和 average 方法的比较:
par(mfrow=c(6,2))
for(n in c(10, 20, 100, 500, 1000, 9876)){
x <- qnorm(seq(1/n, 1-1/n, length.out = n), mean=0, sd=1)
plot(density(x), col="blue", lwd=2)
x <- rowMeans(replicate(10000, sort(rnorm(n, mean=0, sd=1))))
plot(density(x), col="red", lwd=2)
}