observation.posteriors#

Posterior distributions for observation model parameters.

Classes

LoadingPosterior

Posterior distribution over loading matrices.

ARDPosterior

Posterior distribution over ARD parameters.

ObsMeanPosterior

Posterior distribution over observation mean parameters.

ObsPrecPosterior

Posterior distribution over observation precision parameters.

ObsParamsPosterior

Posterior distributions over all observation model parameters.


class LoadingPosterior(
mean: ndarray | None = None,
cov: ndarray | None = None,
moment: ndarray | None = None,
)[source]#

Posterior distribution over loading matrices.

Parameters:
meanndarray of float, shape (y_dim, x_dim) or None, default None

Posterior mean.

covndarray of float, shape (y_dim, x_dim, x_dim) or None, default None

Posterior covariances.

momentndarray of float, shape (y_dim, x_dim, x_dim) or None, default None

Posterior second moments.

Attributes:
meanndarray of float, shape (y_dim, x_dim) or None

Posterior mean.

covndarray of float, shape (y_dim, x_dim, x_dim) or None

Posterior covariances.

momentndarray of float, shape (y_dim, x_dim, x_dim) or None

Posterior second moments.

get_groups(
y_dims: ndarray,
) tuple[list[ndarray], list[ndarray], list[ndarray]][source]#

Get list of views into posterior parameters, one per group.

Parameters:
y_dimsndarray of int, shape (n_groups,)

Dimensionalities of each observed group.

Returns:
group_meanslist of ndarray or None

List of views into mean, one per group. None if mean is None.

group_covslist of ndarray or None

List of views into cov, one per group. None if cov is None.

group_momentslist of ndarray or None

List of views into moment, one per group. None if moment is None.

compute_moment(in_place: bool = True) ndarray[source]#

Compute posterior second moments E[C_i C_i^T] for each row i.

Parameters:
in_placebool, default True

If True, store in self.moment and return reference. If False, return new array.

Returns:
ndarray

Second moments, shape (y_dim, x_dim, x_dim).

compute_squared_norms(y_dims: ndarray) ndarray[source]#

Compute expected squared norm of each column per group.

Parameters:
y_dimsndarray of int, shape (n_groups,)

Dimensionalities of each observed group.

Returns:
ndarray

Squared norms, shape (n_groups, x_dim).

get_subset_dims(
x_indices: ndarray,
in_place: bool = True,
) Self[source]#

Keep only specified latent dimensions.

Parameters:
x_indicesndarray of int

Indices of latent dimensions to keep.

in_placebool, default True

If True, modify self. If False, return new instance.

Returns:
Self

Modified or new instance.

class ARDPosterior(
a: ndarray | None = None,
b: ndarray | None = None,
mean: ndarray | None = None,
)[source]#

Posterior distribution over ARD parameters.

Parameters:
andarray of float, shape (n_groups,) or None, default None

Shape parameters.

bndarray of float, shape (n_groups, x_dim) or None, default None

Rate parameters.

meanndarray of float, shape (n_groups, x_dim) or None, default None

Posterior mean a/b.

Attributes:
andarray of float, shape (n_groups,) or None

Shape parameters.

bndarray of float, shape (n_groups, x_dim) or None

Rate parameters.

meanndarray of float, shape (n_groups, x_dim) or None

Posterior mean a/b.

compute_mean(in_place: bool = True) ndarray[source]#

Compute posterior mean a/b.

Parameters:
in_placebool, default True

If True, store in self.mean and return reference. If False, return new array.

Returns:
ndarray

Posterior mean, shape (n_groups, x_dim).

get_subset_dims(
x_indices: ndarray,
in_place: bool = True,
) Self[source]#

Keep only specified latent dimensions.

Parameters:
x_indicesndarray of int

Indices of latent dimensions to keep.

in_placebool, default True

If True, modify self. If False, return new instance.

Returns:
Self

Modified or new instance.

class ObsMeanPosterior(
mean: ndarray | None = None,
cov: ndarray | None = None,
)[source]#

Posterior distribution over observation mean parameters.

Parameters:
meanndarray of float, shape (y_dim,) or None, default None

Posterior mean.

covndarray of float, shape (y_dim,) or None, default None

Posterior variance (diagonal).

Attributes:
meanndarray of float, shape (y_dim,) or None

Posterior mean.

covndarray of float, shape (y_dim,) or None

Posterior variance (diagonal).

get_groups(
y_dims: ndarray,
) tuple[list[ndarray], list[ndarray]][source]#

Get list of views into posterior parameters, one per group.

Parameters:
y_dimsndarray of int, shape (n_groups,)

Dimensionalities of each observed group.

Returns:
group_meanslist of ndarray or None

List of views into mean, one per group. None if mean is None.

group_covslist of ndarray or None

List of views into cov, one per group. None if cov is None.

class ObsPrecPosterior(
a: float | None = None,
b: ndarray | None = None,
mean: ndarray | None = None,
)[source]#

Posterior distribution over observation precision parameters.

Parameters:
afloat or None, default None

Shape parameter (scalar, shared across dimensions).

bndarray of float, shape (y_dim,) or None, default None

Rate parameters.

meanndarray of float, shape (y_dim,) or None, default None

Posterior mean a/b.

Attributes:
afloat or None

Shape parameter (scalar, shared across dimensions).

bndarray of float, shape (y_dim,) or None

Rate parameters.

meanndarray of float, shape (y_dim,) or None

Posterior mean a/b.

get_groups(
y_dims: ndarray,
) tuple[list[ndarray], list[ndarray]][source]#

Get list of views into posterior parameters, one per group.

Parameters:
y_dimsndarray of int, shape (n_groups,)

Dimensionalities of each observed group.

Returns:
group_meanslist of ndarray or None

List of views into mean, one per group. None if mean is None.

group_bslist of ndarray or None

List of views into b, one per group. None if b is None.

compute_mean(in_place: bool = True) ndarray[source]#

Compute posterior mean a/b.

Parameters:
in_placebool, default True

If True, store in self.mean and return reference. If False, return new array.

Returns:
ndarray

Posterior mean, shape (y_dim,).

class ObsParamsPosterior(
x_dim: int | None = None,
y_dims: ndarray | None = None,
C: LoadingPosterior | None = None,
alpha: ARDPosterior | None = None,
d: ObsMeanPosterior | None = None,
phi: ObsPrecPosterior | None = None,
)[source]#

Posterior distributions over all observation model parameters.

Bundle of posteriors q(C), q(alpha), q(d), q(phi) with methods for sampling, computing point estimates, and analysis.

Parameters:
x_dimint or None, default None

Number of latent dimensions.

y_dimsndarray of int, shape (n_groups,) or None, default None

Dimensionalities of each observed group.

CLoadingPosterior or None, default None

Posterior over loading matrices.

alphaARDPosterior or None, default None

Posterior over ARD parameters.

dObsMeanPosterior or None, default None

Posterior over observation means.

phiObsPrecPosterior or None, default None

Posterior over observation precisions.

Attributes:
x_dimint or None

Number of latent dimensions.

y_dimsndarray of int, shape (n_groups,) or None

Dimensionalities of each observed group.

CLoadingPosterior

Posterior over loading matrices.

alphaARDPosterior

Posterior over ARD parameters.

dObsMeanPosterior

Posterior over observation means.

phiObsPrecPosterior

Posterior over observation precisions.

Examples

After fitting a GFA model, access the observation posterior:

>>> model = GFAModel()
>>> model.fit(Y)
>>> obs_post = model.obs_posterior

Get posterior mean as a realization:

>>> params = obs_post.posterior_mean
>>> params.C.shape
(20, 5)

Sample from the posterior:

>>> rng = np.random.default_rng(42)
>>> sample = obs_post.sample(rng)
property posterior_mean: ObsParamsRealization#

Return posterior means as a realization.

Returns:
ObsParamsRealization

Realization with posterior mean values.

sample(
rng: Generator,
) ObsParamsRealization[source]#

Draw a sample from the posterior distributions.

Samples from q(C), q(alpha), q(d), q(phi) independently.

Parameters:
rngnumpy.random.Generator

Random number generator.

Returns:
ObsParamsRealization

Sampled parameter values.

is_initialized() bool[source]#

Check if all posterior parameters have been initialized.

Returns:
bool

True if all required arrays are non-None.

get_subset_dims(
x_indices: ndarray,
in_place: bool = True,
) Self[source]#

Keep only specified latent dimensions.

Parameters:
x_indicesndarray of int

Indices of latent dimensions to keep.

in_placebool, default True

If True, modify self. If False, return new instance.

Returns:
Self

Modified or new instance.

copy() Self[source]#

Return a deep copy.

Returns:
Self

Deep copy of this instance.

compute_snr(
y_dims: ndarray | None = None,
) ndarray[source]#

Compute signal-to-noise ratio for each group.

Parameters:
y_dimsndarray or None, default None

Dimensionalities of observed groups. If None, uses self.y_dims.

Returns:
ndarray

SNR for each group, shape (n_groups,).

static get_dim_types(n_groups: int) ndarray[source]#

Generate all dimension types for n_groups.

Parameters:
n_groupsint

Number of observed groups.

Returns:
ndarray

Boolean array, shape (n_groups, 2^n_groups). Column j indicates which groups are involved in dimension type j.

compute_dimensionalities(
cutoff_shared_var: float = 0.02,
cutoff_snr: float = 0.001,
) tuple[ndarray, ndarray, ndarray, ndarray][source]#

Compute dimensionalities and variance explained by dimension type.

Parameters:
cutoff_shared_varfloat, default 0.02

Minimum fraction of shared variance for significance.

cutoff_snrfloat, default 0.001

Minimum SNR for any latents to be significant.

Returns:
num_dimndarray of int, shape (n_dim_types,)

Number of each dimension type.

sig_dimsndarray of bool, shape (n_groups, x_dim)

Significant dimensions.

var_expndarray of float, shape (n_groups, n_dim_types)

Variance explained by type.

dim_typesndarray of bool, shape (n_groups, n_dim_types)

Dimension type indicators.

static compute_dims_pairs(
num_dim: ndarray,
dim_types: ndarray,
var_exp: ndarray,
) tuple[ndarray, ndarray, ndarray][source]#

Analyze shared dimensionalities between pairs of groups.

Parameters:
num_dimndarray

Number of each dimension type, shape (n_dim_types,).

dim_typesndarray

Dimension type indicators, shape (n_groups, n_dim_types).

var_expndarray

Variance explained by type, shape (n_groups, n_dim_types).

Returns:
pair_dimsndarray of int, shape (n_pairs, 3)

Dimensionalities per pair.

pair_var_expndarray of float, shape (n_pairs, 2)

Variance explained per pair.

pairsndarray of int, shape (n_pairs, 2)

Pair indices.