Source code for glimix_core.mean._linear

from numpy import asarray, ascontiguousarray, zeros
from optimix import Function, Vector


[docs]class LinearMean(Function): """ Linear mean function, X𝜶. It defines X𝜶, for which X is a n×m matrix provided by the user and 𝜶 is a vector of size m. Example ------- .. doctest:: >>> from glimix_core.mean import LinearMean >>> >>> mean = LinearMean([[1.5, 0.2], [0.5, 0.4]]) >>> mean.effsizes = [1.0, -1.0] >>> print(mean.value()) [1.3 0.1] >>> print(mean.gradient()["effsizes"]) [[1.5 0.2] [0.5 0.4]] >>> mean.name = "𝐦" >>> print(mean) LinearMean(m=2): 𝐦 effsizes: [ 1. -1.] """
[docs] def __init__(self, X): """ Constructor. Parameters ---------- X : array_like Covariates X, from X𝜶. """ X = asarray(X, float) m = X.shape[1] self._effsizes = Vector(zeros(m)) self._effsizes.bounds = [(-200.0, +200)] * m self._X = X Function.__init__(self, "LinearMean", effsizes=self._effsizes)
@property def X(self): """ An n×m matrix of covariates. """ return self._X def value(self): """ Linear mean function. Returns ------- 𝐦 : (n,) ndarray X𝜶. """ return self._X @ self._effsizes def gradient(self): """ Gradient of the linear mean function over the effect sizes. Returns ------- effsizes : (n, m) ndarray X. """ return dict(effsizes=self._X) @property def effsizes(self): """ Effect-sizes parameter, 𝜶, of size m. """ return self._effsizes.value @effsizes.setter def effsizes(self, v): self._effsizes.value = ascontiguousarray(v) def __str__(self): tname = type(self).__name__ msg = "{}(m={})".format(tname, len(self.effsizes)) if self.name is not None: msg += ": {}".format(self.name) msg += "\n" msg += " effsizes: {}".format(self.effsizes) return msg