View Javadoc
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