linear.gms : Linear Regression with Various Criteria
This example solves linear models with differing objective functions.
Absolute deviations cannot be solved in a reliable manner with
most NLP systems and one has to resort to a formulation with
negative and positive deviations (models ending with the letter a).
Reference:
- Bracken, J, and McCormick, G P, Chapter 8.2. In Selected Applications of Nonlinear Programming. John Wiley and Sons, New York, 1968, pp. 86-88.
Small Model of Types: DNLP lp nlp
$title Linear Regression with Various Criteria (LINEAR,SEQ=23)
$Ontext
This example solves linear models with differing objective functions.
Absolute deviations cannot be solved in a reliable manner with
most NLP systems and one has to resort to a formulation with
negative and positive deviations (models ending with the letter a).
Bracken, J, and McCormick, G P, Chapter 8.2. In Selected Applications of
Nonlinear Programming. John Wiley and Sons, New York, 1968, pp. 86-88.
$Offtext
sets i observation number /1*20 /
n index of independent variables / a, b, c, d /
table dat(i,*)
y a b c d
1 99 1 85 76 44
2 93 1 82 78 42
3 99 1 75 73 42
4 97 1 74 72 44
5 90 1 76 73 43
6 96 1 74 69 46
7 93 1 73 69 46
8 130 1 96 80 36
9 118 1 93 78 36
10 88 1 70 73 37
11 89 1 82 71 46
12 93 1 80 72 45
13 94 1 77 76 42
14 75 1 67 76 50
15 84 1 82 70 48
16 91 1 76 76 41
17 100 1 74 78 31
18 98 1 71 80 29
19 101 1 70 83 39
20 80 1 64 79 38
variables obj objective value
dev(i) total deviation
devp(i) positive deviation
devn(i) negative deviation
b(n) estimates;
positive variables devp,devn;
equations ddev definition of deviations using total deviations
ddeva definition of deviations using positive and negative deviations
ls1,ls1a,ls2,ls3,ls4,ls5,ls5a,ls6,ls7,ls8 ;
ddev(i).. dev(i) =e= dat(i,"y") - sum(n, b(n)*dat(i,n) );
ddeva(i).. devp(i) - devn(i) =e= dat(i,"y") - sum(n, b(n)*dat(i,n) );
ls1.. obj =e= sum(i, abs(dev(i)));
ls1a.. obj =e= sum(i, devp(i)+devn(i));
ls2.. obj =e= sum(i, sqr(dev(i)));
ls3.. obj =e= sum(i, power(abs(dev(i)),3));
ls4.. obj =e= sum(i, power(dev(i),4));
ls5.. obj =e= sum(i, abs(dev(i)/dat(i,"y")));
ls5a.. obj =e= sum(i, (devp(i)+devn(i))/dat(i,"y"));
ls6.. obj =e= sum(i, sqr(dev(i)/dat(i,"y")));
ls7.. obj =e= sum(i, power(abs(dev(i)/dat(i,"y")),3));
ls8.. obj =e= sum(i, power(dev(i)/dat(i,"y"),4));
model mod1 / ddev, ls1 /
mod1a/ ddeva,ls1a/
mod2 / ddev, ls2 /
mod3 / ddev, ls3 /
mod4 / ddev, ls4 /
mod5 / ddev, ls5 /
mod5a/ ddeva,ls5a/
mod6 / ddev, ls6 /
mod7 / ddev, ls7 /
mod8 / ddev, ls8 /
parameter result summary table;
b.l(n) = 1; dev.l(i) = dat(i,"y") - sum(n, b.l(n)*dat(i,n));
dev.up(i) = 100;
dev.lo(i) = -100;
devp.up(i) = 100;
devn.up(i) = 100;
option limrow=0, limcol=0;
solve mod1 min obj using dnlp; result("mod1" ,n) = b.l(n); result("mod1" ,"obj") = obj.l;
solve mod1a min obj using lp; result("mod1a",n) = b.l(n); result("mod1a","obj") = obj.l;
solve mod2 min obj using nlp; result("mod2" ,n) = b.l(n); result("mod2" ,"obj") = obj.l;
solve mod3 min obj using dnlp; result("mod3" ,n) = b.l(n); result("mod3" ,"obj") = obj.l;
solve mod4 min obj using nlp; result("mod4" ,n) = b.l(n); result("mod4" ,"obj") = obj.l;
solve mod5 min obj using dnlp; result("mod5" ,n) = b.l(n); result("mod5" ,"obj") = obj.l;
solve mod5a min obj using lp; result("mod5a",n) = b.l(n); result("mod5a","obj") = obj.l;
solve mod6 min obj using nlp; result("mod6" ,n) = b.l(n); result("mod6" ,"obj") = obj.l;
solve mod7 min obj using dnlp; result("mod7" ,n) = b.l(n); result("mod7" ,"obj") = obj.l;
solve mod8 min obj using nlp; result("mod8" ,n) = b.l(n); result("mod8" ,"obj") = obj.l;
display result;