nemos.identifiability_constraints.apply_identifiability_constraints_by_basis_component#

nemos.identifiability_constraints.apply_identifiability_constraints_by_basis_component(basis, feature_matrix, add_intercept=True)[source]#

Apply identifiability constraint to a design matrix for each component of an additive basis.

Parameters:
  • basis (Basis) – The basis that computed feature_matrix.

  • feature_matrix (NDArray) – The feature matrix before applying the identifiability constraints.

  • add_intercept (bool) – Set to True if your model will add an intercept term, False otherwise.

Return type:

Tuple[NDArray, NDArray]

Returns:

  • constrained_x – The adjusted feature matrix after applying the identifiability constraints as numpy array.

  • kept_columns – Indices of the columns that are kept. This should be used for applying the same transformation to a feature matrix generated from different a set of inputs (as for a test set).

Examples

>>> import numpy as np
>>> import jax
>>> from nemos.identifiability_constraints import apply_identifiability_constraints_by_basis_component
>>> from nemos.basis import BSplineEval
>>> from nemos.glm import GLM
>>> jax.config.update('jax_enable_x64', True)
>>> # define a feature matrix
>>> bas = BSplineEval(5) + BSplineEval(6)
>>> feature_matrix = bas.compute_features(np.random.randn(100), np.random.randn(100))
>>> # apply constraints
>>> constrained_x, kept_columns = apply_identifiability_constraints_by_basis_component(bas, feature_matrix)
>>> constrained_x.shape
(100, 9)
>>> # generate a test set, shape (20, 11)
>>> test_x = bas.compute_features(np.random.randn(20), np.random.randn(20))
>>> test_x.shape
(20, 11)
>>> # apply constraint to test set
>>> test_x = test_x[:, kept_columns]
>>> test_x.shape
(20, 9)
>>> # fit on train and predict on test set
>>> rate = GLM().fit(constrained_x, np.random.poisson(size=100)).predict(test_x)