Wnioskowanie Statystyczne

Jak poprawnie obliczyć wariancję i odchylenie standardowe?

Estymator dla znanej wartości oczekiwanej

$$s^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2$$

import numpy
mu = 2.0  # znana wartość oczekiwana
X = numpy.array([1.2, 2.7, 1.9, 1.5, 2.3, 2.2, 3.0, 1.0])

# wariancja
s2 = numpy.sum( (X - mu)**2 ) / len(X)
# odchylenie standardowe jako pierwiastek z wariancji
s = numpy.sqrt(s2)

Ten estymator jest nieobciążony i zgodny, ale użyteczny tylko wówczas, gdy znamy prawdziwą wartość oczekiwaną \(\mu\) populacji. W przeciwnym wypadku, mamy do dyspozycji dwa estymatory i warto uważać aby ich nie pomylić.

Estymator nieobciążony wariancji

$$s_1^2 = \frac{1}{N-1} \sum_{i=1}^{N} (x_i - \bar{x})^2$$

import numpy
X = numpy.array([1.2, 2.7, 1.9, 1.5, 2.3, 2.2, 3.0, 1.0])

# wariancja
s2 = numpy.var(X, ddof=1)
# odchylenie standardowe czyli pierwiastek z wariancji
s = numpy.std(X, ddof=1)

Z tego estymatora korzystamy wtedy, gdy nie znamy wariancji. Warto pamiętać, że o ile \(s_1^2\) jest estymatorem nieobciążonym wariancji, to \(s_1\) jako estymator odchylenia standardowego jest już obciążony.

Estymator obciążony wariancji

$$s_0^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \bar{x})^2$$

import numpy
X = numpy.array([1.2, 2.7, 1.9, 1.5, 2.3, 2.2, 3.0, 1.0])

# wariancja
s2 = numpy.var(X)
# odchylenie standardowe czyli pierwiastek z wariancji
s = numpy.std(X)

Z tego estymatora raczej nie korzystamy, ale warto go odróżniać, ponieważ niekiedy wzory zapisane są z jego pomocą. Jest to też estymator największej wiarygodności.

autor: Piotr Różański, ostatnia modyfikacja: 10.04.2016