It is often helpful to combine the maps from a VMP in various ways (e.g. to create a conjunction map). This method allows various combination options.
VMP::ComputeFormula - add a conjunction map to a VMP FORMAT: [vmp] = vmp.ComputeFormula(formula [, opts]) Input fields: formula string giving a formula, supporting the following #i -> .Map(i).VMPData $i -> .Map(opts.mapsel(i)).VMPData whereas i can be a single number, or a valid range using the i1:i2 or i1:s:i2 format opts optional settings .mapsel sub-selection of maps (for enhanced indexing) .name set target map name to name .pvalues flag, if true, convert maps to pvalues .source map used as template, default first map encountered .target specify a target map index (otherwise added at end) - additionally all other Map. subfields are accepted Output fields: vmp VMP with added/replaced map
The formula argument has be passed as a single string which is parsed for occurrences of #
and $
characters followed by either a single number (e.g. #4
), plain vectors (e.g. $5:8
), or non-1-step vectors (#1:12:120
). These patterns are expanded to obj.Map(NUMBER).VMPData
for single numbers and cat(4, obj.Map(VECTOR).VMPData)
for vectors. This means that for any multi-map functions, the 4th dimension must be used!
The most important and possibly non-intuitive option is the .pvalues
option. If set to true
, the values (VMPData) will be passed to the according distribution function (e.g. sdist('tinv', VMPData, DF1)
) prior to going into the formula. This is useful to compute conjunctions (and transparently supported by the main UI's compute formula
button for VMPs).
% load VMP vmp = xff('*.vmp'); % compute conjunction map of first two maps, default options vmp.ComputeFormula('conjvalp(#1, #2)', struct('pvalues', true)); % save VMP vmp.Save;
% find maps that match a criterion matched = find(~isemptycell(regexpi(vmp.MapNames, 'reappraise'))); nummatched = numel(matched); % compute mean and store as new map vmp.ComputeFormula(sprintf( ... 'mean($1:%d, 4)', nummatched), struct('mapsel', matched));
sqrt(12) .* mean($1:$12, 4) ./ std($1:$12, [], 4)
% find indices of two groups group1 = find(~isemptycell(regexpi(vmp.MapNames, 'group1'))); group2 = find(~isemptycell(regexpi(vmp.MapNames, 'group2'))); groups = [group1(:); group2(:)]; ngroup1 = numel(group1); ngroup2 = numel(group2); ngroups = ngroup1 + ngroup2; % create formula formula = sprintf( ... 'robustnsamplet_img($1:%d, [zeros(%d, 1); ones(%d, 1)])', ... ngroups, ngroup1, ngroup2); % options cfopts = struct( ... 'mapsel', groups, ... 'name', 'robust two-sample t-test: group1 > group2', ... 'DF1', ngroups - 2); % compute vmp.ComputeFormula(formula, cfopts);