Build in models
PCA
from BayesForge import bf
import jax.numpy as jnp
m= bf()
m.data('iris.csv', sep=',') # Data is already scaled
m.data_on_model = dict(
X=jnp.array(m.df.iloc[:,0:-2].values)
)
m.fit(m.models.pca(type="classic"), progress_bar=False) # or robust, sparse, classic, sparse_robust_ard
m.models.pca.plot(
X=m.df.iloc[:,0:-2].values,
y=m.df.iloc[:,-2].values,
feature_names=m.df.columns[0:-2],
target_names=m.df.iloc[:,-1].unique(),
color_var=m.df.iloc[:,0].values,
shape_var=m.df.iloc[:,-2].values
)Survival analysis
from BayesForge import bf
import jax.numpy as jnp
m = bf()
m.data('mastectomy.csv', sep=',').head()
m.df.metastasized = (m.df.metastasized.values == "yes").astype(jnp.int64)
# Import time-steps and events
m.models.survival.import_time_even(
m.df.time.values,
m.df.event.values, interval_length=3
)
# To import time-fixed covariates
m.models.survival.import_covF(
m.df.metastasized.values, ['metastasized']
)
# To import time-varying covariates ⚠️ Experimental feature
# m.models.survival.import_covV
m.fit(m.models.survival.model, num_samples=500)
m.summary()
m.models.survival.plot_surv( beta = 'Hazard_rate_metastasized')Gaussian Mixture Models
from BayesForge import bf
from sklearn.datasets import make_blobs
m = bf()
# Generate synthetic data
data, true_labels = make_blobs(
n_samples=500, centers=8, cluster_std=0.8,
center_box=(-10,10), random_state=101
)
m.data_on_model = {"data": data,"K": 8 }
m.fit(m.models.gmm) # Optimize model parameters through MCMC sampling
m.plot(X=data,sampler=m.sampler) # ⚠️ Experimental featureDirichlet Process Mixture Models
Python
from BayesForge import bf
from sklearn.datasets import make_blobs
m = bf()
# Generate synthetic data
data, true_labels = make_blobs(
n_samples=500, centers=8, cluster_std=0.8,
center_box=(-10,10), random_state=101
)
m.data_on_model = dict(data=data,T=10, empirical_bayes=True) # Set empirical_bayes=True for data-driven priors
m.fit(m.models.dpmm)
m.plot(data,m.sampler) Bayesian Neural Network Unsupervised Clustering Models
Python
from BayesForge import bf
from sklearn.datasets import make_blobs
m = bf()
# Generate synthetic data
data, true_labels = make_blobs(
n_samples=1000, centers=9, cluster_std=0.5,
center_box=(-10,10), random_state=101
)
m.data_on_model = dict(data=data, K=11, D_H1=10, empirical_bayes=True) # Set empirical_bayes=True for data-driven priors
m.fit(m.models.bnnc, progress_bar=False)
m.plot(data,m.sampler)Network Models
# Setup device------------------------------------------------
from BayesForge import bf
import jax.numpy as jnp
# Setup device------------------------------------------------
m = bf(platform='cpu')
# Simulate data ------------------------------------------------
N = 50
individual_predictor = m.dist.normal(0,1, shape = (N,1), sample = True)
kinship = m.dist.bernoulli(0.3, shape = (N,N), sample = True)
kinship = kinship.at[jnp.diag_indices(N)].set(0)
def sim_network(kinship, individual_predictor):
# Intercept
alpha = m.dist.normal(0,1, sample = True)
# SR
sr = m.net.sender_receiver(individual_predictor, individual_predictor, s_mu = 0.4, r_mu = -0.4, sample = True)
# D
DR = m.net.dyadic_effect(kinship, d_sd=2.5, sample = True)
return m.dist.bernoulli(logits = alpha + sr + DR, sample = True)
network = sim_network(m.net.mat_to_edgl(kinship), individual_predictor)
# Predictive model ------------------------------------------------
m.data_on_model = dict(
network = network,
dyadic_predictors = m.net.mat_to_edgl(kinship),
focal_individual_predictors = individual_predictor,
target_individual_predictors = individual_predictor
)
def model(network, dyadic_predictors, focal_individual_predictors, target_individual_predictors):
N_id = network.shape[0]
# Block ---------------------------------------
alpha = m.dist.normal(0,1, sample = True)
## SR shape = N individuals---------------------------------------
sr = m.net.sender_receiver(
focal_individual_predictors,
target_individual_predictors,
s_mu = 0.4, r_mu = -0.4
)
# Dyadic shape = N dyads--------------------------------------
dr = m.net.dyadic_effect(dyadic_predictors, d_sd=2.5) # Diadic effect intercept only
m.dist.bernoulli(logits = alpha + sr + dr, obs=network)
m.fit(model, num_samples = 500, num_warmup = 500, num_chains = 1, thinning = 1)