def __setstate__(self, payload): self.level_sigma_prior = R.SdPrior(1, 1) self.slope_sigma_prior = R.SdPrior(1, 1) self.slope_ar1_prior = R.Ar1CoefficientPrior() self.slope_mean_prior = R.NormalPrior(0, 1) self.level_sigma_prior.__setstate__(payload["level_sigma_prior"]) self.slope_sigma_prior.__setstate__(payload["slope_sigma_prior"]) self.slope_ar1_prior.__setstate__(payload["slope_ar1_prior"]) self.slope_mean_prior.__setstate__(payload["slope_mean_prior"]) self._create_model() initial_state_mean = payload["initial_state_mean"] initial_state_variance = payload["initial_state_variance"] self._set_initial_state_distribution( initial_level_prior=R.NormalPrior( initial_state_mean[0], np.sqrt(initial_state_variance[0, 0])), initial_slope_prior=R.NormalPrior( initial_state_mean[0], np.sqrt(initial_state_variance[0, 0])) ) self.level_sigma = payload.get("level_sigma", None) self.slope_sigma = payload.get("slope_sigma", None) self.slope_ar1 = payload.get("slope_ar1", None) self.slope_mean = payload.get("slope_mean", None) self._state_contribution = payload.get("state_contribution", None)
def _validate_initial_level_prior(initial_level_prior, initial_y, sdy): if initial_level_prior is None: initial_level_prior = R.NormalPrior(initial_y, sdy) if not isinstance(initial_level_prior, R.NormalPrior): raise Exception("Wrong type for initial_level_prior. " "Expected an R.NormalPrior.") return initial_level_prior
def _validate_slope_mean_prior(slope_mean_prior, sdy): if slope_mean_prior is None: slope_mean_prior = R.NormalPrior(0, sdy) if not isinstance(slope_mean_prior, R.NormalPrior): raise Exception("Wrong type passed for slope_mean_prior. " "Expected an R.NormalPrior") return slope_mean_prior
def _validate_initial_distributions(self, initial_state_prior, y, sdy): if initial_state_prior is None: if sdy is None: sdy = np.nanstd(y, ddof=1) initial_state_prior = R.NormalPrior(0.0, float(sdy)) if not isinstance(initial_state_prior, R.NormalPrior): raise Exception("initial_state_prior should be an R.NormalPrior.") self._initial_state_prior = initial_state_prior
def _validate_initial_distributions( self, initial_level_prior, initial_slope_prior, y, sdy, initial_y): if initial_level_prior is None: sdy = self._compute_sdy(sdy, y, "initial_level_prior") if initial_y is None: if y is None: raise Exception( "One of initial_y, y, or initial_level_prior must be " "specified.") else: initial_y = y[0] initial_level_prior = R.NormalPrior(initial_y, sdy) if not isinstance(initial_level_prior, R.NormalPrior): raise Exception("Unexpected type for initial_level_prior.") self._initial_level_prior = initial_level_prior if initial_slope_prior is None: sdy = self._compute_sdy(sdy, y, "initial_slope_prior") initial_slope_prior = R.NormalPrior(0, sdy) if not isinstance(initial_slope_prior, R.NormalPrior): raise Exception("Unexpected type for initial_slope_prior.") self._initial_slope_prior = initial_slope_prior
def _validate_prior(self, prior, sdy): if prior is None: prior = R.NormalPrior(0, sdy) if not isinstance(prior, R.NormalPrior): raise Exception("Expected a prior of type R.NormalPrior.") return prior