首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算标准差

计算标准差
EN

Stack Overflow用户
提问于 2014-05-02 14:58:15
回答 2查看 2.4K关注 0票数 4

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

代码语言:javascript
复制
list = [random.uniform(0,1) for i in range(100)]
print np.std(list)

标准偏差: 0.289

代码语言:javascript
复制
list = [random.uniform(0,1) for i in range(1000)]
print np.std(list)

标准偏差: 0.287

这不是应该减少,而我的n增加吗?因为我需要在我的模拟中使用它作为停止准则,并且我例外地用一个更大的样本来减少这个值。我的数学概念有什么问题?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-02 15:16:01

分布的标准差不取决于样本的大小。standard deviation for a uniform distribution(b - a)/sqrt(12),其中ab是分发的限制。在您的例子中,a = 0b = 1,所以您应该期待std = 1/sqrt(12) = 0.288675的任何大小的样本。

也许您要寻找的是standard error,它是由std/sqrt(N)提供的,并且会随着样本大小的增加而减少:

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2014-05-02 15:06:09

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

编辑,因为计算出的平均值是随机的,误差界将不起作用;您必须计算置信区间,在这种情况下,置信区间是概率错误界。您可以在这里查找更多信息:http://planetmath.org/montecarlosimulation

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23431138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档