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

Merge branch 'feat/exareme2-t-test-paired-integration' into 'develop'

Integration of Ttest paired for exareme 2

See merge request sibmip/gateway!72
parents e898d2e5 8595556e
No related branches found
No related tags found
No related merge requests found
import { TableResult } from '../../../../models/result/table-result.model';
import { Experiment } from '../../../../models/experiment/experiment.model';
import TTestPairedHandler from './ttest-paired.handler';
const data = {
t_stat: -97.35410837992711,
p: 1.0,
df: 144.0,
mean_diff: -66.00088551724139,
se_diff: 0.6779465871093092,
ci_upper: 'Infinity',
ci_lower: -67.12322892404309,
cohens_d: -11.456478738682357,
};
const createExperiment = (): Experiment => ({
id: 'dummy-id',
name: 'Testing purpose',
algorithm: {
name: 'TTEST_PAIRED',
},
datasets: ['desd-synthdata'],
domain: 'dementia',
variables: ['lefthippocampus'],
coVariables: ['righthippocampus', 'leftamygdala'],
results: [],
});
describe('T-Test Paired handler', () => {
let tTestPairedHandler: TTestPairedHandler;
let experiment: Experiment;
beforeEach(() => {
tTestPairedHandler = new TTestPairedHandler();
experiment = createExperiment();
});
describe('Handle', () => {
it('with standard t-test algo data', () => {
tTestPairedHandler.handle(experiment, data);
const table = experiment.results[0] as TableResult;
expect(experiment.results.length === 1);
expect(table.data.length === 7);
});
it('Should be empty with another algo', () => {
experiment.algorithm.name = 'dummy_algo';
tTestPairedHandler.handle(experiment, data);
expect(experiment.results.length === 0);
});
});
});
import { isNumber } from '../../../../../common/utils/shared.utils';
import { Domain } from '../../../../models/domain.model';
import { Experiment } from '../../../../models/experiment/experiment.model';
import {
TableResult,
TableStyle,
} from '../../../../models/result/table-result.model';
import BaseHandler from '../base.handler';
const lookupDict = {
t_stat: 'Statistic',
p: 'P-value',
df: 'Degrees of freedom',
mean_diff: 'Mean difference',
se_diff: 'Standard error of difference',
ci_lower: 'Lower 95% confidence interval',
ci_upper: 'Upper 95% confidence interval',
cohens_d: "Cohen's d",
};
const NUMBER_PRECISION = 4;
export default class TTestPairedHandler extends BaseHandler {
private canHandle(experimentId: string) {
return experimentId.toLocaleLowerCase() === 'ttest_paired';
}
private getTable(data: any): TableResult {
const tableModel: TableResult = {
name: 'T-test',
tableStyle: TableStyle.NORMAL,
headers: ['name', 'value'].map((name) => ({ name, type: 'string' })),
data: [
't_stat',
'p',
'df',
'mean_diff',
'se_diff',
'ci_lower',
'ci_upper',
'cohens_d',
].map((name) => [
lookupDict[name],
isNumber(data[name])
? data[name].toPrecision(NUMBER_PRECISION)
: data[name],
]),
};
return tableModel;
}
handle(experiment: Experiment, data: any, domain?: Domain): void {
if (!this.canHandle) return super.handle(experiment, data, domain);
const tableModel = this.getTable(data);
if (tableModel) experiment.results.push(tableModel);
}
}
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