python achsenskalierung - Berechne ein Konfidenzintervall aus Probendaten




matplotlib example (4)

Beginnen Sie mit der Suche nach dem z-value für Ihr gewünschtes Konfidenzintervall aus einer Nachschlagetabelle . Das Konfidenzintervall ist dann mean +/- z*sigma , wobei sigma die geschätzte Standardabweichung Ihres Stichprobenmittelwerts ist, gegeben durch sigma = s / sqrt(n) , wobei s die aus Ihren Stichprobendaten berechnete Standardabweichung und n ist Ihre Stichprobengröße.

Ich habe Beispieldaten, für die ich ein Konfidenzintervall berechnen möchte, unter der Annahme einer Normalverteilung.

Ich habe die numpy und scipy Pakete gefunden und installiert und bin numpy geworden, um einen Mittelwert und eine Standardabweichung (numpy.mean (Daten) mit Daten, die eine Liste sind) zurückzugeben. Jeder Ratschlag zum Erhalten eines Stichprobenkonfidenzintervalls würde sehr geschätzt werden.


Hier eine verkürzte Version des Shasan-Codes, der das 95% -Konfidenzintervall des Mittelwerts von Array a berechnet:

import numpy as np, scipy.stats as st

st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))

Aber StatsModels ' tconfint_mean ist wohl noch schöner:

import statsmodels.stats.api as sms

sms.DescrStatsW(a).tconfint_mean()

Die zugrunde liegenden Annahmen für beide sind, dass die Probe (Array a ) unabhängig von einer Normalverteilung mit unbekannter Standardabweichung gezeichnet wurde (siehe MathWorld oder Wikipedia ).

Bei einer großen Stichprobengröße n ist der Stichprobenmittelwert normal verteilt, und man kann sein Vertrauensintervall unter Verwendung von st.norm.interval() berechnen (wie in Jaimes Kommentar vorgeschlagen). Aber die obigen Lösungen sind auch für kleine n korrekt, wobei st.norm.interval() Konfidenzintervalle gibt, die zu eng sind (dh "falsche Konfidenz"). Siehe meine answer auf eine ähnliche Frage für weitere Details (und einen von Russ 'Kommentaren hier).

Hier ein Beispiel, in dem die richtigen Optionen (im Wesentlichen) identische Konfidenzintervalle ergeben:

In [9]: a = range(10,14)

In [10]: mean_confidence_interval(a)
Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)

In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Out[11]: (9.4457397432391215, 13.554260256760879)

In [12]: sms.DescrStatsW(a).tconfint_mean()
Out[12]: (9.4457397432391197, 13.55426025676088)

Und schließlich das falsche Ergebnis mit st.norm.interval() :

In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)

import numpy as np
import scipy as sp
import scipy.stats

def mean_confidence_interval(data, confidence=0.95):
    a = 1.0*np.array(data)
    n = len(a)
    m, se = np.mean(a), scipy.stats.sem(a)
    h = se * sp.stats.t._ppf((1+confidence)/2., n-1)
    return m, m-h, m+h

Sie können auf diese Weise berechnen.


Es gibt einen bitshift Trick, den ich verwende, wenn ich von bytes in irgendeine andere Einheit konvertieren möchte. Wenn Sie eine Verschiebung um 10 rechts machen, verschieben Sie sie grundsätzlich um eine Ordnung (mehrfach).

Beispiel: 5GB are 5368709120 bytes

print (5368709120 >> 10)  # 5242880 kilo Bytes (kB)
print (5368709120 >> 20 ) # 5120 Mega Bytes(MB)
print (5368709120 >> 30 ) # 5 Giga Bytes(GB)




python numpy statistics