from RunDEMC import DE from RunDEMC.hierarchy import Hierarchy, HyperParam import numpy as np from joblib import Parallel, delayed # generate the data n_jobs = 1 nsubj = 4 nobs = 1000 mu = 1.0 sigma = .5 dmod_mean = dists.normal(mu, sigma) alpha = 4 beta = 10 dmod_std = dists.invgamma(alpha, beta) data = {} for s in range(nsubj): # draw a mean and std from hypers smean = dmod_mean.rvs() sstd = np.sqrt(dmod_std.rvs()) dmod = dists.normal(smean, sstd) data[s] = {'mean': smean, 'std': sstd, 'obs': dmod.rvs(nobs)} # set up model evaluation def eval_prop(indiv, subj_id): # get the true pdf for those params
the supplied distribution. log_prior: convenience method for looping over params for a proposal and calling each param's pdf to get the log_like for that param. """ from RunDEMC import Model, HyperPrior, Hierarchy, Param, dists # set up the hyper priors h_alpha = HyperPrior(name='h_alpha', dist=dists.normal, params=[ Param(name='mu', prior=dists.normal(1, .5)), Param(name='sigma', prior=dists.invgamma(4, 10)) ]) h_beta = HyperPrior(name='h_beta', dist=dists.normal, params=[ Param(name='mu', prior=dists.normal(1, .5)), Param(name='sigma', prior=dists.invgamma(4, 10)) ]) # set up lower level (i.e., subject) def subj_like(pop, *args): return np.log(dists.beta(pop[:, 0], pop[:, 1]).pdf(args[0]))
the supplied distribution. log_prior: convenience method for looping over params for a proposal and calling each param's pdf to get the log_like for that param. """ from RunDEMC import Model, HyperPrior, Hierarchy, Param, dists # set up the hyper priors h_alpha = HyperPrior(name='h_alpha', dist=dists.normal, params=[Param(name='mu', prior=dists.normal(1,.5)), Param(name='sigma', prior=dists.invgamma(4,10))]) h_beta = HyperPrior(name='h_beta', dist=dists.normal, params=[Param(name='mu', prior=dists.normal(1,.5)), Param(name='sigma', prior=dists.invgamma(4,10))]) # set up lower level (i.e., subject) def subj_like(pop, *args): return np.log(dists.beta(pop[:,0],pop[:,1]).pdf(args[0])) submods = [Model(name='subj_%s'%s, params=[Param(name='alpha', prior=h_alpha), Param(name='beta', prior=h_beta)], like_fun=subj_like, like_args=(sdat[s],),
from RunDEMC import DE from RunDEMC.hierarchy import Hierarchy,HyperParam import numpy as np from joblib import Parallel, delayed # generate the data n_jobs = 1 nsubj = 4 nobs = 1000 mu=1.0 sigma=.5 dmod_mean = dists.normal(mu,sigma) alpha=4 beta=10 dmod_std = dists.invgamma(alpha,beta) data = {} for s in range(nsubj): # draw a mean and std from hypers smean = dmod_mean.rvs() sstd = np.sqrt(dmod_std.rvs()) dmod = dists.normal(smean,sstd) data[s] = {'mean': smean, 'std': sstd, 'obs': dmod.rvs(nobs)} # set up model evaluation def eval_prop(indiv, subj_id): # get the true pdf for those params mod = dists.normal(indiv[0],np.exp(indiv[1])) pdf = mod.pdf(data[subj_id]['obs'])
prior=dists.CustomDist( pdf=lambda x: np.exp(-1.5 * np.log(1 + x**2)), rvs=dists.laplace(0, 5).rvs)) # Fixed noise across subjects # Using a custom Jeffreys' prior sigma = Param(name='sigma', display_name=r'$\sigma$', prior=dists.CustomDist(pdf=lambda x: np.exp(-np.log(x)), rvs=dists.dists.invgamma(1, 1).rvs)) # Hyperprior over intercept using a normal distribution halpha = HyperPrior('alpha', dists.normal, params=[ Param(name='mu', prior=dists.uniform(-50, 50)), Param(name='sig', prior=dists.invgamma(1, 1)) ]) # set up the submodels for each participant smods = [] for j in range(nsubj): # Append a new model, note the use of the hyperprior for setting # up the intercept param, and the fixed beta and sigma across # participants smods.append( Model(name=str(j), params=[ Param(name='alpha', display_name=r'$\alpha$', prior=halpha), beta, sigma ], like_fun=subj_like,