Nichtlineare Regressionsmodelle in PostgreSQL mit R

Hintergrun

Ich habe Klimadaten (Temperatur, Niederschlag, Schneehöhe) für ganz Kanada zwischen 1900 und 2009. Ich habe eine einfache Website geschrieben und auf der einfachsten Seite können Benutzer Kategorie und Stadt auswählen. Sie erhalten dann einen sehr einfachen Bericht (ohne den Abschnitt mit den Parametern und Berechnungen):

Der Hauptzweck der Webanwendung besteht darin, eine einfache Benutzeroberfläche bereitzustellen, damit die Öffentlichkeit die Daten auf sinnvolle Weise untersuchen kann. (Eine Liste von Nummern ist weder für die breite Öffentlichkeit von Bedeutung noch für eine Website, auf derzu viele Eingänge.) Der sekundäre Zweck der Anwendung besteht darin, Klimatologen und anderen Wissenschaftlern tiefere Möglichkeiten zur Anzeige der Daten bereitzustellen. (Natürlich mit zu vielen Eingaben.)

Tool Set

Die Datenbank ist PostgreSQL mit R (meistens) installiert. Die Berichte werden mit iReport geschrieben und mit JasperReports generiert.

Poor Model Choice

Gegenwärtig wird ein lineares Regressionsmodell auf die jährlichen Durchschnittswerte der täglichen Daten angewendet. Das lineare Regressionsmodell wird in einer PostgreSQL-Funktion wie folgt berechnet:

SELECT 
  regr_slope( amount, year_taken ),
  regr_intercept( amount, year_taken ),
  corr( amount, year_taken )
FROM
  temp_regression
INTO STRICT slope, intercept, correlation;

Die Ergebnisse werden mit folgendem Befehl an JasperReports zurückgegeben:

SELECT
  year_taken,
  amount,
  year_taken * slope + intercept,
  slope,
  intercept,
  correlation,
  total_measurements
INTO result;

JasperReports ruft PostgreSQL mit der folgenden parametrisierten Analysefunktion auf:

SELECT
  year_taken,
  amount,
  measurements,
  regression_line,
  slope,
  intercept,
  correlation,
  total_measurements,
  execute_time
FROM
  climate.analysis(
    $P{CityId},
    $P{Elevation1},
    $P{Elevation2},
    $P{Radius},
    $P{CategoryId},
    $P{Year1},
    $P{Year2}
  )
ORDER BY year_taken

Dies ist keine optimale Lösung, da sie den falschen Eindruck erweckt, dass sich das Klima langsam, aber stetig ändert.

Frage

Verwenden von Funktionen, die zwei Parameter annehmen (z. B. Jahr [X] und Betrag [Y]), wie z. B. @ von PostgreSQregr_slope:

Was ist ein besseres Regressionsmodell?Welche CPAN-R-Pakete bieten solche Modelle an? (Installierbar, idealerweise mitapt-get.)Wie können die R-Funktionen in einer PostgreSQL-Funktion aufgerufen werden?

Wenn solche Funktionen nicht existieren:

Welche Parameter sollte ich für Funktionen ermitteln, die die gewünschte Anpassung ergeben?Wie würden Sie empfehlen, die beste Anpassungskurve anzuzeigen?

Beachten Sie, dass dies eine Web-App für die breite Öffentlichkeit ist. Wenn die Daten nur auf einer R-Shell analysiert werden können, wurde der Zweck beseitigt. (Ich weiß, dass dies für die meisten R-Funktionen, die ich bisher angeschaut habe, nicht der Fall ist.)

Vielen Dank

Antworten auf die Frage(6)

Ihre Antwort auf die Frage