示例#1
0
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
示例#2
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]))
示例#3
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],),
示例#4
0
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'])
示例#5
0
             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,