use of org.apache.commons.math3.stat.regression.SimpleRegression in project dhis2-core by dhis2.
the class DefaultChartService method getCategoryDataSet.
private CategoryDataset[] getCategoryDataSet(BaseChart chart) {
Map<String, Object> valueMap = new HashMap<>();
if (chart.isAnalyticsType(AnalyticsType.AGGREGATE)) {
valueMap = analyticsService.getAggregatedDataValueMapping(chart);
} else if (chart.isAnalyticsType(AnalyticsType.EVENT)) {
Grid grid = eventAnalyticsService.getAggregatedEventData(chart);
chart.setDataItemGrid(grid);
valueMap = GridUtils.getMetaValueMapping(grid, (grid.getWidth() - 1));
}
DefaultCategoryDataset regularDataSet = new DefaultCategoryDataset();
DefaultCategoryDataset regressionDataSet = new DefaultCategoryDataset();
SimpleRegression regression = new SimpleRegression();
BaseAnalyticalObject.sortKeys(valueMap);
List<NameableObject> seriez = new ArrayList<>(chart.series());
List<NameableObject> categories = new ArrayList<>(chart.category());
if (chart.hasSortOrder()) {
categories = getSortedCategories(categories, chart, valueMap);
}
for (NameableObject series : seriez) {
double categoryIndex = 0;
for (NameableObject category : categories) {
categoryIndex++;
String key = getKey(series, category, chart.getAnalyticsType());
Object object = valueMap.get(key);
Number value = object != null && object instanceof Number ? (Number) object : null;
regularDataSet.addValue(value, series.getShortName(), category.getShortName());
if (chart.isRegression() && value != null && value instanceof Double && !MathUtils.isEqual((Double) value, MathUtils.ZERO)) {
regression.addData(categoryIndex, (Double) value);
}
}
if (// Period must be category
chart.isRegression()) {
categoryIndex = 0;
for (NameableObject category : chart.category()) {
final double value = regression.predict(categoryIndex++);
if (!Double.isNaN(value)) {
regressionDataSet.addValue(value, TREND_PREFIX + series.getShortName(), category.getShortName());
}
}
}
}
return new CategoryDataset[] { regularDataSet, regressionDataSet };
}
Aggregations