This example uses linear discrimination with equal prior probabilities on Fisher's (1936) iris data. This example illustrates the use of the DiscriminantAnalysis class.
import com.imsl.stat.*;
import java.text.*;
import com.imsl.math.PrintMatrix;
import com.imsl.math.PrintMatrixFormat;
public class DiscriminantAnalysisEx1 {
public static void main(String args[]) throws Exception {
double[][] xorig = {
{1.0, 5.1, 3.5, 1.4, .2}, {1.0, 4.9, 3.0, 1.4, .2},
{1.0, 4.7, 3.2, 1.3, .2}, {1.0, 4.6, 3.1, 1.5, .2},
{1.0, 5.0, 3.6, 1.4, .2}, {1.0, 5.4, 3.9, 1.7, .4},
{1.0, 4.6, 3.4, 1.4, .3}, {1.0, 5.0, 3.4, 1.5, .2},
{1.0, 4.4, 2.9, 1.4, .2}, {1.0, 4.9, 3.1, 1.5, .1},
{1.0, 5.4, 3.7, 1.5, .2}, {1.0, 4.8, 3.4, 1.6, .2},
{1.0, 4.8, 3.0, 1.4, .1}, {1.0, 4.3, 3.0, 1.1, .1},
{1.0, 5.8, 4.0, 1.2, .2}, {1.0, 5.7, 4.4, 1.5, .4},
{1.0, 5.4, 3.9, 1.3, .4}, {1.0, 5.1, 3.5, 1.4, .3},
{1.0, 5.7, 3.8, 1.7, .3}, {1.0, 5.1, 3.8, 1.5, .3},
{1.0, 5.4, 3.4, 1.7, .2}, {1.0, 5.1, 3.7, 1.5, .4},
{1.0, 4.6, 3.6, 1.0, .2}, {1.0, 5.1, 3.3, 1.7, .5},
{1.0, 4.8, 3.4, 1.9, .2}, {1.0, 5.0, 3.0, 1.6, .2},
{1.0, 5.0, 3.4, 1.6, .4}, {1.0, 5.2, 3.5, 1.5, .2},
{1.0, 5.2, 3.4, 1.4, .2}, {1.0, 4.7, 3.2, 1.6, .2},
{1.0, 4.8, 3.1, 1.6, .2}, {1.0, 5.4, 3.4, 1.5, .4},
{1.0, 5.2, 4.1, 1.5, .1}, {1.0, 5.5, 4.2, 1.4, .2},
{1.0, 4.9, 3.1, 1.5, .2}, {1.0, 5.0, 3.2, 1.2, .2},
{1.0, 5.5, 3.5, 1.3, .2}, {1.0, 4.9, 3.6, 1.4, .1},
{1.0, 4.4, 3.0, 1.3, .2}, {1.0, 5.1, 3.4, 1.5, .2},
{1.0, 5.0, 3.5, 1.3, .3}, {1.0, 4.5, 2.3, 1.3, .3},
{1.0, 4.4, 3.2, 1.3, .2}, {1.0, 5.0, 3.5, 1.6, .6},
{1.0, 5.1, 3.8, 1.9, .4}, {1.0, 4.8, 3.0, 1.4, .3},
{1.0, 5.1, 3.8, 1.6, .2}, {1.0, 4.6, 3.2, 1.4, .2},
{1.0, 5.3, 3.7, 1.5, .2}, {1.0, 5.0, 3.3, 1.4, .2},
{2.0, 7.0, 3.2, 4.7, 1.4}, {2.0, 6.4, 3.2, 4.5, 1.5},
{2.0, 6.9, 3.1, 4.9, 1.5}, {2.0, 5.5, 2.3, 4.0, 1.3},
{2.0, 6.5, 2.8, 4.6, 1.5}, {2.0, 5.7, 2.8, 4.5, 1.3},
{2.0, 6.3, 3.3, 4.7, 1.6}, {2.0, 4.9, 2.4, 3.3, 1.0},
{2.0, 6.6, 2.9, 4.6, 1.3}, {2.0, 5.2, 2.7, 3.9, 1.4},
{2.0, 5.0, 2.0, 3.5, 1.0}, {2.0, 5.9, 3.0, 4.2, 1.5},
{2.0, 6.0, 2.2, 4.0, 1.0}, {2.0, 6.1, 2.9, 4.7, 1.4},
{2.0, 5.6, 2.9, 3.6, 1.3}, {2.0, 6.7, 3.1, 4.4, 1.4},
{2.0, 5.6, 3.0, 4.5, 1.5}, {2.0, 5.8, 2.7, 4.1, 1.0},
{2.0, 6.2, 2.2, 4.5, 1.5}, {2.0, 5.6, 2.5, 3.9, 1.1},
{2.0, 5.9, 3.2, 4.8, 1.8}, {2.0, 6.1, 2.8, 4.0, 1.3},
{2.0, 6.3, 2.5, 4.9, 1.5}, {2.0, 6.1, 2.8, 4.7, 1.2},
{2.0, 6.4, 2.9, 4.3, 1.3}, {2.0, 6.6, 3.0, 4.4, 1.4},
{2.0, 6.8, 2.8, 4.8, 1.4}, {2.0, 6.7, 3.0, 5.0, 1.7},
{2.0, 6.0, 2.9, 4.5, 1.5}, {2.0, 5.7, 2.6, 3.5, 1.0},
{2.0, 5.5, 2.4, 3.8, 1.1}, {2.0, 5.5, 2.4, 3.7, 1.0},
{2.0, 5.8, 2.7, 3.9, 1.2}, {2.0, 6.0, 2.7, 5.1, 1.6},
{2.0, 5.4, 3.0, 4.5, 1.5}, {2.0, 6.0, 3.4, 4.5, 1.6},
{2.0, 6.7, 3.1, 4.7, 1.5}, {2.0, 6.3, 2.3, 4.4, 1.3},
{2.0, 5.6, 3.0, 4.1, 1.3}, {2.0, 5.5, 2.5, 4.0, 1.3},
{2.0, 5.5, 2.6, 4.4, 1.2}, {2.0, 6.1, 3.0, 4.6, 1.4},
{2.0, 5.8, 2.6, 4.0, 1.2}, {2.0, 5.0, 2.3, 3.3, 1.0},
{2.0, 5.6, 2.7, 4.2, 1.3}, {2.0, 5.7, 3.0, 4.2, 1.2},
{2.0, 5.7, 2.9, 4.2, 1.3}, {2.0, 6.2, 2.9, 4.3, 1.3},
{2.0, 5.1, 2.5, 3.0, 1.1}, {2.0, 5.7, 2.8, 4.1, 1.3},
{3.0, 6.3, 3.3, 6.0, 2.5}, {3.0, 5.8, 2.7, 5.1, 1.9},
{3.0, 7.1, 3.0, 5.9, 2.1}, {3.0, 6.3, 2.9, 5.6, 1.8},
{3.0, 6.5, 3.0, 5.8, 2.2}, {3.0, 7.6, 3.0, 6.6, 2.1},
{3.0, 4.9, 2.5, 4.5, 1.7}, {3.0, 7.3, 2.9, 6.3, 1.8},
{3.0, 6.7, 2.5, 5.8, 1.8}, {3.0, 7.2, 3.6, 6.1, 2.5},
{3.0, 6.5, 3.2, 5.1, 2.0}, {3.0, 6.4, 2.7, 5.3, 1.9},
{3.0, 6.8, 3.0, 5.5, 2.1}, {3.0, 5.7, 2.5, 5.0, 2.0},
{3.0, 5.8, 2.8, 5.1, 2.4}, {3.0, 6.4, 3.2, 5.3, 2.3},
{3.0, 6.5, 3.0, 5.5, 1.8}, {3.0, 7.7, 3.8, 6.7, 2.2},
{3.0, 7.7, 2.6, 6.9, 2.3}, {3.0, 6.0, 2.2, 5.0, 1.5},
{3.0, 6.9, 3.2, 5.7, 2.3}, {3.0, 5.6, 2.8, 4.9, 2.0},
{3.0, 7.7, 2.8, 6.7, 2.0}, {3.0, 6.3, 2.7, 4.9, 1.8},
{3.0, 6.7, 3.3, 5.7, 2.1}, {3.0, 7.2, 3.2, 6.0, 1.8},
{3.0, 6.2, 2.8, 4.8, 1.8}, {3.0, 6.1, 3.0, 4.9, 1.8},
{3.0, 6.4, 2.8, 5.6, 2.1}, {3.0, 7.2, 3.0, 5.8, 1.6},
{3.0, 7.4, 2.8, 6.1, 1.9}, {3.0, 7.9, 3.8, 6.4, 2.0},
{3.0, 6.4, 2.8, 5.6, 2.2}, {3.0, 6.3, 2.8, 5.1, 1.5},
{3.0, 6.1, 2.6, 5.6, 1.4}, {3.0, 7.7, 3.0, 6.1, 2.3},
{3.0, 6.3, 3.4, 5.6, 2.4}, {3.0, 6.4, 3.1, 5.5, 1.8},
{3.0, 6.0, 3.0, 4.8, 1.8}, {3.0, 6.9, 3.1, 5.4, 2.1},
{3.0, 6.7, 3.1, 5.6, 2.4}, {3.0, 6.9, 3.1, 5.1, 2.3},
{3.0, 5.8, 2.7, 5.1, 1.9}, {3.0, 6.8, 3.2, 5.9, 2.3},
{3.0, 6.7, 3.3, 5.7, 2.5}, {3.0, 6.7, 3.0, 5.2, 2.3},
{3.0, 6.3, 2.5, 5.0, 1.9}, {3.0, 6.5, 3.0, 5.2, 2.0},
{3.0, 6.2, 3.4, 5.4, 2.3}, {3.0, 5.9, 3.0, 5.1, 1.8}};
int[] group = new int[xorig.length];
int[] varIndex = {1,2,3,4};
for (int i = 0; i < xorig.length; i++) {
group[i] = (int) xorig[i][0];
}
int nvar = xorig[0].length -1;
DiscriminantAnalysis da = new DiscriminantAnalysis(nvar, 3);
da.setCovarianceComputation(da.POOLED);
da.setClassificationMethod(da.RECLASSIFICATION);
da.update(xorig, group, varIndex);
da.classify(xorig, group, varIndex);
new PrintMatrix("Xmean: ").print(da.getMeans());
new PrintMatrix("Coef: ").print(da.getCoefficients());
new PrintMatrix("Counts: ").print(da.getGroupCounts());
new PrintMatrix("Stats: ").print(da.getStatistics());
int[] cm = da.getClassMembership();
int[][] cMem = new int[1][cm.length];
for (int i=0; i<cm.length; i++) {
cMem[0][i] = cm[i];
}
new PrintMatrix("ClassMembership").setPageWidth(50).print(cMem);
new PrintMatrix("ClassTable: ").print(da.getClassTable());
double cov[][][] = da.getCovariance();
for (int i= 0; i<cov.length;i++) {
new PrintMatrix("Covariance Matrix "+i+" : ").print(cov[i]);
}
new PrintMatrix("Prior : ").print(da.getPrior());
PrintMatrixFormat pmf = new PrintMatrixFormat();
pmf.setNumberFormat(new java.text.DecimalFormat("0.00"));
new PrintMatrix("PROB: ").print(pmf, da.getProbability());
new PrintMatrix("MAHALANOBIS: ").print(da.getMahalanobis());
System.out.println("nrmiss = " + da.getNumberOfRowsMissing());
}
}
Xmean:
0 1 2 3
0 5.006 3.428 1.462 0.246
1 5.936 2.77 4.26 1.326
2 6.588 2.974 5.552 2.026
Coef:
0 1 2 3 4
0 -86.308 23.544 23.588 -16.431 -17.398
1 -72.853 15.698 7.073 5.211 6.434
2 -104.368 12.446 3.685 12.767 21.079
Counts:
0
0 50
1 50
2 50
Stats:
0
0 147
1 ?
2 ?
3 ?
4 ?
5 ?
6 ?
7 -9.959
8 50
9 50
10 50
11 150
ClassMembership
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
0 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
0 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
0 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
0 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
0 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
ClassTable:
0 1 2
0 50 0 0
1 0 48 2
2 0 1 49
Covariance Matrix 0 :
0 1 2 3
0 0.265 0.093 0.168 0.038
1 0.093 0.115 0.055 0.033
2 0.168 0.055 0.185 0.043
3 0.038 0.033 0.043 0.042
Prior :
0
0 0.333
1 0.333
2 0.333
PROB:
0 1 2
0 1.00 0.00 0.00
1 1.00 0.00 0.00
2 1.00 0.00 0.00
3 1.00 0.00 0.00
4 1.00 0.00 0.00
5 1.00 0.00 0.00
6 1.00 0.00 0.00
7 1.00 0.00 0.00
8 1.00 0.00 0.00
9 1.00 0.00 0.00
10 1.00 0.00 0.00
11 1.00 0.00 0.00
12 1.00 0.00 0.00
13 1.00 0.00 0.00
14 1.00 0.00 0.00
15 1.00 0.00 0.00
16 1.00 0.00 0.00
17 1.00 0.00 0.00
18 1.00 0.00 0.00
19 1.00 0.00 0.00
20 1.00 0.00 0.00
21 1.00 0.00 0.00
22 1.00 0.00 0.00
23 1.00 0.00 0.00
24 1.00 0.00 0.00
25 1.00 0.00 0.00
26 1.00 0.00 0.00
27 1.00 0.00 0.00
28 1.00 0.00 0.00
29 1.00 0.00 0.00
30 1.00 0.00 0.00
31 1.00 0.00 0.00
32 1.00 0.00 0.00
33 1.00 0.00 0.00
34 1.00 0.00 0.00
35 1.00 0.00 0.00
36 1.00 0.00 0.00
37 1.00 0.00 0.00
38 1.00 0.00 0.00
39 1.00 0.00 0.00
40 1.00 0.00 0.00
41 1.00 0.00 0.00
42 1.00 0.00 0.00
43 1.00 0.00 0.00
44 1.00 0.00 0.00
45 1.00 0.00 0.00
46 1.00 0.00 0.00
47 1.00 0.00 0.00
48 1.00 0.00 0.00
49 1.00 0.00 0.00
50 0.00 1.00 0.00
51 0.00 1.00 0.00
52 0.00 1.00 0.00
53 0.00 1.00 0.00
54 0.00 1.00 0.00
55 0.00 1.00 0.00
56 0.00 0.99 0.01
57 0.00 1.00 0.00
58 0.00 1.00 0.00
59 0.00 1.00 0.00
60 0.00 1.00 0.00
61 0.00 1.00 0.00
62 0.00 1.00 0.00
63 0.00 0.99 0.01
64 0.00 1.00 0.00
65 0.00 1.00 0.00
66 0.00 0.98 0.02
67 0.00 1.00 0.00
68 0.00 0.96 0.04
69 0.00 1.00 0.00
70 0.00 0.25 0.75
71 0.00 1.00 0.00
72 0.00 0.82 0.18
73 0.00 1.00 0.00
74 0.00 1.00 0.00
75 0.00 1.00 0.00
76 0.00 1.00 0.00
77 0.00 0.69 0.31
78 0.00 0.99 0.01
79 0.00 1.00 0.00
80 0.00 1.00 0.00
81 0.00 1.00 0.00
82 0.00 1.00 0.00
83 0.00 0.14 0.86
84 0.00 0.96 0.04
85 0.00 0.99 0.01
86 0.00 1.00 0.00
87 0.00 1.00 0.00
88 0.00 1.00 0.00
89 0.00 1.00 0.00
90 0.00 1.00 0.00
91 0.00 1.00 0.00
92 0.00 1.00 0.00
93 0.00 1.00 0.00
94 0.00 1.00 0.00
95 0.00 1.00 0.00
96 0.00 1.00 0.00
97 0.00 1.00 0.00
98 0.00 1.00 0.00
99 0.00 1.00 0.00
100 0.00 0.00 1.00
101 0.00 0.00 1.00
102 0.00 0.00 1.00
103 0.00 0.00 1.00
104 0.00 0.00 1.00
105 0.00 0.00 1.00
106 0.00 0.05 0.95
107 0.00 0.00 1.00
108 0.00 0.00 1.00
109 0.00 0.00 1.00
110 0.00 0.01 0.99
111 0.00 0.00 1.00
112 0.00 0.00 1.00
113 0.00 0.00 1.00
114 0.00 0.00 1.00
115 0.00 0.00 1.00
116 0.00 0.01 0.99
117 0.00 0.00 1.00
118 0.00 0.00 1.00
119 0.00 0.22 0.78
120 0.00 0.00 1.00
121 0.00 0.00 1.00
122 0.00 0.00 1.00
123 0.00 0.10 0.90
124 0.00 0.00 1.00
125 0.00 0.00 1.00
126 0.00 0.19 0.81
127 0.00 0.13 0.87
128 0.00 0.00 1.00
129 0.00 0.10 0.90
130 0.00 0.00 1.00
131 0.00 0.00 1.00
132 0.00 0.00 1.00
133 0.00 0.73 0.27
134 0.00 0.07 0.93
135 0.00 0.00 1.00
136 0.00 0.00 1.00
137 0.00 0.01 0.99
138 0.00 0.19 0.81
139 0.00 0.00 1.00
140 0.00 0.00 1.00
141 0.00 0.00 1.00
142 0.00 0.00 1.00
143 0.00 0.00 1.00
144 0.00 0.00 1.00
145 0.00 0.00 1.00
146 0.00 0.01 0.99
147 0.00 0.00 1.00
148 0.00 0.00 1.00
149 0.00 0.02 0.98
MAHALANOBIS:
0 1 2
0 0 89.864 179.385
1 89.864 0 17.201
2 179.385 17.201 0
nrmiss = 0
Link to Java source.