! Discriminant analysis by linear programming;
! There are two categories of observations, type 0 and type 1,
   which we wish to distinguish based on explanatory variables;
! Key idea: Find a scoring formula:
    score( i) = beta0 + beta1*xdat( k, 1) + beta2*xdat( i, 2) + ...
and try to enforce:
    score( i) < 0 if observation i is of type 0,
    score( i) > 0 if observation i is of type 1;
! Key words: Binary choice, Categorical variables, Discriminant analysis, Random forest;
SETS:  
 var: BETA;
 vardep( var); ! The dependent variable;
 varexp( var); ! The set of explanatory variables;
 varpltx( var); ! Variable on X axis in plot/chart/graph;
 varplty( var); ! Variable on Y axis in plot/chart/graph;
 varwgt( var); ! The weight vector column;
 OBS: ERR, SCORE; 
 oxv( OBS, var): xdat; ! The big data matrix;
! Two subsets, based on category of the observation for plotting;
 OBS0( OBS) : xp0, yp0;
 OBS1( OBS) : xp1, yp1;
ENDSETS
DATA: SCALE = 0.5; ! Scale factor for the solution, used to specify a strictly positive separation between type 1 and type 2 points; ! Various data sets; !CaCircle var = X1 X2 X1SQ X2SQ type wgtof; !CaCircle vardep = type; !CaCircle varwgt = wgtof; !CaCircle !CaCircle varexp = X1 X2 X1SQ X2SQ; !Include squared terms!CaCircle varpltx = X1; !CaCircle varplty = X2; !CaCircle alpha = 0.0001; !CaCircle xdat = 22.98 21.75 528.30 473.06 0 1 28.27 24.90 799.05 620.01 1 1 21.85 22.88 477.42 523.71 0 1 24.90 28.34 620.01 803.19 1 1 20.30 23.30 412.09 542.89 0 1 20.30 29.60 412.09 876.16 1 1 18.75 22.88 351.56 523.71 0 1 15.70 28.34 246.49 803.19 1 1 17.62 21.75 310.30 473.06 0 1 12.33 24.90 152.09 620.01 1 1 17.20 20.20 295.84 408.04 0 1 11.10 20.20 123.21 408.04 1 1 17.62 18.65 310.30 347.82 0 1 12.33 15.50 152.09 240.25 1 1 18.75 17.52 351.56 306.79 0 1 15.70 12.06 246.49 145.43 1 1 20.30 17.10 412.09 292.41 0 1 20.30 10.80 412.09 116.64 1 1 21.85 17.52 477.42 306.79 0 1 24.90 12.06 620.01 145.43 1 1 22.98 18.65 528.30 347.82 0 1 28.27 15.50 799.05 240.25 1 1 23.40 20.20 547.56 408.04 0 1 29.50 20.20 870.25 408.04 1 1; ! Case 1: Unequal class sizes; !CaUneq01 var = value type wgtof; !CaUneq01 vardep = type; !CaUneq01 wgtv = wgtof; !CaUneq01 varexp = value; !CaUnEq01 alpha = 0.0001; !CaUneq01 xdat = 1 1 1 2 0 1 3 0 1 7 0 1 8 0 1 9 0 1; ! Case 2 : Unequal class sizes; !CaUneq02 var = value type wgtof; !CaUneq02 vardep = type; !CaUneq02 varwgt = wgtof; !CaUneq02 varexp = value; !CaUneq02 alpha = 0.0001; !CaUneq02 xdat = 1 0 1 2 0 1 3 1 1 7 0 1 8 0 1 9 0 1; ! Case 3: Unequal class sizes, use class size dependent weights; !CaUneq03 var = value type wgtof; !CaUneq03 vardep = type; !CaUneq03 varwgt = wgtof; !CaUneq03 varexp = value; !CaUnEq03 alpha = 0.0001; !CaUneq03 xdat = 1 0 0.6 2 0 0.6 3 1 3 7 0 0.6 8 0 0.6 9 0 0.6; ! A scaled version of CaUneq03; !CaUnEqWg var = value type wgtof; !CaUnEqWg vardep = type; !CaUnEqWg varwgt = wgtof; !CaUnEqWg varexp = value; !CaUnEqWg alpha = 0.0001; !CaUnEqWg xdat = 2 0 0.6 4 0 0.6 6 1 3 14 0 0.6 16 0 0.6 18 0 0.6; ! An inseparable case; !CaInsep var = value type wgtof; !CaInsep vardep = type; !CaInsep varwgt = wgtof; !CaInsep varexp = value; !CaInsep alpha = 0.0001; !CaInsep xdat = 1 0 1 2 0 1 2 1 1 3 1 1; ! A 2D inseparable case; !Ca2D var = X1 X2 type wgtof; !Ca2D vardep = type; !Ca2D varexp = X1 X2; !Ca2D varwgt = wgtof; !Ca2D alpha = 0.0001; !Ca2D xdat = 1 2 0 0.917 1.1 4 0 0.917 2 1 0 0.917 2 3 0 0.917 2 5 0 0.917 2 5.2 1 1.1 3 1 1 1.1 3 4 1 1.1 3.5 3 1 1.1 4 0 0 0.917 5 2 1 1.1; ! Illustrate separability and parsimony; !CaSePar var = X1 X2 type wgtof; !CaSePar vardep = type; !CaSePar varwgt = wgtof; !CaSePar varexp = X1 X2; !CaSePar varpltx = X1; !CaSePar varplty = X2; !CaSePar alpha = 0.0001; !CaSePar xdat = 1 8 0 1 2 6 0 1 3 9 0 1 4 7 0 1 6 3 1 1 7 1 1 1 8 4 1 1 9 2 1 1; ! The 66 variable set; ! OBS = 1..66; !Ca66 var = OBNO TEST1 TEST2 TEST3 TEST4 TEST5 TYPE; !Ca66 vardep = type; !Ca66 varexp= TEST1 TEST2 TEST3 TEST4 TEST5; !Ca66 alpha = 0.0001; !Ca66 xdat = 1 346.7000122 247.1999969 220.5 364.1000061 311.7000122 0 2 334 313.2999878 306.5 330.8999939 311.1000061 0 3 248.3999939 189.1999969 206.8000031 334.7000122 312.5 1 4 309 291.8999939 281.2000122 346.2000122 311.1000061 1 5 328.8999939 306.2000122 259.3999939 336.3999939 310.8999939 0 6 252.8000031 248.8000031 253.8000031 321 311.7000122 1 7 313 289.7000122 292.6000061 318 311 0 8 304.8999939 115.5 284.2000122 316.5 310.5 1 9 327.8999939 330.7999878 305.7000122 332.6000061 311 1 10 315.3999939 203.8999939 287.1000061 333.7999878 311.5 1 11 333 270.6000061 274.2999878 379.1000061 311.2000122 0 12 242.3999939 145.8999939 292.2999878 318.7000122 311.2999878 0 13 124.9000015 1.1 244.1999969 345.7000122 310.7999878 0 14 323.5 317.2000122 287.3999939 406.1000061 312 1 15 304.2999878 191.6999969 275.7999878 331.7000122 311.5 0 16 382.3999939 124.0999985 30 322.5 316.7000122 1 17 327 275.3999939 290.6000061 345.5 313.3999939 1 18 278.7999878 282.1000061 316.2999878 317 311.2999878 0 19 324.1000061 261.7999878 316.7999878 326.6000061 311.6000061 0 20 249.3999939 260.7999878 292.7999878 317.2000122 310.2999878 1 21 336.2000122 290.7999878 273.2999878 400.3999939 310.7999878 1 22 317 291.8999939 303.5 326.5 310.8999939 0 23 256.8999939 212 282 336.6000061 311.7000122 1 24 292.7999878 181 295.7999878 577.9000244 311.2999878 0 25 342.7000122 306 294.2000122 487.3999939 312.1000061 0 26 336.7000122 301.2999878 273.7000122 342.5 312.7999878 0 27 302.2999878 250.8000031 297.2000122 331.2999878 312.1000061 0 28 328 296.8999939 292.3999939 324.6000061 310.8999939 1 29 312 272 311.6000061 317.7000122 311.2000122 1 30 274.7000122 252.1000061 310.7000122 323.7000122 310.7999878 0 31 315.1000061 301.2000122 300.8999939 410.8999939 310.8999939 0 32 310 245.3000031 306 310.7000122 310.1000061 0 33 335.2000122 298.6000061 314.7999878 317 310.8999939 1 34 345.2000122 353 326.3999939 409.1000061 311.2999878 1 35 348.7999878 357 326 436.5 311.8999939 0 36 324 306.7000122 314 401.7000122 312.7000122 0 37 365.1000061 345 330.7999878 382.2999878 311.8999939 1 38 369.2999878 356.7000122 322.6000061 1034.1 310.8999939 1 39 343.6000061 330.7999878 322.5 462.7999878 312.3999939 1 40 362.7999878 343 333.6000061 785.9000244 311.5 1 41 355.6000061 336.1000061 320.3999939 597.9000244 312.1000061 0 42 357.3999939 378.6000061 323.7999878 891.2999878 311.6000061 1 43 350 347.2999878 343.3999939 538.7999878 313.5 1 44 379 369 333.1000061 716 315.5 1 45 344.2000122 359.6000061 333.7999878 436.6000061 311.8999939 1 46 357 322.5 317 363.3999939 311.7999878 0 47 325.3999939 347.2999878 344.1000061 880.0999756 311.5 1 48 366.8999939 345.2999878 314.2000122 550.2999878 310.8999939 0 49 353.7999878 359.5 335.1000061 425 312.6000061 0 50 330.7000122 328.1000061 323.5 373.1000061 314 1 51 343.7999878 341.3999939 325.7000122 454.7999878 311.8999939 0 52 345.2999878 331.5 295.6000061 400 311 1 53 334.3999939 318.5 315.7999878 459.1000061 311.5 0 54 358.8999939 350.6000061 315.7999878 392 311.7999878 0 55 359.8999939 344.6000061 336.3999939 620 311.7999878 0 56 364.7999878 329.8999939 336.7000122 549.9000244 312.2999878 1 57 349 327.3999939 322.6000061 370.5 311.2999878 1 58 363 364.7000122 324.6000061 1081.7 311.7000122 1 59 330.1000061 363.5 330.6000061 617.5 311.1000061 1 60 363.7000122 345.8999939 336.3999939 599.5 312 0 61 356.1000061 349.3999939 340.5 1010 311.8999939 1 62 358.2999878 363.1000061 317.1000061 474.3999939 311.8999939 0 63 356.7000122 349.7999878 323.7999878 539.0999756 311.2000122 0 64 370.2999878 369.5 317 536.5999756 312 1 65 327.8999939 326.2999878 330.3999939 415.6000061 311 0 66 334.7000122 331.7000122 302.2000122 428.6000061 311.6000061 0; ! Genuine and counterfeit banknotes (100 Swiss Francs), various measurements. Banknotes BN1 to BN100 are genuine (Good=1), all others are counterfeit (Good=0). Dataset courtesy of H. Riedwyl, Bern, Switzerland; !CaSwiss; var = Length Left Right Bottom Top Diagonal Good wgtof ; !CaSwiss; vardep = Good!CaSwiss; varexp = Length Left Right Bottom Top Diagonal!CaSwiss; varpltx = Right!CaSwiss; varplty = Diagonal!CaSwiss; alpha = 0.0001!CaSwiss; varwgt = wgtof !CaSwiss; OBS, xdat = BN1 214.8 131.0 131.1 9.0 9.7 141.0 1 1 BN2 214.6 129.7 129.7 8.1 9.5 141.7 1 1 BN3 214.8 129.7 129.7 8.7 9.6 142.2 1 1 BN4 214.8 129.7 129.6 7.5 10.4 142.0 1 1 BN5 215.0 129.6 129.7 10.4 7.7 141.8 1 1 BN6 215.7 130.8 130.5 9.0 10.1 141.4 1 1 BN7 215.5 129.5 129.7 7.9 9.6 141.6 1 1 BN8 214.5 129.6 129.2 7.2 10.7 141.7 1 1 BN9 214.9 129.4 129.7 8.2 11.0 141.9 1 1 BN10 215.2 130.4 130.3 9.2 10.0 140.7 1 1 BN11 215.3 130.4 130.3 7.9 11.7 141.8 1 1 BN12 215.1 129.5 129.6 7.7 10.5 142.2 1 1 BN13 215.2 130.8 129.6 7.9 10.8 141.4 1 1 BN14 214.7 129.7 129.7 7.7 10.9 141.7 1 1 BN15 215.1 129.9 129.7 7.7 10.8 141.8 1 1 BN16 214.5 129.8 129.8 9.3 8.5 141.6 1 1 BN17 214.6 129.9 130.1 8.2 9.8 141.7 1 1 BN18 215.0 129.9 129.7 9.0 9.0 141.9 1 1 BN19 215.2 129.6 129.6 7.4 11.5 141.5 1 1 BN20 214.7 130.2 129.9 8.6 10.0 141.9 1 1 BN21 215.0 129.9 129.3 8.4 10.0 141.4 1 1 BN22 215.6 130.5 130.0 8.1 10.3 141.6 1 1 BN23 215.3 130.6 130.0 8.4 10.8 141.5 1 1 BN24 215.7 130.2 130.0 8.7 10.0 141.6 1 1 BN25 215.1 129.7 129.9 7.4 10.8 141.1 1 1 BN26 215.3 130.4 130.4 8.0 11.0 142.3 1 1 BN27 215.5 130.2 130.1 8.9 9.8 142.4 1 1 BN28 215.1 130.3 130.3 9.8 9.5 141.9 1 1 BN29 215.1 130.0 130.0 7.4 10.5 141.8 1 1 BN30 214.8 129.7 129.3 8.3 9.0 142.0 1 1 BN31 215.2 130.1 129.8 7.9 10.7 141.8 1 1 BN32 214.8 129.7 129.7 8.6 9.1 142.3 1 1 BN33 215.0 130.0 129.6 7.7 10.5 140.7 1 1 BN34 215.6 130.4 130.1 8.4 10.3 141.0 1 1 BN35 215.9 130.4 130.0 8.9 10.6 141.4 1 1 BN36 214.6 130.2 130.2 9.4 9.7 141.8 1 1 BN37 215.5 130.3 130.0 8.4 9.7 141.8 1 1 BN38 215.3 129.9 129.4 7.9 10.0 142.0 1 1 BN39 215.3 130.3 130.1 8.5 9.3 142.1 1 1 BN40 213.9 130.3 129.0 8.1 9.7 141.3 1 1 BN41 214.4 129.8 129.2 8.9 9.4 142.3 1 1 BN42 214.8 130.1 129.6 8.8 9.9 140.9 1 1 BN43 214.9 129.6 129.4 9.3 9.0 141.7 1 1 BN44 214.9 130.4 129.7 9.0 9.8 140.9 1 1 BN45 214.8 129.4 129.1 8.2 10.2 141.0 1 1 BN46 214.3 129.5 129.4 8.3 10.2 141.8 1 1 BN47 214.8 129.9 129.7 8.3 10.2 141.5 1 1 BN48 214.8 129.9 129.7 7.3 10.9 142.0 1 1 BN49 214.6 129.7 129.8 7.9 10.3 141.1 1 1 BN50 214.5 129.0 129.6 7.8 9.8 142.0 1 1 BN51 214.6 129.8 129.4 7.2 10.0 141.3 1 1 BN52 215.3 130.6 130.0 9.5 9.7 141.1 1 1 BN53 214.5 130.1 130.0 7.8 10.9 140.9 1 1 BN54 215.4 130.2 130.2 7.6 10.9 141.6 1 1 BN55 214.5 129.4 129.5 7.9 10.0 141.4 1 1 BN56 215.2 129.7 129.4 9.2 9.4 142.0 1 1 BN57 215.7 130.0 129.4 9.2 10.4 141.2 1 1 BN58 215.0 129.6 129.4 8.8 9.0 141.1 1 1 BN59 215.1 130.1 129.9 7.9 11.0 141.3 1 1 BN60 215.1 130.0 129.8 8.2 10.3 141.4 1 1 BN61 215.1 129.6 129.3 8.3 9.9 141.6 1 1 BN62 215.3 129.7 129.4 7.5 10.5 141.5 1 1 BN63 215.4 129.8 129.4 8.0 10.6 141.5 1 1 BN64 214.5 130.0 129.5 8.0 10.8 141.4 1 1 BN65 215.0 130.0 129.8 8.6 10.6 141.5 1 1 BN66 215.2 130.6 130.0 8.8 10.6 140.8 1 1 BN67 214.6 129.5 129.2 7.7 10.3 141.3 1 1 BN68 214.8 129.7 129.3 9.1 9.5 141.5 1 1 BN69 215.1 129.6 129.8 8.6 9.8 141.8 1 1 BN70 214.9 130.2 130.2 8.0 11.2 139.6 1 1 BN71 213.8 129.8 129.5 8.4 11.1 140.9 1 1 BN72 215.2 129.9 129.5 8.2 10.3 141.4 1 1 BN73 215.0 129.6 130.2 8.7 10.0 141.2 1 1 BN74 214.4 129.9 129.6 7.5 10.5 141.8 1 1 BN75 215.2 129.9 129.7 7.2 10.6 142.1 1 1 BN76 214.1 129.6 129.3 7.6 10.7 141.7 1 1 BN77 214.9 129.9 130.1 8.8 10.0 141.2 1 1 BN78 214.6 129.8 129.4 7.4 10.6 141.0 1 1 BN79 215.2 130.5 129.8 7.9 10.9 140.9 1 1 BN80 214.6 129.9 129.4 7.9 10.0 141.8 1 1 BN81 215.1 129.7 129.7 8.6 10.3 140.6 1 1 BN82 214.9 129.8 129.6 7.5 10.3 141.0 1 1 BN83 215.2 129.7 129.1 9.0 9.7 141.9 1 1 BN84 215.2 130.1 129.9 7.9 10.8 141.3 1 1 BN85 215.4 130.7 130.2 9.0 11.1 141.2 1 1 BN86 215.1 129.9 129.6 8.9 10.2 141.5 1 1 BN87 215.2 129.9 129.7 8.7 9.5 141.6 1 1 BN88 215.0 129.6 129.2 8.4 10.2 142.1 1 1 BN89 214.9 130.3 129.9 7.4 11.2 141.5 1 1 BN90 215.0 129.9 129.7 8.0 10.5 142.0 1 1 BN91 214.7 129.7 129.3 8.6 9.6 141.6 1 1 BN92 215.4 130.0 129.9 8.5 9.7 141.4 1 1 BN93 214.9 129.4 129.5 8.2 9.9 141.5 1 1 BN94 214.5 129.5 129.3 7.4 10.7 141.5 1 1 BN95 214.7 129.6 129.5 8.3 10.0 142.0 1 1 BN96 215.6 129.9 129.9 9.0 9.5 141.7 1 1 BN97 215.0 130.4 130.3 9.1 10.2 141.1 1 1 BN98 214.4 129.7 129.5 8.0 10.3 141.2 1 1 BN99 215.1 130.0 129.8 9.1 10.2 141.5 1 1 BN100 214.7 130.0 129.4 7.8 10.0 141.2 1 1 BN101 214.4 130.1 130.3 9.7 11.7 139.8 0 1 BN102 214.9 130.5 130.2 11.0 11.5 139.5 0 1 BN103 214.9 130.3 130.1 8.7 11.7 140.2 0 1 BN104 215.0 130.4 130.6 9.9 10.9 140.3 0 1 BN105 214.7 130.2 130.3 11.8 10.9 139.7 0 1 BN106 215.0 130.2 130.2 10.6 10.7 139.9 0 1 BN107 215.3 130.3 130.1 9.3 12.1 140.2 0 1 BN108 214.8 130.1 130.4 9.8 11.5 139.9 0 1 BN109 215.0 130.2 129.9 10.0 11.9 139.4 0 1 BN110 215.2 130.6 130.8 10.4 11.2 140.3 0 1 BN111 215.2 130.4 130.3 8.0 11.5 139.2 0 1 BN112 215.1 130.5 130.3 10.6 11.5 140.1 0 1 BN113 215.4 130.7 131.1 9.7 11.8 140.6 0 1 BN114 214.9 130.4 129.9 11.4 11.0 139.9 0 1 BN115 215.1 130.3 130.0 10.6 10.8 139.7 0 1 BN116 215.5 130.4 130.0 8.2 11.2 139.2 0 1 BN117 214.7 130.6 130.1 11.8 10.5 139.8 0 1 BN118 214.7 130.4 130.1 12.1 10.4 139.9 0 1 BN119 214.8 130.5 130.2 11.0 11.0 140.0 0 1 BN120 214.4 130.2 129.9 10.1 12.0 139.2 0 1 BN121 214.8 130.3 130.4 10.1 12.1 139.6 0 1 BN122 215.1 130.6 130.3 12.3 10.2 139.6 0 1 BN123 215.3 130.8 131.1 11.6 10.6 140.2 0 1 BN124 215.1 130.7 130.4 10.5 11.2 139.7 0 1 BN125 214.7 130.5 130.5 9.9 10.3 140.1 0 1 BN126 214.9 130.0 130.3 10.2 11.4 139.6 0 1 BN127 215.0 130.4 130.4 9.4 11.6 140.2 0 1 BN128 215.5 130.7 130.3 10.2 11.8 140.0 0 1 BN129 215.1 130.2 130.2 10.1 11.3 140.3 0 1 BN130 214.5 130.2 130.6 9.8 12.1 139.9 0 1 BN131 214.3 130.2 130.0 10.7 10.5 139.8 0 1 BN132 214.5 130.2 129.8 12.3 11.2 139.2 0 1 BN133 214.9 130.5 130.2 10.6 11.5 139.9 0 1 BN134 214.6 130.2 130.4 10.5 11.8 139.7 0 1 BN135 214.2 130.0 130.2 11.0 11.2 139.5 0 1 BN136 214.8 130.1 130.1 11.9 11.1 139.5 0 1 BN137 214.6 129.8 130.2 10.7 11.1 139.4 0 1 BN138 214.9 130.7 130.3 9.3 11.2 138.3 0 1 BN139 214.6 130.4 130.4 11.3 10.8 139.8 0 1 BN140 214.5 130.5 130.2 11.8 10.2 139.6 0 1 BN141 214.8 130.2 130.3 10.0 11.9 139.3 0 1 BN142 214.7 130.0 129.4 10.2 11.0 139.2 0 1 BN143 214.6 130.2 130.4 11.2 10.7 139.9 0 1 BN144 215.0 130.5 130.4 10.6 11.1 139.9 0 1 BN145 214.5 129.8 129.8 11.4 10.0 139.3 0 1 BN146 214.9 130.6 130.4 11.9 10.5 139.8 0 1 BN147 215.0 130.5 130.4 11.4 10.7 139.9 0 1 BN148 215.3 130.6 130.3 9.3 11.3 138.1 0 1 BN149 214.7 130.2 130.1 10.7 11.0 139.4 0 1 BN150 214.9 129.9 130.0 9.9 12.3 139.4 0 1 BN151 214.9 130.3 129.9 11.9 10.6 139.8 0 1 BN152 214.6 129.9 129.7 11.9 10.1 139.0 0 1 BN153 214.6 129.7 129.3 10.4 11.0 139.3 0 1 BN154 214.5 130.1 130.1 12.1 10.3 139.4 0 1 BN155 214.5 130.3 130.0 11.0 11.5 139.5 0 1 BN156 215.1 130.0 130.3 11.6 10.5 139.7 0 1 BN157 214.2 129.7 129.6 10.3 11.4 139.5 0 1 BN158 214.4 130.1 130.0 11.3 10.7 139.2 0 1 BN159 214.8 130.4 130.6 12.5 10.0 139.3 0 1 BN160 214.6 130.6 130.1 8.1 12.1 137.9 0 1 BN161 215.6 130.1 129.7 7.4 12.2 138.4 0 1 BN162 214.9 130.5 130.1 9.9 10.2 138.1 0 1 BN163 214.6 130.1 130.0 11.5 10.6 139.5 0 1 BN164 214.7 130.1 130.2 11.6 10.9 139.1 0 1 BN165 214.3 130.3 130.0 11.4 10.5 139.8 0 1 BN166 215.1 130.3 130.6 10.3 12.0 139.7 0 1 BN167 216.3 130.7 130.4 10.0 10.1 138.8 0 1 BN168 215.6 130.4 130.1 9.6 11.2 138.6 0 1 BN169 214.8 129.9 129.8 9.6 12.0 139.6 0 1 BN170 214.9 130.0 129.9 11.4 10.9 139.7 0 1 BN171 213.9 130.7 130.5 8.7 11.5 137.8 0 1 BN172 214.2 130.6 130.4 12.0 10.2 139.6 0 1 BN173 214.8 130.5 130.3 11.8 10.5 139.4 0 1 BN174 214.8 129.6 130.0 10.4 11.6 139.2 0 1 BN175 214.8 130.1 130.0 11.4 10.5 139.6 0 1 BN176 214.9 130.4 130.2 11.9 10.7 139.0 0 1 BN177 214.3 130.1 130.1 11.6 10.5 139.7 0 1 BN178 214.5 130.4 130.0 9.9 12.0 139.6 0 1 BN179 214.8 130.5 130.3 10.2 12.1 139.1 0 1 BN180 214.5 130.2 130.4 8.2 11.8 137.8 0 1 BN181 215.0 130.4 130.1 11.4 10.7 139.1 0 1 BN182 214.8 130.6 130.6 8.0 11.4 138.7 0 1 BN183 215.0 130.5 130.1 11.0 11.4 139.3 0 1 BN184 214.6 130.5 130.4 10.1 11.4 139.3 0 1 BN185 214.7 130.2 130.1 10.7 11.1 139.5 0 1 BN186 214.7 130.4 130.0 11.5 10.7 139.4 0 1 BN187 214.5 130.4 130.0 8.0 12.2 138.5 0 1 BN188 214.8 130.0 129.7 11.4 10.6 139.2 0 1 BN189 214.8 129.9 130.2 9.6 11.9 139.4 0 1 BN190 214.6 130.3 130.2 12.7 9.1 139.2 0 1 BN191 215.1 130.2 129.8 10.2 12.0 139.4 0 1 BN192 215.4 130.5 130.6 8.8 11.0 138.6 0 1 BN193 214.7 130.3 130.2 10.8 11.1 139.2 0 1 BN194 215.0 130.5 130.3 9.6 11.0 138.5 0 1 BN195 214.9 130.3 130.5 11.6 10.6 139.8 0 1 BN196 215.0 130.4 130.3 9.9 12.1 139.6 0 1 BN197 215.1 130.3 129.9 10.3 11.5 139.7 0 1 BN198 214.8 130.3 130.4 10.6 11.1 140.0 0 1 BN199 214.7 130.7 130.8 11.2 11.2 139.4 0 1 BN200 214.3 129.9 129.9 10.2 11.5 139.6 0 1 ; ENDDATA SUBMODEL discrim: ! Minimize sum of weighted errors; MIN = errsum + alpha * errmax; errsum = @SUM( OBS( I): xdat( i, wgtndx) * ERR( I) ); @FREE( BETA0); @FOR( var( J): @FREE( BETA( J));); ! For bad observations we want SCORE( i) <= - SCALE; @FOR( OBS(I)| ( xdat( I, depndx) #LT# 1) : SCORE( I) = BETA0 + @SUM( varexp( J): BETA( J)* xdat(I,J)); @FREE( SCORE( I)); ERR( I) >= SCORE( I) + SCALE; ERRMAX >= ERR( i) ); ! For good observations we want SCORE( i) >= SCALE; @FOR( OBS( I)| (xdat( I, depndx) #GT# 0) : SCORE( I) = BETA0 + @SUM( varexp( J): BETA( J)* xdat(I,J)); @FREE( SCORE(I)); ERR( I) >= SCALE - SCORE( i); ERRMAX >= ERR( i); ); ENDSUBMODEL
CALC: @SET( 'OROUTE',1); ! Output to window after this many lines in buffer; @SET( 'WNLINE',10000); ! (27) Max command window lines (Windows only); ! Get the index number of the dependent var; @for( vardep( j): depndx = j);! Count observations of each type; nobs0 = @SUM( obs( i) | xdat( i, depndx) #EQ# 0: 1); nobs1 = @SUM( obs( i) | xdat( i, depndx) #EQ# 1: 1); nobs = nobs0 + nobs1; ! Number of observations; ! Get the index number of the wgt var; @FOR( varwgt( j): wgtndx = j); ! @gen( discrim); @solve( discrim); ! Get best single number estimate; objsing = obj; ! Store error measure for single number estimator case; @WRITE(' ExpVar Beta ', @NEWLINE(1)); @WRITE(' Beta0 ', @FORMAT( beta0, '12.4f'), @NEWLINE( 1)); @FOR( varexp( k): @WRITE( ' ', @FORMAT( varexp( k),'9s'),' ', @FORMAT( beta( k), '12.4f'), @NEWLINE( 1)); ); ! Write score of each observation; @WRITE( @NEWLINE(1),' Obs Type Score Error', @NEWLINE( 1)); @FOR( obs( i): @WRITE( @FORMAT( i, '4.0f'), ' ', xdat( i, depndx), ' ', @FORMAT( score( i),'9.2f'), ' ', @FORMAT( ERR( i), '9.2f'),@NEWLINE( 1)); ); ! Prepare data for a chart of the dependent variable vs. one other variable; ! Get the index of the explanatory variables x and y axis; @FOR( varpltx( j): pltxndx = j); @FOR( varplty( j): pltyndx = j); ! Create two sets, based on the category of the dependent variable; @FOR( obs( i) | xdat( i, depndx) #EQ# 0: @INSERT( OBS0, i); xp0(i) = xdat( i, pltxndx); yp0(i) = xdat( i, pltyndx); ); @FOR( obs( i) | xdat( i, depndx) #EQ# 1: @INSERT( OBS1, i); xp1(i) = xdat( i, pltxndx); yp1(i) = xdat( i, pltyndx); ); ! Beware when interpreting scatter plots, a red point may hide a green point; @CHARTSCATTER( 'Discriminant Analysis in 2-space', var( pltxndx), var( pltyndx), 'Type 0 points', xp0, yp0, 'Type 1 points', xp1, yp1) ; ENDCALC