コード例 #1
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
def mixture_model2(modelWh, modelPu):
    'model process as single species, with mixture emission, supports multiple matingID'
    mixModel = get_mix_model(modelWh, modelPu)
    peaSpecies = model.VarFilterState('pea', mixModel)
    prior = model.StateGraph({'START': {peaSpecies: 1.0}})
    stop = model.StopState(useObsLabel=False)
    term = model.StateGraph({
        peaSpecies: {
            stop: 1.
        },
        robomendel.noneState: {
            stop: 1.
        }
    })
    sct = robomendel.SpeciesCrossTransition()

    moms = model.BranchGenerator('mom', prior, iterTag='matingID')
    dads = model.BranchGenerator('dad', prior, iterTag='matingID')
    dg = model.DependencyGraph(
        {
            'START': {
                moms: {},
                dads: {}
            },
            ('mom', 'dad'): {
                'child': sct
            },
            'child': {
                'STOP': term
            }
        },
        joinTags=('matingID', ))
    return dg
コード例 #2
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
def family_model2(modelWh, modelPu, pHybrid=0.):
    'standard mom x dad --> child model, supports multiple matingID'
    pstate, wstate, prior, stop, term, sct = multicond_setup(
        modelWh, modelPu, pHybrid)
    moms = model.BranchGenerator('mom', prior, iterTag='matingID')
    dads = model.BranchGenerator('dad', prior, iterTag='matingID')
    dg = model.DependencyGraph(
        {
            'START': {
                moms: {},
                dads: {}
            },
            ('mom', 'dad'): {
                'child': sct
            },
            'child': {
                'STOP': term
            }
        },
        joinTags=('matingID', ))
    return dg
コード例 #3
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
def unrelated_model2(modelWh, modelPu):
    'model mom, dad, child as independent, supports multiple matingID'
    pstate = model.VarFilterState('Pu', modelPu)
    wstate = model.VarFilterState('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.
        },
        robomendel.noneState: {
            stop: 1.
        }
    })

    moms = model.BranchGenerator('mom', prior, iterTag='matingID')
    dads = model.BranchGenerator('dad', prior, iterTag='matingID')
    kids = model.BranchGenerator('child', prior, iterTag='matingID')
    dg = model.DependencyGraph(
        {
            'START': {
                moms: {},
                dads: {},
                kids: {}
            },
            'mom': {
                'STOP': term
            },
            'dad': {
                'STOP': term
            },
            'child': {
                'STOP': term
            }
        },
        joinTags=('matingID', ))
    return dg
コード例 #4
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
def multicond2_calc(modelWh, modelPu, obsSet):
    '''This test creates nodes representing mom, dad and the child,
    with a multi-cond edge from (mom,dad) --> child
    and tests two different matings simultaneously.'''
    pstate, wstate, prior, stop, term, sct = multicond_setup(modelWh, modelPu)
    moms = model.BranchGenerator('mom', prior, iterTag='matingID')
    dads = model.BranchGenerator('dad', prior, iterTag='matingID')
    dg = model.DependencyGraph(
        {
            'START': {
                moms: {},
                dads: {}
            },
            ('mom', 'dad'): {
                'child': sct
            },
            'child': {
                'STOP': term
            }
        },
        joinTags=('matingID', ))
    m = model.Model(dg, obsSet)
    return m, m.segmentGraph.p_forward(m.logPobsDict)
コード例 #5
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
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])
コード例 #6
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
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
コード例 #7
0
ファイル: robomendel_test.py プロジェクト: codeaudit/darwin
def environmental_model2(modelWh, modelPu):
    'model wh / pu as random extrinsic variable, supports multiple matingID'

    def filter_from_node(fromNode, *args):
        return dict(var=fromNode.var.label)

    pstate = model.VarFilterState('Pu', modelPu, filter_f=filter_from_node)
    wstate = model.VarFilterState('Wh', modelWh, filter_f=filter_from_node)
    peaSpecies = model.SilentState('pea')
    prior = model.StateGraph({'START': {peaSpecies: 1.}})
    noSpecies = model.SilentState('no-species')
    extNone = model.VarFilterState('ext-none',
                                   model.EmissionDict({None: 1.}),
                                   filter_f=filter_from_node)
    extSG = model.StateGraph({
        peaSpecies: {
            pstate: 0.9,
            wstate: 0.1
        },
        noSpecies: {
            extNone: 1.
        }
    })
    stop = model.StopState(useObsLabel=False)
    term = model.StateGraph({
        pstate: {
            stop: 1.
        },
        wstate: {
            stop: 1.
        },
        extNone: {
            stop: 1.
        }
    })
    sct = robomendel.SpeciesCrossTransition(noneState=noSpecies)

    moms = model.BranchGenerator('mom', prior, iterTag='matingID')
    dads = model.BranchGenerator('dad', prior, iterTag='matingID')
    dg = model.DependencyGraph(
        {
            'START': {
                moms: {},
                dads: {}
            },
            'mom': {
                'ext': extSG
            },
            'dad': {
                'ext': extSG
            },
            ('mom', 'dad'): {
                'child': sct
            },
            'child': {
                'ext': extSG
            },
            'ext': {
                'STOP': term
            }
        },
        joinTags=('matingID', ))
    return dg