Skip to content
Snippets Groups Projects
Commit 743b6d01 authored by Steve Reis's avatar Steve Reis
Browse files

feat: Logisitc regression integration

parent 87e93eeb
No related branches found
No related tags found
No related merge requests found
......@@ -260,6 +260,10 @@ export default class DataShieldConnector implements Connector {
datasets: data.datasets,
algorithm: {
name: data.algorithm.id,
parameters: data.algorithm.parameters.map((p) => ({
name: p.id,
value: p.value,
})),
},
};
......@@ -320,15 +324,15 @@ export default class DataShieldConnector implements Connector {
experiment.variables.length > 0 ? experiment.variables[0] : undefined;
const expToInput = {
coVariable,
variables: experiment.coVariables,
algorithm: {
id: experiment.algorithm.name,
coVariable,
variables: experiment.coVariables,
},
datasets: experiment.datasets,
};
experiment.algorithm.parameters.forEach((param) => {
experiment.algorithm.parameters?.forEach((param) => {
if (!expToInput.algorithm[param.name]) {
// FIXME: the parameter should be added in a specific key entry (e.g. expToInput.algorithm.parameters')
// Should be fixed inside the Datashield API
......
import { Experiment } from '../../../../models/experiment/experiment.model';
import { TableResult } from '../../../../models/result/table-result.model';
import LogisticRegressionHandler from './logistic-regression.handler';
const data = {
......@@ -79,12 +80,23 @@ const createExperiment = (): Experiment => ({
describe('Logistic Regression Handler', () => {
describe('Normal usage', () => {
it('should return the correct results', () => {
it('should return two TableResult', () => {
const experiment = createExperiment();
const handler = new LogisticRegressionHandler();
handler.handle(experiment, data, []);
expect(experiment.results).toHaveLength(1);
expect(experiment.results).toHaveLength(2);
const summary = experiment.results[0] as TableResult;
const coefs = experiment.results[1] as TableResult;
expect(coefs.headers.length).toBeGreaterThan(0);
expect(coefs.data.length).toBeGreaterThan(0);
expect(coefs.data.some((row) => row.some((cell) => !cell)));
expect(summary.headers.length).toBe(2);
expect(summary.data.length).toBeGreaterThan(0);
expect(summary.data.some((row) => !row[0] || !row[1])).toBeFalsy();
});
});
});
......@@ -9,7 +9,7 @@ const lookupDict = {
'z-value': 'Z value',
'p-value': 'P value',
'low0.95CI.LP': 'Low 95% CI',
'high0.95CI': 'High 95% CI',
'high0.95CI.LP': 'High 95% CI',
P_OR: 'P OR',
'low0.95CI.P_OR': 'Low 95% CI P_OR',
'high0.95CI.P_OR': 'High 95% CI P OR',
......@@ -28,9 +28,9 @@ const properties = [
'p-value',
'low0.95CI.LP',
'high0.95CI.LP',
'P_OR',
'low0.95CI.P_OR',
'high0.95CI.P_OR',
// 'P_OR', // What is P_OR? Not defined in the ds' documentation
// 'low0.95CI.P_OR',
// 'high0.95CI.P_OR',
];
const summaryProps = ['iter', 'Nvalid', 'Ntotal', 'df'];
......@@ -38,7 +38,8 @@ const summaryProps = ['iter', 'Nvalid', 'Ntotal', 'df'];
export default class LogisticRegressionHandler extends BaseHandler {
canHandle(algorithm: string, data: any): boolean {
return (
algorithm.toLowerCase() === 'logistic-regression' && data['coefficients']
algorithm.toLowerCase() === 'logistic-regression' &&
!!data['coefficients']
);
}
......@@ -75,9 +76,7 @@ export default class LogisticRegressionHandler extends BaseHandler {
const tableResult = this.getTableResult(data, vars);
const summaryTable = this.getSummaryTable(data);
if (tableResult) experiment.results.push(tableResult);
if (summaryTable) experiment.results.push(summaryTable);
this.next?.handle(experiment, data, vars);
if (tableResult) experiment.results.push(tableResult);
}
}
......@@ -2,12 +2,14 @@ import { Variable } from 'src/engine/models/variable.model';
import { Experiment } from '../../../../engine/models/experiment/experiment.model';
import ErrorAlgorithmHandler from './algorithms/error-algorithm.handler';
import LinearRegressionHandler from './algorithms/linear-regression.handler';
import LogisticRegressionHandler from './algorithms/logistic-regression.handler';
import TerminalAlgorithmHandler from './algorithms/terminal-algorithm.handler';
const start = new ErrorAlgorithmHandler();
start
.setNext(new LinearRegressionHandler())
.setNext(new LogisticRegressionHandler())
.setNext(new TerminalAlgorithmHandler());
export default (
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment