def sample_param_sets(self, pkeys=None, nsamples=None, nkeep=None): """ sample *nsamples* (default=5000, see set_fitparams) different parameter sets (param_sets) and get model yhat for each set (param_yhats) """ if pkeys is None: pkeys = np.sort(list(self.inits)) if nsamples is None: nsamples = self.basinparams['nsamples'] if nkeep is None: nkeep = self.basinparams['ninits'] unfiltered = theta.random_inits(pkeys, ninits=nsamples, kind=self.kind, as_list=True) self.filter_params(unfiltered, nsamples=nsamples, nkeep=nkeep) self.finished_sampling = True
def sample_theta(self): """ sample *nsamples* (default=5000, see set_fitparams) different parameter sets (param_sets) and get model yhat for each set (param_yhats) """ pkeys = self.sim.theta.keys().tolist() nsamples = self.basinparams['nsamples'] if not hasattr(self, 'init_params'): init_params = theta.random_inits(pkeys, ninits=nsamples, kind=self.kind, as_list=True, method=self.basinparams['sample_method']) init_yhats = pd.DataFrame(np.vstack([self.sim.simulate_model(p) for p in init_params])) self.init_params = init_params self.init_yhats = init_yhats.copy() init_params = self.init_params init_yhats = self.init_yhats.copy() psets = self.filter_params(init_params, init_yhats) self.param_sets = psets
def plot_param_distributions(p, nsamples=1000): from radd import theta pkeys = np.sort(list(p)) nparams = pkeys.size p_dists = theta.random_inits(pkeys=pkeys, ninits=nsamples) clrs = colors.param_color_map() lbls = {pk: parameter_name(pk,True) for pk in pkeys} ncols = np.ceil(nparams/2.).astype(int) fig, axes = plt.subplots(2, ncols, figsize=(10,5)) axes = axes.flatten() for i, pk in enumerate(pkeys): sns.distplot(p_dists[pk], label=lbls[pk], color=clrs[pk], ax=axes[i]) for ax in axes: ax.legend(loc=0, fontsize=16) plt.tight_layout() sns.despine()
def sample_rl_theta(self, fitDynamics=True): simfx = self.simRL.sim_rt_sacc_blocks nsamples = self.basinparams['nsamples'] nkeep = self.basinparams['ninits'] if hasattr(self, 'popt'): idxParams = pd.DataFrame([pd.Series(self.inits)]*nsamples) idxParams = pd.DataFrame([pd.Series(self.popt)]*nsamples) if not hasattr(self, 'rlParams'): rlParams = theta.random_inits(['AX', 'BX', 'PX'], ninits=nsamples, kind=self.kind, as_list=True, method=self.basinparams['sample_method']) rlParamsDF = pd.concat([idxParams,pd.DataFrame(rlParams.tolist())], axis=1) self.rlParams = np.array(rlParamsDF.to_dict('records')) self.rlYhat = pd.DataFrame(np.vstack([simfx(p) for p in self.rlParams])) rlPsets = self.filter_rlParams(self.rlParams, self.rlYhat) self.param_sets = rlPsets