Esempio n. 1
0
def _sensitivity(exposure, workspace, protocol, statistic, par=None, seed=None):
    """
    Sensitivity analysis.
    
    >>> _sensitivity("11df840d0150d34c9716cd4cbdd164c8", "bondarenko_szigeti_bett_kim_rasmusson_2004_apical", "protocol", "apd90", ("g_Na", "Nao"), seed=1)

    TODO: Make optional arguments of exposure, lower, upper, etc.
    TODO: Accept json dict of model_kwargs, morris_kwargs
    """
    m = Model(exposure + "/" + workspace, maxsteps=1e6, chunksize=1e5, reltol=1e-8)
    phenotypes(m, m.name)  # initialize and cache default
    par = [str(i) for i in par]  # Numpy cannot handle Unicode names
    if not par:
        # Default: sample within plus/minus 50% of all nonzero parameters
        par = [k for k in m.dtype.p.names if m.pr[k] != 0]
    baseline = unstruct(m.pr[par]).squeeze()
    lower = 0.5 * baseline
    upper = 1.5 * baseline
    if seed is not None:
        r.set_seed(seed)

    r("fun <- function(func, x) func(x)")
    raise Exception(str(r.fun(r.sum, baseline)))

    fun = scalar_pheno(m, statistic)
    r.as_vector(baseline)
    return r.morris(fun, factors=par, r=2, design={"type": "oat", "levels": 10, "grid.jump": 5}, binf=lower, bsup=upper)
Esempio n. 2
0
    """Make a function to return a named field of the phenotype array."""
    
    @ri.rternalize
    def fun(rmatrix):
        """Scalar function for use with R's sensitivity::morris()."""
        ph = np.concatenate([phenotypes(i) for i in mat2par(rmatrix)])
        return py2ri(ph[field])
    
    return fun

if __name__ == "__main__":
    # Sensitivity analysis
    baseline = unstruct(m.pr[factors])
    lower = 0.5 * baseline
    upper = 1.5 * baseline
    result = dict()
    for field in "appeak", "apd90", "ctpeak", "ctbase", "ctd90":
        r.set_seed(20120221)  # repeatable random sampling
        result[field] = r.morris(scalar_pheno(field), factors=factors, r=2, 
            design={"type": "oat", "levels": 10, "grid.jump": 5}, 
            binf=lower, bsup=upper)
    # Print and visualize results
    r.png("sensitivity.png", width=1024, height=768, pointsize=24)
    r.par(mfrow=(2, 3))  # multiple figures in two rows, three columns
    for k, v in result.items():
        print "===================================================="
        print k
        print v
        r.plot(v, log="y", main=k)
    r.dev_off()  # close image file
Esempio n. 3
0
# This requires that an ipcluster is already started, see
# http://ipython.org/ipython-doc/stable/parallel/parallel_task.html#parallel-function-decorator
# rc = Client()
# lview = rc.load_balanced_view()
try:
    r.library("sensitivity")
except RRuntimeError:
    r.install_packages("sensitivity")
    r.library("sensitivity")

class Model(ex.Bond, AttractorMixin):
    pass

logging.basicConfig()

r.set_seed(20120221)
m = Model(reltol=1e-10, maxsteps=1e6, chunksize=100000)
mem = Memory("/tmp/sensitivity")

factors = [k for k in m.dtype.p.names if m.pr[k] != 0]

@mem.cache
@failwithnanlikefirst
def phenotypes(par=None):
    with m.autorestore(_p=par):
        m.eq(tmax=1e7, tol=1e-3)
        t, y, stats = m.ap()
    return ap_stats_array(stats)

phenotypes()  # initialize and cache default