Jeżeli dysponujemy \(N\) wartościami \(x_1, x_2 \ldots x_N\) zmiennej o rozkładzie normalnym, znanej wartości oczekiwanej \(\mu\) i wariancji (nieznanej) \(\sigma^2\), wtedy wartość $$\frac{N s^2}{\sigma^2} = \frac{1}{\sigma^2} \sum_{i=1}^{N} (x_i - \mu)$$ (gdzie \(s^2\) jest estymatorem wariancji przy znanej wartości oczekiwanej) podlega rozkładowi \(\chi^2\) o \(N\) stopniach swobody.
Jako miarę pewności oszacowania, ustalamy poziom istotności \(\alpha\) jako maksymalne prawdopodobieństwo, że nasz przedział nie obejmie wartości oczekiwanej. Zazwyczaj przyjmujemy w tym celu wartość \(\alpha = 0.05\) lub mniejszą.
Przedział ufności dla wariancji możemy obliczyć jako $$\left[ \frac{N s^2}{\chi^2_{(1-\alpha/2)}} ; \frac{N s^2}{\chi^2_{\alpha/2}} \right],$$ gdzie \(\chi^2_p\) jest kwantylem rozkładu „chi kwadrat” o \(N\) stopniach swobody, który obliczymy z odwrotnej dystrybuanty. Warto zwrócić uwagę, że rozkład nie jest symetryczny, więc w przeciwieństwie do rozkładu normalnego musimy obliczyć osobno oba kwantyle.
import scipy.stats
import numpy
# poziom istotności
alpha = 0.01
# dane wejściowe
N = 5
X = numpy.array([1.2, 2.3, 3.1, 1.7, 2.5])
mu = 2.222 # znana wartość oczekiwana
# estymujemy wariancję próby
s2 = numpy.sum( (X - mu)**2 ) / N
# obliczamy kwantyle z odwrotnej dystrybuanty rozkładu chi-kwadrat
chiL = scipy.stats.chi2(N).ppf(alpha/2)
chiP = scipy.stats.chi2(N).ppf(1-alpha/2)
# znajdujemy przedział ufności
print [ s2 * N / chiP, s2 * N / chiL ]
# warto pamiętać, że kwantyl „mniejszy” wyznacza prawy koniec przedziału
# (bo jest w mianowniku) i vice versa
autor: Piotr Różański, ostatnia modyfikacja: 10.04.2016