From 02b0aba690817c01906591116ace3c1eaf987b0c Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Wed, 20 Apr 2022 14:34:00 +0200
Subject: [PATCH] Working linear regression

---
 .../GUI/LineChartFunctionality.java           |  36 +++++++++++++++++-
 .../GUI/LineChartFunctionality.class          | Bin 7894 -> 8996 bytes
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java
index 29d61ae..badbc92 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,7 +111,6 @@ 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;
@@ -118,9 +118,43 @@ public class LineChartFunctionality {
             updateLineChart(newSeries);
         }
 
+        // 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);
+            for (int j = 0; j < list.size(); j++) {
+                data[i][j] += list.get(j);
+            }
+        }
+
+        System.out.println(data.length);
+        System.out.println(data[12][1]);
+
+        SimpleRegression simpleRegression = new SimpleRegression();
+
+        simpleRegression.addData(data);
+
+        // 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..b70f1f5ff9795af6291e177c4daa94c56eb5bae4 100644
GIT binary patch
delta 3441
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
HYK-atCJD|R

delta 2408
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

-- 
GitLab