""" Created on Wed Oct 17 09:48:34 2012 Author: Josef Perktold """ import numpy as np from numpy.testing import assert_almost_equal, assert_equal, assert_ import pytest import statsmodels.stats.weightstats as smws from statsmodels.tools.testing import Holder def assert_almost_equal_inf(x, y, decimal=6, msg=None): x = np.atleast_1d(x) y = np.atleast_1d(y) assert_equal(np.isposinf(x), np.isposinf(y)) assert_equal(np.isneginf(x), np.isneginf(y)) assert_equal(np.isnan(x), np.isnan(y)) assert_almost_equal(x[np.isfinite(x)], y[np.isfinite(y)]) raw_clinic = '''\ 1 1 2.84 4.00 3.45 2.55 2.46 2 1 2.51 3.26 3.10 2.82 2.48 3 1 2.41 4.14 3.37 2.99 3.04 4 1 2.95 3.42 2.82 3.37 3.35 5 1 3.14 3.25 3.31 2.87 3.41 6 1 3.79 4.34 3.88 3.40 3.16 7 1 4.14 4.97 4.25 3.43 3.06 8 1 3.85 4.31 3.92 3.58 3.91 9 1 3.02 3.11 2.20 2.24 2.28 10 1 3.45 3.41 3.80 3.86 3.91 11 1 5.37 5.02 4.59 3.99 4.27 12 1 3.81 4.21 4.08 3.18 1.86 13 1 4.19 4.59 4.79 4.17 2.60 14 1 3.16 5.30 4.69 4.83 4.51 15 1 3.84 4.32 4.25 3.87 2.93 16 2 2.60 3.76 2.86 2.41 2.71 17 2 2.82 3.66 3.20 2.49 2.49 18 2 2.18 3.65 3.87 3.00 2.65 19 2 3.46 3.60 2.97 1.80 1.74 20 2 4.01 3.48 4.42 3.06 2.76 21 2 3.04 2.87 2.87 2.71 2.87 22 2 3.47 3.24 3.47 3.26 3.14 23 2 4.06 3.92 3.18 3.06 1.74 24 2 2.91 3.99 3.06 2.02 3.18 25 2 3.59 4.21 4.02 3.26 2.85 26 2 4.51 4.21 3.78 2.63 1.92 27 2 3.16 3.31 3.28 3.25 3.52 28 2 3.86 3.61 3.28 3.19 3.09 29 2 3.31 2.97 3.76 3.18 2.60 30 2 3.02 2.73 3.87 3.50 2.93'''.split() clinic = np.array(raw_clinic, float).reshape(-1,7) #t = tost(-clinic$var2[16:30] + clinic$var2[1:15], eps=0.6) tost_clinic_paired = Holder() tost_clinic_paired.sample = 'paired' tost_clinic_paired.mean_diff = 0.5626666666666665 tost_clinic_paired.se_diff = 0.2478276410785118 tost_clinic_paired.alpha = 0.05 tost_clinic_paired.ci_diff = (0.1261653305099018, 0.999168002823431) tost_clinic_paired.df = 14 tost_clinic_paired.epsilon = 0.6 tost_clinic_paired.result = 'not rejected' tost_clinic_paired.p_value = 0.4412034046017588 tost_clinic_paired.check_me = (0.525333333333333, 0.6) #> t = tost(-clinic$var1[16:30] + clinic$var1[1:15], eps=0.6) #> cat_items(t, prefix="tost_clinic_paired_1.") tost_clinic_paired_1 = Holder() tost_clinic_paired_1.mean_diff = 0.1646666666666667 tost_clinic_paired_1.se_diff = 0.1357514067862445 tost_clinic_paired_1.alpha = 0.05 tost_clinic_paired_1.ci_diff = (-0.0744336620516462, 0.4037669953849797) tost_clinic_paired_1.df = 14 tost_clinic_paired_1.epsilon = 0.6 tost_clinic_paired_1.result = 'rejected' tost_clinic_paired_1.p_value = 0.003166881489265175 tost_clinic_paired_1.check_me = (-0.2706666666666674, 0.600000000000001) #> t = tost(clinic$var2[1:15], clinic$var2[16:30], eps=0.6) #> cat_items(t, prefix="tost_clinic_indep.") tost_clinic_indep = Holder() tost_clinic_indep.sample = 'independent' tost_clinic_indep.mean_diff = 0.562666666666666 tost_clinic_indep.se_diff = 0.2149871904637392 tost_clinic_indep.alpha = 0.05 tost_clinic_indep.ci_diff = (0.194916250699966, 0.930417082633366) tost_clinic_indep.df = 24.11000151062728 tost_clinic_indep.epsilon = 0.6 tost_clinic_indep.result = 'not rejected' tost_clinic_indep.p_value = 0.4317936812594803 tost_clinic_indep.check_me = (0.525333333333332, 0.6) #> t = tost(clinic$var1[1:15], clinic$var1[16:30], eps=0.6) #> cat_items(t, prefix="tost_clinic_indep_1.") tost_clinic_indep_1 = Holder() tost_clinic_indep_1.sample = 'independent' tost_clinic_indep_1.mean_diff = 0.1646666666666667 tost_clinic_indep_1.se_diff = 0.2531625991083627 tost_clinic_indep_1.alpha = 0.05 tost_clinic_indep_1.ci_diff = (-0.2666862980722534, 0.596019631405587) tost_clinic_indep_1.df = 26.7484787582315 tost_clinic_indep_1.epsilon = 0.6 tost_clinic_indep_1.result = 'rejected' tost_clinic_indep_1.p_value = 0.04853083976236974 tost_clinic_indep_1.check_me = (-0.2706666666666666, 0.6) #pooled variance #> t = tost(clinic$var1[1:15], clinic$var1[16:30], eps=0.6, var.equal = TRUE) #> cat_items(t, prefix="tost_clinic_indep_1_pooled.") tost_clinic_indep_1_pooled = Holder() tost_clinic_indep_1_pooled.mean_diff = 0.1646666666666667 tost_clinic_indep_1_pooled.se_diff = 0.2531625991083628 tost_clinic_indep_1_pooled.alpha = 0.05 tost_clinic_indep_1_pooled.ci_diff = (-0.2659960620757337, 0.595329395409067) tost_clinic_indep_1_pooled.df = 28 tost_clinic_indep_1_pooled.epsilon = 0.6 tost_clinic_indep_1_pooled.result = 'rejected' tost_clinic_indep_1_pooled.p_value = 0.04827315100761467 tost_clinic_indep_1_pooled.check_me = (-0.2706666666666666, 0.6) #> t = tost(clinic$var2[1:15], clinic$var2[16:30], eps=0.6, var.equal = TRUE) #> cat_items(t, prefix="tost_clinic_indep_2_pooled.") tost_clinic_indep_2_pooled = Holder() tost_clinic_indep_2_pooled.mean_diff = 0.562666666666666 tost_clinic_indep_2_pooled.se_diff = 0.2149871904637392 tost_clinic_indep_2_pooled.alpha = 0.05 tost_clinic_indep_2_pooled.ci_diff = (0.1969453064978777, 0.928388026835454) tost_clinic_indep_2_pooled.df = 28 tost_clinic_indep_2_pooled.epsilon = 0.6 tost_clinic_indep_2_pooled.result = 'not rejected' tost_clinic_indep_2_pooled.p_value = 0.43169347692374 tost_clinic_indep_2_pooled.check_me = (0.525333333333332, 0.6) #tost ratio, log transformed #> t = tost(log(clinic$var1[1:15]), log(clinic$var1[16:30]), eps=log(1.25), paired=TRUE) #> cat_items(t, prefix="tost_clinic_1_paired.") tost_clinic_1_paired = Holder() tost_clinic_1_paired.mean_diff = 0.0431223318225235 tost_clinic_1_paired.se_diff = 0.03819576328421437 tost_clinic_1_paired.alpha = 0.05 tost_clinic_1_paired.ci_diff = (-0.02415225319362176, 0.1103969168386687) tost_clinic_1_paired.df = 14 tost_clinic_1_paired.epsilon = 0.2231435513142098 tost_clinic_1_paired.result = 'rejected' tost_clinic_1_paired.p_value = 0.0001664157928976468 tost_clinic_1_paired.check_me = (-0.1368988876691603, 0.2231435513142073) #> t = tost(log(clinic$var1[1:15]), log(clinic$var1[16:30]), eps=log(1.25), paired=FALSE) #> cat_items(t, prefix="tost_clinic_1_indep.") tost_clinic_1_indep = Holder() tost_clinic_1_indep.mean_diff = 0.04312233182252334 tost_clinic_1_indep.se_diff = 0.073508371131806 tost_clinic_1_indep.alpha = 0.05 tost_clinic_1_indep.ci_diff = (-0.0819851930203655, 0.1682298566654122) tost_clinic_1_indep.df = 27.61177037646526 tost_clinic_1_indep.epsilon = 0.2231435513142098 tost_clinic_1_indep.result = 'rejected' tost_clinic_1_indep.p_value = 0.01047085593138891 tost_clinic_1_indep.check_me = (-0.1368988876691633, 0.22314355131421) #> t = tost(log(y), log(x), eps=log(1.25), paired=TRUE) #> cat_items(t, prefix="tost_s_paired.") tost_s_paired = Holder() tost_s_paired.mean_diff = 0.06060076667771316 tost_s_paired.se_diff = 0.04805826005366752 tost_s_paired.alpha = 0.05 tost_s_paired.ci_diff = (-0.0257063329659993, 0.1469078663214256) tost_s_paired.df = 11 tost_s_paired.epsilon = 0.2231435513142098 tost_s_paired.result = 'rejected' tost_s_paired.p_value = 0.003059338540563293 tost_s_paired.check_me = (-0.1019420179587835, 0.2231435513142098) #multiple endpoints #> compvall <- multeq.diff(data=clinic,grp="fact",method="step.up",margin.up=rep(0.6,5), margin.lo=c(-1.0, -1.0, -1.5, -1.5, -1.5)) #> cat_items(compvall, prefix="tost_clinic_all_no_multi.") tost_clinic_all_no_multi = Holder() tost_clinic_all_no_multi.comp_name = '2-1' tost_clinic_all_no_multi.estimate = np.array([ -0.1646666666666667, -0.562666666666666, -0.3073333333333332, -0.5553333333333335, -0.469333333333333]) tost_clinic_all_no_multi.degr_fr = np.array([ 26.74847875823152, 24.1100015106273, 23.90046331918926, 25.71678948210178, 24.88436709341423]) tost_clinic_all_no_multi.test_stat = np.array([ 3.020456692101513, 2.034229724989578, 4.052967897750272, 4.37537447933403, 4.321997343344]) tost_clinic_all_no_multi.p_value = np.array([ 0.00274867705173331, 0.02653543052872217, 0.0002319468040526358, 8.916466517494902e-05, 0.00010890038649094043]) tost_clinic_all_no_multi.lower = np.array([ -0.596019631405587, -0.930417082633366, -0.690410573009442, -0.92373513818557, -0.876746448909633]) tost_clinic_all_no_multi.upper = np.array([ 0.2666862980722534, -0.194916250699966, 0.07574390634277595, -0.186931528481097, -0.06192021775703377]) tost_clinic_all_no_multi.margin_lo = np.array([ -1, -1, -1.5, -1.5, -1.5]) tost_clinic_all_no_multi.margin_up = np.array([ 0.6, 0.6, 0.6, 0.6, 0.6]) tost_clinic_all_no_multi.base = 1 tost_clinic_all_no_multi.method = 'step.up' tost_clinic_all_no_multi.var_equal = '''FALSE''' tost_clinic_all_no_multi.FWER = 0.05 #> comp <- multeq.diff(data=clinic,grp="fact", resp=c("var1"),method="step.up",margin.up=rep(0.6), margin.lo=rep(-1.5)) #> cat_items(comp, prefix="tost_clinic_1_asym.") tost_clinic_1_asym = Holder tost_clinic_1_asym.comp_name = '2-1' tost_clinic_1_asym.estimate = -0.1646666666666667 tost_clinic_1_asym.degr_fr = 26.74847875823152 tost_clinic_1_asym.test_stat = 3.020456692101513 tost_clinic_1_asym.p_value = 0.00274867705173331 tost_clinic_1_asym.lower = -0.596019631405587 tost_clinic_1_asym.upper = 0.2666862980722534 tost_clinic_1_asym.margin_lo = -1.5 tost_clinic_1_asym.margin_up = 0.6 tost_clinic_1_asym.base = 1 tost_clinic_1_asym.method = 'step.up' tost_clinic_1_asym.var_equal = '''FALSE''' tost_clinic_1_asym.FWER = 0.05 #TODO: not used yet, some p-values are multi-testing adjusted # not implemented #> compvall <- multeq.diff(data=clinic,grp="fact",method="step.up",margin.up=rep(0.6,5), margin.lo=c(-0.5, -0.5, -1.5, -1.5, -1.5)) #> cat_items(compvall, prefix="tost_clinic_all_multi.") tost_clinic_all_multi = Holder() tost_clinic_all_multi.comp_name = '2-1' tost_clinic_all_multi.estimate = np.array([ -0.1646666666666667, -0.562666666666666, -0.3073333333333332, -0.5553333333333335, -0.469333333333333]) tost_clinic_all_multi.degr_fr = np.array([ 26.74847875823152, 24.1100015106273, 23.90046331918926, 25.71678948210178, 24.88436709341423]) tost_clinic_all_multi.test_stat = np.array([ 1.324576910311299, -0.2914902349832590, 4.052967897750272, 4.37537447933403, 4.321997343344]) tost_clinic_all_multi.p_value = np.array([ 0.0982588867413542, 0.6134151998456164, 0.0006958404121579073, 0.0002674939955248471, 0.0003267011594728213]) tost_clinic_all_multi.lower = np.array([ -0.596019631405587, -0.930417082633366, -0.812901144055456, -1.040823983574101, -1.006578759345919]) tost_clinic_all_multi.upper = np.array([ 0.2666862980722534, -0.194916250699966, 0.1982344773887895, -0.0698426830925655, 0.0679120926792529]) tost_clinic_all_multi.margin_lo = np.array([ -0.5, -0.5, -1.5, -1.5, -1.5]) tost_clinic_all_multi.margin_up = np.array([ 0.6, 0.6, 0.6, 0.6, 0.6]) tost_clinic_all_multi.base = 1 tost_clinic_all_multi.method = 'step.up' tost_clinic_all_multi.var_equal = '''FALSE''' tost_clinic_all_multi.FWER = 0.05 #t-tests #> tt = t.test(clinic$var1[16:30], clinic$var1[1:15], data=clinic, mu=-0., alternative="two.sided", paired=TRUE) #> cat_items(tt, prefix="ttest_clinic_paired_1.") ttest_clinic_paired_1 = Holder() ttest_clinic_paired_1.statistic = 1.213001548676048 ttest_clinic_paired_1.parameter = 14 ttest_clinic_paired_1.p_value = 0.245199929713149 ttest_clinic_paired_1.conf_int = (-0.1264911434745851, 0.4558244768079186) ttest_clinic_paired_1.estimate = 0.1646666666666667 ttest_clinic_paired_1.null_value = 0 ttest_clinic_paired_1.alternative = 'two.sided' ttest_clinic_paired_1.method = 'Paired t-test' ttest_clinic_paired_1.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' #> ttless = t.test(clinic$var1[1:15], clinic$var1[16:30],, data=clinic, mu=-0., alternative="less", paired=FALSE) #> cat_items(ttless, prefix="ttest_clinic_paired_1_l.") ttest_clinic_paired_1_l = Holder() ttest_clinic_paired_1_l.statistic = 0.650438363512706 ttest_clinic_paired_1_l.parameter = 26.7484787582315 ttest_clinic_paired_1_l.p_value = 0.739521349864458 ttest_clinic_paired_1_l.conf_int = (-np.inf, 0.596019631405587) ttest_clinic_paired_1_l.estimate = (3.498, 3.333333333333333) ttest_clinic_paired_1_l.null_value = 0 ttest_clinic_paired_1_l.alternative = 'less' ttest_clinic_paired_1_l.method = 'Welch Two Sample t-test' ttest_clinic_paired_1_l.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' #> cat_items(tt, prefix="ttest_clinic_indep_1_g.") ttest_clinic_indep_1_g = Holder() ttest_clinic_indep_1_g.statistic = 0.650438363512706 ttest_clinic_indep_1_g.parameter = 26.7484787582315 ttest_clinic_indep_1_g.p_value = 0.2604786501355416 ttest_clinic_indep_1_g.conf_int = (-0.2666862980722534, np.inf) ttest_clinic_indep_1_g.estimate = (3.498, 3.333333333333333) ttest_clinic_indep_1_g.null_value = 0 ttest_clinic_indep_1_g.alternative = 'greater' ttest_clinic_indep_1_g.method = 'Welch Two Sample t-test' ttest_clinic_indep_1_g.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' #> cat_items(ttless, prefix="ttest_clinic_indep_1_l.") ttest_clinic_indep_1_l = Holder() ttest_clinic_indep_1_l.statistic = 0.650438363512706 ttest_clinic_indep_1_l.parameter = 26.7484787582315 ttest_clinic_indep_1_l.p_value = 0.739521349864458 ttest_clinic_indep_1_l.conf_int = (-np.inf, 0.596019631405587) ttest_clinic_indep_1_l.estimate = (3.498, 3.333333333333333) ttest_clinic_indep_1_l.null_value = 0 ttest_clinic_indep_1_l.alternative = 'less' ttest_clinic_indep_1_l.method = 'Welch Two Sample t-test' ttest_clinic_indep_1_l.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' #> ttless = t.test(clinic$var1[1:15], clinic$var1[16:30],, data=clinic, mu=1., alternative="less", paired=FALSE) #> cat_items(ttless, prefix="ttest_clinic_indep_1_l_mu.") ttest_clinic_indep_1_l_mu = Holder() ttest_clinic_indep_1_l_mu.statistic = -3.299592184135306 ttest_clinic_indep_1_l_mu.parameter = 26.7484787582315 ttest_clinic_indep_1_l_mu.p_value = 0.001372434925571605 ttest_clinic_indep_1_l_mu.conf_int = (-np.inf, 0.596019631405587) ttest_clinic_indep_1_l_mu.estimate = (3.498, 3.333333333333333) ttest_clinic_indep_1_l_mu.null_value = 1 ttest_clinic_indep_1_l_mu.alternative = 'less' ttest_clinic_indep_1_l_mu.method = 'Welch Two Sample t-test' ttest_clinic_indep_1_l_mu.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' #> tt2 = t.test(clinic$var1[1:15], clinic$var1[16:30],, data=clinic, mu=1, alternative="two.sided", paired=FALSE) #> cat_items(tt2, prefix="ttest_clinic_indep_1_two_mu.") ttest_clinic_indep_1_two_mu = Holder() ttest_clinic_indep_1_two_mu.statistic = -3.299592184135306 ttest_clinic_indep_1_two_mu.parameter = 26.7484787582315 ttest_clinic_indep_1_two_mu.p_value = 0.00274486985114321 ttest_clinic_indep_1_two_mu.conf_int = (-0.3550087243406, 0.6843420576739336) ttest_clinic_indep_1_two_mu.estimate = (3.498, 3.333333333333333) ttest_clinic_indep_1_two_mu.null_value = 1 ttest_clinic_indep_1_two_mu.alternative = 'two.sided' ttest_clinic_indep_1_two_mu.method = 'Welch Two Sample t-test' ttest_clinic_indep_1_two_mu.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' #> tt2 = t.test(clinic$var1[1:15], clinic$var1[16:30],, data=clinic, mu=1, alternative="two.sided", paired=FALSE, var.equal=TRUE) #> cat_items(tt2, prefix="ttest_clinic_indep_1_two_mu_pooled.") ttest_clinic_indep_1_two_mu_pooled = Holder() ttest_clinic_indep_1_two_mu_pooled.statistic = -3.299592184135305 ttest_clinic_indep_1_two_mu_pooled.parameter = 28 ttest_clinic_indep_1_two_mu_pooled.p_value = 0.002643203760742494 ttest_clinic_indep_1_two_mu_pooled.conf_int = (-0.35391340938235, 0.6832467427156834) ttest_clinic_indep_1_two_mu_pooled.estimate = (3.498, 3.333333333333333) ttest_clinic_indep_1_two_mu_pooled.null_value = 1 ttest_clinic_indep_1_two_mu_pooled.alternative = 'two.sided' ttest_clinic_indep_1_two_mu_pooled.method = ' Two Sample t-test' ttest_clinic_indep_1_two_mu_pooled.data_name = 'clinic$var1[1:15] and clinic$var1[16:30]' res1 = smws.ttost_paired(clinic[:15, 2], clinic[15:, 2], -0.6, 0.6, transform=None) res2 = smws.ttost_paired(clinic[:15, 3], clinic[15:, 3], -0.6, 0.6, transform=None) res = smws.ttost_ind(clinic[:15, 3], clinic[15:, 3], -0.6, 0.6, usevar='unequal') class CheckTostMixin: def test_pval(self): assert_almost_equal(self.res1.pvalue, self.res2.p_value, decimal=13) #assert_almost_equal(self.res1.df, self.res2.df, decimal=13) class TestTostp1(CheckTostMixin): #paired var1 @classmethod def setup_class(cls): cls.res2 = tost_clinic_paired_1 x1, x2 = clinic[:15, 2], clinic[15:, 2] cls.res1 = Holder() res = smws.ttost_paired(x1, x2, -0.6, 0.6, transform=None) cls.res1.pvalue = res[0] #cls.res1.df = res[1][-1] not yet res_ds = smws.DescrStatsW(x1 - x2, weights=None, ddof=0) #tost confint 2*alpha TODO: check again cls.res1.tconfint_diff = res_ds.tconfint_mean(0.1) cls.res1.confint_05 = res_ds.tconfint_mean(0.05) cls.res1.mean_diff = res_ds.mean cls.res1.std_mean_diff = res_ds.std_mean cls.res2b = ttest_clinic_paired_1 def test_special(self): #TODO: add attributes to other cases and move to superclass assert_almost_equal(self.res1.tconfint_diff, self.res2.ci_diff, decimal=13) assert_almost_equal(self.res1.mean_diff, self.res2.mean_diff, decimal=13) assert_almost_equal(self.res1.std_mean_diff, self.res2.se_diff, decimal=13) #compare with ttest assert_almost_equal(self.res1.confint_05, self.res2b.conf_int, decimal=13) class TestTostp2(CheckTostMixin): #paired var2 @classmethod def setup_class(cls): cls.res2 = tost_clinic_paired x, y = clinic[:15, 3], clinic[15:, 3] cls.res1 = Holder() res = smws.ttost_paired(x, y, -0.6, 0.6, transform=None) cls.res1.pvalue = res[0] class TestTosti1(CheckTostMixin): @classmethod def setup_class(cls): cls.res2 = tost_clinic_indep_1 x, y = clinic[:15, 2], clinic[15:, 2] cls.res1 = Holder() res = smws.ttost_ind(x, y, -0.6, 0.6, usevar='unequal') cls.res1.pvalue = res[0] class TestTosti2(CheckTostMixin): @classmethod def setup_class(cls): cls.res2 = tost_clinic_indep x, y = clinic[:15, 3], clinic[15:, 3] cls.res1 = Holder() res = smws.ttost_ind(x, y, -0.6, 0.6, usevar='unequal') cls.res1.pvalue = res[0] class TestTostip1(CheckTostMixin): @classmethod def setup_class(cls): cls.res2 = tost_clinic_indep_1_pooled x, y = clinic[:15, 2], clinic[15:, 2] cls.res1 = Holder() res = smws.ttost_ind(x, y, -0.6, 0.6, usevar='pooled') cls.res1.pvalue = res[0] class TestTostip2(CheckTostMixin): @classmethod def setup_class(cls): cls.res2 = tost_clinic_indep_2_pooled x, y = clinic[:15, 3], clinic[15:, 3] cls.res1 = Holder() res = smws.ttost_ind(x, y, -0.6, 0.6, usevar='pooled') cls.res1.pvalue = res[0] #transform=np.log #class TestTostp1_log(CheckTost): def test_tost_log(): x1, x2 = clinic[:15, 2], clinic[15:, 2] resp = smws.ttost_paired(x1, x2, 0.8, 1.25, transform=np.log) assert_almost_equal(resp[0], tost_clinic_1_paired.p_value, 13) resi = smws.ttost_ind(x1, x2, 0.8, 1.25, transform=np.log, usevar='unequal') assert_almost_equal(resi[0], tost_clinic_1_indep.p_value, 13) def test_tost_asym(): x1, x2 = clinic[:15, 2], clinic[15:, 2] #Note: x1, x2 reversed by definition in multeq.dif assert_almost_equal(x2.mean() - x1.mean(), tost_clinic_1_asym.estimate, 13) resa = smws.ttost_ind(x2, x1, -1.5, 0.6, usevar='unequal') assert_almost_equal(resa[0], tost_clinic_1_asym.p_value, 13) #multi-endpoints, asymmetric bounds, vectorized resall = smws.ttost_ind(clinic[15:, 2:7], clinic[:15, 2:7], [-1.0, -1.0, -1.5, -1.5, -1.5], 0.6, usevar='unequal') assert_almost_equal(resall[0], tost_clinic_all_no_multi.p_value, 13) #SMOKE tests: foe multi-endpoint vectorized, k on k resall = smws.ttost_ind(clinic[15:, 2:7], clinic[:15, 2:7], np.exp([-1.0, -1.0, -1.5, -1.5, -1.5]), 0.6, usevar='unequal', transform=np.log) resall = smws.ttost_ind(clinic[15:, 2:7], clinic[:15, 2:7], [-1.0, -1.0, -1.5, -1.5, -1.5], 0.6, usevar='unequal', transform=np.exp) resall = smws.ttost_paired(clinic[15:, 2:7], clinic[:15, 2:7], [-1.0, -1.0, -1.5, -1.5, -1.5], 0.6, transform=np.log) resall = smws.ttost_paired(clinic[15:, 2:7], clinic[:15, 2:7], [-1.0, -1.0, -1.5, -1.5, -1.5], 0.6, transform=np.exp) resall = smws.ttest_ind(clinic[15:, 2:7], clinic[:15, 2:7], value=[-1.0, -1.0, -1.5, -1.5, -1.5]) #k on 1: compare all with reference resall = smws.ttost_ind(clinic[15:, 2:7], clinic[:15, 2:3], [-1.0, -1.0, -1.5, -1.5, -1.5], 0.6, usevar='unequal') resa3_2 = smws.ttost_ind(clinic[15:, 3:4], clinic[:15, 2:3], [-1.0, -1.0, -1.5, -1.5, -1.5], 0.6, usevar='unequal') assert_almost_equal(resall[0][1], resa3_2[0][1], decimal=13) resall = smws.ttost_ind(clinic[15:, 2], clinic[:15, 2], [-1.0, -0.5, -0.7, -1.5, -1.5], 0.6, usevar='unequal') resall = smws.ttost_ind(clinic[15:, 2], clinic[:15, 2], [-1.0, -0.5, -0.7, -1.5, -1.5], np.repeat(0.6,5), usevar='unequal') def test_ttest(): x1, x2 = clinic[:15, 2], clinic[15:, 2] all_tests = [] t1 = smws.ttest_ind(x1, x2, alternative='larger', usevar='unequal') all_tests.append((t1, ttest_clinic_indep_1_g)) t2 = smws.ttest_ind(x1, x2, alternative='smaller', usevar='unequal') all_tests.append((t2, ttest_clinic_indep_1_l)) t3 = smws.ttest_ind(x1, x2, alternative='smaller', usevar='unequal', value=1) all_tests.append((t3, ttest_clinic_indep_1_l_mu)) for res1, res2 in all_tests: assert_almost_equal(res1[0], res2.statistic, decimal=13) assert_almost_equal(res1[1], res2.p_value, decimal=13) #assert_almost_equal(res1[2], res2.df, decimal=13) cm = smws.CompareMeans(smws.DescrStatsW(x1), smws.DescrStatsW(x2)) ci = cm.tconfint_diff(alternative='two-sided', usevar='unequal') assert_almost_equal(ci, ttest_clinic_indep_1_two_mu.conf_int, decimal=13) ci = cm.tconfint_diff(alternative='two-sided', usevar='pooled') assert_almost_equal(ci, ttest_clinic_indep_1_two_mu_pooled.conf_int, decimal=13) ci = cm.tconfint_diff(alternative='smaller', usevar='unequal') assert_almost_equal_inf(ci, ttest_clinic_indep_1_l.conf_int, decimal=13) ci = cm.tconfint_diff(alternative='larger', usevar='unequal') assert_almost_equal_inf(ci, ttest_clinic_indep_1_g.conf_int, decimal=13) #test get_compare cm = smws.CompareMeans(smws.DescrStatsW(x1), smws.DescrStatsW(x2)) cm1 = cm.d1.get_compare(cm.d2) cm2 = cm.d1.get_compare(x2) cm3 = cm.d1.get_compare(np.hstack((x2,x2))) #all use the same d1, no copying assert_(cm.d1 is cm1.d1) assert_(cm.d1 is cm2.d1) assert_(cm.d1 is cm3.d1) @pytest.mark.xfail(reason="shape mismatch between res1[1:] and res_sas[1:]", raises=AssertionError, strict=True) def test_tost_transform_paired(): raw = np.array('''\ 103.4 90.11 59.92 77.71 68.17 77.71 94.54 97.51 69.48 58.21 72.17 101.3 74.37 79.84 84.44 96.06 96.74 89.30 94.26 97.22 48.52 61.62 95.68 85.80'''.split(), float) x, y = raw.reshape(-1,2).T res1 = smws.ttost_paired(x, y, 0.8, 1.25, transform=np.log) res_sas = (0.0031, (3.38, 0.0031), (-5.90, 0.00005)) assert_almost_equal(res1[0], res_sas[0], 3) assert_almost_equal(res1[1:], res_sas[1:], 2) #result R tost assert_almost_equal(res1[0], tost_s_paired.p_value, 13)