package com.compomics.util.math.statistics.linear_regression; import com.compomics.util.math.statistics.linear_regression.filters.ProbabilityFilter; import com.compomics.util.math.statistics.linear_regression.regressions.MedianRegression; import com.compomics.util.math.statistics.linear_regression.regressions.SimpleLinearRegression; import java.util.ArrayList; /** * Enum of the different implementations for a regression. * * @author Marc Vaudel */ public class LinearRegression { /** * Returns a simple linear regression. * * @param x the x series * @param y the y series * * @return a simple linear regression */ public static RegressionStatistics getSimpleLinearRegression(ArrayList<Double> x, ArrayList<Double> y) { return SimpleLinearRegression.getLinearRegression(x, y); } /** * Returns a robust linear regression based on the median. * * @param x the x series * @param y the y series * * @return a simple linear regression */ public static RegressionStatistics getRobustLinearRegression(ArrayList<Double> x, ArrayList<Double> y) { return MedianRegression.getLinearRegression(x, y); } /** * Returns a simple linear regression performed after outlier removal. If * less than 100 points are available before or after filtering, a robust * regression is used. * * @param x the x series * @param y the y series * @param p the probability for outlier exclusion, e.g. 0.95 for 95% * confidence * * @return a simple linear regression */ public static RegressionStatistics getSimpleLinearRegressionOutlierRemoval(ArrayList<Double> x, ArrayList<Double> y, Double p) { if (x.size() < 100) { return MedianRegression.getLinearRegression(x, y); } ArrayList<ArrayList<Double>> filteredInput = ProbabilityFilter.getFilteredInput(x, y, p); ArrayList<Double> filteredX = filteredInput.get(0); ArrayList<Double> filteredY = filteredInput.get(1); if (filteredX.size() < 100) { return MedianRegression.getLinearRegression(x, y); } return SimpleLinearRegression.getLinearRegression(filteredX, filteredY); } }