1.
2.  Macro to classify new points based on a
3.  prior Fisher's discriminant analysis
4.
5.  To run this macro:
6.
7.  1) Define the data matrix       ZZZZX
8.  2) Define the group id variable ZTAG
9.  3) Call FISHDIS.DP to define discriminant functions
10.     EVECT1, EVECT2, ..
11.  4) Define NR = number of discriminant to use (NR <= P)
12.  5) A matrix XNEW containing the new points to classify
13.  6) Enter:  CALL FISHCLAS.DP
14.
15.  This macro returns a variable, YGROUP, which identifies
16.  the group to which the new point is classified.  YGROUP
17.  will have the same numbe of rows as XNEW.
18.
19FEEDBACK OFF
20DELETE YGROUP TEMP YY YX
21.
22IF NR NOT EXIST
23  LET NR = 2
24END OF IF
25.
26LET NEWPTS = MATRIX NUMBER OF ROWS XNEW
27.
28LOOP FOR I = 1 1 NEWPTS
29  LET X0 = MATRIX ROW XNEW I
30  .
31  .  Calculate Yhats and Ybars
32  .
33  LET XBAR = MATRIX GROUP MEANS ZZZZX ZTAG
34  .
35  LOOP FOR J = 1 1 NG
36      LET XBARTEMP = MATRIX ROW XBAR J
37      LOOP FOR K = 1 1 NR
38          LET TEMP = EVECT^K * XBARTEMP
39          LET YBAR^J(K) = SUM TEMP
40          LET TEMP = EVECT^K * X0
41          LET Y(K) = SUM TEMP
42      END OF LOOP
43  END OF LOOP
44  .
45  .  Find minimum sum of (yhat - ybar) square
46  .
47  PROBE CPUMAX
48  LET MINSUM = PROBEVAL
49  LOOP FOR J = 1 1 NG
50      LET ATEMP = (Y - YBAR^J)**2
51      LET ASUM = SUM ATEMP
52      IF ASUM < MINSUM
53        LET IGROUP = J
54        LET MINSUM = ASUM
55      END OF IF
56  END OF LOOP
57  LET YGROUP(I) = IGROUP
58  LET YX(I) = Y(1)
59  IF NR >= 2
60    LET YY(I) = Y(2)
61  END OF IF
62END OF LOOP
63.
64IF PLOTFLAG = 1
65  LET ZY = LINEAR COMBINATION ZZZZX EVECT1
66  LET ZX = LINEAR COMBINATION ZZZZX EVECT2
67  PLOT ZY ZX ZTAG
68  LIMITS FREEZE
69  PRE-ERASE OFF
70  CHARACTER FILL ON ALL
71  CHARACTER SIZE 1.2
72  PLOT YY YX
73  RESET PLOT CONTROL
74END OF IF
75.
76FEEDBACK ON
77PRINT YGROUP YX YY
78