Ich habe Beispieldaten, für die ich unter der Annahme einer Normalverteilung ein Konfidenzintervall berechnen möchte.
Ich habe die numpy- und scipy-Pakete gefunden und installiert und habe numpy erhalten, um einen Mittelwert und eine Standardabweichung zurückzugeben (numpy.mean (Daten), wobei Daten eine Liste sind). Jeder Rat zum Erhalten eines Stichproben-Konfidenzintervalls wäre sehr dankbar.
python
numpy
statistics
confidence-interval
Bmayer0122
quelle
quelle
Antworten:
Sie können so rechnen.
quelle
scipy
nicht unbedingt alle Unterpakete automatisch importiert. Es ist besser, das Unterpaketscipy.stats
explizit zu importieren .sp.stats.t._ppf
. Ich fühle mich dort ohne weitere Erklärung nicht so wohl. Bessersp.stats.t.ppf
direkt verwenden, es sei denn, Sie sind sicher, dass Sie wissen, was Sie tun. Bei einer schnellen Überprüfung der Quelle wird eine ganze Menge Code übersprungen_ppf
. Möglicherweise harmlos, aber möglicherweise auch ein unsicherer Optimierungsversuch?*ss.t._ppf((1+conf)/2.,n-1)
die integrierte Pandas-Datenrahmenmethode hinzufügen können.sem
, damit Sie sich keine Sorgen machen müssenapply
Hier eine verkürzte Version von Shasans Code, die das 95% -Konfidenzintervall des Mittelwerts des Arrays berechnet
a
:Aber die Verwendung von StatsModels
tconfint_mean
ist wohl noch schöner:Die zugrunde liegenden Annahmen für beide sind, dass die Stichprobe (Array
a
) unabhängig von einer Normalverteilung mit unbekannter Standardabweichung gezogen wurde (siehe MathWorld oder Wikipedia ).Für eine große Stichprobengröße n ist der Stichprobenmittelwert normal verteilt, und man kann sein Konfidenzintervall mit berechnen
st.norm.interval()
(wie in Jaimes Kommentar vorgeschlagen). Die obigen Lösungen sind jedoch auch für kleine n korrekt, bei denenst.norm.interval()
zu enge Konfidenzintervalle angegeben werden (dh "falsches Vertrauen"). Siehe meine Antwort auf eine ähnliche Frage für weitere Details (und einen von Russ 'Kommentaren hier).Hier ein Beispiel, bei dem die richtigen Optionen (im Wesentlichen) identische Konfidenzintervalle ergeben:
Und schließlich das falsche Ergebnis mit
st.norm.interval()
:quelle
st.t.interval(0.05)
, um das 95% -Konfidenzintervall zu erhalten.st.t.interval(0.95)
ist für das 95% -Konfidenzintervall korrekt, siehe Dokumentation fürscipy.stats.t
. Die Benennung des Arguments durch SciPyalpha
scheint jedoch nicht ideal.Beginnen Sie mit dem Nachschlagen des Z-Werts für Ihr gewünschtes Konfidenzintervall aus einer Nachschlagetabelle . Das Konfidenzintervall ist dann
mean +/- z*sigma
, wosigma
ist die geschätzte Standardabweichung Ihres Stichprobenmittelwerts, gegeben durchsigma = s / sqrt(n)
, wos
ist die aus Ihren Stichprobendaten berechnete Standardabweichung undn
ist Ihre Stichprobengröße.quelle
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
sigma
.sigma
In meiner Antwort sollte die geschätzte Standardabweichung des Stichprobenmittelwerts sein, nicht die geschätzte Standardabweichung der Verteilung. Ich habe die Antwort aktualisiert, um dies zu verdeutlichen. Vielen Dank für den Hinweis.Ab
Python 3.8
dem Start stellt die Standardbibliothek dasNormalDist
Objekt als Teil desstatistics
Moduls bereit :Dies:
Erstellt ein
NormalDist
Objekt aus der Datenstichprobe (NormalDist.from_samples(data)
wodurch wir überNormalDist.mean
und auf den Mittelwert und die Standardabweichung der Stichprobe zugreifen könnenNormalDist.stdev
.Berechnen Sie die
Z-score
basierend auf der Standardnormalverteilung (dargestellt durchNormalDist()
) für das gegebene Vertrauen unter Verwendung der Umkehrung der kumulativen Verteilungsfunktion (inv_cdf
).Erzeugt das Konfidenzintervall basierend auf der Standardabweichung und dem Mittelwert der Stichprobe.
Dies setzt voraus, dass die Stichprobengröße groß genug ist (sagen wir mehr als ~ 100 Punkte), um die Standardnormalverteilung anstelle der t-Verteilung des Schülers zur Berechnung des
z
Werts zu verwenden.quelle