计算标准偏差

时间:2014-05-02 14:58:16

标签: python numpy statistics

我需要做一个算法来通过蒙特卡罗方法计算积分,为了模拟的目的,我需要计算在我的程序中生成的样本的标准偏差。 我的问题是,当我增加样本元素的数量时,我的标准偏差不会像我预期的那样衰减。 首先我认为我的函数是错误的,但是使用numpy预定义函数来计算标准偏差,我看到值是相同的并且没有像我预期的那样减少。所以我想知道我的样本出了什么问题,所以我做了以下模拟来测试标准偏差是否正在减少:

list = [random.uniform(0,1) for i in range(100)]
print np.std(list)

获得的标准偏差:0.289

list = [random.uniform(0,1) for i in range(1000)]
print np.std(list)

获得的标准偏差:0.287

当我的n增加时,这种减少不应该吗?因为我需要在模拟中使用它作为停止标准,并且除了更大的样本之外,我对此进行了减少。我的数学概念出了什么问题?

提前致谢!

2 个答案:

答案 0 :(得分:8)

分布的标准偏差不取决于样本大小。 standard deviation for a uniform distribution(b - a)/sqrt(12),其中ab是您发布的限制。在您的情况下,a = 0b = 1,您应该期望std = 1/sqrt(12) = 0.288675适用于任何尺寸的样本。

您正在寻找的是standard errorstd/sqrt(N)In [9]: sample = np.random.uniform(0, 1, 100) In [10]: sample.std()/np.sqrt(sample.size) Out[10]: 0.029738347511343809 In [11]: sample = np.random.uniform(0, 1, 1000) In [12]: sample.std()/np.sqrt(sample.size) Out[12]: 0.0091589707054713591 给出,随着样本量的增加而减少:

{{1}}

答案 1 :(得分:4)

不,你的数学概念没有缺陷,标准偏差对于较大的n保持不变。 AHuman正确指出的是你应该避免为变量名使用保留关键字:list是python reserved关键字。请改用my_list或其他变量名称。

[edit]因为计算的均值是随机的,所以误差范围不起作用;你必须计算置信区间,在这种情况下是一个概率误差界限。您可以在此处查看更多信息:http://planetmath.org/montecarlosimulation