Example usage for org.jfree.data.statistics Regression getOLSRegression

List of usage examples for org.jfree.data.statistics Regression getOLSRegression

Introduction

In this page you can find the example usage for org.jfree.data.statistics Regression getOLSRegression.

Prototype

public static double[] getOLSRegression(XYDataset data, int series) 

Source Link

Document

Returns the parameters 'a' and 'b' for an equation y = a + bx, fitted to the data using ordinary least squares regression.

Usage

From source file:de.genvlin.plugins.jfreechart.JFreeChartPluginImpl.java

public Function fit(XYInterface xyVector) {
    XYVectorPoolWrapper dataset = new XYVectorPoolWrapper();
    dataset.add(xyVector);/*from w  w  w .  j a va  2  s . c  om*/

    double res[] = Regression.getOLSRegression(dataset, 0);
    //y = a+ b*x; res[0]-> a, res[1]->b

    LinearFunction lf = (LinearFunction) MainPool.getDefault().create(LinearFunction.class);
    double m = res[1];
    double n = res[0];
    lf.setM(m);
    lf.setN(n);
    lf.setRange(xyVector.getMinX(), xyVector.getMinY(), xyVector.getMaxX(), xyVector.getMaxY());
    Log.log("\n" + lf.toString(), true);

    return lf;
}

From source file:be.ugent.maf.cellmissy.gui.controller.analysis.singlecell.explore.EnclosingBallController.java

private JFreeChart makeFDChart(TrackDataHolder trackDataHolder, FractalDimension fractalDimension) {
    XYSeries series = JFreeChartUtils.generateXYSeries(fractalDimension.getxValues(),
            fractalDimension.getyValues());
    String seriesKey = "track " + trackDataHolder.getTrack().getTrackNumber() + ", well "
            + trackDataHolder.getTrack().getWellHasImagingType().getWell();
    series.setKey(seriesKey);/*from   ww w  .  ja v a  2 s.  c  o  m*/
    XYSeriesCollection collection = new XYSeriesCollection(series);

    double regression[] = Regression.getOLSRegression(collection, 0);
    // first the intercept, then the slope
    LineFunction2D linefunction2d = new LineFunction2D(regression[0], regression[1]);

    fractalDimension.setFD(regression[1]);
    JFreeChart chart = ChartFactory.createScatterPlot(
            seriesKey + " - FD = " + AnalysisUtils.roundThreeDecimals(fractalDimension.getFD()), "log(1/r)",
            "log(N)", collection, PlotOrientation.VERTICAL, false, true, false);
    // start, end, number of samples
    XYDataset dataset = DatasetUtilities.sampleFunction2D(linefunction2d, series.getMinX(), series.getMaxX(),
            1000, "Fitted Regression Line");
    chart.getXYPlot().setDataset(1, dataset);

    JFreeChartUtils.setupXYPlot(chart.getXYPlot());
    JFreeChartUtils.setupSingleTrackPlot(chart,
            exploreTrackController.getExploreTrackPanel().getTracksList().getSelectedIndex(), true);
    XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) chart.getXYPlot().getRenderer();
    renderer.setSeriesLinesVisible(0, false);
    renderer.setSeriesShape(0, new Ellipse2D.Double(0, 0, 8, 8));

    XYItemRenderer renderer2 = new XYLineAndShapeRenderer(true, false);
    renderer2.setSeriesPaint(0, GuiUtils.getDefaultColor());
    chart.getXYPlot().setRenderer(1, renderer2);

    return chart;
}

From source file:com.vgi.mafscaling.ClosedLoop.java

private boolean plotTrimRpmData() {
    if (setXYSeries(runData, rpmArray, trimArray)) {
        double[] ols = Regression
                .getOLSRegression(mafChartPanel.getChartPanel().getChart().getXYPlot().getDataset(1), 0);
        Function2D curve = new LineFunction2D(ols[0], ols[1]);
        currMafData.clear();//www.ja  v a2  s .  c  o  m
        currMafData.add(runData.getMinX(), curve.getValue(runData.getMinX()));
        currMafData.add(runData.getMaxX(), curve.getValue(runData.getMaxX()));
        return true;
    }
    return false;
}

From source file:org.operamasks.faces.render.graph.ChartRenderer.java

private XYSeries createCurveSeries(UICurve curve, XYDataset data, int index) {
    if (data.getItemCount(index) < 2) {
        throw new IllegalArgumentException("Not enough data");
    }//from   w w  w. j  av  a  2s  .  c  om

    Key key = new Key(index, curve.getLegend());

    if (curve instanceof UIAverageLine) {
        double period = ((UIAverageLine) curve).getPeriod();
        double skip = ((UIAverageLine) curve).getSkip();
        if (data instanceof TimeSeriesCollection) {
            TimeSeries ts = ((TimeSeriesCollection) data).getSeries(index);
            return MovingAverage.createMovingAverage(ts, key, (int) period, (int) skip);
        } else {
            return MovingAverage.createMovingAverage(data, index, key, period, skip);
        }
    } else if (curve instanceof UIRegressionLine) {
        RegressionType type = ((UIRegressionLine) curve).getType();
        int samples = ((UIRegressionLine) curve).getSamples();
        if (type == null || type == RegressionType.Linear) {
            double[] p = Regression.getOLSRegression(data, index);
            Function2D f = new LineFunction2D(p[0], p[1]);
            return createFunctionSeries(data, index, key, f, samples);
        } else if (type == RegressionType.Power) {
            double[] p = Regression.getPowerRegression(data, index);
            Function2D f = new PowerFunction2D(p[0], p[1]);
            return createFunctionSeries(data, index, key, f, samples);
        } else {
            throw new IllegalArgumentException(type.toString());
        }
    } else if (curve instanceof UISpline) {
        SplineType type = ((UISpline) curve).getType();
        int samples = ((UISpline) curve).getSamples();
        int degree = ((UISpline) curve).getDegree();
        if (type == null || type == SplineType.BSpline) {
            return BSpline.createBSpline(data, index, key, samples, degree);
        } else if (type == SplineType.CubicSpline) {
            return CubicSpline.createCubicSpline(data, index, key, samples);
        }
    }

    return null;
}

From source file:org.esa.snap.rcp.statistics.ScatterPlotPanel.java

private XYIntervalSeries computeRegressionData(double xStart, double xEnd) {
    if (scatterpointsDataset.getItemCount(0) > 1) {
        final double[] coefficients = Regression.getOLSRegression(scatterpointsDataset, 0);
        final Function2D curve = new LineFunction2D(coefficients[0], coefficients[1]);
        final XYSeries regressionData = DatasetUtilities.sampleFunction2DToSeries(curve, xStart, xEnd, 100,
                "regression line");
        final XYIntervalSeries xyIntervalRegression = new XYIntervalSeries(regressionData.getKey());
        for (int i = 0; i < regressionData.getItemCount(); i++) {
            XYDataItem item = regressionData.getDataItem(i);
            final double x = item.getXValue();
            final double y = item.getYValue();
            xyIntervalRegression.add(x, x, x, y, y, y);
        }//ww  w. j ava2s . co  m
        return xyIntervalRegression;
    } else {
        JOptionPane.showMessageDialog(this, "Unable to compute regression line.\n"
                + "At least 2 values are needed to compute regression coefficients.");
        return null;
    }
}

From source file:org.esa.beam.visat.toolviews.stat.ScatterPlotPanel.java

private XYIntervalSeries computeRegressionData(double xStart, double xEnd) {
    if (scatterpointsDataset.getItemCount(0) > 1) {
        final double[] coefficients = Regression.getOLSRegression(scatterpointsDataset, 0);
        final Function2D curve = new LineFunction2D(coefficients[0], coefficients[1]);
        final XYSeries regressionData = DatasetUtilities.sampleFunction2DToSeries(curve, xStart, xEnd, 100,
                "regression line");
        final XYIntervalSeries xyIntervalRegression = new XYIntervalSeries(regressionData.getKey());
        final List<XYDataItem> regressionDataItems = regressionData.getItems();
        for (XYDataItem item : regressionDataItems) {
            final double x = item.getXValue();
            final double y = item.getYValue();
            xyIntervalRegression.add(x, x, x, y, y, y);
        }//from w  w w .  j a v a2s  . c o m
        return xyIntervalRegression;
    } else {
        JOptionPane.showMessageDialog(this, "Unable to compute regression line.\n"
                + "At least 2 values are needed to compute regression coefficients.");
        return null;
    }
}

From source file:org.esa.beam.visat.toolviews.stat.ScatterPlotPanel.java

private void computeCoefficientOfDetermination() {
    int numberOfItems = scatterpointsDataset.getSeries(0).getItemCount();
    double arithmeticMeanOfX = 0; //arithmetic mean of X
    double arithmeticMeanOfY = 0; //arithmetic mean of Y
    double varX = 0; //variance of X
    double varY = 0; //variance of Y
    double coVarXY = 0; //covariance of X and Y;
    //compute arithmetic means
    for (int i = 0; i < numberOfItems; i++) {
        arithmeticMeanOfX += scatterpointsDataset.getXValue(0, i);
        arithmeticMeanOfY += scatterpointsDataset.getYValue(0, i);
    }//from  w  w w.j a v  a  2  s . c  o m
    arithmeticMeanOfX /= numberOfItems;
    arithmeticMeanOfY /= numberOfItems;
    //compute variances and covariance
    for (int i = 0; i < numberOfItems; i++) {
        varX += Math.pow(scatterpointsDataset.getXValue(0, i) - arithmeticMeanOfX, 2);
        varY += Math.pow(scatterpointsDataset.getYValue(0, i) - arithmeticMeanOfY, 2);
        coVarXY += (scatterpointsDataset.getXValue(0, i) - arithmeticMeanOfX)
                * (scatterpointsDataset.getYValue(0, i) - arithmeticMeanOfY);
    }
    //computation of coefficient of determination
    double r2 = Math.pow(coVarXY, 2) / (varX * varY);
    r2 = MathUtils.round(r2, Math.pow(10.0, 5));

    final double[] coefficients = Regression.getOLSRegression(scatterpointsDataset, 0);
    final double intercept = coefficients[0];
    final double slope = coefficients[1];
    final String linearEquation;
    if (intercept >= 0) {
        linearEquation = "y = " + (float) slope + "x + " + (float) intercept;
    } else {
        linearEquation = "y = " + (float) slope + "x - " + Math.abs((float) intercept);
    }

    TextTitle tt = new TextTitle(linearEquation + "\nR = " + r2);
    tt.setTextAlignment(HorizontalAlignment.RIGHT);
    tt.setFont(chart.getLegend().getItemFont());
    tt.setBackgroundPaint(new Color(200, 200, 255, 100));
    tt.setFrame(new BlockBorder(Color.white));
    tt.setPosition(RectangleEdge.BOTTOM);

    r2Annotation = new XYTitleAnnotation(0.98, 0.02, tt, RectangleAnchor.BOTTOM_RIGHT);
    r2Annotation.setMaxWidth(0.48);
    getPlot().addAnnotation(r2Annotation);
}

From source file:CGgui.java

public void addMinima(double value) {
    //updata dataset and graph
    if (value != -1) {
        //remove previous minima for this number of CGs
        for (int i = 0; i < minimadataset.getItemCount(); i++) {
            if (minimadataset.getYValue(0, i) == CurrCG) {
                minimadataset.remove(minimadataset.getX(0, i), (String) key, true);
                break;
            }//from w  ww . j  av  a  2 s  .  co m
        }

        //add new minima
        minimadataset.add(value, (double) CurrCG, (String) key);
    } else
        return;

    //get plot
    XYPlot xyplot = minchart.getXYPlot();
    minchart.clearSubtitles();

    //set render options
    XYLineAndShapeRenderer renderer1 = new XYLineAndShapeRenderer();
    XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer();

    Shape shape = xyplot.getRenderer().getSeriesShape(0);
    renderer1.setSeriesLinesVisible(0, false);
    renderer1.setSeriesPaint(0, Color.RED);
    renderer1.setSeriesShape(0, shape);
    if (minimadataset.getItemCount() > 1) {
        renderer2.setSeriesLinesVisible(0, true);
        renderer2.setSeriesShapesVisible(0, false);
        renderer2.setBaseSeriesVisibleInLegend(false);
        renderer2.setSeriesPaint(0, Color.BLUE);
    }

    //get regression
    LineFunction2D localregline = null;
    XYDataset regseries;
    if (minimadataset.getItemCount() > 1) {
        //create the regression
        double[] reg = Regression.getOLSRegression(minimadataset, 0);
        //looking for x values so put x in terms of y
        //y = a + bx     for local
        //x = y/b - a/b  for global
        if (DEBUG)
            PrintText("Regression: y = " + reg[0] + " + " + reg[1] + "x\n");

        //global (in terms of y)
        regLine = new LineFunction2D(-reg[0] / reg[1], 1 / reg[1]);

        //local (in terms of x)
        localregline = new LineFunction2D(reg[0], reg[1]);
        regseries = DatasetUtilities.sampleFunction2D(localregline, minimadataset.getDomainLowerBound(false),
                minimadataset.getDomainUpperBound(false), 2, "Linear Regression");

        //plot line
        xyplot.setDataset(1, regseries);
        xyplot.setRenderer(1, renderer2);
        minchart.addSubtitle(0, new TextTitle("Regression: y = " + reg[0] + " + " + reg[1] + "x"));
    }

    xyplot.setDataset(0, minimadataset);
    xyplot.setRenderer(0, renderer1);

    //f.pack();

    //System.gc();
}