Beispiel #1
0
def create_default_params(parnames):
    pars = parameters.parameter_container()

    for pname in parnames:
        if pname in [
                'diffstd', 'critstd', 'dnoisestd', 'cnoisestd', 'dnoisestd',
                'dirstd', 'ndtspread', 'noisestd', 'intstd'
        ]:
            pars.add_param(pname, 0, 1, parameters.exponential())
        elif pname == 'bound':
            pars.add_param(pname, 0, 1,
                           parameters.gaussprob(width=0.5, shift=0.5))
        elif pname in ['bias', 'lapseprob', 'lapsetoprob']:
            pars.add_param(pname, 0, 1, parameters.gaussprob())
        elif pname in ['cpsqrtkappa']:
            pars.add_param(pname, 0, 1, parameters.zero())
        else:
            pars.add_param(pname, 0, 1)

    return pars
Beispiel #2
0
# normalising constant of the uniform distribution over the data space in
# which samples are accepted as defined by distfun and epsilon; for 
# response_dist this is 2*epsilon for the Euclidean distance between true 
# and sampled RT
veps = 2 * epsilon


#%% inference
for mname in models:
    # generate time-stamped file name
    fname = datetime.datetime.now().strftime('infres_'+mname+'_%Y%m%d%H%M')
    
    # prepare common model parameters
    pars = pyEPABC.parameters.parameter_container()
    pars.add_param('ndtmean', -1, 1)
    pars.add_param('ndtspread', -1.5, 1, exponential())
    pars.add_param('noisestd', 4, 1.5, exponential())
    pars.add_param('bound', 0, 1, gaussprob(0.5, 0.5))
    pars.add_param('prior', 0, 0.5, gaussprob())
    pars.add_param('lapseprob', -1, 1, gaussprob())
    pars.add_param('lapsetoprob', 0, 1, gaussprob())
    
    # model-specific preparations
    if mname == 'basic':
        pass
    elif mname == 'collapse':
        pars.add_param('bshape', np.log(1.4), 1.5, exponential())
        pars.add_param('bstretch', 0, 1, gaussprob())
    else:
        raise ValueError('unknown model requested')
    
Beispiel #3
0
                                    dt,
                                    data.tarDir.unique() / 180 * np.pi,
                                    data.critDir / 180 * np.pi,
                                    maxrt=data.dropna().RT.max() + dt,
                                    toresponse=helpers.toresponse,
                                    choices=choices)

errorm = model.correct != data.response
ind = data.response != 0
assert np.all(
    data[ind].error == errorm[ind]), ("Model and data don't agree "
                                      "about which trials are error trials!")

#%% infer
pars = pyEPABC.parameters.parameter_container()
pars.add_param('noisestd', 0, 1.2, exponential())
#pars.add_param('intstd', 0, 1.2, exponential())
model.intstd = 0.2
pars.add_param('bound', 0, 1, gaussprob(width=0.5, shift=0.5))
pars.add_param('bias', 0, .2, gaussprob())
pars.add_param('ndtmean', -2, 1)
pars.add_param('ndtspread', np.log(0.2), 1, exponential())
pars.add_param('lapseprob', -1.65, 1, gaussprob())  # median approx at 0.05
pars.add_param('lapsetoprob', 0, 1, gaussprob())

pars.plot_param_dist()

simfun = lambda data, dind, parsamples: model.gen_distances_with_params(
    data[0], data[1], dind, pars.transform(parsamples), pars.names)

epsilon = 0.05
Beispiel #4
0
import matplotlib.pyplot as plt

#%% define parameters and their prior
ndtdist = 'uniform'
modelname = 'base'
use_liks = True

pars = parameters.parameter_container()

if modelname == 'base':
    fix = {'bound': 0.7}
    if use_liks:
        fix['noisestd'] = 0

    if 'noisestd' not in fix.keys():
        pars.add_param('noisestd', 0, 1.2, exponential())
    if 'intstd' not in fix.keys():
        pars.add_param('intstd', 0, 1.2, exponential())

elif modelname == 'diff':
    fix = {'bound': 0.7, 'diffstd': 1000, 'cnoisestd': 1e-12, 'cpsqrtkappa': 0}

    if 'diffstd' not in fix.keys():
        pars.add_param('diffstd', 0, 10, exponential())
    if 'cpsqrtkappa' not in fix.keys():
        pars.add_param('cpsqrtkappa', 1, 1, zero())
    if 'critstd' not in fix.keys():
        pars.add_param('critstd', 0, 1, exponential())
    if 'cnoisestd' not in fix.keys():
        pars.add_param('cnoisestd', 0, 1, exponential())
    if 'dnoisestd' not in fix.keys():