“反向”统计:根据均值和标准差生成数据

时间:2010-07-08 21:54:13

标签: language-agnostic statistics

拥有数据集并从中计算统计数据很容易。反过来怎么样?

假设我知道某个变量具有平均X,标准偏差Y并假设它具有正态(高斯)分布。生成适合分布的“随机”数据集(任意大小)的最佳方法是什么?

编辑:这种发展来自this question;我可以根据这种方法制作一些东西,但我想知道是否有更有效的方法来做到这一点。

8 个答案:

答案 0 :(得分:12)

您可以使用Box-Mueller method生成标准正常随机变量。然后将其转换为具有平均μ和标准差sigma,将样本乘以sigma并添加mu。即对于标准法线中的每个z,返回mu + sigma * z。

答案 1 :(得分:8)

使用norminv()函数在Excel中很容易实现。例如:

= norminv(rand(),100,15)

将从正态分布生成一个值,平均值为100,stdev为15(人类智商)。将此公式拖到列中,您可以拥有任意数量的值。

答案 2 :(得分:2)

有几种方法可以生成高斯随机变量。标准方法是前面提到的Box-Meuller。这里有一个稍微快一点的版本:

http://en.wikipedia.org/wiki/Ziggurat_algorithm

以下是有关生成高斯变量的维基百科参考资料

http://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution

答案 3 :(得分:2)

我将使用R和列表here中的第二个算法给出示例。

X<-4; Y<-2 # mean and std
z <- sapply(rep(0,100000), function(x) (sum(runif(12)) - 6) * Y + X)

plot(density(z))
> mean(z)
[1] 4.002347

> sd(z)
[1] 2.005114

> library(fUtilities)

> skewness(z,method ="moment")
[1] -0.003924771
attr(,"method")
[1] "moment"

> kurtosis(z,method ="moment")
[1] 2.882696
attr(,"method")
[1] "moment"

答案 4 :(得分:2)

我找到了一个用几种编程语言解决这个问题的页面:

http://rosettacode.org/wiki/Random_numbers

答案 5 :(得分:1)

你可以把它变成一种蒙特卡罗模拟。从广泛的随机“可接受范围”开始,并生成一些真正的随机值。检查统计信息,查看平均值和差异是否已关闭。调整随机值的“可接受范围”并添加更多值。重复,直到达到您的要求和人口样本量。

就在我的脑海中,让我知道你的想法。 : - )

答案 6 :(得分:1)

统计工具箱中的MATLAB函数normrnd可以生成具有给定mu和sigma的正态分布随机数。

答案 7 :(得分:0)

生成具有正态分布的数据集很容易(参见http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform) 请记住,生成的样本不会有精确的N(0,1)分布!你需要对它进行标准化 - 减去平均值然后除以标准偏差。然后,您可以使用给定参数将此样本转换为正态分布:乘以标准差,然后添加均值。