rows = [] n_samples = 5 lvls = ["lvl0_labels", "lvl1_labels", "lvl2_labels"] for lvl in lvls: estimator = DCSBMEstimator(degree_directed=True, directed=True, loops=False) estimator.fit(adj, meta[lvl].values) for i in range(n_samples): sample = np.squeeze(estimator.sample()) sample_meta = meta.copy() sf = signal_flow(sample) sample_meta["signal_flow"] = -sf sample_mg = MetaGraph(sample, sample_meta) sample_mg = sample_mg.sort_values("signal_flow", ascending=True) prop = upper_triu_prop(sample_mg.adj) print(prop) row = {"level": lvl.replace("_labels", ""), "prop": prop} rows.append(row) print() bin_meta = meta.copy() bin_adj = binarize(adj) sf = signal_flow(bin_adj) bin_meta["signal_flow"] = -sf bin_mg = MetaGraph(bin_adj, bin_meta) bin_mb = bin_mg.sort_values("signal_flow", ascending=True) prop = upper_triu_prop(bin_mg.adj) print(prop)
# %% [markdown] # # Extract subgraphs extract_fb = True if extract_fb: from_classes = ["MBON", "FAN", "FBN", "FB2N"] to_classes = ["MBIN"] sub_mg = MetaGraph(mg.adj, mg.meta) from_class_inds = sub_mg.meta["Class 1"].isin(from_classes) to_class_inds = sub_mg.meta["Class 1"].isin(to_classes) any_inds = np.logical_or(from_class_inds, to_class_inds) sub_mg.reindex(any_inds) sub_mg.sort_values(["Hemisphere", "Class 1", "Pair ID"]) # meta = sub_mg.meta # meta["Original index"] = range(meta.shape[0]) # meta.sort_values( # ["Hemisphere", "Class 1", "Pair ID"], # inplace=True, # kind="mergesort", # ascending=False, # ) # temp_inds = meta["Original index"] # sub_mg = sub_mg.reindex(temp_inds) # sub_mg = MetaGraph(sub_mg.adj, meta) adj = sub_mg.adj.copy() from_class_inds = np.where(sub_mg.meta["Class 1"].isin(from_classes).values)[0] left_inds = np.where(sub_mg.meta["Hemisphere"] == "L")[0]
width = 0.5 gap = 10 # this determines the sorting for everybody level_names = [f"lvl{i}_labels" for i in range(lowest_level + 1)] sort_class = level_names + ["merge_class"] class_order = ["sf"] total_sort_by = [] for sc in sort_class: for co in class_order: class_value = full_meta.groupby(sc)[co].mean() full_meta[f"{sc}_{co}_order"] = full_meta[sc].map(class_value) total_sort_by.append(f"{sc}_{co}_order") total_sort_by.append(sc) full_mg = full_mg.sort_values(total_sort_by, ascending=False) full_meta = full_mg.meta n_leaf = full_meta[f"lvl{lowest_level}_labels"].nunique() n_pairs = len(full_meta) // 2 # Get positions for left and right simultaneously, so they'll line up ### # left meta = full_meta[full_meta["hemisphere"] == "L"].copy() level = lowest_level labels = meta[f"lvl{level}_labels"] classes = meta["merge_class"] sizes = meta.groupby([f"lvl{level}_labels", "merge_class"], sort=False).size() uni_labels = sizes.index.unique(0)
width = 0.5 gap = 10 # this determines the sorting for everybody level_names = [f"lvl{i}_labels" for i in range(lowest_level + 1)] sort_class = level_names + ["merge_class"] class_order = ["sf"] total_sort_by = [] for sc in sort_class: for co in class_order: class_value = full_meta.groupby(sc)[co].mean() full_meta[f"{sc}_{co}_order"] = full_meta[sc].map(class_value) total_sort_by.append(f"{sc}_{co}_order") total_sort_by.append(sc) full_mg = full_mg.sort_values(total_sort_by, ascending=False) full_meta = full_mg.meta n_leaf = full_meta[f"lvl{lowest_level}_labels"].nunique() n_pairs = len(full_meta) // 2 # Get positions for left and right simultaneously, so they'll line up ### # left meta = full_meta[full_meta["hemisphere"] == "L"].copy() level = lowest_level labels = meta[f"lvl{level}_labels"] classes = meta["merge_class"] sizes = meta.groupby([f"lvl{level}_labels", "merge_class"], sort=False).size() uni_labels = sizes.index.unique(0)
dend_axs.append(fig.add_subplot(gs[:, 3])) # colormap plot_double_dendrogram(meta, dend_axs[:-1]) plot_color_labels(meta, dend_axs[-1]) # plot the adjacency matrices for data and sampled data adj_axs = np.empty((2, lowest_level + 1), dtype="O") offset = 4 for level in np.arange(lowest_level + 1): ax = fig.add_subplot(gs[: n_row // 2, level + offset]) adj_axs[0, level] = ax ax = fig.add_subplot(gs[n_row // 2 :, level + offset]) adj_axs[1, level] = ax plot_adjacencies(mg, adj_axs) mg = mg.sort_values(["hemisphere", "pair_id"], ascending=True) meta = mg.meta adj = mg.adj n_pairs = len(meta) // 2 lp_inds = np.arange(n_pairs) rp_inds = np.arange(n_pairs) + n_pairs n_levels = 10 # how many levels to show in the curve plots # plot the pairedness in the top left palette = sns.color_palette("deep", 2) sns.set_palette(palette) ax = fig.add_subplot(gs[:2, 0]) plot_pairedness(meta, lp_inds, rp_inds, ax, n_levels=n_levels) # plot the likelihood curves in the middle left palette = sns.color_palette("deep")