1 package edu.psu.geovista.app.errormatrix;
2 import java.util.*;
3 public class calculations
4 { //tested
5 public double getPercentageCorrect(int[][] errormat)
6 {
7 int len;
8 int correct;
9 int total;
10 double percorr;
11 correct = 0;
12 total = 0;
13 len = errormat.length;
14 for (int i = 0; i < len; i ++)
15 {
16 correct +=errormat[i][i];
17 for (int j = 0; j< len; j++)
18 {
19 total +=errormat[i][j];
20 }
21 }
22 percorr = 0;
23 if (total != 0)
24 {
25 percorr = (double)correct/total;
26 }
27 return percorr;
28 }
29 //tested
30 public int totalcorrect(int[][] errormat)
31 {
32 int len;
33 int correct;
34 correct = 0;
35 len = errormat.length;
36 for (int i = 0; i < len; i ++)
37 {
38 correct +=errormat[i][i];
39 }
40 return correct;
41 }
42 public Vector distinctCategories(int[][] reference, int[][] image)
43 {
44 int temp;
45 Vector sizeVector = new Vector();
46 sizeVector.add(new Integer(0));
47 int len = reference.length;
48 int wid = reference[0].length;
49 boolean newcategory = true;
50 //making a list of all distinct categories
51 for (int i= 0 ; i< len; i++)
52 {
53 for (int j= 0; j < wid;j++)
54 {
55 temp = reference[i][j];
56 newcategory= true;
57 for (int co = 0; co < sizeVector.size(); co++)
58 {
59 if (((Integer)sizeVector.elementAt(co)).intValue() == temp)
60 {
61 newcategory = false;
62 }
63 }
64 if (newcategory == true)
65 {
66 //add temp to sizevector
67 sizeVector.add(new Integer(temp));
68 }
69 }
70 }
71 sizeVector.remove(0);
72 return sizeVector;
73 }
74 public int[][] siteAccuracy(int[][] reference, int[][] image )
75 {
76 int[][] errma;
77 int temp;
78 int temp1;
79 int row = 0;
80 int col = 0;
81 Vector sizeVector = new Vector();
82 sizeVector.add(new Integer(0));
83 int len = reference.length;
84 int wid = reference[0].length;
85 boolean newcategory = true;
86 //making a list of all distinct categories
87 for (int i= 0 ; i< len; i++)
88 {
89 for (int j= 0; j < wid;j++)
90 {
91 temp = reference[i][j];
92 newcategory= true;
93 for (int co = 0; co < sizeVector.size(); co++)
94 {
95 if (((Integer)sizeVector.elementAt(co)).intValue() == temp)
96 {
97 newcategory = false;
98 }
99 }
100 if (newcategory == true)
101 {
102 //add temp to sizevector
103 sizeVector.add(new Integer(temp));
104 }
105 }
106 }
107 sizeVector.remove(0);
108 //list of distinct categories made
109
110 errma = new int[sizeVector.size()][sizeVector.size()];
111 for (int i= 0 ; i< sizeVector.size(); i++)
112 {
113 for (int j= 0; j < sizeVector.size();j++)
114 {
115 errma[i][j] = 0;
116 }
117 }
118 for (int i= 0 ; i< len; i++)
119 {
120 for (int j= 0; j < wid;j++)
121 {//looped for each element
122 // decide what to be done with each element
123 temp = reference[i][j];
124 temp1 = image[i][j];
125 if (temp != 0)
126 {
127 for(int si= 0 ; si<sizeVector.size(); si++)
128 {
129 if (temp == ((Integer)sizeVector.elementAt(si)).intValue())
130 {
131 row = si;
132 }
133 if(temp1 == ((Integer)sizeVector.elementAt(si)).intValue())
134 {
135 col = si;
136 }
137 }
138 errma[row][col] += 1;
139 }
140 }
141 }
142 //return the error matrix
143 return errma;
144 }
145
146 public Vector nonsiteAccuracy(int[][] reference, int[][] image)
147 {
148 Vector result;
149 Vector sizeVector = new Vector();
150 int len = reference.length;
151 int wid = reference[0].length;
152 int temp;
153 int rcount;
154 int newimagecount;
155 boolean newcategory = true;
156 //making a list of all distinct categories
157 for (int i= 0 ; i< len; i++)
158 {
159 for (int j= 0; j < wid;j++)
160 {
161 temp = reference[i][j];
162 newcategory= true;
163 for (int co = 0; co < sizeVector.size(); co++)
164 {
165 if (((Integer)sizeVector.elementAt(co)).intValue() == temp)
166 {
167 newcategory = false;
168 }
169 }
170 if (newcategory == true)
171 {
172 //add temp to sizevector
173 sizeVector.add(new Integer(temp));
174 }
175 }
176 }//list of distinct categories made
177 Vector tempVec;
178 result = new Vector();
179 for (int te = 0; te < sizeVector.size();te++)
180 {
181 rcount = 0;
182 newimagecount = 0;
183 temp = ((Integer)sizeVector.elementAt(te)).intValue();
184 for (int i= 0 ; i< len; i++)
185 {
186 for (int j= 0; j<wid;j++)
187 {
188 if (reference[i][j] == temp)
189 rcount +=1;
190 if (image[i][j] == temp)
191 newimagecount +=1;
192 }
193 }
194 tempVec = new Vector();
195 tempVec.add(new Integer(rcount));
196 tempVec.add(new Integer(newimagecount));
197 result.add(tempVec);
198 }
199
200 return result;
201 }
202 //tested
203 public double kappa(int[][] errormat)
204 {
205 int temp;
206 int len = errormat.length;
207 int[][] productmatrix;
208 productmatrix = new int[len][len];
209 int[] rowsum = new int[len];
210 int[] columnsum = new int[len];
211 for (int i = 0; i<len; i++)
212 {
213 temp =0;
214 for (int j = 0; j<len; j++)
215 {
216 temp += errormat[i][j];
217 }
218 rowsum[i]= temp;
219
220 }
221 for (int i=0;i<len; i++)
222 {
223 temp = 0;
224 for (int j = 0; j<len; j++)
225 {
226 temp += errormat[j][i];
227 }
228 columnsum[i] = temp;
229 }
230 for (int i = 0; i<len;i++)
231 {
232 for (int j= 0; j<len;j++)
233 {
234 productmatrix[i][j] = rowsum[i]* columnsum[j];
235 //System.out.print(" " +productmatrix[i][j]);
236 }
237 //System.out.println("");
238 }
239
240 return getPercentageCorrect(productmatrix);
241
242 }
243 //tested
244 public double[] EO(int[][] errormat)
245 {
246 int temp;
247 int total;
248 int len = errormat.length;
249 double[] result;
250 result = new double[len];
251 for (int i = 0; i<len; i++)
252 {
253 temp = 0;
254 total = 0;
255 for (int j = 0; j<len; j++)
256 {
257 total+= errormat[i][j];
258 if (i!=j)
259 {
260 temp += errormat[i][j];
261 }
262 }
263 //System.out.println(temp +" " + total);
264 result[i] = ((double)temp/total)*100;
265 }
266 return result;
267 }
268 //tested
269 public double[] EC(int[][] errormat)
270 {
271 int temp;
272 int total;
273 int len = errormat.length;
274 double[] result;
275 result = new double[len];
276 for (int i = 0; i<len; i++)
277 {
278 temp = 0;
279 total = 0;
280 for (int j = 0; j<len; j++)
281 {
282 total+= errormat[i][j];
283 if (i!=j)
284 {
285 temp += errormat[j][i];
286 }
287 }
288 result[i] = ((double)temp/total)*100;
289 }
290 return result;
291 }
292 //tested
293 public double[] PA(int[][] errormat)
294 {
295 int temp;
296 int total;
297 int len = errormat.length;
298 double[] result;
299 result = new double[len];
300 for (int i = 0; i<len; i++)
301 {
302 temp = 0;
303 total = 0;
304 for (int j = 0; j<len; j++)
305 {
306 total+= errormat[i][j];
307 if (i==j)
308 {
309 temp += errormat[i][j];
310 }
311 }
312 //System.out.println(temp +" " + total);
313 result[i] = ((double)temp/total)*100;
314 }
315 return result;
316 }
317 //tested
318 public double[] CA(int[][] errormat)
319 {
320 int temp;
321 int total;
322 int len = errormat.length;
323 double[] result;
324 result = new double[len];
325 for (int i = 0; i<len; i++)
326 {
327 temp = 0;
328 total = 0;
329 for (int j = 0; j<len; j++)
330 {
331 total+= errormat[j][i];
332 if (i==j)
333 {
334 temp += errormat[j][i];
335 }
336 }
337 result[i] = ((double)temp/total)*100;
338 }
339 return result;
340 }
341 //tested
342 public int[] rowtotals(int[][] errormat)
343 {
344 int total;
345 int len = errormat.length;
346 int[] result;
347 result = new int[len];
348 for (int i = 0; i<len; i++)
349 {
350 total = 0;
351 for (int j = 0; j<len; j++)
352 {
353 total+= errormat[i][j];
354 }
355 result[i] = total;
356 }
357 return result;
358 }
359 //tested
360 public int[] columntotals(int[][] errormat)
361 {
362 int total;
363 int len = errormat.length;
364 int[] result;
365 result = new int[len];
366 for (int i = 0; i<len; i++)
367 {
368 total = 0;
369 for (int j = 0; j<len; j++)
370 {
371 total+= errormat[j][i];
372 }
373 result[i] = total;
374 }
375 return result;
376 }
377 //tested
378 public Vector updatematrix(int[][]errormat, Vector colhead)
379 {
380 int len = errormat.length;
381 Vector tVe;
382 Vector finVec = new Vector();
383 double[] pa = PA(errormat);
384 double[] ca = CA(errormat);
385 double[] eo = EO(errormat);
386 double[] ec = EC(errormat);
387 double ka = kappa(errormat);
388 int[] row = rowtotals(errormat);
389 int[] col = columntotals(errormat);
390 for (int i = 0; i< len; i++)
391 {
392 tVe = new Vector();
393 tVe.add((String)colhead.elementAt(i+1));
394 //tVe.add("NewImage/Reference");
395 for(int j =0;j<len; j++)
396 {
397 tVe.add(new Integer(errormat[i][j]));
398 }
399
400 tVe.add(new Integer(row[i]));
401 tVe.add(new Double(pa[i]).toString());
402 tVe.add(new Double(eo[i]).toString());
403 tVe.add(new Double(ec[i]).toString());
404 finVec.add(tVe);
405 }
406 tVe = new Vector();
407 tVe.add("Totals");
408 //tVe.add((Object)new javax.swing.JLabel("Totals"));
409 //tVe.add(" ");
410 for (int i =0; i<len;i++)
411 {
412 tVe.add(new Integer(col[i]));
413 }
414 tVe.add(new Integer(totalcorrect(errormat)));
415 tVe.add("");
416 tVe.add("");
417 tVe.add("");
418 finVec.add(tVe);
419 tVe = new Vector();
420 tVe.add("CA% ");
421 //tVe.add(" ");
422 for (int i = 0; i<len; i++)
423 {
424 tVe.add(new Double(ca[i]));
425 }
426 tVe.add("");
427 tVe.add("");
428 tVe.add("Kappa");
429 tVe.add(new Double(ka));
430 finVec.add(tVe);
431 return finVec;
432 }
433 }
434
435
436
This page was automatically generated by Maven