def __init__(self, data: Data, **kwargs): if not np.all(data.obs >= 0): raise ValueError( "Binomial model requires observations to be non-negative.") if len(data.col_obs) != 2: raise ValueError("Binomial model need 2 columns of observations, " "one for number of events, one for sample size.") if any(np.diff(data.get_cols(data.col_obs), axis=1) < 0): raise ValueError( "Binomial model requires number of events less or equal than sample size." ) self.obs_1s = data.get_cols(data.col_obs[0]) self.obs_0s = np.diff(data.get_cols(data.col_obs), axis=1).ravel() self.obs_sample_sizes = data.get_cols(data.col_obs[1]) super().__init__(data, **kwargs)
def get_mat(self, data: Data) -> np.ndarray: """Get design matrix. Parameters ---------- data : Data Data object that provides the covariates. Returns ------- np.ndarray Design matrix. """ self.check_data(data) cov = data.get_cols(self.name) return self.spline.design_mat(cov, l_extra=True, r_extra=True)
def check_data(self, data: Data): """Check if the data contains the column name `name`. And create the spline object, if only `spline_specs` is provided. Parameters ---------- data : Data Data object to be checked. """ super().check_data(data) if self.spline is None: cov = data.get_cols(self.name) self.spline = self.spline_specs.create_spline(cov) for prior in self.linear_upriors + self.linear_gpriors: if isinstance(prior, SplinePrior): prior.attach_spline(self.spline)
def test_post_init_fill_df(df_simple): data = Data(COL_OBS, df=df_simple) assert data.num_obs == NUM_OBS assert all(data.weights == 1.0) assert all(data.offset == 0.0) assert all(data.get_cols('intercept') == 1.0)