Ejemplo n.º 1
0
def fit_clv(observations, time_points, held_out_rel_abun, held_out_time_points,
            denom, method):
    print("Estimating cLV parameters using", method)

    rel_abun = estimate_relative_abundances(observations)
    clv = CompositionalLotkaVolterra(rel_abun, time_points, denom=denom)

    if method == "Elastic Net":
        clv.train()
        predictions = [
            clv.predict(o[0], tpts)
            for (o, tpts) in zip(held_out_rel_abun, held_out_time_points)
        ]
        A, g, B = clv.get_params()
        return A, g, predictions
    elif method == "Ridge":
        clv.train_ridge()
        A, g, B = clv.get_params()
        predictions = [
            clv.predict(o[0], tpts)
            for (o, tpts) in zip(held_out_rel_abun, held_out_time_points)
        ]
        return A, g, predictions
    else:
        print("bad optimization method for cLV", file=sys.stderr)
        return
Ejemplo n.º 2
0
def fit_clv(observations, time_points, effects, held_out_observations, held_out_time_points, held_out_effects, using_rel_abun=False, ret_params=False, folds=None):
    # if observations are concentrations
    rel_abun = []
    held_out_rel_abun = []

    if folds is None:
        folds = len(observations)

    if not using_rel_abun:
        for obs in observations:
            rel_abun.append(obs / obs.sum(axis=1,keepdims=True))

        for obs in held_out_observations:
            held_out_rel_abun.append(obs / obs.sum(axis=1,keepdims=True))

    else:
        rel_abun = observations
        held_out_rel_abun = held_out_observations

    clv = CompositionalLotkaVolterra(rel_abun, time_points, effects)
    clv.train(folds=folds)
 
    predictions = [clv.predict(o[0],tpts,e) for (o,tpts,e) in zip(held_out_rel_abun, held_out_time_points, held_out_effects)]

    return predictions
Ejemplo n.º 3
0
    # estimated previously
    r_A = 1
    r_g = 4
    r_B = 0.5

    P = []
    Y_pc = []
    log_Y = []
    for y in Y:
        mass = y.sum(axis=1)
        p = y / y.sum(axis=1, keepdims=True)
        p = (p + 1e-5) / (p + 1e-5).sum(axis=1, keepdims=True)
        P.append(p)
        Y_pc.append((mass.T * p.T).T)
        log_Y.append(np.log(mass.T * p.T).T)

    clv = CompositionalLotkaVolterra(P, T, U, pseudo_count=1e-5)
    clv.r_A = r_A
    clv.r_g = r_g
    clv.r_B = r_B
    clv.train_ridge()
    A_clv, g_clv, B_clv = clv.get_params()

    A_glv, g_glv, B_glv = ridge_regression_glv(log_Y, U, T, clv.r_A, clv.r_g,
                                               clv.r_B)

    A_rel, g_rel, B_rel = compute_relative_parameters(A_glv, g_glv, B_glv,
                                                      clv.denom)
    plot_corr(A_rel, g_rel, B_rel, A_clv, g_clv, B_clv,
              "plots/stein_correlation.pdf")
    Y = adjust_concentrations(Y)

    # estimated previously
    r_A = 0.5
    r_g = 0.5
    r_B = 4

    P = []
    Y_pc = []
    log_Y = []
    for y in Y:
        mass = y.sum(axis=1)
        p = y / y.sum(axis=1,keepdims=True)
        p[p == 0] = 1e-5
        p = p / p.sum(axis=1,keepdims=True)
        P.append(p)
        Y_pc.append((mass.T*p.T).T)
        log_Y.append(np.log(mass.T*p.T).T)

    clv = CompositionalLotkaVolterra(P, T, U)
    clv.r_A = r_A
    clv.r_g = r_g
    clv.r_B = r_B
    clv.train_ridge()
    A_clv, g_clv, B_clv = clv.get_params()

    A_glv, g_glv, B_glv = ridge_regression_glv(log_Y, U, T, clv.r_A, clv.r_g, clv.r_B)

    A_rel, g_rel, B_rel = compute_relative_parameters(A_glv, g_glv, B_glv, clv.denom)
    plot_corr(A_rel, g_rel, B_rel, A_clv, g_clv, B_clv, "plots/bucci-diet_correlation.pdf")