From d993da855ddc0cf22344a48e414224811f01376a Mon Sep 17 00:00:00 2001
From: Steve Reis <stevereis93@gmail.com>
Date: Thu, 4 Aug 2022 15:07:22 +0200
Subject: [PATCH] fix(exareme2): Issue with Logistic regression (exareme)

---
 .../algorithms/logistic-regression.handler.spec.ts       | 2 +-
 .../handlers/algorithms/logistic-regression.handler.ts   | 9 +++++++--
 api/src/engine/connectors/exareme/handlers/index.ts      | 4 ++++
 .../exareme/transformations/algorithms/index.ts          | 2 +-
 4 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.spec.ts b/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.spec.ts
index 617f128..6c157e6 100644
--- a/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.spec.ts
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.spec.ts
@@ -43,7 +43,7 @@ const createExperiment = (): Experiment => ({
   id: 'dummy-id',
   name: 'Testing purpose',
   algorithm: {
-    name: 'LOGISTIC_REGRESSION',
+    name: LogisticRegressionHandler.ALGO_NAME,
   },
   datasets: ['desd-synthdata'],
   domain: 'dementia',
diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.ts b/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.ts
index a36e0b9..ce990f6 100644
--- a/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.ts
+++ b/api/src/engine/connectors/exareme/handlers/algorithms/logistic-regression.handler.ts
@@ -34,6 +34,8 @@ const roundNumber = (val: any, name: string) =>
     : val;
 
 export default class LogisticRegressionHandler extends BaseHandler {
+  public static readonly ALGO_NAME = 'logistic_regression';
+
   private getModel(data: any): TableResult | undefined {
     return {
       name: 'Model',
@@ -73,13 +75,16 @@ export default class LogisticRegressionHandler extends BaseHandler {
         name: lookupDict[name],
         type: 'string',
       })),
-      data: [fields.map((name) => roundNumber(data[name], name))],
+      data: data['indep_vars'].map((_var: string, i: number) =>
+        fields.map((name) => roundNumber(data[name][i], name)),
+      ),
     };
   }
 
   canHandle(exp: Experiment, data: any): boolean {
     return (
-      exp.algorithm.name.toLowerCase() === 'logistic_regression' &&
+      exp.algorithm.name.toLowerCase() ===
+        LogisticRegressionHandler.ALGO_NAME &&
       !!data &&
       !!data[0] &&
       !!data[0]['summary']
diff --git a/api/src/engine/connectors/exareme/handlers/index.ts b/api/src/engine/connectors/exareme/handlers/index.ts
index ad4dfb9..c3041fe 100644
--- a/api/src/engine/connectors/exareme/handlers/index.ts
+++ b/api/src/engine/connectors/exareme/handlers/index.ts
@@ -4,9 +4,11 @@ import AnovaOneWayHandler from './algorithms/anova-one-way.handler';
 import DescriptiveHandler from './algorithms/descriptive.handler';
 import LinearRegressionCVHandler from './algorithms/linear-regression-cv.handler';
 import LinearRegressionHandler from './algorithms/linear-regression.handler';
+import LogisticRegressionHandler from './algorithms/logistic-regression.handler';
 import PCAHandler from './algorithms/PCA.handler';
 import PearsonHandler from './algorithms/pearson.handler';
 import RawHandler from './algorithms/raw.handler';
+import TTestPairedHandler from './algorithms/ttest-paired.handler';
 import ResultHandler from './result-handler.interface';
 
 const start = new PearsonHandler() as ResultHandler;
@@ -17,6 +19,8 @@ start
   .setNext(new PCAHandler())
   .setNext(new LinearRegressionHandler())
   .setNext(new LinearRegressionCVHandler())
+  .setNext(new LogisticRegressionHandler())
+  .setNext(new TTestPairedHandler())
   .setNext(new RawHandler()); // should be last handler as it works as a fallback (if other handlers could not process the results)
 
 export default (exp: Experiment, data: unknown, domain: Domain): Experiment => {
diff --git a/api/src/engine/connectors/exareme/transformations/algorithms/index.ts b/api/src/engine/connectors/exareme/transformations/algorithms/index.ts
index b3626f3..c723eba 100644
--- a/api/src/engine/connectors/exareme/transformations/algorithms/index.ts
+++ b/api/src/engine/connectors/exareme/transformations/algorithms/index.ts
@@ -13,7 +13,7 @@ const transformToAlgorithms = jsonata(`
     'PEARSON','ID3','KMEANS','NAIVE_BAYES',
     'TTEST_ONESAMPLE','PCA','CALIBRATION_BELT','CART',
     'KAPLAN_MEIER','THREE_C', 'ONE_WAY_ANOVA', 'PEARSON', 'LINEAR_REGRESSION_CV'];
-    $linkedVars:= ['positive_level', 'negative_level', 'outcome_neg', 'outcome_pos'];
+    $linkedVars:= ['positive_class', 'positive_level', 'negative_level', 'outcome_neg', 'outcome_pos'];
     $linkedCoVars:= ['referencevalues', 'xlevels'];
     $truthy:= function($val) {(
         $v:= $lowercase($val);
-- 
GitLab