/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.math.stat.inference; import org.apache.commons.math.MathException; import java.util.Collection; /** * An interface for one-way ANOVA (analysis of variance). * * <p> Tests for differences between two or more categories of univariate data * (for example, the body mass index of accountants, lawyers, doctors and * computer programmers). When two categories are given, this is equivalent to * the {@link org.apache.commons.math.stat.inference.TTest}. * </p> * * @since 1.2 * @version $Id: OneWayAnova.java 1131229 2011-06-03 20:49:25Z luc $ */ public interface OneWayAnova { /** * Computes the ANOVA F-value for a collection of <code>double[]</code> * arrays. * * <p><strong>Preconditions</strong>: <ul> * <li>The categoryData <code>Collection</code> must contain * <code>double[]</code> arrays.</li> * <li> There must be at least two <code>double[]</code> arrays in the * <code>categoryData</code> collection and each of these arrays must * contain at least two values.</li></ul></p> * * @param categoryData <code>Collection</code> of <code>double[]</code> * arrays each containing data for one category * @return Fvalue * @throws IllegalArgumentException if the preconditions are not met * @throws MathException if the statistic can not be computed do to a * convergence or other numerical error. */ double anovaFValue(Collection<double[]> categoryData) throws IllegalArgumentException, MathException; /** * Computes the ANOVA P-value for a collection of <code>double[]</code> * arrays. * * <p><strong>Preconditions</strong>: <ul> * <li>The categoryData <code>Collection</code> must contain * <code>double[]</code> arrays.</li> * <li> There must be at least two <code>double[]</code> arrays in the * <code>categoryData</code> collection and each of these arrays must * contain at least two values.</li></ul></p> * * @param categoryData <code>Collection</code> of <code>double[]</code> * arrays each containing data for one category * @return Pvalue * @throws IllegalArgumentException if the preconditions are not met * @throws MathException if the statistic can not be computed do to a * convergence or other numerical error. */ double anovaPValue(Collection<double[]> categoryData) throws IllegalArgumentException, MathException; /** * Performs an ANOVA test, evaluating the null hypothesis that there * is no difference among the means of the data categories. * * <p><strong>Preconditions</strong>: <ul> * <li>The categoryData <code>Collection</code> must contain * <code>double[]</code> arrays.</li> * <li> There must be at least two <code>double[]</code> arrays in the * <code>categoryData</code> collection and each of these arrays must * contain at least two values.</li> * <li>alpha must be strictly greater than 0 and less than or equal to 0.5. * </li></ul></p> * * @param categoryData <code>Collection</code> of <code>double[]</code> * arrays each containing data for one category * @param alpha significance level of the test * @return true if the null hypothesis can be rejected with * confidence 1 - alpha * @throws IllegalArgumentException if the preconditions are not met * @throws MathException if the statistic can not be computed do to a * convergence or other numerical error. */ boolean anovaTest(Collection<double[]> categoryData, double alpha) throws IllegalArgumentException, MathException; }