/* * This file is part of ADDIS (Aggregate Data Drug Information System). * ADDIS is distributed from http://drugis.org/. * Copyright © 2009 Gert van Valkenhoef, Tommi Tervonen. * Copyright © 2010 Gert van Valkenhoef, Tommi Tervonen, Tijs Zwinkels, * Maarten Jacobs, Hanno Koeslag, Florin Schimbinschi, Ahmad Kamal, Daniel * Reid. * Copyright © 2011 Gert van Valkenhoef, Ahmad Kamal, Daniel Reid, Florin * Schimbinschi. * Copyright © 2012 Gert van Valkenhoef, Daniel Reid, Joël Kuiper, Wouter * Reckman. * Copyright © 2013 Gert van Valkenhoef, Joël Kuiper. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.drugis.addis.util.JSMAAintegration; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.drugis.addis.ExampleData; import org.drugis.addis.entities.Arm; import org.drugis.addis.entities.OutcomeMeasure; import org.drugis.addis.entities.analysis.BenefitRiskAnalysis.AnalysisType; import org.drugis.addis.entities.analysis.StudyBenefitRiskAnalysis; import org.drugis.addis.entities.relativeeffect.Beta; import org.drugis.addis.entities.relativeeffect.Distribution; import org.drugis.addis.entities.relativeeffect.TransformedStudentTBase; import org.drugis.addis.entities.treatment.TreatmentDefinition; import org.drugis.addis.util.JSMAAintegration.MetaBenefitRiskSMAAFactory; import org.drugis.addis.util.JSMAAintegration.StudyBenefitRiskSMAAFactory; import org.junit.Before; import org.junit.Test; import fi.smaa.jsmaa.model.BetaMeasurement; import fi.smaa.jsmaa.model.GaussianMeasurement; import fi.smaa.jsmaa.model.IndependentMeasurements; import fi.smaa.jsmaa.model.SMAAModel; public class SMAAEntityFactoryTest { private StudyBenefitRiskSMAAFactory d_smaaFactoryArm; private StudyBenefitRiskAnalysis d_brAnalysisStudy; @Before public void setup() { List<OutcomeMeasure> criteria = new ArrayList<OutcomeMeasure>(); criteria.add(ExampleData.buildEndpointCgi()); criteria.add(ExampleData.buildAdverseEventConvulsion()); List<Arm> alternatives = ExampleData.buildStudyChouinard().getArms(); d_brAnalysisStudy = new StudyBenefitRiskAnalysis("Study Analysis", ExampleData.buildIndicationDepression(), ExampleData.buildStudyChouinard(), criteria, alternatives, AnalysisType.SMAA); d_smaaFactoryArm = new StudyBenefitRiskSMAAFactory(d_brAnalysisStudy); } @Test public void testCreateMeanVector() { TreatmentDefinition a1 = TreatmentDefinition.createTrivial(ExampleData.buildDrugFluoxetine()); TreatmentDefinition a2 = TreatmentDefinition.createTrivial(ExampleData.buildDrugParoxetine()); TreatmentDefinition a3 = TreatmentDefinition.createTrivial(ExampleData.buildDrugEscitalopram()); TreatmentDefinition a4 = TreatmentDefinition.createTrivial(ExampleData.buildDrugSertraline()); List<TreatmentDefinition> alts = Arrays.asList(a1, a2, a3, a4); double m[] = new double [] {1.2, 0.3, -8.4}; assertArrayEquals(new double[] {0.0, m[0], m[1], m[2]}, MetaBenefitRiskSMAAFactory.createMeanVector(alts, a1, m), 0.0); assertArrayEquals(new double[] {m[0], 0.0, m[1], m[2]}, MetaBenefitRiskSMAAFactory.createMeanVector(alts, a2, m), 0.0); assertArrayEquals(new double[] {m[0], m[1], m[2], 0.0}, MetaBenefitRiskSMAAFactory.createMeanVector(alts, a4, m), 0.0); } @Test public void testCreateCovarianceMatrix() { TreatmentDefinition a1 = TreatmentDefinition.createTrivial(ExampleData.buildDrugFluoxetine()); TreatmentDefinition a2 = TreatmentDefinition.createTrivial(ExampleData.buildDrugParoxetine()); TreatmentDefinition a3 = TreatmentDefinition.createTrivial(ExampleData.buildDrugEscitalopram()); TreatmentDefinition a4 = TreatmentDefinition.createTrivial(ExampleData.buildDrugSertraline()); List<TreatmentDefinition> alts = Arrays.asList(a1, a2, a3, a4); double m[][] = new double [][] {{1.2, 0.3, -8.4}, {1.8, -1.4, 0.5}, {1.0, 0.3, 0.4}}; double m1[][] = new double[][] {{0.0, 0.0, 0.0, 0.0}, {0.0, 1.2, 0.3, -8.4}, {0.0, 1.8, -1.4, 0.5}, {0.0, 1.0, 0.3, 0.4}}; double m3[][] = new double[][] {{1.2, 0.3, 0.0, -8.4}, {1.8, -1.4, 0.0, 0.5}, {0.0, 0.0, 0.0, 0.0}, {1.0, 0.3, 0.0, 0.4}}; assertArrayEquals(m1, MetaBenefitRiskSMAAFactory.createCovarianceMatrix(alts, a1, m)); assertArrayEquals(m3, MetaBenefitRiskSMAAFactory.createCovarianceMatrix(alts, a3, m)); } // // @Test // public void testCreateCardinalMeasurementRate() { // GaussianBase relativeEffect = d_brAnalysis.getRelativeEffectDistribution(ExampleData.buildEndpointHamd(), new TreatmentCategorySet(ExampleData.buildDrugFluoxetine())); // CardinalMeasurement actual = SMAAEntityFactory.createCardinalMeasurement(relativeEffect); // assertTrue(!((LogNormalMeasurement) actual).getMean().isNaN()); // assertTrue(actual instanceof LogNormalMeasurement); // assertEquals(Math.log(relativeEffect.getQuantile(0.50)),((LogNormalMeasurement) actual).getMean(), 0.0001); // assertEquals(relativeEffect.getSigma(),((LogNormalMeasurement) actual).getStDev(), 0.0001); // } // // // @Test // public void testCreateSmaaModel() { // SMAAModel smaaModel = d_smaaFactory.createSmaaModel(d_brAnalysis); // for(OutcomeMeasure om : d_brAnalysis.getCriteria()){ // for(TreatmentCategorySet d : d_brAnalysis.getDrugs()){ // if (d.equals(d_brAnalysis.getBaseline())) // continue; // fi.smaa.jsmaa.model.Measurement actualMeasurement = smaaModel.getImpactMatrix().getMeasurement(d_smaaFactory.getCriterion(om), d_smaaFactory.getAlternative(d)); // GaussianBase relDistr = (GaussianBase) d_brAnalysis.getRelativeEffectDistribution(om, d); // GaussianBase basDistr = (GaussianBase) d_brAnalysis.getBaselineDistribution(om); // assertTrue(actualMeasurement instanceof RelativeLogitNormalMeasurement); // assertEquals(relDistr.getMu(), ((RelativeLogitNormalMeasurement) actualMeasurement).getRelative().getMean(), 0.0001); // assertEquals(relDistr.getSigma(), ((RelativeLogitNormalMeasurement) actualMeasurement).getRelative().getStDev(), 0.0001); // assertEquals(basDistr.getMu(), ((RelativeLogitNormalMeasurement) actualMeasurement).getBaseline().getMean(), 0.0001); // assertEquals(basDistr.getSigma(), ((RelativeLogitNormalMeasurement) actualMeasurement).getBaseline().getStDev(), 0.0001); // } // } // } // // @Test // public void testGetOutcomeMeasure() { // d_smaaFactory.createSmaaModel(d_brAnalysis); // for (OutcomeMeasure om : d_brAnalysis.getCriteria()) { // CardinalCriterion crit = d_smaaFactory.getCriterion(om); // assertEquals(om, d_smaaFactory.getOutcomeMeasure(crit)); // } // } @Test public void testCreateSmaaModelStudy() { SMAAModel smaaModel = d_smaaFactoryArm.createSMAAModel(); for(OutcomeMeasure om : d_brAnalysisStudy.getCriteria()){ for(Arm d : d_brAnalysisStudy.getAlternatives()){ fi.smaa.jsmaa.model.Measurement actualMeasurement = ((IndependentMeasurements) smaaModel.getMeasurements()).getMeasurement(d_smaaFactoryArm.getCriterion(om), d_smaaFactoryArm.getAlternative(d)); Distribution expDistribution = d_brAnalysisStudy.getMeasurement(om, d); if (om.equals(ExampleData.buildEndpointCgi())) { TransformedStudentTBase expected = (TransformedStudentTBase)expDistribution; GaussianMeasurement actual = (GaussianMeasurement)actualMeasurement; assertEquals(expected.getMu(), actual.getMean(), 0.0000001); assertEquals(expected.getSigma(), actual.getStDev(), 0.0000001); } if (om.equals(ExampleData.buildAdverseEventConvulsion())) { Beta expected = (Beta)expDistribution; BetaMeasurement actual = (BetaMeasurement)actualMeasurement; assertEquals(expected.getAlpha(), actual.getAlpha(), 0.0000001); assertEquals(expected.getBeta(), actual.getBeta(), 0.0000001); } } } } }