Exemple #1
0
 def test_get_set_parameters_functions(self):
     """Test get_parameters, set_parameters, and get_parameter_names"""
     p1 = ddm.Fittable(minval=0, maxval=1)
     p2 = ddm.Fittable(minval=.3, maxval=.9, default=.4)
     m = ddm.Model(drift=ddm.DriftConstant(drift=p1), noise=ddm.NoiseLinear(noise=p2, x=.2, t=p1))
     print(m.get_model_parameters())
     assert all(id(a) == id(b) for a,b in zip(m.get_model_parameters(), [p1, p2]))
     assert all(a == b for a,b in zip(m.get_model_parameter_names(), ["drift/t", "noise"]))
     m.set_model_parameters(m.get_model_parameters())
     assert all(id(a) == id(b) for a,b in zip(m.get_model_parameters(), [p1, p2]))
     m.set_model_parameters([.5, .5])
     assert all(a == b for a,b in zip(m.get_model_parameters(), [.5, .5]))
 def __init__(self, ndt='gaussian'):
     overlay = (ddm.OverlayNonDecisionUniform(nondectime=ddm.Fittable(minval=0, maxval=0.5),
                                             halfwidth=ddm.Fittable(minval=0.001, maxval=0.3)) 
                 if ndt=='uniform' else 
                self.OverlayNonDecisionGaussian(nondectime=ddm.Fittable(minval=0, maxval=0.6),
                                                ndsigma=ddm.Fittable(minval=0.001, maxval=0.3)))
                                             
     self.model = ddm.Model(name='5 TTA- and d-dependent drift and bounds and uniformly distributed nondecision time',
                              drift=self.DriftTtaDistance(alpha=ddm.Fittable(minval=0.1, maxval=3),
                                                          beta=ddm.Fittable(minval=0, maxval=1),
                                                          theta=ddm.Fittable(minval=4, maxval=40)),
                              noise=ddm.NoiseConstant(noise=1),
                              bound=self.BoundCollapsingTta(b_0=ddm.Fittable(minval=0.5, maxval=5), 
                                                            k=ddm.Fittable(minval=0.1, maxval=2),
                                                            tta_crit=ddm.Fittable(minval=3, maxval=6)),
                              overlay=overlay,
                              T_dur=self.T_dur)
    def test_double_fit(self):
        """Fit different parameters in the same (or a different) model using a single Fittable object"""
        class NoiseDouble(ddm.Noise):
            name = "time-varying noise"
            required_parameters = ["noise1", "noise2"]

            def get_noise(self, **kwargs):
                if np.random.rand() > .5:
                    return self.noise1
                else:
                    return self.noise2

        class NoiseConstantButNot(ddm.Noise
                                  ):  # To avoid the numerical simulations
            name = "almost noise constant"
            required_parameters = ["noise"]

            def get_noise(self, **kwargs):
                return self.noise

        # Generate data
        m = ddm.Model(name="DDM",
                      drift=ddm.DriftConstant(drift=1),
                      noise=ddm.NoiseConstant(noise=1.7))
        s = m.solve_numerical(
        )  # Solving analytical and then fitting numerical may give a bias
        sample = s.resample(10000)
        mone = ddm.fit_model(
            sample,
            drift=ddm.DriftConstant(drift=1),
            noise=NoiseConstantButNot(noise=ddm.Fittable(minval=.5, maxval=3)))
        sigs = ddm.Fittable(minval=.5, maxval=3)
        msam = ddm.fit_model(sample,
                             drift=ddm.DriftConstant(drift=1),
                             noise=NoiseDouble(noise1=sigs, noise2=sigs))
        assert msam._noisedep.noise1 == msam._noisedep.noise2, "Fitting to be the same failed"
        assert abs(msam._noisedep.noise1 -
                   mone._noisedep.noise) < 0.1 * mone._noisedep.noise
 def test_fit_with_condition(self):
     """A simple one-parameter fit with conditions"""
     m = self.cond_m
     s = self.cond_s
     mfit = ddm.Model(drift=self.DriftCond(
         param=ddm.Fittable(minval=.1, maxval=3)))
     ddm.fit_adjust_model(model=mfit, sample=s)
     # Within 10%
     if SHOW_PLOTS:
         mfit.name = "Fitted solution"
         sfit = mfit.solve()
         plot_compare_solutions(s, sfit)
         plt.show()
     _verify_param_match("drift", "param", m, mfit)
 def test_fit_drift(self):
     """A simple one-parameter fit"""
     m = ddm.Model(name="DDM", drift=ddm.DriftConstant(drift=2))
     s = m.solve()
     sample = s.resample(10000)
     mfit = ddm.Model(
         name="DDM",
         drift=ddm.DriftConstant(drift=ddm.Fittable(minval=0, maxval=10)))
     ddm.fit_adjust_model(model=mfit, sample=sample)
     # Within 10%
     if SHOW_PLOTS:
         mfit.name = "Fitted solution"
         sfit = mfit.solve()
         plot_compare_solutions(s, sfit)
         plt.show()
     _verify_param_match("drift", "drift", m, mfit)
Exemple #6
0
FakePointModel.solve_numerical = FakePointModel.solve
FakePointModel.solve_numerical_cn = FakePointModel.solve
FakePointModel.solve_numerical_implicit = FakePointModel.solve
FakePointModel.solve_numerical_explicit = FakePointModel.solve

m = FakePointModel()
s = m.solve()

so = OverlayNonDecisionUniform(nondectime=-.05, st=.1).apply(s)
so2 = OverlayNonDecisionUniform2(nondectime=-.05, st=.1).apply(s)
assert np.all(so.corr == so2.corr)

so = OverlayNonDecisionGamma(shape=4, scale=.01, nondectime=.1).apply(s)
print(list(so.corr))
print(np.sum(so.corr))

#m = FakePointModel(overlay=OverlayNonDecisionGamma(shape=ddm.Fittable(minval=1, maxval=3), scale=ddm.Fittable(minval=0, maxval=.2), nondectime=ddm.Fittable(minval=0, maxval=1)))
m = FakePointModel(overlay=OverlayNonDecisionGaussian(
    ndsigma=ddm.Fittable(minval=0, maxval=1),
    nondectime=ddm.Fittable(minval=0, maxval=1)))
#m = FakePointModel(overlay=OverlayNonDecisionUniform(st=ddm.Fittable(minval=0, maxval=1), nondectime=ddm.Fittable(minval=0, maxval=1)))
import ddm.plot

ddm.plot.model_gui(
    m, ddm.Sample(np.asarray([1, 1.1, 1.2, 1.3, 1.4, 1.5]), np.asarray([1])))

from ddm import ICGaussian

r = ICPointRew(x0=.99)
#print(r.get_IC(np.linspace(-1, 1, 201), dx=.01, conditions={"highreward": 1}))
Exemple #7
0
        traj = model.simulate_trial(conditions=conditions,
                                    rk4=rk4,
                                    seed=seed,
                                    cutoff=True)
        set_dip_type(model, diptype)
        return traj


# END overlay

#################### Example usage ####################

if __name__ == "__main__":
    # BEGIN demo
    DIPTYPE = 1  # Change to 1, 2, or 3 depending on which model you want
    snr = ddm.Fittable(minval=0.5, maxval=20, default=9.243318909157688)
    leak = ddm.Fittable(minval=-10, maxval=30, default=9.46411355874963)
    x0 = ddm.Fittable(minval=-.5, maxval=.5, default=0.1294632585920082)
    leaktargramp = ddm.Fittable(minval=0, maxval=3, default=0)
    noise = ddm.Fittable(minval=.2, maxval=2, default=1.1520906498077081)
    t1 = ddm.Fittable(minval=0, maxval=1, default=0.34905555600815663)
    t1slope = ddm.Fittable(minval=0, maxval=3, default=1.9643425020687162)

    dipstart = ddm.Fittable(minval=-.4, maxval=0, default=-.2)
    dipstop = ddm.Fittable(minval=0, maxval=.5, default=.05)
    nondectime = ddm.Fittable(minval=0, maxval=.3, default=.1)
    detect = ddm.Fittable(minval=2, maxval=50, default=10)
    diptype = DIPTYPE
    dipparam = ddm.Fittable(minval=0, maxval=50) if diptype == 2 else 0
    pmixturecoef = ddm.Fittable(minval=0, maxval=.2, default=.03)
    rate = ddm.Fittable(minval=.1, maxval=10, default=1)