Mam przykładowe dane, dla których chciałbym obliczyć przedział ufności, zakładając rozkład normalny.
Znalazłem i zainstalowałem pakiety numpy i scipy i otrzymałem numpy, aby zwracać średnią i odchylenie standardowe (numpy.mean (dane) z danymi będącymi listą). Wszelkie porady dotyczące uzyskania przykładowego przedziału ufności byłyby bardzo mile widziane.
python
numpy
statistics
confidence-interval
Bmayer0122
źródło
źródło
Odpowiedzi:
możesz obliczyć w ten sposób.
źródło
scipy
niekoniecznie oznacza automatyczny import wszystkich podpakietów. Lepiej jestscipy.stats
jawnie zaimportować pakiet podrzędny .sp.stats.t._ppf
. Nie czuję się z tym dobrze bez dalszych wyjaśnień. Lepiej używaćsp.stats.t.ppf
bezpośrednio, chyba że jesteś pewien, że wiesz, co robisz. Przy szybkiej inspekcji źródła można pominąć sporą ilość kodu_ppf
. Prawdopodobnie nieszkodliwa, ale prawdopodobnie niebezpieczna próba optymalizacji?*ss.t._ppf((1+conf)/2.,n-1)
do wbudowanej.sem
metody ramki danych pandy , więc nie musisz się martwićapply
Oto skrócona wersja kodu Shasana, obliczająca 95% przedział ufności średniej z tablicy
a
:Ale korzystanie z StatsModels
tconfint_mean
jest prawdopodobnie jeszcze przyjemniejsze:Podstawowym założeniem dla obu jest to, że próbka (tablica
a
) została pobrana niezależnie od rozkładu normalnego z nieznanym odchyleniem standardowym (patrz MathWorld lub Wikipedia ).W przypadku dużej próby o rozmiarze n średnia z próby ma rozkład normalny i można obliczyć jej przedział ufności za pomocą
st.norm.interval()
(jak zasugerowano w komentarzu Jaime'a). Ale powyższe rozwiązania są poprawne również dla małego n, gdziest.norm.interval()
daje przedziały ufności, które są zbyt wąskie (tj. „Fałszywe zaufanie”). Zobacz moją odpowiedź na podobne pytanie, aby uzyskać więcej informacji (i jeden z komentarzy Russa tutaj).Oto przykład, w którym prawidłowe opcje dają (zasadniczo) identyczne przedziały ufności:
I na koniec niepoprawny wynik przy użyciu
st.norm.interval()
:źródło
st.t.interval(0.05)
aby uzyskać 95% przedział ufności.st.t.interval(0.95)
jest prawidłowe dla 95% przedziału ufności, patrz dokumenty doscipy.stats.t
. Jednak nazwanie argumentu przez SciPyalpha
wydaje się mniej niż idealne.Zacznij od wyszukania wartości z dla żądanego przedziału ufności w tabeli przeglądowej . Przedział ufności wynosi zatem
mean +/- z*sigma
, gdziesigma
jest szacowanym odchyleniem standardowym średniej z próby, podanym przezsigma = s / sqrt(n)
, gdzies
jest odchyleniem standardowym obliczonym na podstawie danych próbki in
jest wielkością próby.źródło
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
sigma
.sigma
w mojej odpowiedzi powinno być szacowane odchylenie standardowe średniej próby, a nie szacowane odchylenie standardowe rozkładu. Zaktualizowałem odpowiedź, aby to wyjaśnić. Dzięki za zwrócenie uwagi.Począwszy
Python 3.8
od biblioteki standardowejNormalDist
obiekt jest częściąstatistics
modułu:To:
Tworzy
NormalDist
obiekt z próbki danych (NormalDist.from_samples(data)
co daje nam dostęp do średniej próbki i odchylenia standardowego za pośrednictwemNormalDist.mean
iNormalDist.stdev
.Oblicz
Z-score
bazując na standardowym rozkładzie normalnym (reprezentowanym przezNormalDist()
) dla danego poziomu ufności, używając odwrotności funkcji rozkładu skumulowanego (inv_cdf
).Tworzy przedział ufności na podstawie odchylenia standardowego próbki i średniej.
Zakłada się, że wielkość próby jest wystarczająco duża (powiedzmy ponad ~ 100 punktów), aby do obliczenia
z
wartości użyć standardowego rozkładu normalnego zamiast rozkładu t studenta .źródło