New submission from Steven D'Aprano: If you know the population mean mu, you should calculate the sample variance by passing mu as an explicit argument to statistics.pvariance. Unfortunately, it doesn't work as designed:
py> data = [1, 2, 2, 2, 3, 4] # sample from a population with mu=2.5 py> statistics.pvariance(data) # uses the sample mean 2.3333... 0.8888888888888888 py> statistics.pvariance(data, 2.5) # using known population mean 0.8888888888888888 The second calculation ought to be 0.91666... not 0.88888... The problem lies with the _ss private function which calculates the sum of square deviations. Unfortunately it is too clever: it includes an error adjustment term ss -= _sum((x-c) for x in data)**2/len(data) which mathematically is expected to be zero when c is calculated as the mean of data, but due to rounding may not be quite zero. But when c is given explicitly, as happens if the caller provides an explicit mu argument to pvariance, then the error adjustment has the effect of neutralizing the explicit mu. The obvious fix is to just skip the adjustment in _ss when c is explicitly given, but I'm not sure if that's the best approach. ---------- assignee: stevenjd components: Library (Lib) messages: 215802 nosy: stevenjd priority: normal severity: normal stage: needs patch status: open title: statistics.pvariance with known mean does not work as expected type: behavior versions: Python 3.4, Python 3.5 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21184> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com