计算标准偏差

Gii*_*nna 4 python statistics numpy

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

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

得到的标准偏差:0.289

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

得到的标准偏差:0.287

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

提前致谢!

ask*_*han 8

分布的标准偏差不取决于样本大小.在一个均匀分布的标准偏差(b - a)/sqrt(12)在那里ab是你的分布范围.在你的情况,a = 0并且b = 1,所以你应该期待std = 1/sqrt(12) = 0.288675任何大小的样品.

也许您正在寻找的是标准误差,std/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
Run Code Online (Sandbox Code Playgroud)