Zeigen, Konfidenzintervalle und Grenzen in der Vorhersage scatter-plot
Ich habe zwei arrays von Daten, wie Höhe und Gewicht:
import numpy as np, matplotlib.pyplot as plt
heights = np.array([50,52,53,54,58,60,62,64,66,67,68,70,72,74,76,55,50,45,65])
weights = np.array([25,50,55,75,80,85,50,65,85,55,45,45,50,75,95,65,50,40,45])
plt.plot(heights,weights,'bo')
plt.show()
Ich gerne produzieren möchte, der plot ähnlich dieser:
http://www.sas.com/en_us/software/analytics/stat.html#m=screenshot6
Irgendwelche Ideen, sehr geschätzt wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was ich zusammen gestellt habe. Ich habe versucht, genau zu emulieren deinem screenshot.
Gegeben
Einige detaillierte helper-Funktionen zum Plotten von Konfidenzintervallen.
Code
Ausgabe
Mit
plot_ci_manual()
:Mit
plot_ci_bootstrap()
:Hoffe, das hilft. Cheers.
Details
Ich glaube, dass da die Legende ist außerhalb der Abbildung, es nicht zeigen, bis in matplotblib popup-Fenster. Es funktioniert gut in Jupyter mit
%maplotlib inline
.Den primären Konfidenzintervall code (
plot_ci_manual()
) angepasst ist, von einem anderen Quelle produziert einen plot ähnlich wie der OP. Sie können wählen Sie eine fortgeschrittene Technik namens Rest-bootstrapping durch uncommenting die zweite optionplot_ci_bootstrap()
.Updates
stats.t.ppf()
akzeptiert der unteren tail-Wahrscheinlichkeit. Nach der folgenden Ressourcent = sp.stats.t.ppf(0.95, n - m)
wurde korrigiert, umt = sp.stats.t.ppf(0.975, n - m)
zum Ausdruck, dass eine zweiseitige 95% t-Statistik (oder der einseitigen 97.5% t-Statistik).dof=17
y2
wurde aktualisiert und reagieren flexibel mit einem bestimmten Modell (@regeneration).equation
- Funktion wurde Hinzugefügt, um wickeln Sie die Modell-Funktion. Nicht-lineare Regressionen sind möglich aber nicht nachgewiesen. Ergänzen Sie geeignete Variablen benötigt (danke @PJW).Siehe Auch
statsmodels
Bibliothek.uncertainties
Bibliothek (installieren mit Vorsicht in einer separaten Umgebung).p, cov = np.polyfit(x,y,2,cov=True)
.scipy.stats.linregress
bietet grundlegende statistische Informationen. Um mehr zu sehen umfangreiche Statistiken, versuchen Ordinary Least Squares (OLS) regression mitstatsmodels
library. Es gibt auchuncertainties
einige behaupten, die Arbeit, aber ich habe festgestellt, dass es in Konflikt mit meiner Umgebung; mit Vorsicht zu verwenden.Können Sie seaborn-plotting-Bibliothek zum erstellen von plots, wie Sie wollen.
Einem update zu pylang die große Antwort in Reaktion auf PJW: wenn Sie versuchen zu passen, der größer ist als Polynom Erster Ordnung, die Berechnung von y2 muss aktualisiert werden von:
zu
Den original-code funktioniert nur für ein Polynom Erster Ordnung (das ist einfach eine Linie).
In Reaktion auf tryptofan Kommentar, ja, um eine 95% two-tailed t-Statistik sollte der code aktualisiert werden
zu
Dank pylang für die Antwort. Ich hatte Probleme mit der Berechnung von y2, wenn die Regressionsgerade ist fallend, das Vertrauen iterval nicht. Mit der vorliegenden Berechnung von y2, die Vorhersage y_model immer Spannweite von min zu max. Daher änderte ich die Berechnung von y2 zu: