View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.math.stat.inference;
18  
19  import org.apache.commons.math.MathException;
20  import java.util.Collection;
21  
22  /**
23   * An interface for one-way ANOVA (analysis of variance). 
24   *
25   * <p> Tests for differences between two or more categories of univariate data
26   * (for example, the body mass index of accountants, lawyers, doctors and
27   * computer programmers).  When two categories are given, this is equivalent to
28   * the {@link org.apache.commons.math.stat.inference.TTest}.
29   * </p>
30   *
31   * @since 1.2
32   * @version $Revision: 670469 $ $Date: 2008-06-23 04:01:38 -0400 (Mon, 23 Jun 2008) $ 
33   */
34  public interface OneWayAnova {
35      /**
36       * Computes the ANOVA F-value for a collection of <code>double[]</code>
37       * arrays.
38       * 
39       * <p><strong>Preconditions</strong>: <ul>
40       * <li>The categoryData <code>Collection</code> must contain
41       * <code>double[]</code> arrays.</li>
42       * <li> There must be at least two <code>double[]</code> arrays in the
43       * <code>categoryData</code> collection and each of these arrays must
44       * contain at least two values.</li></ul></p>
45       *
46       * @param categoryData <code>Collection</code> of <code>double[]</code>
47       * arrays each containing data for one category
48       * @return Fvalue
49       * @throws IllegalArgumentException if the preconditions are not met
50       * @throws MathException if the statistic can not be computed do to a
51       *         convergence or other numerical error.
52       */
53      public double anovaFValue(Collection<double[]> categoryData)
54          throws IllegalArgumentException, MathException;
55  
56      /**
57       * Computes the ANOVA P-value for a collection of <code>double[]</code>
58       * arrays.
59       *
60       * <p><strong>Preconditions</strong>: <ul>
61       * <li>The categoryData <code>Collection</code> must contain
62       * <code>double[]</code> arrays.</li>
63       * <li> There must be at least two <code>double[]</code> arrays in the
64       * <code>categoryData</code> collection and each of these arrays must
65       * contain at least two values.</li></ul></p>
66       *
67       * @param categoryData <code>Collection</code> of <code>double[]</code>
68       * arrays each containing data for one category
69       * @return Pvalue
70       * @throws IllegalArgumentException if the preconditions are not met
71       * @throws MathException if the statistic can not be computed do to a
72       *         convergence or other numerical error.
73       */
74      public double anovaPValue(Collection<double[]> categoryData)
75          throws IllegalArgumentException, MathException;
76  
77      /**
78       * Performs an ANOVA test, evaluating the null hypothesis that there
79       * is no difference among the means of the data categories.
80       * 
81       * <p><strong>Preconditions</strong>: <ul>
82       * <li>The categoryData <code>Collection</code> must contain
83       * <code>double[]</code> arrays.</li>
84       * <li> There must be at least two <code>double[]</code> arrays in the
85       * <code>categoryData</code> collection and each of these arrays must
86       * contain at least two values.</li>
87       * <li>alpha must be strictly greater than 0 and less than or equal to 0.5.
88       * </li></ul></p>
89       *
90       * @param categoryData <code>Collection</code> of <code>double[]</code>
91       * arrays each containing data for one category
92       * @param alpha significance level of the test
93       * @return true if the null hypothesis can be rejected with 
94       * confidence 1 - alpha
95       * @throws IllegalArgumentException if the preconditions are not met
96       * @throws MathException if the statistic can not be computed do to a
97       *         convergence or other numerical error.
98      */
99      public boolean anovaTest(Collection<double[]> categoryData, double alpha)
100         throws IllegalArgumentException, MathException;
101 
102 }