content: /*
   *    This program is free software; you can redistribute it and/or modify
   *    it under the terms of the GNU General Public License as published by
   *    the Free Software Foundation; either version 2 of the License, or
   *    (at your option) any later version.
   *
   *    This program is distributed in the hope that it will be useful,
   *    but WITHOUT ANY WARRANTY; without even the implied warranty of
   *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *    GNU General Public License for more details.
   *
   *    You should have received a copy of the GNU General Public License
   *    along with this program; if not, write to the Free Software
   *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  /*
   *    Values.java
   *    Copyright (C) 1999 University of Waikato, Hamilton, New Zealand
   *
   */
  
  
  package weka.classifiers.trees.m5;
  
  import weka.core.Instances;
  import weka.core.RevisionHandler;
  import weka.core.RevisionUtils;
  
  /**
   * Stores some statistics.
   * @author Yong Wang (yongwang@cs.waikato.ac.nz)
   * @version $Revision: 1.7 $
   */
  public final class Values
    implements RevisionHandler {
    
    int  numInstances;        // number of the instances
    int  missingInstances;    // number of the instances with missing values 
    int  first;               // index of the first instance
    int  last;                // index of the last instance
    int  attr;                // attribute
    double  sum;              // sum of the instances for attribute
    double  sqrSum;           // squared sum of the instances for attribute
    double  va;               // variance
    double  sd;               // standard deviation
    
  
    /**
     * Constructs an object which stores some statistics of the instances such 
     *      as sum, squared sum, variance, standard deviation
     * @param low the index of the first instance
     * @param high the index of the last instance
     * @param attribute the attribute
     * @param inst the instances
     */
  
    public Values(int low,int high,int attribute,Instances inst){
      int i,count=0;
      double value;
  
      numInstances = high-low+1;
      missingInstances = 0;
      first = low;
      last = high;
      attr = attribute;
      sum=0.0;
      sqrSum=0.0;
      for(i=first;i<=last;i++){
        if(inst.instance(i).isMissing(attr)==false){
  	count++;
  	value = inst.instance(i).value(attr);
  	sum += value;
  	sqrSum += value * value;
        }
        
        if(count >1){
  	va = (sqrSum - sum * sum/count)/count;
  	va = Math.abs(va);
  	sd = Math.sqrt(va);
        }
        else {va = 0.0;  sd = 0.0;}      
      }
    }
  
    /**
     * Converts the stats to a string
     * @return the converted string
     */
    public final String  toString(){
      
      StringBuffer text = new StringBuffer();
  
      text.append("Print statistic values of instances (" + first + "-" + last + 
  		"\n");
      text.append("    Number of instances:\t" + numInstances + "\n");
      text.append("    NUmber of instances with unknowns:\t" + missingInstances +
  		"\n");
      text.append("    Attribute:\t\t\t:" + attr + "\n");
      text.append("    Sum:\t\t\t" + sum + "\n");
      text.append("    Squared sum:\t\t" + sqrSum + "\n");
      text.append("    Stanard Deviation:\t\t" + sd + "\n");
  
      return text.toString();
    }
    
    /**
     * Returns the revision string.
     * 
     * @return		the revision
     */
    public String getRevision() {
      return RevisionUtils.extract("$Revision: 1.7 $");
    }
  }
  