def get_families_obs(n, models): 'models must be list of tuples [(mom_model, dad_model, child_model),]' obsSet = model.ObsSet('mating obs') for i, t in enumerate(models): for j, var in enumerate(('mom', 'dad', 'child')): obsSet.add_obs(t[j].rvs(n), var=var, matingID=i) return obsSet
def get_2family_obs(modelWh, modelPu): obsSet = model.ObsSet('mating obs') obsSet.add_obs(modelWh.rvs(1), var='mom', matingID=0) obsSet.add_obs(modelWh.rvs(1), var='dad', matingID=0) obsSet.add_obs(modelWh.rvs(1), var='child', matingID=0) obsSet.add_obs(modelPu.rvs(1), var='mom', matingID=1) obsSet.add_obs(modelPu.rvs(1), var='dad', matingID=1) obsSet.add_obs(modelPu.rvs(1), var='child', matingID=1) return obsSet
def random_cross(n=100, nobs=1): obsSet = model.ObsSet('mating obs') c = (purple_plant, white_plant) for i in range(n): mom = random.choice(c) dad = random.choice(c) child = mom * dad obsSet.add_obs(mom.rvs(nobs), var='mom', matingID=i) obsSet.add_obs(dad.rvs(nobs), var='dad', matingID=i) obsSet.add_obs(child.rvs(nobs), var='child', matingID=i) return obsSet
def robomendel_cross_obs(n1=10, n2=10, n=1): 'construct n1 Pu x Pu crosses, and n2 Hy x Hy cross; n obs per plant' obsSet = model.ObsSet('mating obs') parents = [(purple_plant, purple_plant) ] * n1 #, (purple_plant, white_plant)] parents.extend([(hybrid_plant, hybrid_plant)] * n2) for i in range(len(parents)): (parent_1, parent_2) = parents[i] child = parent_1 * parent_2 obsSet.add_obs(parent_1.rvs(n), var='mom', matingID=i) obsSet.add_obs(parent_2.rvs(n), var='dad', matingID=i) obsSet.add_obs(child.rvs(n), var='child', matingID=i) #i = len(parents) #obsSet.add_obs(purple_plant.rvs(n), var='mom', matingID=i) #obsSet.add_obs(purple_plant.rvs(n), var='dad', matingID=i) #obsSet.add_obs(white_plant.rvs(n), var='child', matingID=i) return obsSet
def mating_test(species, priors=None, **kwargs): 'generate 2 x 2 test of all possible mating combinations' if not priors: priors = (1. / len(species), ) * len(species) scm = robomendel.SpeciesCrossModel(species, priors, **kwargs) mstate = model.LinearState('mating', scm) prior = model.StateGraph({'START': {mstate: 1}}) branches = model.BranchGenerator('chi', prior, iterTag='matingID') stop = model.StopState(useObsLabel=False) term = model.StateGraph({mstate: {stop: 1.}}) dg = model.DependencyGraph({ 'START': { branches: {} }, 'chi': { 'STOP': term } }) obsSet = model.ObsSet('mating obs') obsSet.add_obs(species[0].rvs(3), matingID=0) obsSet.add_obs((species[0].rvs(1)[0], species[1].rvs(1)[0], None), matingID=1) obsSet.add_obs((species[0].rvs(1)[0], species[0].rvs(1)[0], None), matingID=2) obsSet.add_obs( (species[0].rvs(1)[0], species[1].rvs(1)[0], species[0].rvs(1)[0]), matingID=3) m = model.Model(dg, obsSet) logPobs = m.calc_fb() llDict = m.posterior_ll() for matingID, t in enumerate( ((0, 0, 0), (0, 1, None), (0, 0, None), (0, 1, 0))): obsLabel = obsSet.get_subset(matingID=matingID) print 'mating %s:\tlogP = %1.3f, %1.3f, %1.3f' % \ tuple([str(t)] + llDict[obsLabel])
def pheno1_setup(modelWh, modelPu): pstate = model.LinearState('Pu', modelPu) wstate = model.LinearState('Wh', modelWh) prior = model.StateGraph({'START': {pstate: 0.9, wstate: 0.1}}) stop = model.StopState(useObsLabel=False) term = model.StateGraph({pstate: {stop: 1.}, wstate: {stop: 1.}}) branches = model.BranchGenerator('chi', prior, iterTag='plantID') dg = model.DependencyGraph({ 'START': { branches: {} }, 'chi': { 'STOP': term } }) obsSet = model.ObsSet('plants') for plant in range(2): # two white plants obsSet.add_obs(modelWh.rvs(100), plantID=plant) for plant in range(2, 20): # 18 purple plants obsSet.add_obs(modelPu.rvs(100), plantID=plant) m = model.Model(dg, obsSet) return m, obsSet
def get_family_obs(mom=(0., ), dad=(1., ), child=(0.5, ), **tags): obsSet = model.ObsSet('mating obs') obsSet.add_obs(mom, var='mom', **tags) obsSet.add_obs(dad, var='dad', **tags) obsSet.add_obs(child, var='child', **tags) return obsSet