Mając dany zestaw \(N\) wartości \(x_1 \ldots x_N\) z dowolnego rozkładu, możemy zastosować metodę bootstrap w celu znalezienia przedziału ufności dla wartości oczekiwanej. 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ą.
W tym celu wielokrotnie powtarzamy następujące kroki:
import numpy
import scipy.stats
# poziom istotności
alpha = 0.01
# dane wejściowe
N = 5
X = numpy.array([1.2, 2.3, 3.1, 1.7, 2.5])
ile_powtorzen = 10000
# --- WERSJA 1 ---
srednie = numpy.zeros(ile_powtorzen)
for k in xrange(ile_powtorzen) :
Y = numpy.zeros(N)
for j in xrange(N) :
Y[j] = X[numpy.random.randint(N)]
srednie[k] = numpy.mean(Y)
# --- WERSJA 2 ---
srednie = numpy.zeros(ile_powtorzen)
for k in xrange(ile_powtorzen) :
Y = X[numpy.random.randint(N, size=N)]
srednie[k] = numpy.mean(Y)
# --- WERSJA 3 ---
srednie = [ numpy.mean(X[numpy.random.randint(N, size=N)]) for k in xrange(ile_powtorzen) ]
Wynikiem powyższego etapu powinna być lista średnich z poszczególnych „syntetycznych” prób (zestawów danych). Z tej listy możemy obliczyć kwantyle rzędu \(\frac{\alpha}{2}\) i \((1-\frac{\alpha}{2})\); są one już krańcami szukanego przedziału ufności.
# znajdujemy przedział ufności,
# pamiętajmy że funkcja scoreatpercentile przyjmuje wartości w procentach
xL = scipy.stats.scoreatpercentile(srednie, 100.0 * alpha/2)
xP = scipy.stats.scoreatpercentile(srednie, 100.0 * (1-alpha/2))
print [xL, xP]
autor: Piotr Różański, ostatnia modyfikacja: 10.04.2016