linear.gms : 다양한 기준을 사용한 선형 회귀

설명

이 예는 다양한 목적 함수를 사용하여 선형 모델을 해결합니다.
절대 편차는 신뢰할 수 있는 방식으로 해결될 수 없습니다.
대부분의 NLP 시스템은 다음과 같은 공식에 의존해야 합니다.
음수 및 양수 편차(문자 a로 끝나는 모델).

소형 모델 유형 :DNLP lp nlp


카테고리 : 슬롯 모델 라이브러리


메인 파일 : linear.gms

$title 다양한 기준을 사용한 선형 회귀(LINEAR,SEQ=23)

$onText
이 예에서는 서로 다른 목적 함수를 사용하여 선형 모델을 해결합니다.
절대 편차는 신뢰할 수 있는 방식으로 해결될 수 없습니다.
대부분의 NLP 시스템은 다음과 같은 공식에 의존해야 합니다.
음수 및 양수 편차(문자 a로 끝나는 모델).

Bracken, J 및 McCormick, GP, 8.2장. 다음의 선택된 응용 프로그램에서
비선형 프로그래밍. John Wiley and Sons, 뉴욕, 1968, pp. 86-88.

키워드: 선형 계획법, 비선형 계획법, 불연속 도함수,
          선형 회귀, 계량 경제학
$offText

세트
   i '관찰번호' / 1*20 /
   n '독립변수 지수' / a, b, c, d /;

테이블 dat(i,*)
         응 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;

변수
   obj '객관적 값'
   dev(i) '총 편차'
   devp(i) '양의 편차'
   devn(i) '음의 편차'
   b(n) '추정치';

양수 변수 devp, devn;

방정식
   ddev '총 편차를 사용한 편차 정의'
   ddeva '양수 및 음수 편차를 사용한 편차 정의'
   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));

모델
   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 /;

매개변수 결과 '요약표';

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;

옵션 limRow = 0, limCol = 0;

dnlp를 사용하여 mod1 min obj를 해결합니다. result("mod1" ,n) = b.l(n); result("mod1" ,"obj") = obj.l;
lp를 사용하여 mod1a min obj를 해결합니다.   result("mod1a",n) = b.l(n); result("mod1a","obj") = obj.l;
nlp를 사용하여 mod2 min obj를 해결합니다.  result("mod2" ,n) = b.l(n); result("mod2" ,"obj") = obj.l;
dnlp를 사용하여 mod3 min obj를 해결합니다. result("mod3" ,n) = b.l(n); result("mod3" ,"obj") = obj.l;
nlp를 사용하여 mod4 min obj를 해결합니다.  result("mod4" ,n) = b.l(n); result("mod4" ,"obj") = obj.l;
dnlp를 사용하여 mod5 min obj를 해결합니다. result("mod5" ,n) = b.l(n); result("mod5" ,"obj") = obj.l;
lp를 사용하여 mod5a min obj를 해결합니다.   result("mod5a",n) = b.l(n); result("mod5a","obj") = obj.l;
nlp를 사용하여 mod6 min obj를 해결합니다.  result("mod6" ,n) = b.l(n); result("mod6" ,"obj") = obj.l;
dnlp를 사용하여 mod7 min obj를 해결합니다. result("mod7" ,n) = b.l(n); result("mod7" ,"obj") = obj.l;
nlp를 사용하여 mod8 min obj를 해결합니다.  result("mod8" ,n) = b.l(n); result("mod8" ,"obj") = obj.l;

결과 표시;