/*
* 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.entities.relativeeffect;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.drugis.addis.entities.BasicMeasurement;
import org.drugis.addis.entities.BasicRateMeasurement;
import org.drugis.addis.entities.RateMeasurement;
import org.drugis.addis.entities.treatment.TreatmentDefinition;
import org.drugis.common.Interval;
import org.junit.Before;
import org.junit.Test;
public class BasicRiskRatioTest extends RelativeEffectTestBase {
BasicMeasurement d_numerator;
BasicMeasurement d_denominator;
RelativeEffect<RateMeasurement> d_ratio;
private RelativeEffect<?> d_ratioBennie;
private RelativeEffect<?> d_ratioBoyer;
private RelativeEffect<?> d_ratioFava;
private RelativeEffect<?> d_ratioNewhouse;
private RelativeEffect<?> d_ratioSechter;
@Before
public void setUp() {
d_ratioBennie = RelativeEffectFactory.buildRelativeEffect(d_bennie, d_rateEndpoint, TreatmentDefinition.createTrivial(d_fluox), TreatmentDefinition.createTrivial(d_sertr), BasicRiskRatio.class);
d_ratioBoyer = RelativeEffectFactory.buildRelativeEffect(d_boyer, d_rateEndpoint, TreatmentDefinition.createTrivial(d_fluox), TreatmentDefinition.createTrivial(d_sertr), BasicRiskRatio.class);
d_ratioFava = RelativeEffectFactory.buildRelativeEffect(d_fava, d_rateEndpoint, TreatmentDefinition.createTrivial(d_fluox), TreatmentDefinition.createTrivial(d_sertr), BasicRiskRatio.class);
d_ratioNewhouse = RelativeEffectFactory.buildRelativeEffect(d_newhouse, d_rateEndpoint, TreatmentDefinition.createTrivial(d_fluox), TreatmentDefinition.createTrivial(d_sertr), BasicRiskRatio.class);
d_ratioSechter = RelativeEffectFactory.buildRelativeEffect(d_sechter, d_rateEndpoint, TreatmentDefinition.createTrivial(d_fluox), TreatmentDefinition.createTrivial(d_sertr), BasicRiskRatio.class);
}
@Test
public void testGetMean() {
assertEquals(1.18, d_ratioBennie.getConfidenceInterval().getPointEstimate(), 0.01);
assertEquals(1.02, d_ratioBoyer.getConfidenceInterval().getPointEstimate(), 0.01);
assertEquals(1.18, d_ratioFava.getConfidenceInterval().getPointEstimate(), 0.01);
assertEquals(1.03, d_ratioNewhouse.getConfidenceInterval().getPointEstimate(), 0.01);
assertEquals(1.15, d_ratioSechter.getConfidenceInterval().getPointEstimate(), 0.01);
}
@Test
public void testStatisticsBennie() {
Interval<Double> ival = d_ratioBennie.getConfidenceInterval();
assertEquals(0.92, (ival.getLowerBound()), 0.01);
assertEquals(1.50, (ival.getUpperBound()), 0.01);
}
@Test
public void testGetStatisticsBoyer() {
Interval<Double> ival = d_ratioBoyer.getConfidenceInterval();
assertEquals(0.79, (ival.getLowerBound()), 0.01);
assertEquals(1.30, (ival.getUpperBound()), 0.01);
assertEquals(0.9003, d_ratioBoyer.getTwoSidedPValue(), 0.001);
}
@Test
public void testStatisticsFava() {
Interval<Double> ival = d_ratioFava.getConfidenceInterval();
assertEquals(0.96, (ival.getLowerBound()), 0.01);
assertEquals(1.45, (ival.getUpperBound()), 0.01);
assertEquals(0.1144, d_ratioFava.getTwoSidedPValue(), 0.001);
}
@Test
public void testStatisticsNewhouse() {
Interval<Double> ival = d_ratioNewhouse.getConfidenceInterval();
assertEquals(0.87, (ival.getLowerBound()), 0.01);
assertEquals(1.21, (ival.getUpperBound()), 0.01);
assertEquals(0.7259, d_ratioNewhouse.getTwoSidedPValue(), 0.001);
}
@Test
public void testStatisticsSechter() {
Interval<Double> ival = d_ratioSechter.getConfidenceInterval();
assertEquals(0.97, (ival.getLowerBound()), 0.01);
assertEquals(1.38, (ival.getUpperBound()), 0.01);
}
@Test
public void testGetName() {
assertEquals("Risk ratio", d_ratioSechter.getName());
}
@Test
public void testZeroBaselineRateShouldBeUndefined() {
RateMeasurement base = new BasicRateMeasurement(0, 100);
RateMeasurement subj = new BasicRateMeasurement(50, 100);
BasicRiskRatio or = new BasicRiskRatio(base, subj);
assertFalse(or.isDefined());
}
@Test
public void testFullSubjectRateShouldBeDefined() {
RateMeasurement base = new BasicRateMeasurement(50, 100);
RateMeasurement subj = new BasicRateMeasurement(100, 100);
BasicRiskRatio or = new BasicRiskRatio(base, subj);
assertTrue(or.isDefined());
}
@Test
public void testZeroSubjectRateShouldBeUndefined() { // although we can calculate a point-estimate, we can't get a CI.
RateMeasurement base = new BasicRateMeasurement(50, 100);
RateMeasurement subj = new BasicRateMeasurement(0, 100);
BasicRiskRatio or = new BasicRiskRatio(base, subj);
assertFalse(or.isDefined());
}
@Test
public void testFullBaselineRateShouldBeDefined() {
RateMeasurement base = new BasicRateMeasurement(100, 100);
RateMeasurement subj = new BasicRateMeasurement(50, 100);
BasicRiskRatio or = new BasicRiskRatio(base, subj);
assertTrue(or.isDefined());
}
@Test
public void testUndefinedShouldResultInNaN() {
RateMeasurement rmA1 = new BasicRateMeasurement(0, 100);
RateMeasurement rmC1 = new BasicRateMeasurement(50, 100);
BasicOddsRatio or = new BasicOddsRatio(rmA1, rmC1);
assertEquals(Double.NaN, or.getError(), 0.001);
assertEquals(Double.NaN, or.getConfidenceInterval().getPointEstimate(), 0.001);
}
}