Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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])
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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