68% przedział ufności dla jeden zwrócić z rozkładu normalnego o średnią i odchyleniem standardowym sigma
stats.norm.interval(0.68, loc=mu, scale=sigma)
68% przedział ufności dla średnią N zwraca z rozkład normalny ze średnią i odchyleniem std Sigma
stats.norm.interval(0.68, loc=mu, scale=sigma/sqrt(N))
Intuitiv Eee, te formuły mają sens, ponieważ jeśli trzymasz słoik z galaretowatymi ziarnami i poprosisz dużą liczbę ludzi, aby odgadł liczbę galaretek, każdy z nich może być odstąpiony o wiele - to samo odchylenie standardowe sigma
- ale średnia z domysłów wykona niezwykle dobrą robotę szacowania faktycznej liczby, co znajduje odzwierciedlenie w odchyleniu standardowym średniego obkurczania o współczynnik 1/sqrt(N)
.
Jeśli pojedyncze losowanie ma wariancję sigma**2
, następnie przez Bienaymé formula suma N
nieskorelowane rysuje ma wariancję N*sigma**2
.
Średnia jest równa sumie podzielonej przez N. Przy pomnożeniu zmiennej losowej (takiej jak suma) przez stałą, wariancja jest mnożona przez stałą kwadratową. To jest
Var(cX) = c**2 * Var(X)
Więc wariancja średniej równa
(variance of the sum)/N**2 = N * sigma**2/N**2 = sigma**2/N
a więc odchylenie standardowe od średniej (który to pierwiastek kwadratowy z wariancji) równa
sigma/sqrt(N).
ten jest źródłem sqrt(N)
w mianowniku.
Oto przykład kodu, na podstawie Toma kodu, który demonstruje roszczeń powyżej:
import numpy as np
from scipy import stats
N = 10000
a = np.random.normal(0, 1, N)
mean, sigma = a.mean(), a.std(ddof=1)
conf_int_a = stats.norm.interval(0.68, loc=mean, scale=sigma)
print('{:0.2%} of the single draws are in conf_int_a'
.format(((a >= conf_int_a[0]) & (a < conf_int_a[1])).sum()/float(N)))
M = 1000
b = np.random.normal(0, 1, (N, M)).mean(axis=1)
conf_int_b = stats.norm.interval(0.68, loc=0, scale=1/np.sqrt(M))
print('{:0.2%} of the means are in conf_int_b'
.format(((b >= conf_int_b[0]) & (b < conf_int_b[1])).sum()/float(N)))
wydruków
68.03% of the single draws are in conf_int_a
67.78% of the means are in conf_int_b
Pamiętaj, że jeśli zdefiniujesz conf_int_b
z szacowaną mean
i sigma
na podstawie próbki a
, średnia nie może spaść w conf_int_b
z wybraną częstotliwością .
Jeśli wziąć próbkę z dystrybucją i obliczyć próbkę średnią i odchylenie std,
mean, sigma = a.mean(), a.std()
uważać, aby pamiętać, że nie ma gwarancji, że będą one równa populacja średnia i odchylenie standardowe oraz że jesteśmy przy założeniu, że populacja jest normalnie dystrybuowana - to nie są automatyczne dodatki!
Jeśli wziąć próbkę i chcą szacunków populacja średnia i odchylenie standardowe , należy użyć
mean, sigma = a.mean(), a.std(ddof=1)
ponieważ ta wartość sigma jest unbiased estimator dla odchylenia standardowego populacji.
To jest bardziej pytanie statystyczne niż pytanie dotyczące programowania. – BrenBarn
@BrenBarn W jakiś sposób się zgadzam, ale jeśli opublikuję to na stronie stats.stackexchange.com, obawiam się, że wyślą mnie tutaj z powrotem, ponieważ używam wszystkich predefiniowanych funkcji. Możesz głosować, aby to pytanie zamknąć, jeśli będzie wystarczająco dużo głosów, przeniesię to. – Gabriel
... ment "nieco", a nie "jakoś". – Gabriel