docs: public double computeAnomalySupervised(RuleClassification rl, int ruleIndex, Instance inst) { //Not supervised
  			ArrayList<Integer> caseAnomalyTemp = new ArrayList<Integer>();
  		    ArrayList<ArrayList<Double>> AttribAnomalyStatisticTemp2 = new ArrayList<ArrayList<Double>>();
  		    double D = 0.0;
  			double N = 0.0;
  			if (rl.instancesSeen > this.anomalyNumInstThresholdOption.getValue() && this.anomalyDetectionOption.isSet()) { 
  				for (int x = 0; x < inst.numAttributes() - 1; x++) {
  					if(!inst.isMissing(x)){
  						ArrayList<Double> AttribAnomalyStatisticTemp = new ArrayList<Double>();
  						if (inst.attribute(x).isNumeric()) { //Numeric Attributes
  							if((rl.instancesSeen - rl.attributeMissingValues.getValue(x)) > 30){
  								double mean = computeMean((double)rl.attributeStatisticsSupervised.get(x).get((int)inst.classValue()), (int)rl.obserClassDistrib.getValue((int)inst.classValue()));
  								double sd = computeSD((double)rl.squaredAttributeStatisticsSupervised.get(x).get((int)inst.classValue()), (double)rl.attributeStatisticsSupervised.get(x).get((int)inst.classValue()), (int)rl.obserClassDistrib.getValue((int)inst.classValue()));
  								double probability = computeProbability(mean, sd, inst.value(x));
  								if(probability!=0.0) {
  									D = D + Math.log(probability);
  									if(probability < this.probabilityThresholdOption.getValue()){  //0.10
  										N = N + Math.log(probability);
  					            	 	AttribAnomalyStatisticTemp.add((double)x);
  					            	    AttribAnomalyStatisticTemp.add(inst.value(x));
  						                AttribAnomalyStatisticTemp.add(mean);
  						            	AttribAnomalyStatisticTemp.add(sd);
  						            	AttribAnomalyStatisticTemp.add(probability);
  						            	AttribAnomalyStatisticTemp2.add(AttribAnomalyStatisticTemp);
  						            	}
  									}
  								}
  							}else { //Nominal
  								double attribVal = inst.value(x); //Attribute value
  								double classVal = inst.classValue(); //Attribute value
  								double probability = rl.observers.get(x).probabilityOfAttributeValueGivenClass(attribVal, (int)classVal);
  								if(probability!=0.0) {
  									D = D + Math.log(probability);
  									if(probability < this.probabilityThresholdOption.getValue()){  //0.10
  										N = N + Math.log(probability);
  					            	 	AttribAnomalyStatisticTemp.add((double)x);
  					            	    AttribAnomalyStatisticTemp.add(inst.value(x));
  						            	AttribAnomalyStatisticTemp.add(probability);
  						            	AttribAnomalyStatisticTemp2.add(AttribAnomalyStatisticTemp);
  						            	}
  									}
  								}
  						}
  					}
  				}
  			double anomaly=0.0;
  			if(D !=0){
  			 anomaly = Math.abs(N/D);
  			}
  			if(anomaly >= this.anomalyProbabilityThresholdOption.getValue()){
  				caseAnomalyTemp.add(this.numInstance);
  				double val = anomaly * 100;
  				caseAnomalyTemp.add((int)val);
  				this.caseAnomalySupervised.add(caseAnomalyTemp);
  				RuleClassification y = new RuleClassification(this.ruleSet.get(ruleIndex));
  				this.ruleSetAnomaliesSupervised.add(y);
  				this.ruleAnomaliesIndexSupervised.add(ruleIndex + 1);
  				this.ruleAttribAnomalyStatisticsSupervised.add(AttribAnomalyStatisticTemp2);
  			}
  			return anomaly;
  			}