【问题标题】:Why does statistics.variance use 'unbiased' sample variance by default?为什么 statistics.variance 默认使用“无偏”样本方差?
【发布时间】:2019-04-08 09:48:38
【问题描述】:

我最近开始使用 python 的统计模块。

我注意到默认情况下,variance() 方法返回“无偏”方差或样本方差:

import statistics as st
from random import randint

def myVariance(data):
    # finds the variance of a given set of numbers
    xbar = st.mean(data)
    return sum([(x - xbar)**2 for x in data])/len(data)

def myUnbiasedVariance(data):
    # finds the 'unbiased' variance of a given set of numbers (divides by N-1) 
    xbar = st.mean(data)
    return sum([(x - xbar)**2 for x in data])/(len(data)-1)

population = [randint(0, 1000) for i in range(0,100)]

print myVariance(population)

print myUnbiasedVariance(population)

print st.variance(population)

输出:

81295.8011
82116.9708081
82116.9708081

这对我来说似乎很奇怪。我想很多时候人们都在处理样本,所以他们想要样本方差,但我希望默认函数能够计算总体方差。有谁知道这是为什么?

【问题讨论】:

  • 最不意外的原则,我猜

标签: python statistics variance


【解决方案1】:

我认为,几乎所有时候,人们都会根据他们使用样本的数据来估计方差。并且,根据无偏估计的定义,方差的无偏估计的期望值等于总体方差。

在您的代码中,您使用 random.randint(0, 1000),它从具有 1001 个可能值和方差 1000*1002/12 = 83500 的离散均匀分布中采样(例如,参见 MathWorld)。这里的代码显示,平均而言,当使用样本作为输入时,statistics.variance()statistics.pvariance() 更接近总体方差:

import statistics as st, random, numpy as np

var, pvar = [], []
for i in range(10000):
  smpl = [random.randint(0, 1000) for j in range(10)]
  var.append(st.variance(smpl))
  pvar.append(st.pvariance(smpl))

print "mean variance(sample):  %.1f" %np.mean(var)
print "mean pvariance(sample): %.1f" %np.mean(pvar)
print "pvariance(population):  %.1f" %st.pvariance(range(1001))

这里的示例输出:

mean variance(sample):  83626.0
mean pvariance(sample): 75263.4
pvariance(population):  83500.0

【讨论】:

    【解决方案2】:

    这是另一个很棒的帖子。我想知道完全相同的事情,这个问题的答案真的让我明白了。使用 np.var 您可以向其添加“ddof = 1”的参数以返回无偏估计器。看看吧:

    What is the difference between numpy var() and statistics variance() in python?

    print(np.var([1,2,3,4],ddof=1))
    1.66666666667
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2019-05-03
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多