【发布时间】:2014-12-03 20:35:19
【问题描述】:
我正在尝试对一组 3 个数字进行简单的方差计算:
numpy.var([0.82159889, 0.26007962, 0.09818412])
返回
0.09609366366174843
然而,当你计算方差时,它实际上应该是
0.1441405
看似如此简单的事情,但我还没有找到答案。
【问题讨论】:
标签: python numpy statistics
我正在尝试对一组 3 个数字进行简单的方差计算:
numpy.var([0.82159889, 0.26007962, 0.09818412])
返回
0.09609366366174843
然而,当你计算方差时,它实际上应该是
0.1441405
看似如此简单的事情,但我还没有找到答案。
【问题讨论】:
标签: python numpy statistics
正如documentation 解释的那样:
ddof : int, optional
"Delta Degrees of Freedom": the divisor used in the calculation is
``N - ddof``, where ``N`` represents the number of elements. By
default `ddof` is zero.
所以你有:
>>> numpy.var([0.82159889, 0.26007962, 0.09818412], ddof=0)
0.09609366366174843
>>> numpy.var([0.82159889, 0.26007962, 0.09818412], ddof=1)
0.14414049549262264
这两种约定都很常见,因此您始终需要检查您正在使用的任何语言的包正在使用哪个约定。
【讨论】:
np.var 默认计算总体方差。
平方误差之和可以如下计算:
>>> vals = [0.82159889, 0.26007962, 0.09818412]
>>> mean = sum(vals)/3.0
>>> mean
0.3932875433333333
>>> sum((mean-val)**2 for val in vals)
0.2882809909852453
>>> sse = sum((mean-val)**2 for val in vals)
这是总体方差:
>>> sse/3
0.09609366366174843
>>> np.var(vals)
0.09609366366174843
这是样本方差:
>>> sse/(3-1)
0.14414049549262264
>>> np.var(vals, ddof=1)
0.14414049549262264
【讨论】: