Lineare regression mit postgres
Benutze ich Postgres und ich habe eine große Anzahl von Zeilen mit Werten und Datums-pro station.
(Termine können getrennt werden durch mehrere Tage).
id | value | idstation | udate
--------+-------+-----------+-----
1 | 5 | 12 | 1984-02-11 00:00:00
2 | 7 | 12 | 1984-02-17 00:00:00
3 | 8 | 12 | 1984-02-21 00:00:00
4 | 9 | 12 | 1984-02-23 00:00:00
5 | 4 | 12 | 1984-02-24 00:00:00
6 | 8 | 12 | 1984-02-28 00:00:00
7 | 9 | 14 | 1984-02-21 00:00:00
8 | 15 | 15 | 1984-02-21 00:00:00
9 | 14 | 18 | 1984-02-21 00:00:00
10 | 200 | 19 | 1984-02-21 00:00:00
Vergeben, was mag eine dumme Frage sein, aber ich bin nicht viel von einem Datenbank-guru.
Ist es möglich, direkt eine SQL-Abfrage, die berechnet lineare regression pro station für jeden Tag, wohl wissend, dass die regression werden muss, berechnen Sie nur mit der tatsächlichen id, Datum, bisherige id Datum und die next-id Datum ?
Beispielsweise die lineare regression für id 2 muss berechnen mit dem Wert 7(aktuell),5(der vorige),8(nächsten) Termine 1984-02-17 , 1984-02-11 und 1984-02-21
Bearbeiten : ich regr_intercept(Wert,udate) aber ich weiß wirklich nicht, wie zu tun, wenn ich nur die aktuellen, vorherigen und nächsten Wert/das Datum für die einzelnen Linien.
Edit2 : 3 Zeilen Hinzugefügt idstation(12); id zahlen und Daten sind geändert
Hoffe Ihr könnt mir helfen, danke !
- Nicht klar; Sie verwenden möchten
value
als abhängige variableudate
als die unabhängige variable, und die partition/Schichten durchidstation
? - Ja, so ähnlich. Eigentlich habe ich Regr_intercept(udate,Wert) für jeden Tag an jeder station, aber ich brauche zur Berechnung der linearen regression mit den aktuellen, vorherigen und nächsten Tag. Ich sah, es ist ein Fehler in meinem Beispiel, die gut sein müssen : Zum Beispiel die lineare regression für id 2 muss berechnen mit dem Wert 7(aktuell),5(der vorige),8(nächsten) Termine 1984-02-23 , 1984-02-21 und 1984-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die Kombination von Joop Statistiken und Denis Fenster Funktionen:
Ergebnisse:
Dem clustering der Gruppe von drei wahrscheinlich mehr getan, elegant mit einem Rang() oder row_number () - Funktion, die würde es auch erlauben, größere Schiebefenster verwendet werden.
Ausgabe:
Hinweis: wenn Sie möchten, eine spline-wie regression sollten Sie auch mit der lag() und lead () - Fenster-Funktionen, wie in Denis ' s Antwort.
Wenn der Durchschnitt ist ok für Sie Sie nutzen könnten, avg build-in... so Etwas wie
Tun sollte. Für kompliziertere Dinge, die Sie schreiben müssen, einige pl/SQL-Funktion, die ich fürchte oder zu überprüfen, ob ein addon auf PostgreSQL.
Blick in Fenster-Funktionen. Wenn ich Ihre Frage richtig,
lead()
undlag()
dürfte Ihnen genau, was Sie wollen. Beispiel:http://www.postgresql.org/docs/current/static/tutorial-window.html