Wie lineare regression, wobei Fehlerbalken berücksichtigt?
Ich bin in der computer-simulation für ein physisches system von endlicher Größe, und nach dieser mache ich extrapolation auf die unendlich (Thermodynamischen limit). Eine Theorie sagt, dass, sollten die Daten der Waage Linear mit der Systemgröße, so Tue ich die lineare regression.
Die Daten, die ich habe, ist laut, aber für jeden Datenpunkt kann ich abschätzen Fehlerbalken. So, zum Beispiel die Punkte sieht wie folgt aus:
x_list = [0.3333333333333333, 0.2886751345948129, 0.25, 0.23570226039551587, 0.22360679774997896, 0.20412414523193154, 0.2, 0.16666666666666666]
y_list = [0.13250359351851854, 0.12098339583333334, 0.12398501145833334, 0.09152715, 0.11167239583333334, 0.10876248333333333, 0.09814170444444444, 0.08560799305555555]
y_err = [0.003306749165349316, 0.003818446389148108, 0.0056036878203831785, 0.0036635292592592595, 0.0037034897788415424, 0.007576672222222223, 0.002981084130692832, 0.0034913019065973983]
Sagen wir, ich bin versucht, dies in Python.
-
Erste Weg, den ich kenne, ist:
m, c, r_value, p_value, std_err = scipy.stats.linregress(x_list, y_list)
Ich verstehen, das gibt mir Fehlerbalken mit dem Ergebnis, aber diese berücksichtigen nicht die Fehlerbalken der ersten Daten.
-
Zweite Möglichkeit, die ich kenne, ist:
m, c = numpy.polynomial.polynomial.polyfit(x_list, y_list, 1, w = [1.0 / ty for ty in y_err], full=False)
Hier verwenden wir die inverse der errorbar für jeden Punkt ein Gewicht, das in der least square-approximation. Also, wenn ein Punkt nicht wirklich zuverlässig und es wird keinen Einfluss auf das Ergebnis einer Partie, die zumutbar ist.
Aber ich kann nicht herausfinden, wie man etwas, das verbindet diese beiden Methoden.
Was ich wirklich will, ist, was zweiten - Methode, Bedeutung, nutzen, regression, wenn jeder Punkt wirkt sich auf das Ergebnis mit unterschiedlichen Gewicht. Aber zur gleichen Zeit ich will wissen wie genau mein Ergebnis ist, das heißt, ich will wissen, was sind die Fehlerbalken der resultierenden Koeffizienten.
Wie kann ich dies tun?
- Bin ich Missverständnis Sie, oder werden Sie versuchen, zu verwenden die
y_err
Serie als Gewicht-matrix?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ganz sicher, ob das ist, was du meinst, aber...mit pandas, statsmodels, und patsy, die wir vergleichen können einem gewöhnlichen least-squares-fit und einer gewichteten least-squares fit verwendet die inverse der Lärm, den Sie als Gewicht-matrix (statsmodels wird sich über die Stichprobengrößen < 20, by the way).
WLS Residuen:
Die mittlere quadratische Abweichung der Residuen für die gewichteten fit (
wls_fit.mse_resid
oderwls_fit.scale
) ist 0.22964802498892287, und der r-Quadrat-Wert der fit ist 0.754.Erhalten Sie eine fülle von Daten aus den fits, die durch den Aufruf Ihrer
summary()
Methode und/oder zu tundir(wls_fit)
, wenn Sie eine Liste mit allen verfügbaren Eigenschaften und Methoden.Schrieb ich eine prägnante Funktion zum ausführen der gewichteten linearen regression einer Datengruppe, die eine direkte übersetzung von GSL ' s "gsl_fit_wlinear" - Funktion. Dies ist nützlich, wenn Sie genau wissen wollen, was Ihre Funktion ist zu tun, wenn es ausführt, die passen
Durchführen zu Ihr passen würden, würden Sie
Wird wieder der beste Schätzwert für den Koeffizienten
a
(der Achsenabschnitt) undb
(die Steigung) der linearen regression, zusammen mit den Elementen der Kovarianzmatrixcov_00
,cov_01
undcov_11
. Die beste Schätzung für den Fehler aufa
ist dann die Quadratwurzel dercov_00
und aufb
ist die Quadratwurzel voncov_11
. Die gewichtete Summe der Residuen ist wieder in derchi2
variable.WICHTIG: diese Funktion akzeptiert inverse Abweichungen, nicht die inverse Standardabweichungen wie die GEWICHTE für die Daten Punkten.
Fand ich diese Dokument hilfreich, das Verständnis und die Einrichtung meiner eigenen weighted-least-squares-routine (gilt für jede Programmiersprache).
In der Regel lernen und mit optimierten Routinen ist der beste Weg zu gehen, aber es gibt Zeiten, wo das Verständnis der Eingeweide der routine ist wichtig.