I've been working on this refactored implementation over the last week or so. Here is a temporary location for the files:

http://osprey.hmdc.harvard.edu:8080/stat2.tar.gz

Please do look them over and let me know what you think. -Mark


This package involves the following changes:


*1* There are three example classes showing how Univariate/StoreUnivariate and StatUtil can be factored into this approach.

*2* Instead of all the implementations of the Univariate interface being based on StatUtils or AbstractUnivariate, they are now backed by Independent (functor like) Classes that implement a "UnivariateStatistic" Interface:

public interface UnivariateStatistic {

public double evaluate(double[] d);

public double evaluate(DoubleArray d);

}

*3* In the backing implementations, the Storage/Storageless inheritance hierarchy is basically "Inverted", in other words, All UnivariateStatistics implement these two storage based methods that work on double[] and DoubleArray. The Storageless case in this example package is now a "exception to the rule". I really like this idea, because while all statistics can be implemented over a storage array, only some can be done using a storageless approach. I think the "first" Interface in the hierarchy should always be the most general. As such, StorelessUnivariateStatistics also implement the following extended interface:

public interface StorelessUnivariateStatistic extends UnivariateStatistic {

public double evaluate(double d);

public double getValue();

    public void clear();
}

The AbstractStorelessUnivariateStatistic is basically polymorphic and implements the UnivariateStatistic interface to use the

public double evaluate(double d);

of the StorelessUnivariateStatistic. This allows all Top level implementations to only require implementation of two or three methods to get a functioning Statistic.

*4* The statistics are all independently implemented in the following package hierarchy

o.a.c.m.stat2
   --> ExampleStaticUtils
   --> ExampleUnivariateImpl
   --> ExampleUsage

o.a.c.m.stat2.univariate
    --> interface UnivariateStatistic
    --> interface StorelessUnivariateStatistic
               extends UnivariateStatistic
    --> AbstractUnivariateStatistic
               implements UnivariateStatistic
    --> AbstractStorelessUnivariateStatistic
               implements StorelessUnivariateStatistic

--> Sum, SumOfSquares, SumOfLogs, Product (all Storeless)

o.a.c.m.stat2.univariate.moment (all Storeless)
    --> Mean, SecondMoment, ThirdMoment, FourthMoment
    --> Variance, StandardDeviation, Skewness, Kurtosis

o.a.c.m.stat2.univariate.rank
    --> Min, Max (Storeless)
    --> Median, Percentile (Not Storeless)

o.a.c.m.util2
    --> Modified versions of DoubleArray, FixedDoubleArray
    --> AbstractDoubleArray,
    --> DoubleArrayIterator, DoubleArrayListIterator



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to