Beispiel #1
0
 def setUp(self):
     self.samps = {
         # Empty sample
         "empty": ddm.Sample(aa([]), aa([]), 0),
         # Simple sample
         "simple": ddm.Sample(aa([1, 2]), aa([.5, .7]), 0),
         # Sample with conditions
         "conds": ddm.Sample(aa([1, 2, 3]), aa([]), 0,
                             cond1=(aa([1, 1, 2]), aa([]))),
         # Sample with conditions and explicitly showing undecided
         "condsexp": ddm.Sample(aa([1, 2, 3]), aa([]), 0,
                                cond1=(aa([1, 1, 2]), aa([]), aa([]))),
         # Sample with undecided
         "undec": ddm.Sample(aa([1, 2]), aa([.5, .7]), 2),
         # Sample with undecided and conditions
         "undeccond": ddm.Sample(aa([1, 2, 3]), aa([]), 3,
                                 cond1=(aa([1, 1, 2]), aa([]), aa([2, 2, 1]))),
         # For the adding test
         "adda": ddm.Sample(aa([1]), aa([2, 4]), 3,
                            cond1=(aa(["a"]), aa(["a", "b"]), aa(["a", "b", "b"]))),
         "addb": ddm.Sample(aa([1.5, 2, 1]), aa([]), 1,
                            cond1=(aa(["b", "b", "c"]), aa([]), aa(["d"]))),
         # Two conditions
         "two": ddm.Sample(aa([1]), aa([2]), 1,
                            conda=(aa(["a"]), aa(["b"]), aa(["a"])),
                            condb=(aa([1]), aa([2]), aa([2]))),
     }
Beispiel #2
0
 def test_LossLikelihood(self):
     """Likelihood loss function"""
     # We can calculate likelihood for this simple case
     m = self.FakePointModel(dt=.02)
     sol = m.solve()
     s = ddm.Sample(aa([.02]), aa([]))
     expected = -np.log(np.sum(sol.corr)/m.dt)
     assert np.isclose(expected, ddm.models.LossLikelihood(sample=s, dt=m.dt, T_dur=m.T_dur).loss(m))
     # And for the uniform case we can assert equivalence
     m = self.FakeUniformModel()
     s1 = ddm.Sample(aa([.02, .05, .07, .12]), aa([.33, .21]))
     s2 = ddm.Sample(aa([.13, .1, .02]), aa([.66, .15, .89]))
     assert np.isclose(ddm.models.LossLikelihood(sample=s1, dt=m.dt, T_dur=m.T_dur).loss(m),
                       ddm.models.LossLikelihood(sample=s2, dt=m.dt, T_dur=m.T_dur).loss(m))
Beispiel #3
0
 def test_BIC(self):
     """BIC loss function"""
     # -2*Likelihood == BIC for a sample size of 1
     m = self.FakePointModel(dt=.02)
     sol = m.solve()
     s = ddm.Sample(aa([.02]), aa([]))
     expected = -np.log(np.sum(sol.corr)/m.dt)
     assert np.isclose(ddm.models.LossBIC(sample=s, dt=m.dt, T_dur=m.T_dur, nparams=1, samplesize=1).loss(m),
                       2*ddm.models.LossLikelihood(sample=s, dt=m.dt, T_dur=m.T_dur).loss(m))
Beispiel #4
0
 def test_LossSquaredError(self):
     """Squared error loss function"""
     # Should be zero for empty sample when all undecided
     m = self.FakeUndecidedModel()
     s = ddm.Sample(aa([]), aa([]), undecided=1)
     assert ddm.models.LossSquaredError(sample=s, dt=m.dt, T_dur=m.T_dur).loss(m) == 0
     # Can also be determined precisely for the point model
     m = self.FakePointModel()
     sol = m.solve()
     err = ddm.models.LossSquaredError(sample=s, dt=m.dt, T_dur=m.T_dur).loss(m)
     assert np.isclose(err, np.sum(sol.corr)**2 + np.sum(sol.err)**2)
Beispiel #5
0
def prepare_sample_for_variable_drift(sample, resolution=RESOLUTION):
    new_samples = []
    for i in range(0, resolution):
        corr = sample.corr.copy()
        err = sample.err.copy()
        undecided = sample.undecided
        conditions = copy.deepcopy(sample.conditions)
        conditions['driftnum'] = (np.asarray([i]*len(corr)),
                                  np.asarray([i]*len(err)),
                                  np.asarray([i]*undecided))
        new_samples.append(ddm.Sample(corr, err, undecided, **conditions))
    new_sample = new_samples.pop()
    for s in new_samples:
        new_sample += s
    return new_sample
Beispiel #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}))
Beispiel #7
0
 def setUp(self):
     # You need some gymnastics to get numpy to accept an array of
     # same-length tuples
     _tuple_same_length = np.empty(3, dtype=object)
     _tuple_same_length[:] = [(3, 1, 2), (3, 3, 3), (5, 4, 3)]
     self.samps = {
         # Empty sample
         "empty":
         ddm.Sample(aa([]), aa([]), 0),
         # Simple sample
         "simple":
         ddm.Sample(aa([1, 2]), aa([.5, .7]), 0),
         # Sample with conditions
         "conds":
         ddm.Sample(aa([1, 2, 3]), aa([]), 0, cond1=(aa([1, 1,
                                                         2]), aa([]))),
         # Sample with conditions as strings
         "condsstr":
         ddm.Sample(aa([1, 2, 3]),
                    aa([]),
                    0,
                    cond1=(aa(["x", "yy", "z z z"]), aa([]))),
         # Sample with conditions as tuples
         "condstuple":
         ddm.Sample(aa([1, 2, 3]),
                    aa([]),
                    0,
                    cond1=(aa([(3, 1, 2), (5, 5), (1, 1, 1, 1, 1)],
                              dtype=object), aa([]))),
         # Sample with conditions as tuples which are the same length
         "condstuplesame":
         ddm.Sample(aa([1, 2, 3]),
                    aa([]),
                    0,
                    cond1=(_tuple_same_length, aa([]))),
         # Sample with conditions and explicitly showing undecided
         "condsexp":
         ddm.Sample(aa([1, 2, 3]),
                    aa([]),
                    0,
                    cond1=(aa([1, 1, 2]), aa([]), aa([]))),
         # Sample with undecided
         "undec":
         ddm.Sample(aa([1, 2]), aa([.5, .7]), 2),
         # Sample with undecided and conditions
         "undeccond":
         ddm.Sample(aa([1, 2, 3]),
                    aa([]),
                    3,
                    cond1=(aa([1, 1, 2]), aa([]), aa([2, 2, 1]))),
         # For the adding test
         "adda":
         ddm.Sample(aa([1]),
                    aa([2, 4]),
                    3,
                    cond1=(aa(["a"]), aa(["a", "b"]), aa(["a", "b", "b"]))),
         "addb":
         ddm.Sample(aa([1.5, 2, 1]),
                    aa([]),
                    1,
                    cond1=(aa(["b", "b", "c"]), aa([]), aa(["d"]))),
         # Two conditions
         "two":
         ddm.Sample(aa([1]),
                    aa([2]),
                    1,
                    conda=(aa(["a"]), aa(["b"]), aa(["a"])),
                    condb=(aa([1]), aa([2]), aa([2]))),
     }