List of usage examples for org.jfree.data.statistics Regression getOLSRegression
public static double[] getOLSRegression(XYDataset data, int series)
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(); }