Ejemplo n.º 1
0
def run(traj):
    try:
        # extract parameters
        N = traj.par.data.N
        K = traj.par.data.K
        p_cts = traj.par.data.p_cts
        p_bin = traj.par.data.p_bin
        var_adj = traj.par.data.var_adj
        var_cov = traj.par.data.var_cov
        missing_rate = traj.par.data.missing_rate
        seed = traj.par.data.seed
        alpha_mean = traj.par.data.alpha_mean

        print(p_bin, alpha_mean, seed)

        adj_model = traj.par.model.adj_model
        bin_model = traj.par.model.bin_model

        # generate data
        Z, alpha, X_cts, X_cts_missing, X_bin, X_bin_missing, A, B, B0 = generate_dataset(
            N=N,
            K=K,
            p_cts=p_cts,
            p_bin=p_bin,
            var_adj=var_adj,
            alpha_mean=alpha_mean,
            var_cov=var_cov,
            missing_rate=missing_rate,
            seed=seed,
            link_model=adj_model,
            bin_model=bin_model)

        density = tf.reduce_sum(tf.where(tf.math.is_nan(A), 0.,
                                         A)).numpy() * 2 / (N * (N - 1))
        density = density
    except:
        density = np.nan
    traj.f_add_result("runs.$.alpha_mean", alpha_mean, "alpha_mean")
    traj.f_add_result("runs.$.seed", seed, "seed")
    traj.f_add_result("runs.$.density", density, "Network density")

    print(p_bin, alpha_mean, seed, density)
    return p_bin, alpha_mean, seed, density
Ejemplo n.º 2
0
def run(traj):
    try:
        # extract parameters
        N = traj.par.data.N
        K = traj.par.data.K
        p_cts = traj.par.data.p_cts
        p_bin = traj.par.data.p_bin
        var_adj = traj.par.data.var_adj
        var_cov = traj.par.data.var_cov
        missing_rate = traj.par.data.missing_rate
        seed = traj.par.data.seed
        alpha_mean = traj.par.data.alpha_mean

        print(p_bin, N, seed)

        K_model = traj.par.model.K
        adj_model = traj.par.model.adj_model
        bin_model = traj.par.model.bin_model

        n_iter = traj.par.fit.n_iter
        n_vmp = traj.par.fit.n_vmp
        n_gd = traj.par.fit.n_gd
        step_size = traj.par.fit.step_size

        # generate data
        Z, alpha, X_cts, X_cts_missing, X_bin, X_bin_missing, A, B, B0 = generate_dataset(
            N=N,
            K=K,
            p_cts=p_cts,
            p_bin=p_bin,
            var_adj=var_adj,
            alpha_mean=alpha_mean,
            var_cov=var_cov,
            missing_rate=missing_rate,
            seed=seed,
            link_model=adj_model,
            bin_model=bin_model)
        initial = {
            "bias": B0,
            "weights": B,
            "positions": Z,
            "heterogeneity": alpha
        }

        # initialize model
        model = JointModel2(K=K_model,
                            A=A,
                            X_cts=X_cts,
                            X_bin=X_bin,
                            link_model="Logistic",
                            bin_model="Logistic",
                            initial=initial)

        # fit
        model.fit(
            n_iter=n_iter,
            n_vmp=n_vmp,
            n_gd=n_gd,
            verbose=False,
        )

        # metrics
        metrics = model.covariate_metrics(X_cts_missing, X_bin_missing)
        dists = model.latent_distance(Z)
        elbo = model.elbo.numpy()
        density = tf.reduce_sum(tf.where(tf.math.is_nan(A), 0.,
                                         A)).numpy() * 2 / (N * (N - 1))

        # store result
        elbo = elbo
        mse = metrics["mse"]
        auroc = metrics["auroc"]
        dist_inv = dists["inv"]
        dist_proj = dists["proj"]
        density = density
    except:
        elbo = np.nan
        mse = np.nan
        auroc = np.nan
        dist_inv = np.nan
        dist_proj = np.nan
        density = np.nan
    traj.f_add_result("runs.$.p_bin", p_bin, "p_bin")
    traj.f_add_result("runs.$.N", N, "N")
    traj.f_add_result("runs.$.seed", seed, "seed")
    traj.f_add_result("runs.$.elbo", elbo, "ELBO")
    traj.f_add_result("runs.$.mse", mse, "MSE")
    traj.f_add_result("runs.$.auroc", auroc, "AUROC")
    traj.f_add_result("runs.$.dist_inv", dist_inv, "Invariant distance")
    traj.f_add_result("runs.$.dist_proj", dist_proj, "Projection distance")
    traj.f_add_result("runs.$.density", density, "Network density")

    print(p_bin, N, seed, elbo, mse, auroc, dist_inv, dist_proj, density)
    return p_bin, N, seed, elbo, mse, auroc, dist_inv, dist_proj, density