def test_difference(): "Test table.difference" ds = datasets.get_uv() print table.difference("fltvar", "A", "a1", "a2", "rm", ds=ds) print table.difference("fltvar", "A", "a1", "a2", "rm", by="B", ds=ds) print table.difference("fltvar", "A%B", ("a1", "b1"), ("a2", "b2"), "rm", ds=ds) # create bigger dataset ds["C", :] = "c1" ds2 = datasets.get_uv() ds2["C", :] = "c2" ds = combine((ds, ds2)) print table.difference("fltvar", "A", "a1", "a2", "rm", "B%C", ds=ds) print table.difference("fltvar", "A%B", ("a1", "b1"), ("a2", "b2"), "rm", "C", ds=ds)
def test_dataset_combining(): "Test Dataset combination methods" ds = datasets.get_uv() del ds['fltvar'], ds['intvar'], ds['A'] ds2 = datasets.get_uv() del ds2['fltvar'], ds2['intvar'] ds.update(ds2) assert_array_equal(ds['A'], ds2['A']) ds2 = datasets.get_uv() del ds2['fltvar'], ds2['intvar'] ds2['B'][5] = 'something_else' del ds['A'] assert_raises(ValueError, ds.update, ds2)
def test_barplot(): "Test plot.Barplot" ds = datasets.get_uv() # average plot.Barplot('fltvar', ds=ds) plot.Barplot('fltvar', match='rm', ds=ds) # one category p = plot.Barplot('fltvar + 2', 'A', ds=ds) assert p.get_ylim()[0] == 0 p = plot.Barplot('fltvar - 2', 'A', 'rm', ds=ds) assert p.get_ylim()[1] == 0 # multiple categories plot.Barplot('fltvar', 'A%B', match='rm', ds=ds) plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, pool_error=False) # test against 0 plot.Barplot('fltvar', 'A%B', match='rm', test=0, ds=ds) # cells plot.Barplot('fltvar', 'A%B', cells=(('a2', 'b2'), ('a1', 'b1')), ds=ds) plot.Barplot('fltvar', 'A%B', match='rm', cells=(('a2', 'b2'), ('a1', 'b1')), ds=ds) # Fixed top p = plot.Barplot('fltvar', 'A%B', ds=ds, top=2, test_markers=False) ax = p._axes[0] assert ax.get_ylim()[1] == 2
def test_difference(): "Test table.difference" ds = datasets.get_uv() print table.difference('fltvar', 'A', 'a1', 'a2', 'rm', ds=ds) print table.difference('fltvar', 'A', 'a1', 'a2', 'rm', by='B', ds=ds) print table.difference('fltvar', 'A%B', ('a1', 'b1'), ('a2', 'b2'), 'rm', ds=ds) # create bigger dataset ds['C', :] = 'c1' ds2 = datasets.get_uv() ds2['C', :] = 'c2' ds = combine((ds, ds2)) print table.difference('fltvar', 'A', 'a1', 'a2', 'rm', 'B%C', ds=ds) print table.difference('fltvar', 'A%B', ('a1', 'b1'), ('a2', 'b2'), 'rm', 'C', ds=ds)
def test_barplot(): "Test plot.Barplot" ds = datasets.get_uv() # one category plot.Barplot('fltvar', ds=ds, test=False, show=False) plot.Barplot('fltvar', ds=ds, show=False) plot.Barplot('fltvar', match='rm', ds=ds, show=False) # multiple categories plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, show=False) plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, pool_error=False, show=False) plot.Barplot('fltvar', 'A%B', match='rm', test=0, ds=ds, show=False) # cells plot.Barplot('fltvar', 'A%B', cells=(('a2', 'b2'), ('a1', 'b1')), ds=ds, show=False) plot.Barplot('fltvar', 'A%B', match='rm', cells=(('a2', 'b2'), ('a1', 'b1')), ds=ds, show=False) # Fixed top p = plot.Barplot('fltvar', 'A%B', ds=ds, top=2, test_markers=False, show=False) ax = p._axes[0] eq_(ax.get_ylim()[1], 2)
def test_regression(): "Test plot.Regression" ds = datasets.get_uv() plot.Regression('fltvar', 'fltvar2', ds=ds) plot.Regression('fltvar', 'fltvar2', 'A', ds=ds) plot.Regression('fltvar', 'fltvar2', 'A%B', ds=ds)
def test_barplot(): "Test plot.uv.barplot" plot.configure_backend(False, False) ds = datasets.get_uv() plot.uv.Barplot('fltvar', 'A%B', match='rm', ds=ds) plot.uv.Barplot('fltvar', 'A%B', match='rm', test=0, ds=ds) plt.close('all')
def test_generate_colors(): "Test functions for assigning colors to cells" ds = datasets.get_uv() cells_1 = ('A', 'B') cells_2 = ('a', 'b', 'c') colors = plot.colors_for_oneway(cells_1) assert len(colors) == len(cells_1) colors = plot.colors_for_twoway(cells_1, cells_2) assert len(colors) == len(cells_1) * len(cells_2) colors = plot.colors_for_twoway(cells_2, cells_1) assert len(colors) == len(cells_1) * len(cells_2) # colors_for_categorial() f = ds['A'] colors = plot.colors_for_categorial(f) for cell in f.cells: assert cell in colors i = ds.eval("A%B") colors = plot.colors_for_categorial(i) for cell in i.cells: assert cell in colors i = ds.eval("A%B%rm") colors = plot.colors_for_categorial(i) for cell in i.cells: assert cell in colors with pytest.raises(TypeError): plot.colors_for_categorial("A%B")
def test_cast_to_ndvar(): "Test table.cast_to_ndvar()" long_ds = datasets.get_uv() long_ds['scalar'] = long_ds['A'] == 'a2' long_ds['time'] = long_ds.eval('A%B').as_var({ ('a1', 'b1'): 0., ('a1', 'b2'): 0.1, ('a2', 'b1'): 0.2, ('a2', 'b2'): 0.3, }) # categorial ds = table.cast_to_ndvar('fltvar', 'A', 'B%rm', ds=long_ds, name='new') assert ds.n_cases == long_ds.n_cases / 2 assert ds['new'].A == Categorial('A', ('a1', 'a2')) # scalar ds2 = table.cast_to_ndvar('fltvar', 'scalar', 'B%rm', ds=long_ds, dim='newdim', name='new') assert ds2.n_cases == long_ds.n_cases / 2 assert ds2['new'].newdim == Scalar('newdim', [False, True]) assert_array_equal(ds['new'].x, ds2['new'].x) # time ds = table.cast_to_ndvar('fltvar', 'time', 'rm', ds=long_ds, dim='uts', name='y') assert ds.n_cases == long_ds.n_cases / 4 assert ds['y'].time == UTS(0, 0.1, 4)
def test_report(): "Test fmtxt.Report class" tempdir = tempfile.mkdtemp() report = fmtxt.Report("Test Report") section = report.add_section('unicode: \xe2 abc') ds = datasets.get_uv() p = plot.Barplot('fltvar', 'A', sub="B=='b1'", ds=ds, show=False) image = p.image() section.add_figure("test", image) report.sign() # report output print(report) dst = os.path.join(tempdir, 'report.html') report.save_html(dst) # test meta attribute reading eq_(read_meta(dst), {}) report.save_html(dst, meta={'samples': 100, 'text': 'blah'}) eq_(read_meta(dst), {'samples': '100', 'text': 'blah'}) # clean up shutil.rmtree(tempdir)
def test_align(): "Testing align() and align1() functions" ds = datasets.get_uv() ds.index() idx4 = np.arange(0, ds.n_cases, 4) idx4i = idx4[::-1] ds2 = ds.sub(np.arange(0, ds.n_cases, 2)) # align1: align Dataset to index dsa = align1(ds2, idx4) assert_array_equal(dsa['index'], idx4, "align1() failure") dsa = align1(ds2, idx4i) assert_array_equal(dsa['index'], idx4i, "align1() failure") # d_idx as Var dsa = align1(ds2[::2], idx4, idx4i) assert_array_equal(dsa['index'], idx4i, "align1() failure") assert_raises(ValueError, align1, ds2, idx4, idx4i) # Factor index assert_raises(ValueError, align1, ds, ds['rm', ::-1], 'rm') fds = ds[:20] dsa = align1(fds, fds['rm', ::-1], 'rm') assert_array_equal(dsa['index'], np.arange(19, -1, -1), "align1 Factor") # align two datasets dsa1, dsa2 = align(ds, ds2) assert_array_equal(dsa1['index'], dsa2['index'], "align() failure") dsa1, dsa2 = align(ds, ds2[::-1]) assert_array_equal(dsa1['index'], dsa2['index'], "align() failure")
def test_interaction(): "Test Interaction" ds = datasets.get_uv() A = ds['A'] B = ds['B'] i = A % B # eq for sequence assert_array_equal(i == A % B, True) assert_array_equal(i == B % A, False) assert_array_equal(i == A, False) assert_array_equal(i == ds['fltvar'], False) assert_array_equal(ds.eval("A%B") == Factor(ds['A']) % B, True) # eq for element for a, b in product(A.cells, B.cells): assert_array_equal(i == (a, b), np.logical_and(A == a, B == b)) # Interaction.as_factor() a = Factor('aabb') i = a % Factor('cdcd') assert_dataobj_equal(i.as_factor(), Factor(['a c', 'a d', 'b c', 'b d'])) i = a % Factor(['c', '', 'c', '']) assert_dataobj_equal(i.as_factor(), Factor(['a c', 'a', 'b c', 'b'])) # pickling ip = pickle.loads(pickle.dumps(i)) assert_dataobj_equal(ip, i)
def test_barplot(): "Test plot.Barplot" ds = datasets.get_uv() # one category plot.Barplot('fltvar', ds=ds, test=False, show=False) plot.Barplot('fltvar', ds=ds, show=False) plot.Barplot('fltvar', match='rm', ds=ds, show=False) # multiple categories plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, show=False) plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, pool_error=False, show=False) plot.Barplot('fltvar', 'A%B', match='rm', test=0, ds=ds, show=False) # Fixed top p = plot.Barplot('fltvar', 'A%B', ds=ds, top=2, test_markers=False, show=False) ax = p._axes[0] eq_(ax.get_ylim()[1], 2)
def test_tsv_io(): """Test tsv I/O""" names = ['A', 'B', 'rm', 'intvar', 'fltvar', 'fltvar2', 'index'] # get Dataset ds = datasets.get_uv() ds['fltvar'][5:10] = np.nan ds[:4, 'rm'] = '' # save and load tempdir = tempfile.mkdtemp() try: dst = os.path.join(tempdir, 'ds.txt') ds.save_txt(dst) ds1 = load.tsv(dst) ds2 = load.tsv(dst, skiprows=1, names=names) assert_dataset_equal(ds1, ds, "TSV write/read test failed", 10) assert_dataset_equal(ds2, ds, "TSV write/read test failed", 10) # guess data types with missing intvar2 = ds['intvar'].as_factor() intvar2[10:] = '' ds_intvar = Dataset((intvar2, )) ds_intvar.save_txt(dst) ds_intvar1 = load.tsv(dst, empty='nan') assert_dataobj_equal(ds_intvar1['intvar', :10], ds['intvar', :10]) assert_array_equal(ds_intvar1['intvar', 10:], np.nan) finally: shutil.rmtree(tempdir)
def test_boxplot(): "Test plot.Boxplot" ds = datasets.get_uv() plot.Boxplot('fltvar', 'A%B', match='rm', ds=ds) # one category plot.Boxplot('fltvar', ds=ds, test=False) plot.Boxplot('fltvar', ds=ds) plot.Boxplot('fltvar', match='rm', ds=ds) # cells plot.Boxplot('fltvar', 'A%B', cells=(('a2', 'b2'), ('a1', 'b1')), ds=ds) plot.Boxplot('fltvar', 'A%B', match='rm', cells=(('a2', 'b2'), ('a1', 'b1')), ds=ds) # many pairwise significances ds['fltvar'][ds.eval("A%B==('a1','b1')")] += 1 ds['fltvar'][ds.eval("A%B==('a2','b2')")] -= 1 ds['C'] = Factor('qw', repeat=10, tile=4) plot.Boxplot('fltvar', 'A%B%C', ds=ds) # long labels ds['A'].update_labels({'a1': 'a very long label', 'a2': 'another very long label'}) p = plot.Barplot('fltvar', 'A%B', ds=ds) labels = p._ax.get_xticklabels() bbs = [l.get_window_extent() for l in labels] for i in range(len(bbs) - 1): assert bbs[i].x1 < bbs[i + 1].x0
def test_correlations(): "Test test.correlations()" ds = datasets.get_uv() res = test.correlations('fltvar', 'fltvar2', ds=ds) print(res) eq_(str(res[2][0]).strip(), '.398') res = test.correlations('fltvar', 'fltvar2', ds=ds, asds=True) assert_almost_equal(res[0, 'r'], .398, 3) res = test.correlations('fltvar', 'fltvar2', 'A', ds=ds) print(res) eq_(str(res[2][0]).strip(), 'a1') eq_(str(res[2][1]).strip(), '-0.149') eq_(str(res[3][1]).strip(), '.740') res = test.correlations('fltvar', 'fltvar2', 'A', ds=ds, asds=True) eq_(res[0, 'A'], 'a1') assert_almost_equal(res[0, 'r'], -0.149, 3) assert_almost_equal(res[1, 'r'], .740, 3) res = test.correlations('fltvar', 'fltvar2', 'A%B', ds=ds) print(res) eq_(str(res[2][2]).strip(), '-0.276') res = test.correlations('fltvar', 'fltvar2', 'A%B', ds=ds, asds=True) assert_almost_equal(res[0, 'r'], -0.276, 3) res = test.correlations('fltvar', ('fltvar2', 'intvar'), 'A%B', ds=ds) print(res) eq_(str(res[2][1]).strip(), 'a1') eq_(str(res[2][2]).strip(), 'b1') eq_(str(res[2][3]).strip(), '-0.276') res = test.correlations('fltvar', ('fltvar2', 'intvar'), 'A%B', ds=ds, asds=True) assert_almost_equal(res[0, 'r'], -0.276, 3)
def test_correlation(): "Test plot.Correlation()" ds = datasets.get_uv() plot.Correlation('fltvar', 'fltvar2', ds=ds) plot.Correlation('fltvar', 'fltvar2', 'A', ds=ds) plot.Correlation('fltvar', 'fltvar2', 'A%B', ds=ds)
def test_boxplot(): "Test plot.Boxplot" ds = datasets.get_uv() plot.Boxplot('fltvar', 'A%B', match='rm', ds=ds, show=False) # one category plot.Boxplot('fltvar', ds=ds, test=False, show=False) plot.Boxplot('fltvar', ds=ds, show=False) plot.Boxplot('fltvar', match='rm', ds=ds, show=False) # many pairwise significances ds['fltvar'][ds.eval("A%B==('a1','b1')")] += 1 ds['fltvar'][ds.eval("A%B==('a2','b2')")] -= 1 ds['C'] = Factor('qw', repeat=10, tile=4) plot.Boxplot('fltvar', 'A%B%C', ds=ds, show=False) # long labels ds['A'].relabel({ 'a1': 'a very long label', 'a2': 'another very long label' }) p = plot.Barplot('fltvar', 'A%B', ds=ds, show=False) labels = p._ax.get_xticklabels() bbs = [l.get_window_extent() for l in labels] for i in xrange(len(bbs) - 1): ok_(bbs[i].x1 < bbs[i + 1].x0)
def test_difference(): "Test table.difference" ds = datasets.get_uv() # add a variables that should stay in the dataset labels = {c: c[-1] for c in ds['rm'].cells} ds['rmf'] = Factor(ds['rm'], labels=labels) dds = table.difference('fltvar', 'A', 'a1', 'a2', 'rm', ds=ds) assert repr(dds) == "<Dataset n_cases=20 {'rm':F, 'fltvar':V, 'rmf':F}>" assert_array_equal(dds['rmf'], Factor(dds['rm'], labels=labels)) dds = table.difference('fltvar', 'A', 'a1', 'a2', 'rm', by='B', ds=ds) assert repr(dds) == "<Dataset n_cases=40 {'rm':F, 'fltvar':V, 'B':F, 'rmf':F}>" # difference of the difference ddds = table.difference('fltvar', 'B', 'b1', 'b2', 'rm', ds=dds) assert repr(ddds) == "<Dataset n_cases=20 {'rm':F, 'fltvar':V, 'rmf':F}>" dds = table.difference('fltvar', 'A%B', ('a1', 'b1'), ('a2', 'b2'), 'rm', ds=ds) assert repr(dds) == "<Dataset n_cases=20 {'rm':F, 'fltvar':V, 'rmf':F}>" # create bigger dataset ds2 = ds.copy() ds['C', :] = 'c1' ds2['C', :] = 'c2' ds = combine((ds, ds2)) dds = table.difference('fltvar', 'A', 'a1', 'a2', 'rm', by='B%C', ds=ds) assert repr(dds) == "<Dataset n_cases=80 {'rm':F, 'fltvar':V, 'B':F, 'C':F, 'rmf':F}>" dds = table.difference('fltvar', 'A%B', ('a1', 'b1'), ('a2', 'b2'), 'rm', by='C', ds=ds) assert repr(dds) == "<Dataset n_cases=40 {'rm':F, 'fltvar':V, 'C':F, 'rmf':F}>"
def test_correlations(): "Test test.correlations()" ds = datasets.get_uv() res = test.correlations("fltvar", "fltvar2", ds=ds) print(res) eq_(str(res[2][0]).strip(), ".398") res = test.correlations("fltvar", "fltvar2", ds=ds, asds=True) assert_almost_equal(res[0, "r"], 0.398, 3) res = test.correlations("fltvar", "fltvar2", "A", ds=ds) print(res) eq_(str(res[2][0]).strip(), "a1") eq_(str(res[2][1]).strip(), "-0.149") eq_(str(res[3][1]).strip(), ".740") res = test.correlations("fltvar", "fltvar2", "A", ds=ds, asds=True) eq_(res[0, "A"], "a1") assert_almost_equal(res[0, "r"], -0.149, 3) assert_almost_equal(res[1, "r"], 0.740, 3) res = test.correlations("fltvar", "fltvar2", "A%B", ds=ds) print(res) eq_(str(res[2][2]).strip(), "-0.276") res = test.correlations("fltvar", "fltvar2", "A%B", ds=ds, asds=True) assert_almost_equal(res[0, "r"], -0.276, 3) res = test.correlations("fltvar", ("fltvar2", "intvar"), "A%B", ds=ds) print(res) eq_(str(res[2][1]).strip(), "a1") eq_(str(res[2][2]).strip(), "b1") eq_(str(res[2][3]).strip(), "-0.276") res = test.correlations("fltvar", ("fltvar2", "intvar"), "A%B", ds=ds, asds=True) assert_almost_equal(res[0, "r"], -0.276, 3)
def test_correlation(): "Test plot.Correlation()" ds = datasets.get_uv() plot.Correlation('fltvar', 'fltvar2', ds=ds, show=False) plot.Correlation('fltvar', 'fltvar2', 'A', ds=ds, show=False) plot.Correlation('fltvar', 'fltvar2', 'A%B', ds=ds, show=False)
def test_report(): "Test fmtxt.Report class" tempdir = tempfile.mkdtemp() report = fmtxt.Report("Test Report") section = report.add_section(u'unicode: \xe2 abc') ds = datasets.get_uv() p = plot.Barplot('fltvar', 'A', sub="B=='b1'", ds=ds, show=False) image = p.image() section.add_figure("test", image) report.sign() # report output print(report) dst = os.path.join(tempdir, 'report.html') report.save_html(dst) # test meta attribute reading eq_(read_meta(dst), {}) report.save_html(dst, meta={'samples': 100, 'text': 'blah'}) eq_(read_meta(dst), {'samples': '100', 'text': 'blah'}) # clean up shutil.rmtree(tempdir)
def test_regression(): "Test plot.Regression" ds = datasets.get_uv() plot.Regression('fltvar', 'fltvar2', ds=ds, show=False) plot.Regression('fltvar', 'fltvar2', 'A', ds=ds, show=False) plot.Regression('fltvar', 'fltvar2', 'A%B', ds=ds, show=False)
def test_anova(): "Test ANOVA" from rpy2.robjects import r r_require('car') ds = datasets.get_uv() ds.to_r('ds') # fixed effects aov = test.anova('fltvar', 'A*B', ds=ds) print aov fs = run_on_lm_fitter('fltvar', 'A*B', ds) r_res = r("Anova(lm(fltvar ~ A * B, ds, type=2))") assert_f_tests_equal(aov.f_tests, r_res, fs, 'Anova') # random effects aov = test.anova('fltvar', 'A*B*rm', ds=ds) print aov fs = run_on_lm_fitter('fltvar', 'A*B*rm', ds) r('test.aov <- aov(fltvar ~ A * B + Error(rm / (A * B)), ds)') print r('test.summary <- summary(test.aov)') r_res = r['test.summary'][1:] assert_f_tests_equal(aov.f_tests, r_res, fs, 'rmaov') # not fully specified model with random effects assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*rm', ds=ds) # empty cells dss = ds.sub("A%B != ('a2', 'b2')") assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*B', ds=dss) assert_raises(NotImplementedError, run_on_lm_fitter, 'fltvar', 'A*B', ds=dss) dss = ds.sub("A%B != ('a1', 'b1')") assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*B', ds=dss) assert_raises(NotImplementedError, run_on_lm_fitter, 'fltvar', 'A*B', ds=dss)
def test_generate_colors(): "Test functions for assigning colors to cells" ds = datasets.get_uv() cells_1 = ('A', 'B') cells_2 = ('a', 'b', 'c') colors = plot.colors_for_oneway(cells_1) eq_(len(colors), len(cells_1)) colors = plot.colors_for_twoway(cells_1, cells_2) eq_(len(colors), len(cells_1) * len(cells_2)) colors = plot.colors_for_twoway(cells_2, cells_1) eq_(len(colors), len(cells_1) * len(cells_2)) # colors_for_categorial() f = ds['A'] colors = plot.colors_for_categorial(f) for cell in f.cells: assert_in(cell, colors) i = ds.eval("A%B") colors = plot.colors_for_categorial(i) for cell in i.cells: assert_in(cell, colors) i = ds.eval("A%B%rm") colors = plot.colors_for_categorial(i) for cell in i.cells: assert_in(cell, colors) assert_raises(TypeError, plot.colors_for_categorial, "A%B")
def test_difference(): "Test tabe.difference" ds = datasets.get_uv() print table.difference('fltvar', 'A', 'a1', 'a2', 'rm', ds=ds) print table.difference('fltvar', 'A', 'a1', 'a2', 'rm', by='B', ds=ds) print table.difference('fltvar', 'A%B', ('a1', 'b1'), ('a2', 'b2'), 'rm', ds=ds) # create bigger dataset ds['C', :] = 'c1' ds2 = datasets.get_uv() ds2['C', :] = 'c2' ds = combine((ds, ds2)) print table.difference('fltvar', 'A', 'a1', 'a2', 'rm', 'B%C', ds=ds) print table.difference('fltvar', 'A%B', ('a1', 'b1'), ('a2', 'b2'), 'rm', 'C', ds=ds)
def test_tsv_io(): """Test tsv I/O""" names = ['A', 'B', 'rm', 'intvar', 'fltvar', 'fltvar2', 'index'] # get Dataset ds = datasets.get_uv() ds['fltvar'][5:10] = np.nan ds[:4, 'rm'] = '' # save and load tempdir = tempfile.mkdtemp() try: dst = os.path.join(tempdir, 'ds.txt') ds.save_txt(dst) ds1 = load.tsv(dst) ds2 = load.tsv(dst, skiprows=1, names=names) assert_dataset_equal(ds1, ds, "TSV write/read test failed", 10) assert_dataset_equal(ds2, ds, "TSV write/read test failed", 10) # guess data types with missing intvar2 = ds['intvar'].as_factor() intvar2[10:] = '' ds_intvar = Dataset((intvar2,)) ds_intvar.save_txt(dst) ds_intvar1 = load.tsv(dst, empty='nan') assert_dataobj_equal(ds_intvar1['intvar', :10], ds['intvar', :10]) assert_array_equal(ds_intvar1['intvar', 10:], np.nan) finally: shutil.rmtree(tempdir)
def test_generate_colors(): "Test functions for assigning colors to cells" ds = datasets.get_uv() cells_1 = ('A', 'B') cells_2 = ('a', 'b', 'c') colors = plot.colors_for_oneway(cells_1) assert_equal(len(colors), len(cells_1)) colors = plot.colors_for_twoway(cells_1, cells_2) assert_equal(len(colors), len(cells_1) * len(cells_2)) colors = plot.colors_for_twoway(cells_2, cells_1) assert_equal(len(colors), len(cells_1) * len(cells_2)) # colors_for_categorial() f = ds['A'] colors = plot.colors_for_categorial(f) for cell in f.cells: assert_in(cell, colors) i = ds.eval("A%B") colors = plot.colors_for_categorial(i) for cell in i.cells: assert_in(cell, colors) i = ds.eval("A%B%rm") colors = plot.colors_for_categorial(i) for cell in i.cells: assert_in(cell, colors) assert_raises(TypeError, plot.colors_for_categorial, "A%B")
def test_anova_eq(): "Test ANOVA against r-ez" r_require('ez') ds = datasets.get_uv(nrm=True) ds.to_r('ds') # nested random effect aov_explicit = test.ANOVA('fltvar', 'A + B + A%B + nrm(B) + A%nrm(B)', ds=ds) aov = test.ANOVA('fltvar', 'A * B * nrm(B)', ds=ds) assert str(aov_explicit) == str(aov) print(aov) fs = run_on_lm_fitter('fltvar', 'A * B * nrm(B)', ds) fnds = run_as_ndanova('fltvar', 'A * B * nrm(B)', ds) r_res = r('ezANOVA(ds, fltvar, nrm, A, between=B)') assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez') # sub parameter r1 = test.ANOVA('fltvar', 'B * rm', ds=ds.sub('A == "a1"')) r2 = test.ANOVA('fltvar', 'B * rm', sub='A == "a1"', ds=ds) assert str(r2) == str(r1) # not fully specified model with random effects with pytest.raises(IncompleteModel): test.anova('fltvar', 'A*rm', ds=ds) # unequal group size, 1-way sds = ds.sub("A == 'a1'").sub("nrm.isnotin(('s037', 's038', 's039'))") sds.to_r('sds') aov = test.ANOVA('fltvar', 'B * nrm(B)', ds=sds) print(aov) fs = run_on_lm_fitter('fltvar', 'B * nrm(B)', sds) fnds = run_as_ndanova('fltvar', 'B * nrm(B)', sds) with r_warning_filter: # type argument to ezANOVA r_res = r('ezANOVA(sds, fltvar, nrm, between=B)') assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez') # unequal group size, 2-way sds = ds.sub("nrm.isnotin(('s037', 's038', 's039'))") sds.to_r('sds') aov = test.ANOVA('fltvar', 'A * B * nrm(B)', ds=sds) print(aov) fs = run_on_lm_fitter('fltvar', 'A * B * nrm(B)', sds) fnds = run_as_ndanova('fltvar', 'A * B * nrm(B)', sds) with r_warning_filter: # type argument to ezANOVA r_res = r('ezANOVA(sds, fltvar, nrm, A, between=B)') assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez') # empty cells dss = ds.sub("A%B != ('a2', 'b2')") with pytest.raises(NotImplementedError): test.anova('fltvar', 'A*B', ds=dss) with pytest.raises(NotImplementedError): run_on_lm_fitter('fltvar', 'A*B', ds=dss) dss = ds.sub("A%B != ('a1', 'b1')") with pytest.raises(NotImplementedError): test.anova('fltvar', 'A*B', ds=dss) with pytest.raises(NotImplementedError): run_on_lm_fitter('fltvar', 'A*B', ds=dss)
def test_ttest(): "Test test.ttest" ds = datasets.get_uv() print test.ttest('fltvar', ds=ds) print test.ttest('fltvar', 'A', ds=ds) print test.ttest('fltvar', 'A%B', ds=ds) print test.ttest('fltvar', 'A', match='rm', ds=ds)
def test_ttest(): """Test test.ttest()""" ds = datasets.get_uv() print(test.ttest('fltvar', ds=ds)) print(test.ttest('fltvar', 'A', ds=ds)) print(test.ttest('fltvar', 'A%B', ds=ds)) print(test.ttest('fltvar', 'A', match='rm', ds=ds)) print(test.ttest('fltvar', 'A', 'a1', match='rm', ds=ds)) print(test.ttest('fltvar', 'A%B', ('a1', 'b1'), match='rm', ds=ds))
def test_repmeas(): "Test table.repmeas (repeated measures table)" ds = datasets.get_uv() print table.repmeas("fltvar", "A", "rm", ds=ds) print table.repmeas("fltvar", "A%B", "rm", ds=ds) print table.repmeas("fltvar", "A", "B%rm", ds=ds) # test naturalization of cellnames ds["ANum"] = Factor(ds["A"], labels={"a1": "1", "a2": "2"}) print table.repmeas("fltvar", "ANum", "rm", ds=ds)
def test_repmeas(): "Test table.repmeas (repeated measures table)" ds = datasets.get_uv() print table.repmeas('fltvar', 'A', 'rm', ds=ds) print table.repmeas('fltvar', 'A%B', 'rm', ds=ds) print table.repmeas('fltvar', 'A', 'B%rm', ds=ds) # test naturalization of cellnames ds['ANum'] = Factor(ds['A'], labels={'a1': '1', 'a2': '2'}) print table.repmeas('fltvar', 'ANum', 'rm', ds=ds)
def test_nested_effects(): """Test nested effects""" ds = datasets.get_uv(nrm=True) nested = ds.eval("nrm(B)") eq_(nested.cells, ds['nrm'].cells) # interaction i = ds.eval("A % nrm(B)") expected_cells = tuple((case['A'], case['nrm']) for case in ds.itercases())
def test_ttest(): """Test test.ttest()""" ds = datasets.get_uv() print(test.ttest("fltvar", ds=ds)) print(test.ttest("fltvar", "A", ds=ds)) print(test.ttest("fltvar", "A%B", ds=ds)) print(test.ttest("fltvar", "A", match="rm", ds=ds)) print(test.ttest("fltvar", "A", "a1", match="rm", ds=ds)) print(test.ttest("fltvar", "A%B", ("a1", "b1"), match="rm", ds=ds))
def test_dataset_indexing(): """Test Dataset indexing""" ds = datasets.get_uv() # indexing values eq_(ds['A', 1], ds['A'][1]) eq_(ds[1, 'A'], ds['A'][1]) # indexing variables assert_dataobj_equal(ds[:, 'A'], ds['A']) assert_dataobj_equal(ds['A', :], ds['A']) assert_dataobj_equal(ds[:10, 'A'], ds['A'][:10]) assert_dataobj_equal(ds['A', :10], ds['A'][:10]) # new Dataset through indexing ds2 = Dataset() ds2['A'] = ds['A'] assert_dataset_equal(ds[('A',)], ds2) ds2['B'] = ds['B'] assert_dataset_equal(ds['A', 'B'], ds2) assert_dataset_equal(ds[('A', 'B'), :10], ds2[:10]) assert_dataset_equal(ds[:10, ('A', 'B')], ds2[:10]) # assigning value ds[2, 'A'] = 'hello' eq_(ds[2, 'A'], 'hello') ds['A', 2] = 'not_hello' eq_(ds[2, 'A'], 'not_hello') # assigning new factor ds['C', :] = 'c' ok_(np.all(ds.eval("C == 'c'"))) # assigning new Var ds['D1', :] = 5. ds[:, 'D2'] = 5. assert_array_equal(ds['D1'], 5) assert_array_equal(ds['D2'], 5) # test illegal names f = Factor('aaabbb') assert_raises(ValueError, ds.__setitem__, '%dsa', f) assert_raises(ValueError, ds.__setitem__, '432', f) assert_raises(ValueError, ds.__setitem__, ('%dsa', slice(None)), 'value') assert_raises(ValueError, ds.__setitem__, (slice(None), '%dsa'), 'value') assert_raises(ValueError, ds.__setitem__, ('432', slice(None)), 4.) assert_raises(ValueError, ds.__setitem__, (slice(None), '432'), 4.) # deleting items del ds['A'] ok_('A' not in ds) assert_raises(KeyError, ds.__getitem__, 'A') del ds['B', 'rm'] ok_('B' not in ds and 'rm' not in ds)
def test_boxplot(): "Test plot.Boxplot" ds = datasets.get_uv() plot.Boxplot('fltvar', 'A%B', match='rm', ds=ds, show=False) plt.close('all') # many pairwise significances ds['fltvar'][ds.eval("A%B==('a1','b1')")] += 1 ds['fltvar'][ds.eval("A%B==('a2','b2')")] -= 1 ds['C'] = Factor('qw', repeat=10, tile=4) plot.Boxplot('fltvar', 'A%B%C', ds=ds, show=False)
def test_boxplot(): "Test plot.uv.boxplot" plot.configure_backend(False, False) ds = datasets.get_uv() plot.uv.Boxplot('fltvar', 'A%B', match='rm', ds=ds) plt.close('all') # many pairwise significances ds['fltvar'][ds.eval("A%B==('a1','b1')")] += 1 ds['fltvar'][ds.eval("A%B==('a2','b2')")] -= 1 ds['C'] = Factor('qw', rep=10, tile=4) plot.uv.Boxplot('fltvar', 'A%B%C', ds=ds)
def test_wilcoxon(): ds = datasets.get_uv() ds_agg = ds.aggregate('A % rm', drop_bad=True) n = ds_agg.n_cases // 2 w, p = scipy.stats.wilcoxon(ds_agg[:n, 'fltvar'].x, ds_agg[n:, 'fltvar'].x, alternative='two-sided') res = test.WilcoxonSignedRank('fltvar', 'A', 'a1', 'a2', 'rm', ds=ds) assert res.w == w assert res.p == p
def test_anova(): "Test ANOVA" from rpy2.robjects import r r_require('car') r_require('ez') ds = datasets.get_uv(nrm=True) ds.to_r('ds') # fixed effects aov = test.ANOVA('fltvar', 'A*B', ds=ds) print(aov) fs = run_on_lm_fitter('fltvar', 'A*B', ds) fnds = run_as_ndanova('fltvar', 'A*B', ds) r_res = r("Anova(lm(fltvar ~ A * B, ds, type=2))") assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'Anova') # random effect aov = test.ANOVA('fltvar', 'A*B*rm', ds=ds) print(aov) fs = run_on_lm_fitter('fltvar', 'A*B*rm', ds) fnds = run_as_ndanova('fltvar', 'A*B*rm', ds) r('test.aov <- aov(fltvar ~ A * B + Error(rm / (A * B)), ds)') print(r('test.summary <- summary(test.aov)')) r_res = r['test.summary'][1:] assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'rmaov') # nested random effect aov = test.ANOVA('fltvar', 'B + A%B + A * nrm(B)', ds=ds) print(aov) fs = run_on_lm_fitter('fltvar', 'B + A%B + A * nrm(B)', ds) fnds = run_as_ndanova('fltvar', 'B + A%B + A * nrm(B)', ds) r_res = r('ezANOVA(ds, fltvar, nrm, A, between=B)') assert_f_tests_equal(aov.f_tests, r_res, fs, fnds, 'ez') # not fully specified model with random effects assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*rm', ds=ds) # empty cells dss = ds.sub("A%B != ('a2', 'b2')") assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*B', ds=dss) assert_raises(NotImplementedError, run_on_lm_fitter, 'fltvar', 'A*B', ds=dss) dss = ds.sub("A%B != ('a1', 'b1')") assert_raises(NotImplementedError, test.anova, 'fltvar', 'A*B', ds=dss) assert_raises(NotImplementedError, run_on_lm_fitter, 'fltvar', 'A*B', ds=dss)
def test_tsv_io(): """Test tsv I/O""" tempdir = TempDir() names = ['A', 'B', 'rm', 'intvar', 'fltvar', 'fltvar2', 'index'] ds = datasets.get_uv() ds['fltvar'][5:10] = np.nan ds[:4, 'rm'] = '' # save and load dst = Path(tempdir) / 'ds.txt' ds.save_txt(dst) ds1 = load.tsv(dst, random='rm') assert_dataset_equal(ds1, ds, decimal=10) ds1 = load.tsv(dst, skiprows=1, names=names, random='rm') assert_dataset_equal(ds1, ds, decimal=10) # delimiter for delimiter in [' ', ',']: ds.save_txt(dst, delimiter=delimiter) ds1 = load.tsv(dst, delimiter=delimiter, random='rm') assert_dataset_equal(ds1, ds, decimal=10) # guess data types with missing intvar2 = ds['intvar'].as_factor() intvar2[10:] = '' ds_intvar = Dataset((intvar2, )) ds_intvar.save_txt(dst) ds_intvar1 = load.tsv(dst, empty='nan') assert_dataobj_equal(ds_intvar1['intvar', :10], ds['intvar', :10]) assert_array_equal(ds_intvar1['intvar', 10:], np.nan) # str with space ds[:5, 'A'] = 'a 1' ds.save_txt(dst) ds1 = load.tsv(dst, random='rm') assert_dataset_equal(ds1, ds, decimal=10) ds.save_txt(dst, delimiter=' ') ds1 = load.tsv(dst, delimiter=' ', random='rm') assert_dataset_equal(ds1, ds, decimal=10) # Fixed column width path = file_path('fox-prestige') ds = load.tsv(path, delimiter=' ', skipinitialspace=True) assert ds[1] == { 'id': 'GENERAL.MANAGERS', 'education': 12.26, 'income': 25879, 'women': 4.02, 'prestige': 69.1, 'census': 1130, 'type': 'prof' }
def test_interaction(): "Test Interaction" ds = datasets.get_uv() A = ds['A'] B = ds['B'] i = A % B # eq for sequence assert_array_equal(i == A % B, True) assert_array_equal(i == B % A, False) assert_array_equal(i == A, False) assert_array_equal(i == ds['fltvar'], False) assert_array_equal(ds.eval("A%B") == Factor(ds['A']) % B, True) # eq for element for a, b in product(A.cells, B.cells): assert_array_equal(i == (a, b), np.logical_and(A == a, B == b))
def test_barplot(): "Test plot.Barplot" ds = datasets.get_uv() plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, show=False) plot.Barplot('fltvar', 'A%B', match='rm', ds=ds, pool_error=False, show=False) plot.Barplot('fltvar', 'A%B', match='rm', test=0, ds=ds, show=False) # Fixed top p = plot.Barplot('fltvar', 'A%B', ds=ds, top=2, test_markers=False, show=False) ax = p._axes[0] eq_(ax.get_ylim()[1], 2) plt.close('all')
def test_mann_whitney(): ds = datasets.get_uv() ds_agg = ds.aggregate('A % rm', drop_bad=True) n = ds_agg.n_cases // 2 a, b = ds_agg[:n, 'fltvar'], ds_agg[n:, 'fltvar'] u, p = scipy.stats.mannwhitneyu(a.x, b.x, alternative='two-sided') res = test.MannWhitneyU('fltvar', 'A', 'a1', 'a2', 'rm', ds=ds) assert res.u == u assert res.p == p res = test.MannWhitneyU(a, b) assert res.u == u assert res.p == p
def test_nested_effects(): """Test nested effects""" ds = datasets.get_uv(nrm=True) nested = ds.eval("nrm(B)") eq_(nested.cells, ds['nrm'].cells) # interaction i = ds.eval("A % nrm(B)") expected_cells = tuple((case['A'], case['nrm']) for case in ds.itercases()) eq_(i.cells, expected_cells) assert_has_no_empty_cells(ds.eval('A * B + nrm(B) + A % nrm(B)')) i = ds.eval("nrm(B) % A") expected_cells = sorted((case['nrm'], case['A']) for case in ds.itercases()) eq_(i.cells, tuple(expected_cells))
def test_repmeas(): "Test table.repmeas (repeated measures table)" ds = datasets.get_uv() print(table.repmeas('fltvar', 'A', 'rm', ds=ds)) print(table.repmeas('fltvar', 'A%B', 'rm', ds=ds)) print(table.repmeas('fltvar', 'A', 'B%rm', ds=ds)) # with int model ds['Bv'] = ds['B'].as_var({'b1': 1, 'b2': 2}) print(table.repmeas('fltvar', 'A', 'Bv%rm', ds=ds)) # test naturalization of cellnames ds['ANum'] = Factor(ds['A'], labels={'a1': '1', 'a2': '2'}) print(table.repmeas('fltvar', 'ANum', 'rm', ds=ds)) # with empty cell name ds['A'].update_labels({'a1': ''}) print(table.repmeas('fltvar', 'A', 'rm', ds=ds))
def test_io_txt(): "Test Dataset io as text" ds = datasets.get_uv() # Var that has integer values as float ds['intflt'] = ds.eval('intvar * 1.') ds['intflt'].name = 'intflt' # io test tempdir = tempfile.mkdtemp() try: dest = os.path.join(tempdir, 'test.txt') ds.save_txt(dest) ds2 = load.tsv(dest) finally: shutil.rmtree(tempdir) assert_dataset_equal(ds, ds2, decimal=6)
def test_align(): "Testing align() and align1() functions" ds = datasets.get_uv() # index the dataset ds.index() ds['aindex'] = ds.eval("A.enumerate_cells()") # subset idx4 = np.arange(0, ds.n_cases, 4) idx4i = idx4[::-1] ds2 = ds.sub(np.arange(0, ds.n_cases, 2)) # shuffle the whole dataset shuffle_index = np.arange(ds.n_cases) np.random.shuffle(shuffle_index) ds_shuffled = ds[shuffle_index] # align1: align Dataset to index dsa = align1(ds2, idx4) assert_array_equal(dsa['index'], idx4, "align1() failure") dsa = align1(ds2, idx4i) assert_array_equal(dsa['index'], idx4i, "align1() failure") # d_idx as Var dsa = align1(ds2[::2], idx4, idx4i) assert_array_equal(dsa['index'], idx4i, "align1() failure") assert_raises(ValueError, align1, ds2, idx4, idx4i) # Factor index assert_raises(ValueError, align1, ds, ds['rm', ::-1], 'rm') fds = ds[:20] dsa = align1(fds, fds['rm', ::-1], 'rm') assert_array_equal(dsa['index'], np.arange(19, -1, -1), "align1 Factor") # align two datasets dsa1, dsa2 = align(ds, ds2) assert_array_equal(dsa1['index'], dsa2['index'], "align() failure") dsa1, dsa2 = align(ds, ds2[::-1]) assert_array_equal(dsa1['index'], dsa2['index'], "align() failure") dsa1, dsa2 = align(ds, ds_shuffled) assert_dataset_equal(dsa1, dsa2) # align using categorial dsa1, dsa2 = align(ds, ds_shuffled, 'A % aindex') assert_dataset_equal(dsa1, dsa2) dsa1, dsa2 = align(ds, ds_shuffled, 'aindex % A') assert_dataset_equal(dsa1, dsa2)
def test_report(): "Test fmtxt.Report class" tempdir = tempfile.mkdtemp() report = fmtxt.Report("Test Report") section = report.add_section(u'unicode: \xe2 abc') ds = datasets.get_uv() p = plot.Barplot('fltvar', 'A', sub="B=='b1'", ds=ds) image = p.image() section.add_figure("test", image) report.sign() # report output print report dst = os.path.join(tempdir, 'report.html') report.save_html(dst) # clean up shutil.rmtree(tempdir)