Kategorien
-
Neueste Beiträge
- [SAP] ILM
- [ABAP] DialogBox mit Text und Auswahlbuttons anzeigen (POPUP_FOR_INTERACTION)
- [ABAP] JSON nach HTML wandeln
- [SAP Gateway] Implementierung einer OData-Services basierend auf CDS-Views (SADL + Annotationen)
- [SAP Fiori] Implementierung einer einfachen SAP-Fiori-Anwendung mit Hilfe von SAP UI5 und OData (CRUD)
- [ABAP] Ermittlung der Anmeldedaten incl. des Rechnernamens
- [ABAP] Doppel-Backslash in String ersetzen
- [ABAP] ABAP-Mathematik Bibliothek (cl_abap_math)
- [ABAP] Prüfen, ob Pfad auf dem Applikationsserver existiert
- [ABAP] DMS: Dokumenteninfosätze lesen (CVAPI_DOC_GETDETAIL)
Kategorie: SciLab
Mehrfachregression (OLS) mit transformierten Prediktor-Variablen
Gegeben: Kennfeld mit Eingangsmatrix X und einem Ergebnisvektor y
x1 x2 y ---------------- 1,2 3,1 5,7 2,5 3,1 8,2 3,5 4,5 5,0 4,0 4,5 8,2 6,0 5,0 9,5 7,5 6,5 10,5
Gesucht: Lösungsvektor b der Flächengleichung y = f(x1,x2) mit beliebiger Näherung
y = b0 + b1x1 + b2x1^2 + b3x2 + b4x2^2
Lösungsprinzip
Lösungsgleichung über Matrizenrechnung (Ordinary Least Squares, OLS)
b = (X^T * X)^-1 * X^T * y
Erweiterte Tabelle mit Eingangswerten, die fehlenden Werte für x1² und x2² werden ergänzt
x1 x1² x2 x2² x1 x2 x3 x4 y --------------------------------- 1,2 1,44 3,1 9,61 5,7 2,5 6,25 3,1 9,61 8,2 3,5 12,25 4,5 20,25 5,0 4,0 16 4,5 20,25 8,2 6,0 36 5,0 25 9,5 7,5 56,25 6,5 42,25 10,5
SciLab-Code
// Eingabedaten x1 = [1.2 2.5 3.5 4.0 6.0 7.5] x2 = [1.44 6.25 12.25 16.0 36.0 56.25] x3 = [3.1 3.1 4.5 4.5 5.0 6.5] x4 = [9.61 9.61 20.25 20.25 25.0 42.25] y = [5.7 8.2 5.0 8.2 9.5 10.5] // Auffüllen der ersten Spalte der X-Matrix mit 1 ist wichtig (Startwerte)! X = [ones(6,1) x1' x2' x3' x4'] // Koeffizientenvektor ausrechnen (y muss auch transponiert werden, da Eingabe als Zeilenvektor) b = inv(X'*X)*X'*y' // Koeffizientenvektor testen erg = (X*b)'
Ergebnis
b = [19.6184110 2.3267959 -0.0386958 -6.9383043 0.4893346] erg = [5.548606304 8.387314176 5.9748294 6.9931181 9.7279811 10.4681504]
Grafische Anzeige
xdel clf() // Laufvariable für x1 von 1.2 bis 7.5, Schrittweite 0.1 x = [1.2:0.1:7.5]; // Laufvariable für x1 von 1.2 bis 7.5, Schrittweite 0.1 y = [3.1:0.1:6.5]; // Funktionsdefinition function z=f(x,y) // ausgerechnete Werte für b verwenden z = 19.6184110 + 2.3267959 * x + -0.0386958 * x^2 + -6.9383043 * y + 0.4893346 * y^2; endfunction // 3D-Plot anzeigen fplot3d(x, y, f);
Ausblick
Das Verfahren kann auch für Gleichungen mit Wurzelfunktionen oder trigonometrischen Termen benutzt werden. Je nach Beschaffenheit des „Gebirges“ und gewünschtem Rechenaufwand können bel. Terme hinzugefügt werden. Es wäre z.B. also auch vorstellbar die Koeffizienten folgender Flächengleichung zu approximieren:
y = b0 + b1x1 + b2sin(x1) + b3x2 + b4sin(x2) + b5x1x2
Entsprechend ist die Tabelle mit Eingangswerten anzupassen. Je mehr Terme in der Näherungsgleichung addiert werden, um so genauer wird das Ergebnis in Abhängigkeit der verwendeten Glieder. Gleichzeitig steigt der Rechenaufwand bei der Matrizeninversion.
Links
deutsche Wikipedia
englische Wikipedia
Egwald Statistics: Multiple Regression
Michael Palmer: MULTIPLE REGRESSION