## org.apache.commons.math.stat.inference
Class OneWayAnovaImpl

    java.lang.Object
      org.apache.commons.math.stat.inference.OneWayAnovaImpl

All Implemented Interfaces:
  OneWayAnova

    public class OneWayAnovaImpl

extends java.lang.Object
implements OneWayAnova

Implements one-way ANOVA statistics defined in the `OneWayAnovaImpl` interface.

Uses the `commons-math F Distribution implementation` to estimate exact p-values.

This implementation is based on a description at http://faculty.vassar.edu/lowry/ch13pt1.html

     Abbreviations: bg = between groups,
                    wg = within groups,
                    ss = sum squared deviations

Since:
  1.2
Version:
  $Revision: 825917 $ $Date: 2009-10-16 10:47:27 -0400 (Fri, 16 Oct 2009) $

Nested Class Summary
`private static class` `OneWayAnovaImpl.AnovaStats` Convenience class to pass dfbg,dfwg,F values around within AnovaImpl.

Constructor Summary
`OneWayAnovaImpl()` Default constructor.

Method Summary
`double` `anovaFValue(java.util.Collection<double[]> categoryData)` Computes the ANOVA F-value for a collection of `double[]` arrays.
`double` `anovaPValue(java.util.Collection<double[]> categoryData)` Computes the ANOVA P-value for a collection of `double[]` arrays.
`private OneWayAnovaImpl.AnovaStats` `anovaStats(java.util.Collection<double[]> categoryData)` This method actually does the calculations (except P-value).
`boolean` `anovaTest(java.util.Collection<double[]> categoryData, double alpha)` Performs an ANOVA test, evaluating the null hypothesis that there is no difference among the means of the data categories.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### OneWayAnovaImpl

    public OneWayAnovaImpl()

  Default constructor.

Method Detail

### anovaFValue

    public double anovaFValue(java.util.Collection<double[]> categoryData)
                       throws java.lang.IllegalArgumentException,
                              MathException

  Computes the ANOVA F-value for a collection of `double[]` arrays.

  Preconditions:

  - The categoryData `Collection` must contain `double[]` arrays.
  - There must be at least two `double[]` arrays in the `categoryData` collection and each of these arrays must contain at least two values.

  This implementation computes the F statistic using the definitional formula

         F = msbg/mswg

  where

        msbg = between group mean square
        mswg = within group mean square

  are as defined here

  Specified by:
    `anovaFValue` in interface `OneWayAnova`
  Parameters:
    `categoryData` - `Collection` of `double[]` arrays each containing data for one category
  Returns:
    Fvalue
  Throws:
    `java.lang.IllegalArgumentException` - if the preconditions are not met
    `MathException` - if the statistic can not be computed do to a convergence or other numerical error.

### anovaPValue

    public double anovaPValue(java.util.Collection<double[]> categoryData)
                       throws java.lang.IllegalArgumentException,
                              MathException

  Computes the ANOVA P-value for a collection of `double[]` arrays.

  Preconditions:

  - The categoryData `Collection` must contain `double[]` arrays.
  - There must be at least two `double[]` arrays in the `categoryData` collection and each of these arrays must contain at least two values.

  This implementation uses the `commons-math F Distribution implementation` to estimate the exact p-value, using the formula

         p = 1 - cumulativeProbability(F)

  where `F` is the F value and `cumulativeProbability` is the commons-math implementation of the F distribution.

  Specified by:
    `anovaPValue` in interface `OneWayAnova`
  Parameters:
    `categoryData` - `Collection` of `double[]` arrays each containing data for one category
  Returns:
    Pvalue
  Throws:
    `java.lang.IllegalArgumentException` - if the preconditions are not met
    `MathException` - if the statistic can not be computed do to a convergence or other numerical error.

### anovaTest

    public boolean anovaTest(java.util.Collection<double[]> categoryData,
                             double alpha)
                      throws java.lang.IllegalArgumentException,
                             MathException

  Performs an ANOVA test, evaluating the null hypothesis that there is no difference among the means of the data categories.

  Preconditions:

  - The categoryData `Collection` must contain `double[]` arrays.
  - There must be at least two `double[]` arrays in the `categoryData` collection and each of these arrays must contain at least two values.
  - alpha must be strictly greater than 0 and less than or equal to 0.5.

  This implementation uses the `commons-math F Distribution implementation` to estimate the exact p-value, using the formula

         p = 1 - cumulativeProbability(F)

  where `F` is the F value and `cumulativeProbability` is the commons-math implementation of the F distribution.

  True is returned iff the estimated p-value is less than alpha.

  Specified by:
    `anovaTest` in interface `OneWayAnova`
  Parameters:
    `categoryData` - `Collection` of `double[]` arrays each containing data for one category
    `alpha` - significance level of the test
  Returns:
    true if the null hypothesis can be rejected with confidence 1 - alpha
  Throws:
    `java.lang.IllegalArgumentException` - if the preconditions are not met
    `MathException` - if the statistic can not be computed do to a convergence or other numerical error.

### anovaStats

    private OneWayAnovaImpl.AnovaStats anovaStats(java.util.Collection<double[]> categoryData)
                                           throws java.lang.IllegalArgumentException,
                                                  MathException

  This method actually does the calculations (except P-value).

  Parameters:
    `categoryData` - `Collection` of `double[]` arrays each containing data for one category
  Returns:
    computed AnovaStats
  Throws:
    `java.lang.IllegalArgumentException` - if categoryData does not meet preconditions specified in the interface definition
    `MathException` - if an error occurs computing the Anova stats

Copyright (c) 2003-2011 Apache Software Foundation