def test_complete_2(): v1 = Rvar.Rvar(1, 2) v2 = Rvar.Rvar(2, 2) v3 = Rvar.Rvar(3, 2) v4 = Rvar.Rvar(4, 3) v5 = Rvar.Rvar(5, 2) d = Factor.Factor([v1]) d.fill_values([0.6, 0.4]) i = Factor.Factor([v2]) i.fill_values([0.7, 0.3]); s = Factor.Factor([v3, v2]) s.fill_values([0.95, 0.05, 0.2, 0.8]); g = Factor.Factor([v4, v1, v2]) g.fill_values([0.3, 0.4, 0.3, 0.05, 0.25, 0.7, 0.9, 0.08, 0.02, 0.5, 0.3, 0.2]); l = Factor.Factor([v5, v4]) l.fill_values([0.1, 0.9, 0.4, 0.6, 0.99, 0.01]); s = FactorOperations.observe(s, {v3:1}) # we observe high SAT factors = [i, s, g, l] a = d for f in factors: a = FactorOperations.multiply(a, f) print a.variables, a.values.size rvars = [v1, v3, v4, v5] for v in rvars: a = FactorOperations.marginalize(a, v) print a.variables, a.values.size assert np.allclose(a.values, [0.12727273, 0.87272727])
def test_conditioning(): evidence = {v[2]:0, v[3]:1} assert np.allclose(FactorOperations.observe(f['a'], evidence).values, f['a'].values) assert np.allclose(FactorOperations.observe(f['b'], evidence, False).values, [[0.59, 0.22], [0., 0.]]) assert np.allclose(FactorOperations.observe(f['c'], evidence, False).values, [[0., 0.], [0.61, 0.]]) assert np.allclose(FactorOperations.observe(f['z'], {v[3]:0}, False).values, [[[0.25, 0.05, 0.15], [0.08, 0., 0.09]], [[0.,0.,0.],[0.,0.,0.]]])
def modify_Factor_by_evidence(name, node, ass): factor = GN[name]['factor_'+node] randvar = GN[name]['var_'+node] GN[name]['factor_'+node] = FactorOperations.observe(factor, {randvar:ass})
F.append(f1) F.append(f2) F.append(f3) return [F,v] [F, v] = geneticNetwork(family_tree, frequency_of_alleles_in_general_population, probability_of_trait_based_on_genotype) print F cc = CliqueTree.CliqueTree(F) for i,e in enumerate(v): print i, e # for fun lets reduce some evidence cc.factors[2] = FactorOperations.observe(cc.factors[2], {v[17]:0}) # Ira shows pheno cc.factors[5] = FactorOperations.observe(cc.factors[5], {v[6]:0}) # rene has gen1 F cc.factors[5] = FactorOperations.observe(cc.factors[5], {v[7]:1}) # rene has gen2 f cc.factors[1] = FactorOperations.observe(cc.factors[1], {v[5]:0}) # Eva shows pheno cc.calibrate() print cc phenos_nodes = [0,1,2,3,4,5,6] probs = {} for i in phenos_nodes: belief = cc.beta[i] genes = [v1 for v1 in belief.variables if not v1.id.endswith("_p")] f = copy.copy(belief) print genes for g in genes:
#msg_10_1 = FactorOperations.marginalize(msg_10_1, msg_10_1.variables[1]) #msg_10_1 = FactorOperations.marginalize(msg_10_1, msg_10_1.variables[1]) #print '---->', msg_10_1.variables #belief_1 = FactorOperations.multiply(msg_10_1, cc.factors[1], True) #print belief_1.variables #sol = FactorOperations.marginalize(belief_1, belief_1.variables[0]) #print 'benito prob of having illnes is now :', sol.values[0] # COMPUTE ALL EXACT MARGINALS (of showing the sickness for all) import copy # for fun lets reduce some evidence cc.factors[3] = FactorOperations.observe(cc.factors[3], {v[15]:0}) # Ira shows pheno cc.factors[6] = FactorOperations.observe(cc.factors[6], {v[0]:0}) # rene has gen FF cc.factors[4] = FactorOperations.observe(cc.factors[4], {v[12]:1}) # James has gen Ff cc.calibrate() phenos_nodes = [0,1,2,3,4,5,6,7,8] probs = {} for i in phenos_nodes: belief = cc.beta[i] genes = [v for v in belief.variables if not v.id.endswith("_p")] f = copy.copy(belief) f = FactorOperations.marginalize(f, genes[0]) probs[f.variables[0].id] = f.values[0] print probs