-
Notifications
You must be signed in to change notification settings - Fork 1
/
pret_batch_process.m
121 lines (115 loc) · 4.54 KB
/
pret_batch_process.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
function sjs = pret_batch_process(sjs,models,nboots,wnum,options)
% pret_batch_process
% sjs = pret_batch_process(sjs,models,nboots,wnum)
% sjs = pret_batch_process(sjs,models,nboots,wnum,options)
%
% Performs the estimation procedure and/or the bootstrapping procedure to
% estimate model parameters for the data for each sj structure in sjs.
%
% Inputs:
%
% sjs = structure in which each field is an sj structure output by
% pret_preprocess.
%
% models = model structure created by pret_model and filled in by user.
% Parameter values in model.ampvals, model.boxampvals, model.latvals,
% model.tmaxval, model.yintval, and model.slopeval do NOT need to be
% provided (unless any of those parameters are not being estimated).
% *NOTE - if you want to fit multiple models, you can input an
% Nx1 structure with the same fields as "model", where N is the
% number of models and each element is a separate model
% structure*
%
% nboots = if doing bootstrapping procedure, how many bootstrap
% iterations to do. Can be empty if not.
%
% wnum = how many Matlab workers to use if doing the estimation
% and/or bootstrapping procedures.
%
% options = options structure for pret_batch_process. Default options can be
% returned by calling this function with no arguments, or see
% pret_default_options.
%
% Output
%
% sjs = same structure that was input, but with the following fields
% appended to each sj structure (the fields of sjs):
% *if estimation done*
% optim = a Nx1 structure, where N is the number of models input
% in "model". Each element of this structure is an optim
% structure for a single model. See pret_optim or pret_estimate for
% more information about this structure.
% *if bootstrapping done*
% boots = a Nx1 structure, where N is the number of models input
% in "model". Each element of this structure is an boots
% structure for a single model. See pret_bootstrap for more
% information about this structure.
%
% Options
%
% estflag (true/false) = do estimation procedure on the data in each
% sj structure? Implemented by pret_estimate_sj.
%
% bootflag (true/false) = do bootstrapping procedure on the data in each
% sj structure? Implemented by pret_boostrap_sj.
%
% pret_estimate_sj_options = options structure for pret_estimate_sj,
% which pret_batch_process uses to perform parameter estimation for the
% data in each sj structure.
%
% pret_bootstrap_sj_options = options structure for pret_bootstrap_sj,
% which pret_batch_process uses to perform the bootstrapping procedure for the
% data in each sj structure.
%
% pret_model_check = options for pret_model_check
%
%
% Copyright (C) 2019 Jacob Parker and Rachel Denison
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <https://www.gnu.org/licenses/>.
%
if nargin < 5
opts = pret_default_options();
options = opts.pret_batch_process;
clear opts
if nargin < 1
sjs = options;
return
end
end
%OPTIONS
estflag = options.estflag;
bootflag = options.bootflag;
pret_estimate_sj_options = options.pret_estimate_sj;
pret_bootstrap_sj_options = options.pret_bootstrap_sj;
pret_model_check_options = options.pret_model_check;
check models
for mm = 1:length(model)
try
pret_model_check(model(mm),pret_model_check_options)
catch
fprintf('\nError in model %d\n',mm)
pret_model_check(model(mm),pret_model_check_options)
end
end
sjfields = fieldnames(sjs);
for s = 1:length(sjfields)
fprintf('Subject %s\n',sjfields{s})
if estflag
sjs.(sjfields{s}) = pret_estimate_sj(sjs.(sjfields{s}),models,wnum,pret_estimate_sj_options);
end
if bootflag
sjs.(sjfields{s}) = pret_bootstrap_sj(sjs.(sjfields{s}),models,nboots,wnum,pret_bootstrap_sj_options);
end
end