拥有数据集并从中计算统计数据很容易。反过来怎么样?
假设我知道某个变量具有平均X,标准偏差Y并假设它具有正态(高斯)分布。生成适合分布的“随机”数据集(任意大小)的最佳方法是什么?
编辑:这种发展来自this question;我可以根据这种方法制作一些东西,但我想知道是否有更有效的方法来做到这一点。
答案 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)
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)
我找到了一个用几种编程语言解决这个问题的页面:
答案 5 :(得分:1)
你可以把它变成一种蒙特卡罗模拟。从广泛的随机“可接受范围”开始,并生成一些真正的随机值。检查统计信息,查看平均值和差异是否已关闭。调整随机值的“可接受范围”并添加更多值。重复,直到达到您的要求和人口样本量。
就在我的脑海中,让我知道你的想法。 : - )
答案 6 :(得分:1)
统计工具箱中的MATLAB函数normrnd
可以生成具有给定mu和sigma的正态分布随机数。
答案 7 :(得分:0)
生成具有正态分布的数据集很容易(参见http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform) 请记住,生成的样本不会有精确的N(0,1)分布!你需要对它进行标准化 - 减去平均值然后除以标准偏差。然后,您可以使用给定参数将此样本转换为正态分布:乘以标准差,然后添加均值。