def make_plot2(name, data, params, tol=.01): x, y = distrib(data, 40) n = len(params[0]) y2 = [[spidir.gammaSumPdf(i, n, params[0], params[1], tol) for i in x]] a, b = params mu = sum(u/v for u,v in zip(a, b)) var = sum(u/v/v for u,v in zip(a, b)) # if alpha > 1 a2 = mu*mu/var b2 = mu/var m = (a2-1)/b2 #y3 = [normalPdf(i, (m, sqrt(var))) for i in x] y3 = [gammaPdf(i, (a2, b2)) for i in x] rplot_start("test/output/gamma_add/%s.pdf" % name) rplot("plot", x, y, t="l") for i in xrange(len(y2)): k = i/float(len(y2)) rp.lines(x, y2[i], col=rp.rgb(1-k, k, 0)) rp.lines(x, y3, col="blue") rplot_end(True)
def test_branch_prior_simple1(self): """Test branch prior""" tree = treelib.parse_newick("((a1:1, b1:1):2, c1:3);") stree = treelib.parse_newick("((A:2, B:2):1, C:3);") gene2species = lambda x: x[0].upper() params = { "A": (1.0, 1.0), "B": (3.0, 3.0), "C": (4, 3.5), 2: (2.0, 2.0), 1: (1.0, 1.0), "baserate": (11.0, 10.0), } birth = 0.01 death = 0.02 pretime = 1.0 nsamples = 1 recon = phylo.reconcile(tree, stree, gene2species) events = phylo.label_events(tree, recon) # pd(mapdict(recon, key=lambda x: x.name, val=lambda x: x.name)) # pd(mapdict(events, key=lambda x: x.name)) p = spidir.branch_prior( tree, stree, recon, events, params, birth, death, nsamples=nsamples, approx=False, generate=1 ) tot = 0.0 gs = list(frange(0.0001, 4, 0.01)) gs = list(frange(1, 1.01, 0.01)) for g in gs: pg = invgammaPdf(g, params["baserate"]) pa = gammaPdf(tree.nodes["a1"].dist, [params["A"][0], params["A"][1] / (g * stree.nodes["A"].dist)]) pb = gammaPdf(tree.nodes["b1"].dist, [params["B"][0], params["B"][1] / (g * stree.nodes["B"].dist)]) pc = spidir.gammaSumPdf( tree.nodes["c1"].dist + tree.nodes[2].dist, 2, [params["C"][0], params[2][0]], [params["C"][1] / (g * stree.nodes["C"].dist), params[2][1] / (g * stree.nodes[2].dist)], 0.001, ) print g, pg, pa, pb, pc tot += pg * pa * pb * pc tot /= len(gs) print ( tree.nodes["c1"].dist + tree.nodes[2].dist, [params["C"][0], params[2][0]], [params["C"][1], params[2][1]], ) print "C", p print "P", log(tot)
def test_branch_prior_simple1(self): """Test branch prior""" tree = treelib.parse_newick("((a1:1, b1:1):2, c1:3);") stree = treelib.parse_newick("((A:2, B:2):1, C:3);") gene2species = lambda x: x[0].upper() params = { "A": (1.0, 1.0), "B": (3.0, 3.0), "C": (4, 3.5), 2: (2.0, 2.0), 1: (1.0, 1.0), "baserate": (11.0, 10.0) } birth = .01 death = .02 pretime = 1.0 nsamples = 1 recon = phylo.reconcile(tree, stree, gene2species) events = phylo.label_events(tree, recon) #pd(mapdict(recon, key=lambda x: x.name, val=lambda x: x.name)) #pd(mapdict(events, key=lambda x: x.name)) p = spidir.branch_prior(tree, stree, recon, events, params, birth, death, nsamples=nsamples, approx=False, generate=1) tot = 0.0 gs = list(frange(.0001, 4, .01)) gs = list(frange(1, 1.01, .01)) for g in gs: pg = invgammaPdf(g, params["baserate"]) pa = gammaPdf( tree.nodes["a1"].dist, [params["A"][0], params["A"][1] / (g * stree.nodes["A"].dist)]) pb = gammaPdf( tree.nodes["b1"].dist, [params["B"][0], params["B"][1] / (g * stree.nodes["B"].dist)]) pc = spidir.gammaSumPdf( tree.nodes["c1"].dist + tree.nodes[2].dist, 2, [params["C"][0], params[2][0]], [ params["C"][1] / (g * stree.nodes["C"].dist), params[2][1] / (g * stree.nodes[2].dist) ], .001) print g, pg, pa, pb, pc tot += pg * pa * pb * pc tot /= len(gs) print(tree.nodes["c1"].dist + tree.nodes[2].dist, [params["C"][0], params[2][0]], [params["C"][1], params[2][1]]) print "C", p print "P", log(tot)
def test_branch_prior_simple2(self): """Test branch prior 2""" tree = treelib.parse_newick("((a1:2, a2:3):.4, b1:2);") stree = treelib.parse_newick("(A:2, B:2);") gene2species = lambda x: x[0].upper() params = { "A": (1.0, 1.0), "B": (3.0, 3.0), 1: (1.0, 1.0), "baserate": (11.0, 10.0) } birth = .01 death = .02 pretime = 1.0 nsamples = 100 recon = phylo.reconcile(tree, stree, gene2species) events = phylo.label_events(tree, recon) #pd(mapdict(recon, key=lambda x: x.name, val=lambda x: x.name)) #pd(mapdict(events, key=lambda x: x.name)) p = spidir.branch_prior(tree, stree, recon, events, params, birth, death, nsamples=nsamples, approx=False) tot = 0.0 gstart = 0.01 gend = 3.0 step = (gend - gstart) / 20.0 s2 = step / 2.0 gs = list(frange(gstart + s2, gend + s2, step)) for g in gs: pg = invgammaPdf(g, params["baserate"]) pa = 0.0 for i in range(nsamples): t = birthdeath.sample_birth_wait_time(1, stree.nodes["A"].dist, birth, death) #print t t2 = stree.nodes["A"].dist - t pa1 = gammaPdf(tree.nodes["a1"].dist, [params["A"][0], params["A"][1] / (g * t2)]) pa2 = gammaPdf(tree.nodes["a2"].dist, [params["A"][0], params["A"][1] / (g * t2)]) pb = spidir.gammaSumPdf( tree.nodes["b1"].dist + tree.nodes[2].dist, 2, [params["B"][0], params["A"][0]], [ params["B"][1] / (g * stree.nodes["B"].dist), params["A"][1] / (g * t) ], .001) if "nan" not in map(str, [pa1, pa2, pb]): pa += pa1 * pa2 * pb / nsamples tot += pg * pa * step #tot /= len(gs) print "unfold", (tree.nodes["b1"].dist + tree.nodes[2].dist, [params["B"][0], params["A"][0]], [ params["B"][1] / (g * stree.nodes["B"].dist), params["A"][1] / (g * t) ]) print "C", p print "P", log(tot)
def test_branch_prior_simple2(self): """Test branch prior 2""" tree = treelib.parse_newick("((a1:2, a2:3):.4, b1:2);") stree = treelib.parse_newick("(A:2, B:2);") gene2species = lambda x: x[0].upper() params = {"A": (1.0, 1.0), "B": (3.0, 3.0), 1: (1.0, 1.0), "baserate": (11.0, 10.0)} birth = 0.01 death = 0.02 pretime = 1.0 nsamples = 100 recon = phylo.reconcile(tree, stree, gene2species) events = phylo.label_events(tree, recon) # pd(mapdict(recon, key=lambda x: x.name, val=lambda x: x.name)) # pd(mapdict(events, key=lambda x: x.name)) p = spidir.branch_prior(tree, stree, recon, events, params, birth, death, nsamples=nsamples, approx=False) tot = 0.0 gstart = 0.01 gend = 3.0 step = (gend - gstart) / 20.0 s2 = step / 2.0 gs = list(frange(gstart + s2, gend + s2, step)) for g in gs: pg = invgammaPdf(g, params["baserate"]) pa = 0.0 for i in range(nsamples): t = birthdeath.sample_birth_wait_time(1, stree.nodes["A"].dist, birth, death) # print t t2 = stree.nodes["A"].dist - t pa1 = gammaPdf(tree.nodes["a1"].dist, [params["A"][0], params["A"][1] / (g * t2)]) pa2 = gammaPdf(tree.nodes["a2"].dist, [params["A"][0], params["A"][1] / (g * t2)]) pb = spidir.gammaSumPdf( tree.nodes["b1"].dist + tree.nodes[2].dist, 2, [params["B"][0], params["A"][0]], [params["B"][1] / (g * stree.nodes["B"].dist), params["A"][1] / (g * t)], 0.001, ) if "nan" not in map(str, [pa1, pa2, pb]): pa += pa1 * pa2 * pb / nsamples tot += pg * pa * step # tot /= len(gs) print "unfold", ( tree.nodes["b1"].dist + tree.nodes[2].dist, [params["B"][0], params["A"][0]], [params["B"][1] / (g * stree.nodes["B"].dist), params["A"][1] / (g * t)], ) print "C", p print "P", log(tot)