Skip to content
Snippets Groups Projects
Commit 79b43fbb authored by Eilert Tunheim's avatar Eilert Tunheim
Browse files

Added confidentinterval for regression, regression not working tho

parent ea9193d9
No related branches found
No related tags found
No related merge requests found
......@@ -54,6 +54,5 @@
<orderEntry type="library" name="Maven: com.google.auto.value:auto-value-annotations:1.9" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.10.14" level="project" />
<orderEntry type="library" name="Maven: org.jblas:jblas:1.2.4" level="project" />
</component>
</module>
\ No newline at end of file
......@@ -40,11 +40,6 @@
<artifactId>joda-time</artifactId>
<version>2.10.14</version>
</dependency>
<dependency>
<groupId>org.jblas</groupId>
<artifactId>jblas</artifactId>
<version>1.2.4</version>
</dependency>
</dependencies>
<properties>
......
......@@ -27,10 +27,13 @@ public final class Constants {
public static int NUMBER_OF_PERIODS = 2;
// Number of seconds to wait before updating live data, in seconds
public static int NUMBER_OF_SECONDS_LIVE_DATA = 10;
public static int NUMBER_OF_SECONDS_LIVE_DATA = 60;
// Confidence interval
public static final double CONFIDENCE_INTERVAL = 0.95;
// Non linear regression
public static final double ADJUST_REGRESSION = 5.5;
public static final double ADJUST_REGRESSION = 2.5;
// Current sawmill settings;
public static final String PROJECT_ID = "sf-drying-optimization";
......
package com.application.GUI;
import com.application.DB.Constants;
import com.application.Main;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
......@@ -14,6 +15,7 @@ import org.apache.commons.math3.stat.regression.SimpleRegression;
import java.util.*;
import static com.application.DB.Constants.ADJUST_REGRESSION;
import static com.application.DB.Constants.CONFIDENCE_INTERVAL;
public class LineChartFunctionality {
......@@ -21,8 +23,8 @@ public class LineChartFunctionality {
private static XYChart.Series<String, Number> liveDataSeries;
private static CategoryAxis xAxis;
private static NumberAxis yAxis;
private static final double CONFIDENCE_INTERVAL = 0.90;
private static int dataPoints = 0;
private static int dataPointsXAxis = 0;
private static int dataPointsYAxis = 0;
private static Map<String, Number> liveData;
......@@ -58,22 +60,25 @@ public class LineChartFunctionality {
for (Map.Entry<Integer, ArrayList<Double>> entry : multiMap.entrySet()) {
//System.out.printf("\nIndex: \t%s\t\t\tkWh: \t%s\n", entry.getKey(), entry.getValue());
if(entry.getValue().size()>1){
System.out.println("entry: "+entry);
//if(entry.getValue().size()>1){
SummaryStatistics stats = new SummaryStatistics();
for (double val : entry.getValue()) {
stats.addValue(val);
}
//System.out.println("Stats: "+stats);
// Calculate 95% confidence interval
double ci = calcMeanCI(stats, CONFIDENCE_INTERVAL);
double ci = calcMeanCI(stats, Constants.CONFIDENCE_INTERVAL);
//System.out.println(String.format("Mean: %f", stats.getMean()));
double lower = stats.getMean() - ci;
double upper = stats.getMean() + ci;
//System.out.println(String.format("Confidence Interval 95%%: %f, %f", lower, upper));
System.out.println(String.format("Confidence Interval "+CONFIDENCE_INTERVAL*100+"%%: %f, %f", lower, upper));
// Deletes entries if they are out of bounds with the confidence interval
entry.getValue().removeIf(value -> Double.compare(value, lower) < 0 || Double.compare(value, upper) > 0);
}
//}
}
return multiMap;
}
......@@ -127,6 +132,74 @@ public class LineChartFunctionality {
//System.out.println("Series size: "+allSeries.size());
// Finds the end datapoint at the end of each graph
int numberOfGraphs = 0;
ArrayList<Double> dataArraylistXAxis = new ArrayList<>();
ArrayList<Double> dataArraylistYAxis = new ArrayList<>();
Map<Integer, ArrayList<Double>> endOfGraphPointsXAxis = new HashMap<>();
Map<Integer, ArrayList<Double>> endOfGraphPointsYAxis = new HashMap<>();
for (int i = 0; i < multiMap.size(); i++) {
ArrayList<Double> list = multiMap.get(i);
for (int j = 0; j < list.size(); j++) {
if (numberOfGraphs < list.size()) {
numberOfGraphs = list.size();
}
if (list.size() < numberOfGraphs) {
dataArraylistXAxis.add((double) i);
dataArraylistYAxis.add(multiMap.get(i).get(j));
//System.out.println(tempList);
numberOfGraphs = list.size();
}
}
}
dataArraylistXAxis.add((double) multiMap.size());
dataArraylistYAxis.add(multiMap.get(multiMap.size()-1).get(0));
//System.out.println(dataArraylistYAxis);
endOfGraphPointsXAxis.put(0,dataArraylistXAxis);
endOfGraphPointsYAxis.put(0,dataArraylistYAxis);
System.out.println(endOfGraphPointsXAxis);
System.out.println(endOfGraphPointsYAxis);
Map<Integer, ArrayList<Double>> endOfGraphPointsConfidenceXAxis = statistics(endOfGraphPointsXAxis);
Map<Integer, ArrayList<Double>> endOfGraphPointsConfidenceYaxis = statistics(endOfGraphPointsYAxis);
System.out.println(endOfGraphPointsConfidenceXAxis);
System.out.println("Size of list: "+ endOfGraphPointsConfidenceXAxis.size());
dataPointsXAxis = 0;
for (Map.Entry<Integer, ArrayList<Double>> entry : endOfGraphPointsConfidenceXAxis.entrySet()) {
System.out.println("Arraylist: "+ entry.getValue());
for (int i = 0; i < entry.getValue().size(); i++) {
System.out.println("End of graphs: "+ entry.getValue().get(i));
dataPointsXAxis += entry.getValue().get(i);
}
}
dataPointsXAxis = dataPointsXAxis /endOfGraphPointsConfidenceXAxis.get(0).size();
System.out.println("Datapoints: " + dataPointsXAxis);
dataPointsYAxis = 0;
for (Map.Entry<Integer, ArrayList<Double>> entry : endOfGraphPointsConfidenceYaxis.entrySet()) {
System.out.println("Arraylist: "+ entry.getValue());
for (int i = 0; i < entry.getValue().size(); i++) {
System.out.println("End of graphs: "+ entry.getValue().get(i));
dataPointsYAxis += entry.getValue().get(i);
}
}
dataPointsYAxis = dataPointsYAxis /endOfGraphPointsConfidenceYaxis.get(0).size();
System.out.println("Datapoints Y-axis: " + dataPointsYAxis);
// Stores the data from the confidence interval in a new map
Map<Integer, ArrayList<Double>> confidenceIntervalData = statistics(multiMap);
......@@ -174,47 +247,29 @@ public class LineChartFunctionality {
}
}
// Finds the end datapoint at the end of each graph
int numberOfGraphs = 0;
ArrayList<Integer> endOfGraphPoints = new ArrayList<>();
for (int i = 0; i < confidenceIntervalData.size(); i++) {
ArrayList<Double> list = confidenceIntervalData.get(i);
for (int j = 0; j < list.size(); j++) {
if (numberOfGraphs < list.size()) {
numberOfGraphs = list.size();
}
if (list.size() < numberOfGraphs) {
endOfGraphPoints.add(i);
numberOfGraphs = list.size();
}
}
}
endOfGraphPoints.add(confidenceIntervalData.size());
dataPoints = 0;
for (int i = 0; i < endOfGraphPoints.size(); i++) {
dataPoints+=endOfGraphPoints.get(i);
}
dataPoints = dataPoints/endOfGraphPoints.size();
liveDataSeries = new XYChart.Series<String, Number>();
updateLineChart(liveDataSeries);
XYChart.Series<String, Number> regressionSeries = new XYChart.Series<String, Number>();
for (int i = 0; i <= dataPoints; i++) {
for (int i = 0; i <= getDataPointsXAxis(); 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)));
regressionSeries.getData().add(new XYChart.Data<String, Number>(
String.valueOf(i),
getNonLinearRegression(confidenceIntervalData,
simpleRegression.getIntercept(),
simpleRegression.getSlope(),
i,
dataPoints)));
getNonLinearRegression(
confidenceIntervalData,
getDataPointsYAxis(),
//simpleRegression.getIntercept(),
simpleRegression.getSlope(),
//simpleRegression.getIntercept()
getDataPointsYAxis(),
i,
getDataPointsXAxis()
)));
}
updateLineChart(regressionSeries);
//lineChart.setOpacity(1);
......@@ -252,7 +307,7 @@ public class LineChartFunctionality {
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("Alpha! = " + simpleRegression.getSlope());
System.out.println("intercept = " + simpleRegression.getIntercept());
//simpleRegression.add
......@@ -281,10 +336,10 @@ public class LineChartFunctionality {
int time = 0;
if(liveData == 0) {
time = getDataPoints()*10;
time = getDataPointsXAxis()*10;
} else {
time = (getDataPoints()/liveData)*10;
time = (getDataPointsXAxis()/liveData)*10;
}
if(time > 60){
time = time/60;
......@@ -295,10 +350,10 @@ public class LineChartFunctionality {
}
public static double getNonLinearRegression(Map<Integer, ArrayList<Double>> confidenceIntervalData, double y0, double alpha, double j, int n) {
public static double getNonLinearRegression(Map<Integer, ArrayList<Double>> confidenceIntervalData, double y0, double alpha, double beta, double j, double n) {
//return Math.exp(intercept+slope*i)/(1+Math.exp(intercept+slope*i));
/*
double beta = 0.0;
//double n = confidenceIntervalData.size();
for (Map.Entry<Integer, ArrayList<Double>> entry : confidenceIntervalData.entrySet()) {
......@@ -308,28 +363,31 @@ public class LineChartFunctionality {
}
}
}
*/
//System.out.println("maxYValue: " + maxYValue);
//System.out.println("j*n: "+j/n);
//double p_t = ((beta*maxYValue)/(maxYValue+((beta-maxYValue)*Math.exp(-alpha*(yValue-maxYValue)))));
//double p_t = ((beta* y0)/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(2*Math.PI)))))-y0; //Funker sånn halveis
//double p_t = (beta * y0)/(y0 + (beta - y0)*Math.exp(-intercept*(j/n)));
double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(ADJUST_REGRESSION)))))-y0; //Beste til nå
//double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(ADJUST_REGRESSION)))))-y0; //Beste til nå
double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*(j-n)))))-y0; //Beste til nå
System.out.println("---------------------------");
System.out.println("y0: " + y0);
System.out.println("Alpha: " + alpha);
System.out.println("Beta: " + beta);
System.out.println(p_t);
//System.out.println(p_t);
return p_t;
}
public static int getDataPoints() {
return dataPoints;
public static int getDataPointsXAxis() {
return dataPointsXAxis;
}
public static int getDataPointsYAxis() {
return dataPointsYAxis;
}
public static Map<String, Number> getLiveData() {
......
......@@ -24,7 +24,7 @@ import java.util.logging.Logger;
import static com.application.DB.Constants.*;
import static com.application.DB.HelpingFunctions.*;
import static com.application.DB.HelpingFunctions.isLoadedData;
import static com.application.GUI.LineChartFunctionality.getDataPoints;
import static com.application.GUI.LineChartFunctionality.getDataPointsXAxis;
import static com.application.GUI.LineChartFunctionality.getLiveData;
import static java.util.logging.Level.SEVERE;
......@@ -251,7 +251,7 @@ public class Main extends Application {
rpi.setProgress(progress);
});
progress = getLiveData().size()/getDataPoints();
progress = getLiveData().size()/ getDataPointsXAxis();
if (progress > 100) {
break;
......
......@@ -15,9 +15,9 @@
.default-color0.chart-line-symbol{-fx-background-color: red,red;}
.default-color1.chart-line-symbol{-fx-background-color: green,green;}
.default-color2.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color3.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color4.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color5.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color6.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color7.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color2.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color3.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color4.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color5.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color6.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color7.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
......@@ -4,8 +4,8 @@
-fx-effect: null;
}
.default-color0.chart-series-line{-fx-stroke: green; -fx-opacity: 1.0}
.default-color1.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
.default-color0.chart-series-line{-fx-stroke: red; -fx-opacity: 1.0}
.default-color1.chart-series-line{-fx-stroke: green; -fx-opacity: 1.0}
.default-color2.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
.default-color3.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
.default-color4.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
......@@ -13,11 +13,11 @@
.default-color6.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
.default-color7.chart-series-line{-fx-stroke: rgba(0,168,355,0.3); -fx-opacity: 0.1}
.default-color0.chart-line-symbol{-fx-background-color: green,green;}
.default-color1.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color2.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color3.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color4.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color5.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color6.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color7.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),rgba(0,168,355,0.3);}
.default-color0.chart-line-symbol{-fx-background-color: red,red;}
.default-color1.chart-line-symbol{-fx-background-color: green,green;}
.default-color2.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color3.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color4.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color5.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color6.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
.default-color7.chart-line-symbol{-fx-background-color: rgba(0,168,355,0.3),white;}
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment