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 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: 983921 $ $Date: 2010-08-10 12:46:06 +0200 (mar. 10 août 2010) $

### Nested Class Summary

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

### Constructor Summary

Constructors
Constructor and Description
`OneWayAnovaImpl()` Default constructor.

### Method Summary

Methods
`double` `anovaFValue(Collection<double[]> categoryData)` Computes the ANOVA F-value for a collection of `double[]` arrays.
`double` `anovaPValue(Collection<double[]> categoryData)` Computes the ANOVA P-value for a collection of `double[]` arrays.
`private OneWayAnovaImpl.AnovaStats` `anovaStats(Collection<double[]> categoryData)` This method actually does the calculations (except P-value).
`boolean` `anovaTest(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(Collection<double[]> categoryData)
                       throws 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:
  `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(Collection<double[]> categoryData)
                       throws 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:
  `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(Collection<double[]> categoryData,
                    double alpha)
                      throws 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:
  `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(Collection<double[]> categoryData)
                                           throws 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:
  `IllegalArgumentException` - if categoryData does not meet preconditions specified in the interface definition
  `MathException` - if an error occurs computing the Anova stats