4.10 Models with Covariates

4.10 Models with Covariates#

mode = "svg"

import matplotlib

font = {'family' : 'Dejavu Sans',
        'weight' : 'normal',
        'size'   : 20}

matplotlib.rc('font', **font)

import matplotlib
from matplotlib import pyplot as plt
from graspologic.simulations import sample_edges
import numpy as np
from graphbook_code import heatmap

n = 5
P_earthling = np.full((n,n), 0.3)

nodenames = [
    "SI", "L", "H/E", 
    "T/M", "BS"
]

signal_subnetwork = np.zeros((n, n), dtype=bool)
signal_subnetwork[1:, 0] = True
signal_subnetwork[0, 1:] = True
P_astronaut = np.copy(P_earthling)

# probabilities for signal edges are higher in astronauts than humans
n_different_edges = signal_subnetwork.sum()
P_astronaut[signal_subnetwork] = np.tile(np.linspace(0.35, 0.9, num=n_different_edges//2), 2)

A_earthling = sample_edges(P_earthling)
A_astronaut = sample_edges(P_astronaut)
from graphbook_code import heatmap
import os

fig, axs = plt.subplots(1, 2, figsize=(12, 5), gridspec_kw={"width_ratios": [1, 1.27]})
heatmap(A_earthling.astype(int), ax=axs[0], title="(A) Earthling adj. matrix",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        cbar=False)
heatmap(A_astronaut.astype(int), ax=axs[1], title="(B) Astronaut adj. matrix",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        cbar=False)
fig.tight_layout()

os.makedirs("Figures", exist_ok=True)
fname = "ssg_samps"
if mode != "png":
    os.makedirs(f"Figures/{mode:s}", exist_ok=True)
    fig.savefig(f"Figures/{mode:s}/{fname:s}.{mode:s}")

os.makedirs("Figures/png", exist_ok=True)
fig.savefig(f"Figures/png/{fname:s}.png")
../../_images/de6de583f4971f6f01928f87b0d3fb0bc1a129ed46aa7e646cb1918721edc7fe.png
fig, axs = plt.subplots(1, 3, figsize=(15, 5), gridspec_kw={"width_ratios": [1, 1.27, 1.27]})

# plot probability matrices and their differences on the same scale
heatmap(P_earthling, vmin=0, vmax=1, title="(A) $P_{earth}$",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        cbar=False, ax=axs[0])
heatmap(P_astronaut, vmin=0, vmax=1, title="(B) $P_{ast}$",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        legend_title="Probability", ax=axs[1])
heatmap(P_astronaut - P_earthling, vmin=0, vmax=1, title="(C) $P_{ast} - P_{earth}$",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        legend_title="Difference", ax=axs[2])

fig.tight_layout()
fname = "ssg_pmtxs"
if mode != "png":
    fig.savefig(f"Figures/{mode:s}/{fname:s}.{mode:s}")

fig.savefig(f"Figures/png/{fname:s}.png")
../../_images/8005e468ede7dd2b9e2b381269bf4e2ddf88f9ebec2146238bc63dc0eaa34c07.png
fig, axs = plt.subplots(1, 2, figsize=(12, 5), gridspec_kw = {"width_ratios": [1, 1]})
heatmap(P_astronaut - P_earthling, vmin=0, vmax=1, title="(A) $P_{ast} - P_{earth}$",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        legend_title="Difference", ax=axs[0])

heatmap(signal_subnetwork.astype(int), title="(B) Signal subnetwork",
        xtitle="Brain Area", xticks=[0.5, 1.5, 2.5, 3.5, 4.5], xticklabels=nodenames,
        ytitle="Brain Area", yticks=[0.5, 1.5, 2.5, 3.5, 4.5], yticklabels=nodenames,
        legend_title="Part of $\\mathcal{S}$?", ax=axs[1])

fig.tight_layout()
fname = "ssg_ssn"
if mode != "png":
    fig.savefig(f"Figures/{mode:s}/{fname:s}.{mode:s}")

fig.savefig(f"Figures/png/{fname:s}.png")
../../_images/4a83f809d3bdc5637dad3d5b2f583e0e18730ca483cfdcd653f4ce02015f3761.png
# sample the classes of each sample
M = 200  # the number of training and testing samples
pi_astronaut = 0.45
pi_earthling = 0.55

yvec = np.random.choice(2, p=[pi_earthling, pi_astronaut], size=M)

# sample network realizations given the class of each sample
Ps = [P_earthling, P_astronaut]
np.random.seed(0)
As = np.stack([sample_edges(Ps[y]) for y in yvec], axis=2)