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

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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-2013 Apache Software Foundation