/* * #%L * gitools-core * %% * Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package org.gitools.analysis.groupcomparison; import com.google.common.collect.Iterables; import org.gitools.analysis.groupcomparison.dimensiongroups.DimensionGroup; import org.gitools.analysis.groupcomparison.format.math33Preview.CombinatoricsUtils; import org.gitools.analysis.stats.test.MannWhitneyWilcoxonTest; import org.gitools.analysis.stats.test.OneWayAnovaTest; import org.gitools.analysis.stats.test.results.GroupComparisonResult; import org.gitools.analysis.stats.test.results.OneWayAnovaResult; import org.gitools.api.matrix.AbstractMatrixFunction; import org.gitools.api.matrix.IMatrixDimension; import org.gitools.api.matrix.IMatrixLayer; import org.gitools.api.matrix.IMatrixPosition; import java.util.*; import static com.google.common.base.Predicates.notNull; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.transform; public class OneWayAnovaFunction extends AbstractMatrixFunction<Map<String, OneWayAnovaResult>, String> { private OneWayAnovaTest test; private IMatrixLayer<Double> valueLayer; private IMatrixDimension sourceDimension; private DimensionGroup[] groups; private NullConversion nullConversion; public OneWayAnovaFunction(OneWayAnovaTest test, IMatrixDimension sourceDimension, IMatrixLayer<Double> valueLayer, NullConversion nullConversion, DimensionGroup... groups) { this.test = test; this.sourceDimension = sourceDimension; this.valueLayer = valueLayer; this.groups = groups; this.nullConversion = nullConversion; } public OneWayAnovaFunction() { } @Override public Map<String, OneWayAnovaResult> apply(String identifier, IMatrixPosition position) { List<Iterable<Double>> doubleGroups = new ArrayList<>(); Map<String, OneWayAnovaResult> resultHashMap = new LinkedHashMap<>(); for (DimensionGroup dimensionGroup : groups) { doubleGroups.add(filter(transform( position.iterate(valueLayer, sourceDimension).filter(dimensionGroup.getPredicate()), nullConversion), notNull())); } OneWayAnovaResult result = test.processTest(doubleGroups); resultHashMap.put( "oneWayAnova", result); return resultHashMap; } }