diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java index 29d61ae03de5354e6c3756e79ba94e41603aa299..d5d3eb96c177eae43e0fba396d5f5eb82ff1010a 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -8,6 +8,7 @@ import javafx.scene.chart.XYChart; import org.apache.commons.math3.distribution.TDistribution; import org.apache.commons.math3.exception.MathIllegalArgumentException; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; +import org.apache.commons.math3.stat.regression.SimpleRegression; import java.util.*; @@ -110,17 +111,99 @@ public class LineChartFunctionality { multiMap.computeIfAbsent(index, k -> new ArrayList<Double>()); multiMap.get(index).add(kwhValue); - // Connect the data to a series newSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(index), kwhValue)); index += 1; } updateLineChart(newSeries); + lineChart.setOpacity(0.5); } + // Stores the data from the confidence interval in a new map Map<Integer, ArrayList<Double>> confidenceIntervalData = statistics(multiMap); + // Checks the max size for the arraylists needed for the data array later + int jMaxSize = 0; + for (int i = 0; i < confidenceIntervalData.size(); i++) { + if(confidenceIntervalData.get(i).size() > jMaxSize){ + jMaxSize = confidenceIntervalData.get(i).size(); + } + } + + + // Defines an array to be used for the regression + double[][] data = new double[confidenceIntervalData.size()][jMaxSize]; + System.out.println(confidenceIntervalData); + for (int i = 0; i < confidenceIntervalData.size(); i++) { + + ArrayList<Double> list = confidenceIntervalData.get(i); + + System.out.println(list.size()); + for (int j = 0; j < list.size(); j++) { + data[i][j] = list.get(j); + } + + for (int j = 0; j < data[i].length; j++) { + System.out.println("data[i][j]: "+data[i][j]); + if(data[i][j] == 0.0){ + double sum = 0.0; + double index = 0.0; + for (int k = 0; k < list.size(); k++) { + if(data[i][k] != 0.0){ + sum += data[i][k]; + index += 1; + } + } + System.out.println("sum/index: "+ sum/index); + data[i][j] = sum/index; + } + } + } + + + System.out.println(data.length); + System.out.println(data[12][1]); + + SimpleRegression simpleRegression = new SimpleRegression(); + + simpleRegression.addData(data); + simpleRegression.regress(); + + + for (double[] datum : data) { + System.out.println(""); + for (double v : datum) { + System.out.println(v); + } + } + + + + XYChart.Series<String, Number> regressionSeries = new XYChart.Series<String, Number>(); + for (int i = 0; i < simpleRegression.getN(); i++) { + + // Connect the data to a series + System.out.println(simpleRegression.predict(i)); + regressionSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(i), simpleRegression.predict(i))); + } + updateLineChart(regressionSeries); + lineChart.setOpacity(1); + + System.out.println("Get R: " + simpleRegression.getR()); + System.out.println("Get getRSquare: " + simpleRegression.getRSquare()); + System.out.println("Get getRegressionSumSquares: " + simpleRegression.getRegressionSumSquares()); + + System.out.println("Get N: " + simpleRegression.getN()); + + // and then you can predict the time at a given temperature value + System.out.println("Predicted Time: " + simpleRegression.predict(35)); + + // You can also get the slope and intercept from your data + System.out.println("slope = " + simpleRegression.getSlope()); + System.out.println("intercept = " + simpleRegression.getIntercept()); + + //simpleRegression.add return getLineChart(); } diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class index a7c6a67ecc6871b6999f49cf884d5f375c5ac204..30aa13c4fd74adfb7823e3ea88c92328da5dd2da 100644 Binary files a/target/classes/com/application/GUI/LineChartFunctionality.class and b/target/classes/com/application/GUI/LineChartFunctionality.class differ