Lindo Systems

! Fisher's Discriminant analysis        (FisherDA.lng);
! 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) + ...
  so to extent possible:
     score( i) < 0 if observation i is of type 0,
     score( i) > 0 if observation i is of type 1;
! Reference: Fisher, R.A. (1936), “The Use of Multiple Measurements in Taxonomical Problems,”
  Annals of Eugenics, vol. 7, pp. 179-188.;
!Keywords: Binary choice, Categorical variables, Discriminant analysis, Fisher, Random forest;

sets:
 var: BETA, 
      mu0, MU1, mutot ;
 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 (if used);
 OBS: ERR, SCORE; 
 oxv( OBS, var): xdat;
 vxv( var, var): covar, covarinv;
! Two subsets, based on category of the observation;
 OBS0( OBS) : xp0, yp0;
 OBS1( OBS) : xp1, yp1;
endsets

data:
! Various data sets;

! Case:  a small circle, Type 0, inside  large circle, Type 1;
!CaCircle   var = X1  X2  X1SQ X2SQ type wgtof;
!CaCircle   vardep = type;
!CaCircle  ! varexp = X1 X2;  ! Cannot distinguish with just these;
!CaCircle    varexp = X1 X2 X1SQ X2SQ;  !Can if include squared terms;
!CaCircle   varpltx = X1; ! Variable on X axis in plot/chart/graph;
!CaCircle   varplty = X2; ! Variable on Y axis in plot/chart/graph;
!CaCircle   varwgt = wgtof;  ! Wgt, if used;
!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 with Unequal class sizes;
!CaUneq01   var = value type wgtof; ! The variables;
!CaUneq01   vardep = type; ! The dependend variable (0 or 1);
!CaUneq01   varexp = value; ! Explanatory variables;
!CaUneq01   varpltx = value; ! Variable on X axis in plot/chart/graph;
!CaUneq01   varplty = value;
!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   varexp = value; ! Explanatory variables;
!CaUneq02   varpltx = value;
!CaUneq02   varplty = value;
!CaUneq02   varwgt = wgtof;
!CaUneq02   xdat =
    1  0  1
    2  0  1
    3  1  1
    7  0  1
    8  0  1
    9  0  1;

! An inseparable case;
!CaInsep   var = value type wgtof;
!CaInsep   vardep = type;
!CaInsep   varexp = value;
!CaInsep   varpltx = value; ! Variable on X axis in plot/chart/graph;
!CaInsep   varplty = wgtof; ! Variable on Y axis in plot/chart/graph;
!CaInsep   varwgt = wgtof;
!CaInsep   alpha = 0; ! Wgt applied to max error;
!CaInsep   xdat =
    1  0  1
    2  0  1
    2  1  1
    3  1  1;

! A separable case;
!CaFDA    var = X1  X2 type wgtof;
!CaFDA    vardep = type;
!CaFDA    varexp = X1 X2; ! Explanatory variables;
!CaFDA    varpltx = X1; ! Variable on X axis in plot/chart/graph;
!CaFDA    varplty = X2; ! Variable on X axis in plot/chart/graph;
!CaFDA    varwgt = wgtof;
!CaFDA    alpha = 0; ! Wgt applied to max error ( if used);
!CaFDA    xdat =
    4  1  0  1
    2  4  0  1
    2  3  0  1
    3  6  0  1
    4  4  0  1
    9 10  1  1
    6  8  1  1
    9  5  1  1
    8  7  1  1
   10  8  1  1;

! A separable case, csd.uwo.ca, should get (beta0, beta1) ~ (-0.79, 0.89);
!CaFDA01   var = X1  X2 type wgtof;
!CaFDA01   vardep = type;  ! Dependent variable;
!CaFDA01   varexp = X1 X2; ! Explanatory variables;
!CaFDA01   varpltx = X1;   ! Variable on X axis in plot/chart/graph;
!CaFDA01   varplty = X2;   ! Variable on Y axis in plot/chart/graph;
!CaFDA01   varwgt = wgtof;
!CaFDA01   alpha = 0;      ! Wgt applied to max error ( if used);
!CaFDA01   xdat =
    1 2  0  1
    2 3  0  1
    3 3  0  1
    4 5  0  1
    5 5  0  1
    1 0  1  1
    2 1  1  1
    3 1  1  1
    3 2  1  1
    5 3  1  1
    6 5  1  1;


! Unequal class sizes, case 3;
!CaUneq03  var = value type wgtof;
!CaUneq03  vardep = type;
!CaUneq03  varexp = value; ! Explanatory variables;
!CaUneq03  varpltx = value;  ! Variable on X axis in plot/chart/graph;
!CaUneq03  varplty = wgtof;  ! Variable on Y axis in plot/chart/graph;
!CaUneq03  varwgt = wgtof;
!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;

! Illustrate separability and parsimony;
!CaSePar   var = X1  X2  type wgtof;
!CaSePar   vardep = type;
!CaSePar   varexp = X1 X2; ! Explanatory variables;
!CaSePar   varpltx = X1; ! Variable on X axis in plot/chart/graph;
!CaSePar   varplty = X2; ! Variable on Y axis in plot/chart/graph;
!CaSePar   varwgt = wgtof;
!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   varpltx = TEST1;
!Ca66   varplty = TEST2;
! Variable on X axis in plot/chart/graph;
!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;

!Fisher's Iris Data set. setosa is easily distinguished from the other 2.
Observations 1-50 are setosa, 51-100 are versicolor, 101-150 are virginica.
!CaIris  var = Order Sepallen SepalWid PetalLen PetalWid Species wgtof;
!CaIris  vardep = Species; ! The dependent(categorical) variable;
!CaIris  varexp = Sepallen SepalWid PetalLen PetalWid;
!CaIris  varpltx = Sepallen ; ! Variable on X axis in plot/chart/graph;
!CaIris  varplty = SepalWid ; ! Variable on Y axis in plot/chart/graph;
!CaIris  varwgt = wgtof;   ! Weight column (not used in Fisher method);
!Data  Sepal Sepal Petal  Petal
Order	length width length width Species Wgt;
!CaIris  xdat =
1	5.1	3.5	1.4	0.2  0 1 
2	4.9	3.0	1.4	0.2  0 1 
3	4.7	3.2	1.3	0.2  0 1 
4	4.6	3.1	1.5	0.2  0 1 
5	5.0	3.6	1.4	0.3  0 1 
6	5.4	3.9	1.7	0.4  0 1 
7	4.6	3.4	1.4	0.3  0 1 
8	5.0	3.4	1.5	0.2  0 1 
9	4.4	2.9	1.4	0.2  0 1 
10	4.9	3.1	1.5	0.1  0 1 
11	5.4	3.7	1.5	0.2  0 1 
12	4.8	3.4	1.6	0.2  0 1 
13	4.8	3.0	1.4	0.1  0 1 
14	4.3	3.0	1.1	0.1  0 1 
15	5.8	4.0	1.2	0.2  0 1 
16	5.7	4.4	1.5	0.4  0 1 
17	5.4	3.9	1.3	0.4  0 1 
18	5.1	3.5	1.4	0.3  0 1 
19	5.7	3.8	1.7	0.3  0 1 
20	5.1	3.8	1.5	0.3  0 1 
21	5.4	3.4	1.7	0.2  0 1 
22	5.1	3.7	1.5	0.4  0 1 
23	4.6	3.6	1.0	0.2  0 1 
24	5.1	3.3	1.7	0.5  0 1 
25	4.8	3.4	1.9	0.2  0 1 
26	5.0	3.0	1.6	0.2  0 1 
27	5.0	3.4	1.6	0.4  0 1 
28	5.2	3.5	1.5	0.2  0 1 
29	5.2	3.4	1.4	0.2  0 1 
30	4.7	3.2	1.6	0.2  0 1 
31	4.8	3.1	1.6	0.2  0 1 
32	5.4	3.4	1.5	0.4  0 1 
33	5.2	4.1	1.5	0.1  0 1 
34	5.5	4.2	1.4	0.2  0 1 
35	4.9	3.1	1.5	0.2  0 1 
36	5.0	3.2	1.2	0.2  0 1 
37	5.5	3.5	1.3	0.2  0 1 
38	4.9	3.6	1.4	0.1  0 1 
39	4.4	3.0	1.3	0.2  0 1 
40	5.1	3.4	1.5	0.2  0 1 
41	5.0	3.5	1.3	0.3  0 1 
42	4.5	2.3	1.3	0.3  0 1 
43	4.4	3.2	1.3	0.2  0 1 
44	5.0	3.5	1.6	0.6  0 1 
45	5.1	3.8	1.9	0.4  0 1 
46	4.8	3.0	1.4	0.3  0 1 
47	5.1	3.8	1.6	0.2  0 1 
48	4.6	3.2	1.4	0.2  0 1 
49	5.3	3.7	1.5	0.2  0 1 
50	5.0	3.3	1.4	0.2  0 1 
51	7.0	3.2	4.7	1.4  1 1 
52	6.4	3.2	4.5	1.5  1 1 
53	6.9	3.1	4.9	1.5  1 1 
54	5.5	2.3	4.0	1.3  1 1 
55	6.5	2.8	4.6	1.5  1 1 
56	5.7	2.8	4.5	1.3  1 1 
57	6.3	3.3	4.7	1.6  1 1 
58	4.9	2.4	3.3	1.0  1 1 
59	6.6	2.9	4.6	1.3  1 1 
60	5.2	2.7	3.9	1.4  1 1 
61	5.0	2.0	3.5	1.0  1 1 
62	5.9	3.0	4.2	1.5  1 1 
63	6.0	2.2	4.0	1.0  1 1 
64	6.1	2.9	4.7	1.4  1 1 
65	5.6	2.9	3.6	1.3  1 1 
66	6.7	3.1	4.4	1.4  1 1 
67	5.6	3.0	4.5	1.5  1 1 
68	5.8	2.7	4.1	1.0  1 1 
69	6.2	2.2	4.5	1.5  1 1 
70	5.6	2.5	3.9	1.1  1 1 
71	5.9	3.2	4.8	1.8  1 1 
72	6.1	2.8	4.0	1.3  1 1 
73	6.3	2.5	4.9	1.5  1 1 
74	6.1	2.8	4.7	1.2  1 1 
75	6.4	2.9	4.3	1.3  1 1 
76	6.6	3.0	4.4	1.4  1 1 
77	6.8	2.8	4.8	1.4  1 1 
78	6.7	3.0	5.0	1.7  1 1 
79	6.0	2.9	4.5	1.5  1 1 
80	5.7	2.6	3.5	1.0  1 1 
81	5.5	2.4	3.8	1.1  1 1 
82	5.5	2.4	3.7	1.0  1 1 
83	5.8	2.7	3.9	1.2  1 1 
84	6.0	2.7	5.1	1.6  1 1 
85	5.4	3.0	4.5	1.5  1 1 
86	6.0	3.4	4.5	1.6  1 1 
87	6.7	3.1	4.7	1.5  1 1 
88	6.3	2.3	4.4	1.3  1 1 
89	5.6	3.0	4.1	1.3  1 1 
90	5.5	2.5	4.0	1.3  1 1 
91	5.5	2.6	4.4	1.2  1 1 
92	6.1	3.0	4.6	1.4  1 1 
93	5.8	2.6	4.0	1.2  1 1 
94	5.0	2.3	3.3	1.0  1 1 
95	5.6	2.7	4.2	1.3  1 1 
96	5.7	3.0	4.2	1.2  1 1 
97	5.7	2.9	4.2	1.3  1 1 
98	6.2	2.9	4.3	1.3  1 1 
99	5.1	2.5	3.0	1.1  1 1 
100	5.7	2.8	4.1	1.3  1 1 
101	6.3	3.3	6.0	2.5   1 1 
102	5.8	2.7	5.1	1.9   1 1 
103	7.1	3.0	5.9	2.1   1 1 
104	6.3	2.9	5.6	1.8   1 1 
105	6.5	3.0	5.8	2.2   1 1 
106	7.6	3.0	6.6	2.1   1 1 
107	4.9	2.5	4.5	1.7   1 1 
108	7.3	2.9	6.3	1.8   1 1 
109	6.7	2.5	5.8	1.8   1 1 
110	7.2	3.6	6.1	2.5   1 1 
111	6.5	3.2	5.1	2.0   1 1 
112	6.4	2.7	5.3	1.9   1 1 
113	6.8	3.0	5.5	2.1   1 1 
114	5.7	2.5	5.0	2.0   1 1 
115	5.8	2.8	5.1	2.4   1 1 
116	6.4	3.2	5.3	2.3   1 1 
117	6.5	3.0	5.5	1.8   1 1 
118	7.7	3.8	6.7	2.2   1 1 
119	7.7	2.6	6.9	2.3   1 1 
120	6.0	2.2	5.0	1.5   1 1 
121	6.9	3.2	5.7	2.3   1 1 
122	5.6	2.8	4.9	2.0   1 1 
123	7.7	2.8	6.7	2.0   1 1 
124	6.3	2.7	4.9	1.8   1 1 
125	6.7	3.3	5.7	2.1   1 1 
126	7.2	3.2	6.0	1.8   1 1 
127	6.2	2.8	4.8	1.8   1 1 
128	6.1	3.0	4.9	1.8   1 1 
129	6.4	2.8	5.6	2.1   1 1 
130	7.2	3.0	5.8	1.6   1 1 
131	7.4	2.8	6.1	1.9   1 1 
132	7.9	3.8	6.4	2.0   1 1 
133	6.4	2.8	5.6	2.2   1 1 
134	6.3	2.8	5.1	1.5   1 1 
135	6.1	2.6	5.6	1.4   1 1 
136	7.7	3.0	6.1	2.3   1 1 
137	6.3	3.4	5.6	2.4   1 1 
138	6.4	3.1	5.5	1.8   1 1 
139	6.0	3.0	4.8	1.8   1 1 
140	6.9	3.1	5.4	2.1   1 1 
141	6.7	3.1	5.6	2.4   1 1 
142	6.9	3.1	5.1	2.3   1 1 
143	5.8	2.7	5.1	1.9   1 1 
144	6.8	3.2	5.9	2.3   1 1 
145	6.7	3.3	5.7	2.5   1 1 
146	6.7	3.0	5.2	2.3   1 1 
147	6.3	2.5	5.0	1.9   1 1 
148	6.5	3.0	5.2	2.0   1 1 
149	6.2	3.4	5.4	2.3   1 1 
150	5.9	3.0	5.1	1.8   1 1 
;

!  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;      ! Dependent variable ;
!CaSwiss;  varexp = Length  Left     Right   Bottom  Top     Diagonal;  ! Explanatory vars;
!CaSwiss;  varpltx = Right; ! Variable on X axis in plot/chart/graph;
!CaSwiss;  varplty = Diagonal; ! Variable on Y axis in plot/chart/graph;
!CaSwiss;  alpha = 0.0001; ! Wgt applied to max error;
!CaSwiss;  varwgt = wgtof; ! Column of wgt to apply to each observation;

!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

calc:
  @SET( 'OROUTE',1);  ! Output to window after this many lines in buffer;
  @SET( 'WNLINE',10000); !  (27)  Max command window lines (Windows only);

! Get index of dependent variable;
  @for( vardep( k): depndx = k);

! Count number observations in each class;
  nobs0 = @sum( obs( i) | xdat( i, depndx) #eq# 0: 1);
  nobs1 = @sum( obs( i) | xdat( i, depndx) #eq# 1: 1);

! Compute the means: mu1(k) and mu2(k),  within group and overall means;
!   First get the sums;
  @for( varexp( k):
     mu0( k) = @sum( obs( i) | xdat( i, depndx) #eq# 0: xdat( i, k));
     mu1( k) = @sum( obs( i) | xdat( i, depndx) #eq# 1: xdat( i, k));
!  and now convert to means, overall and within class;
     mutot( k) = (mu0( k) + mu1( k))/( nobs0 + nobs1);
     mu0( k) = mu0( k)/ nobs0;
     mu1( k) = mu1( k)/ nobs1;
      );

  @write('      Expvar     Mean0     Mean1    MeanTot', @newline(1));
  @for( varexp( k):
    @write('   ', @format( varexp( k),'9s'),' ', @format( mu0(k), '9.4f') ,' ', @format( mu1(k), '9.4f') ,
                   ' ', @format( mutot(k), '9.4f') , @newline(1));
      );
! Get ready to compute the covariance matrix for all the data;
!  Initialize full matrix, so invertible;
  @for( var( k1):
    @for( var( k2):
      covar( k1, k2) = 0;
        );
      covar( k1, k1) = 1;
      );

! Now actually compute within class covariance.
     The -2 in the denominator compensates for estimating mu0 and mu2;
  @for( varexp( k1):
    @for( varexp( k2) | k2 #ge# k1:
      covar( k1, k2) = 
       ( @sum( obs( i) | xdat( i, depndx) #eq# 0: ( xdat( i, k1) - mu0( k1))*( xdat( i, k2) - mu0( k2)))
       + @sum( obs( i) | xdat( i, depndx) #eq# 1: ( xdat( i, k1) - mu1( k1))*( xdat( i, k2) - mu1( k2))))/( nobs0 + nobs1 -2);
       covar( k2, k1) = covar( k1, k2); ! It is symmetric;
        );
      );

! In case we want to see it;
 @write( @newline(1),' Covariance matrix', @newline( 1));
 @for( varexp( k1):
   @for( varexp( k2):
     @write(' ', @format( covar( k1, k2),'9.3f'));
       );
     @write( @newline( 1));
     );
  @write( @newline( 1));

! Invert the covariance matrix;
  covarINV = @INVERSE( covar);

! In case we want to see the inverse;
 @write( @newline(1),' Inverse of Covariance matrix', @newline( 1));
 @for( varexp( k1):
   @for( varexp( k2):
     @write(' ', @format( covarinv( k1, k2),'9.3f'));
       );
     @write( @newline( 1));
     );
  @write( @newline( 1));

! The beta's are given (by sigma inverse) * (mu2 - mu1);
!  Intuitively, if the correlations = 0, then explanatory variable(EV) k gets
    a very positive weight if both variance of EV k is small and 
   outcome type 1 is associate with a large EV k, and
    a very negative weight if both variance of EV k is small and 
   outcome type 0 is assocated with a very large EV k;

  @for( varexp( k1):
    beta( k1) = @sum( varexp( k2): covarinv( k1, k2)*( mu1( k2) - mu0( k2)));
      );

! Compute -score of the mean point;
    beta0 = - @sum( varexp( k): beta( k)*( mu1(k) + mu0( k))/2);

  @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):
   SCORE( I) = 
       BETA0 + @SUM( varexp( J): BETA( J)* xdat(I,J));
   @IFC( xdat( I, depndx) #LT# 1:
       ERR( I) = @SMAX( 0, SCORE( I));
     @ELSE
       ERR( i) = @SMAX( 0, -SCORE( i)); 
      );
    @write( @format( i, '4.0f'), '   ', xdat( i, depndx), '   ',
            @format( score( i),'10.2f'), '  ', @format( ERR( i), '10.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