Maxima

Nonlineare Regression

Inhalt

Quadratische Regression - quadreg

Für die quadratische Regression sucht man die Funktion
Quadratische Regression 01
und erhält nach der Methode der kleinsten Quadrate (wie für die Lineare Regression)
Quadratische Regression 02

Die Berechnung des gewünschten Minimums erfolgt über die partiellen Ableitungen nach den Koeffizienten. Die Lösung des dadurch entstehenden Gleichungssystems in den Koeffizienten a, b und c kann in folgende Maxima-Funktion zusammengefasst werden:

quadreg(liste,var):=block(
[n:0,i:1,j:1,k:1,lx,ly,lz,a,b,c],
  n:length(liste),
  lx(k):=1/n*sum(liste[i][1]^k,i,1,n),
  ly():=1/n*sum(liste[i][2],i,1,n),
  lz(j,k):=1/n*sum(liste[i][1]^j*liste[i][2]^k,i,1,n),
  c:((lz(1,1)-lx(1)*ly())/(lx(2)-lx(1)^2)-
     (lz(2,1)-lx(2)*ly())/(lx(3)-lx(1)*lx(2)))
    /
    ((lx(3)-lx(1)*lx(2))/(lx(2)-lx(1)^2)-
     (lx(4)-lx(2)^2)/(lx(3)-lx(1)*lx(2))),
  b:(lz(1,1)-lx(1)*ly())/(lx(2)-lx(1)^2)-
     c*(lx(3)-lx(1)*lx(2))/(lx(2)-lx(1)^2),
  a:ly()-lx(1)*b-lx(2)*c,
  return(a+b*var+c*var^2)
)$

 

MAXIMA-Datei

Überprüfung der Funktion mit geeignetem Datenmaterial:

Quadratische Regression 03


 
zurueck

Regressionen mit dem Maxima-Paket: lsquares

Maxima bietet über ein mitgeliefertes Funktionspaket ebenfalls Möglichkeiten, einfach Regressionslinien zu berechnen - das Paket heißt lsquares.

Über load(lsquares) kann (unter anderem) auf folgende Funktionen zugegriffen werden:

  • lsquares_estimates(Daten,Var,Ausdruck,Koeff) ...
    sucht zuerst eine exakte Lösung - wenn dies fehlschlägt eine approximierte Lösung -, um die Gleichung "Ausdruck" in den Variablen "Var" mit den Koeffizienten "Koeff" an das Datenmaterial "Daten" anzupassen.
    Daten ... eine Matrix
    Var ... eine Liste von Variablen, typischerweise [x,y]
    Ausdruck ... die gesuchte Gleichung: z.B. für kubische Regression y=a*x^3+b*x^2+c*x+d
    Koeff ... die gesuchten Koeffizienten: im oberen Falle [a,b,c,d]
    Ergänzend können auch Initialwerte für die Approximation gesetzt werden (siehe Onlinehilfe).
  • lsquares_mse(Daten,Var,Ausdruck) ...
    ergibt den durchschnittlichen quadratischen Fehler für die Gleichung "Ausdruck" in den Variablen "Var" über das Datenmaterial "Daten".

Hinweis - Die Daten müssen in Form einer Matrix vorliegen, wobei jede Zeile die Variablen enthält. Bei einer Funktion in x und y handelt es sich also um eine nx2-Matrix (Schwierigkeit: für einen Plot muss die Matrix in eine Liste umgewandelt werden!)
Variable und Koeffizienten werden als Liste eingegeben.

Beispiel:

Wir testen das Paket lsquares mit einer kubischen Regression. Eine Funktion des Typs: a*x^3+b*x^2+c*x+d soll an das vorhandene Datenmaterial angepasst werden.

Kubische Regression 01

Anschließend fügen wir das Ergebnis der Regression für die Koeffezienten a, b, c und d in die Funktionsgleichung ein und definieren eine kubische Funktion f1(x).

Kubische Regression 02

Wir wandeln die Datenmatrix in eine Liste um und plotten die Daten als Scatterplot mit der Regressionskurve f1(x).

Kubische Regression 03


 
zurueck

Beispiele

Parabel (Quadratische Regression):

Gegeben sind drei Punkte P(-5,2), Q(-1,3) und R(3,0). Bestimme jene Parabel, die durch die drei Punkte geht.

Beispiel 01 Beispiel 02
Welches Wetter herrscht in Wien (Sinusregression):

Welches Wetter herrscht in Wien? - die Lufttemperatur schwankt täglich und hängt von zahlreichen Einflüssen ab. Untersucht man jedoch den Verlauf der langjährigen Monatsmittelwerte, so lassen sich erstaunliche Gesetzmäßigkeiten erkennen.

JAN FEB MÄR APR MAI JUN
-1.4 0.4 4.7 10.3 14.8 18.1
JUL AUG SEP OKT NOV DEZ
19.9 19.3 15.6 9.8 4.8 1.0

Sinusregression 01

Der Plot der Datenpunkte und der mit Hilfe der Regression bestimmten Funktion zeigt den Zusammenhang - bei den monatlichen Durchschnittstemperaturen erhält man (bis auf lokal begründbare Abweichungen) eine Sinuskurve! Die Parameter lassen sich recht leicht auch geographisch begründen:
die Amplitude (10.65) errechnet sich als (Juli = Max - Dezember = Min)/2, die Frequenz (ca. 0.5) ergibt sich durch 2.pi/12 (12 Monate!), die Phasenverschiebung in y-Richtung entspricht ca. 3.5 Monate (Jahresbeginn 1.Jänner gegenüber Tag-Nacht-Gleich am 21.März + 1 Monat zusätzlich, da die Temperatur dem Sonnengang ca. 1 Monat "nachhinkt") + vertikale Verschiebung um die Durchschnittstemperatur von ca. 9.8 Grad - entspricht ziemlich genau der vom System ermittelten Kurve!

Hinweis - Bei der Sinusregression können die gesuchten Koeffizienten nur über Approximation gefunden werden - Maxima zeigt einige Stufen an, über welche Zwischenwerte vorgegangen wird!

Sinusregression 02

MAXIMA-Datei


 
zurueck
Links:

© PH-NOe, letzte Änderung am 18. Mai 2008, erstellt von Walter Wegscheider