-
Notifications
You must be signed in to change notification settings - Fork 4
/
LBA_trial.m
67 lines (58 loc) · 1.47 KB
/
LBA_trial.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function [choice RT conf] = LBA_trial(A, b, v, t0, sv, N)
% Run a single trial of the LBA model (Brown & Heathcote, 2008, Cog
% Psychol)
%
% Usage: [choice RT conf] = LBA_trial(A, b, v, t0, sv, N)
%
% Inputs:
%
% A = range of uniform distribution U[0,A] from which starting point k is
% drawn
% b = bound
% v = vector of drift rates
% sv = standard deviation of drift rate
% t0 = non-decision time
% N = number of response options
%
% Outputs:
%
% choice = scalar from 1:N indicating response chosen by model
% RT = reaction time in ms
% confidence = confidence computed using balance of evidence rule (Vickers,
% 1979)
%
% SF 2012
trialOK = false;
while ~trialOK
for i = 1:N
% Get starting point
k(i) = rand.*A;
% Get drift rate
d(i) = normrnd(v(i), sv);
% Get time to threshold
t(i) = (b-k(i))./d(i);
% Add on non-decision time
allRT(i) = t0 + t(i);
end
% Get choice and confidence
[RT choice] = min(allRT);
% Confidence is equal to threshold minus value of next best accumulator at decision
% time
j=1;
if N == 1
conf = NaN;
else
for i = 1:N
if i ~= choice
z(j) = t(choice).*d(i) + k(i);
j=j+1;
end
end
[nb i] = max(z);
conf = b-nb;
end
% Check we have not sampled negative drift(s)
if RT > 0 & nb > 0
trialOK = true;
end
end