Single-level and multi-level mediation analyses for any kind of data, with bootstrap-based significance testing. Neuroimaging-oriented functions allow for mediation effect parametric mapping (mapping of mediation effects across the brain) and multivariate mediation.
Hi,
I was going through the mediation_brain_multilevel_walkthrough1.html tutorial to run multi-level mediation analysis. While trying to figure out how to format my data to run the mediation_brain_multilevel function , I got stuck running the example code. I entered exactly the first 3 code blocks. I am working on matlab2023a. I also reproduced the error on a collegue's computer.
`%% canlab example
metadata_file = which('bmrk3_6levels_metadata.mat');
if isempty(metadata_file)
disp('You need the dataset Woo_2015_PlosBio_BMRK3_pain_6levels on your Matlab path.')
disp('This is in the CANlab Core toolbox.')
error('Check path and files.')
end
load(metadata_file);
% Re-find local path names for brain images
M = single_trial_image_names;
dir_old = fileparts(M{1});
dir_new = fileparts(metadata_file);
for i = 1:length(M), M{i} = strrep(M{i}, dir_old, dir_new); end
single_trial_image_names = M;
X = temperatures;
Y = ratings;
whos X Y single_trial_image_names
mkdir mediation_results
cd mediation_results
SETUP.mask = which('gray_matter_mask.nii');
SETUP.preprocX = 0;
SETUP.preprocY = 0;
SETUP.preprocM = 0;
% mediation_brain_multilevel(X, Y, M, [other inputs])
mediation_brain_multilevel(temperatures, ratings, single_trial_image_names, SETUP);
`
This will be evaluated at each voxel:
[out1,out2,out3,out4,out5,out6,out7,out8,out9,out10,out11,out12,out13,out14,out15,out16,out17,out18,out19,out20,out21,out22,out23,out24,out25] = fhandle(Y);
Slice 1, 1005 in-mask voxels
Loading and preprocessing for this slice for subject: Summary of missing or bad voxels:
Dataset 1: 0 voxels have no data, and 0 voxels have missing data.
Dataset 2: 0 voxels have no data, and 0 voxels have missing data.
Dataset 3: 0 voxels have no data, and 0 voxels have missing data.
Dataset 4: 0 voxels have no data, and 0 voxels have missing data.
Dataset 5: 0 voxels have no data, and 0 voxels have missing data.
Dataset 6: 0 voxels have no data, and 0 voxels have missing data.
Dataset 7: 0 voxels have no data, and 0 voxels have missing data.
Dataset 8: 0 voxels have no data, and 0 voxels have missing data.
Dataset 9: 0 voxels have no data, and 0 voxels have missing data.
Dataset 10: 0 voxels have no data, and 0 voxels have missing data.
Dataset 11: 0 voxels have no data, and 0 voxels have missing data.
Dataset 12: 0 voxels have no data, and 0 voxels have missing data.
Dataset 13: 0 voxels have no data, and 0 voxels have missing data.
Dataset 14: 0 voxels have no data, and 0 voxels have missing data.
Dataset 15: 0 voxels have no data, and 0 voxels have missing data.
Dataset 16: 0 voxels have no data, and 0 voxels have missing data.
Dataset 17: 0 voxels have no data, and 0 voxels have missing data.
Dataset 18: 0 voxels have no data, and 0 voxels have missing data.
Dataset 19: 0 voxels have no data, and 0 voxels have missing data.
Dataset 20: 0 voxels have no data, and 0 voxels have missing data.
Dataset 21: 0 voxels have no data, and 0 voxels have missing data.
Dataset 22: 0 voxels have no data, and 0 voxels have missing data.
Dataset 23: 0 voxels have no data, and 0 voxels have missing data.
Dataset 24: 0 voxels have no data, and 0 voxels have missing data.
Dataset 25: 0 voxels have no data, and 0 voxels have missing data.
Dataset 26: 0 voxels have no data, and 0 voxels have missing data.
Dataset 27: 0 voxels have no data, and 0 voxels have missing data.
Dataset 28: 0 voxels have no data, and 0 voxels have missing data.
Dataset 29: 0 voxels have no data, and 0 voxels have missing data.
Dataset 30: 0 voxels have no data, and 0 voxels have missing data.
Dataset 31: 0 voxels have no data, and 0 voxels have missing data.
Dataset 32: 0 voxels have no data, and 0 voxels have missing data.
Dataset 33: 0 voxels have no data, and 0 voxels have missing data.
Elapsed: 0 s
Analysis ...Error using tcdf
Degrees of freedom must be positive.
Error in mediation_brain_multilev_wrapper (line 28)
[indiv_paths, toplevelstats, firstlevelstats] = mediation(X, Y, M, varargin{:});
Error in mediation_brain_multilevel>@(M)mediation_brain_multilev_wrapper(X,Y,M,varargin{:}) (line 110)
fhandle = @(M) mediation_brain_multilev_wrapper(X, Y, M, varargin{:});
Error in image_eval_function_multisubj/analyze_slice_data (line 333)
eval(fstr)
Error in image_eval_function_multisubj (line 272)
sliceoutputs = analyze_slice_data;
Error in mediation_brain_multilevel (line 181)
image_eval_function_multisubj(M, fhandle, 'mask', SETUP.mask, 'preprochandle', preprochandle, 'outnames', SETUP.outputnames, 'start', SETUP.startslice);
`
See attached image for only the error message. Thanks for any support/suggrestions!
Best
Hi, I was going through the mediation_brain_multilevel_walkthrough1.html tutorial to run multi-level mediation analysis. While trying to figure out how to format my data to run the mediation_brain_multilevel function , I got stuck running the example code. I entered exactly the first 3 code blocks. I am working on matlab2023a. I also reproduced the error on a collegue's computer.
`%% canlab example metadata_file = which('bmrk3_6levels_metadata.mat');
if isempty(metadata_file) disp('You need the dataset Woo_2015_PlosBio_BMRK3_pain_6levels on your Matlab path.') disp('This is in the CANlab Core toolbox.') error('Check path and files.') end load(metadata_file); % Re-find local path names for brain images M = single_trial_image_names; dir_old = fileparts(M{1}); dir_new = fileparts(metadata_file); for i = 1:length(M), M{i} = strrep(M{i}, dir_old, dir_new); end single_trial_image_names = M; X = temperatures; Y = ratings; whos X Y single_trial_image_names
mkdir mediation_results cd mediation_results SETUP.mask = which('gray_matter_mask.nii'); SETUP.preprocX = 0; SETUP.preprocY = 0; SETUP.preprocM = 0; % mediation_brain_multilevel(X, Y, M, [other inputs]) mediation_brain_multilevel(temperatures, ratings, single_trial_image_names, SETUP); `
Full output !
`Search for mediators Warning! Unrecognized field in SETUPions structure SETUP. Warning! Unrecognized field in SETUPions structure SETUP. First-level covariates: None Second-level moderators: None Found mask: /home/dsutterlin/projects/genPain/Toolboxes/CanlabCore/CanlabCore/canlab_canonical_brains/Canonical_brains_surfaces/gray_matter_mask.nii Preparing data. Mask info: Dimensions: 79 95 68 Voxels in mask: 195612 Mapping all input data volumes to memory Subject 1, 1 images. Subject 2, 1 images. Subject 3, 1 images. Subject 4, 1 images. Subject 5, 1 images. Subject 6, 1 images. Subject 7, 1 images. Subject 8, 1 images. Subject 9, 1 images. Subject 10, 1 images. Subject 11, 1 images. Subject 12, 1 images. Subject 13, 1 images. Subject 14, 1 images. Subject 15, 1 images. Subject 16, 1 images. Subject 17, 1 images. Subject 18, 1 images. Subject 19, 1 images. Subject 20, 1 images. Subject 21, 1 images. Subject 22, 1 images. Subject 23, 1 images. Subject 24, 1 images. Subject 25, 1 images. Subject 26, 1 images. Subject 27, 1 images. Subject 28, 1 images. Subject 29, 1 images. Subject 30, 1 images. Subject 31, 1 images. Subject 32, 1 images. Subject 33, 1 images. Preprocessing is Off ...Creating: X-M_effect ...Creating: M-Y_effect ...Creating: X-Y_direct_effect ...Creating: X-Y_total_effect ...Creating: X-M-Y_effect ...Creating: X-M_ste ...Creating: M-Y_ste ...Creating: X-Y_direct_ste ...Creating: X-Y_total_ste ...Creating: X-M-Y_ste ...Creating: X-M_pvals ...Creating: M-Y_pvals ...Creating: X-Y_direct_pvals ...Creating: X-Y_total_pvals ...Creating: X-M-Y_pvals ...Creating: X-M_indiv_effect ...Creating: M-Y_indiv_effect ...Creating: X-Y_direct_indiv_effect ...Creating: X-Y_total_indiv_effect ...Creating: X-M-Y_indiv_effect ...Creating: X-M_indiv_ste ...Creating: M-Y_indiv_ste ...Creating: X-Y_direct_indiv_ste ...Creating: X-Y_total_indiv_ste ...Creating: X-M-Y_indiv_ste Outputs: 25 images X-M_effect.img - 1 volume(s) M-Y_effect.img - 1 volume(s) X-Y_direct_effect.img - 1 volume(s) X-Y_total_effect.img - 1 volume(s) X-M-Y_effect.img - 1 volume(s) X-M_ste.img - 1 volume(s) M-Y_ste.img - 1 volume(s) X-Y_direct_ste.img - 1 volume(s) X-Y_total_ste.img - 1 volume(s) X-M-Y_ste.img - 1 volume(s) X-M_pvals.img - 1 volume(s) M-Y_pvals.img - 1 volume(s) X-Y_direct_pvals.img - 1 volume(s) X-Y_total_pvals.img - 1 volume(s) X-M-Y_pvals.img - 1 volume(s) X-M_indiv_effect.img - 33 volume(s) M-Y_indiv_effect.img - 33 volume(s) X-Y_direct_indiv_effect.img - 33 volume(s) X-Y_total_indiv_effect.img - 33 volume(s) X-M-Y_indiv_effect.img - 33 volume(s) X-M_indiv_ste.img - 1 volume(s) M-Y_indiv_ste.img - 1 volume(s) X-Y_direct_indiv_ste.img - 1 volume(s) X-Y_total_indiv_ste.img - 1 volume(s) X-M-Y_indiv_ste.img - 1 volume(s)
This will be evaluated at each voxel: [out1,out2,out3,out4,out5,out6,out7,out8,out9,out10,out11,out12,out13,out14,out15,out16,out17,out18,out19,out20,out21,out22,out23,out24,out25] = fhandle(Y);
Slice 1, 1005 in-mask voxels Loading and preprocessing for this slice for subject: Summary of missing or bad voxels: Dataset 1: 0 voxels have no data, and 0 voxels have missing data. Dataset 2: 0 voxels have no data, and 0 voxels have missing data. Dataset 3: 0 voxels have no data, and 0 voxels have missing data. Dataset 4: 0 voxels have no data, and 0 voxels have missing data. Dataset 5: 0 voxels have no data, and 0 voxels have missing data. Dataset 6: 0 voxels have no data, and 0 voxels have missing data. Dataset 7: 0 voxels have no data, and 0 voxels have missing data. Dataset 8: 0 voxels have no data, and 0 voxels have missing data. Dataset 9: 0 voxels have no data, and 0 voxels have missing data. Dataset 10: 0 voxels have no data, and 0 voxels have missing data. Dataset 11: 0 voxels have no data, and 0 voxels have missing data. Dataset 12: 0 voxels have no data, and 0 voxels have missing data. Dataset 13: 0 voxels have no data, and 0 voxels have missing data. Dataset 14: 0 voxels have no data, and 0 voxels have missing data. Dataset 15: 0 voxels have no data, and 0 voxels have missing data. Dataset 16: 0 voxels have no data, and 0 voxels have missing data. Dataset 17: 0 voxels have no data, and 0 voxels have missing data. Dataset 18: 0 voxels have no data, and 0 voxels have missing data. Dataset 19: 0 voxels have no data, and 0 voxels have missing data. Dataset 20: 0 voxels have no data, and 0 voxels have missing data. Dataset 21: 0 voxels have no data, and 0 voxels have missing data. Dataset 22: 0 voxels have no data, and 0 voxels have missing data. Dataset 23: 0 voxels have no data, and 0 voxels have missing data. Dataset 24: 0 voxels have no data, and 0 voxels have missing data. Dataset 25: 0 voxels have no data, and 0 voxels have missing data. Dataset 26: 0 voxels have no data, and 0 voxels have missing data. Dataset 27: 0 voxels have no data, and 0 voxels have missing data. Dataset 28: 0 voxels have no data, and 0 voxels have missing data. Dataset 29: 0 voxels have no data, and 0 voxels have missing data. Dataset 30: 0 voxels have no data, and 0 voxels have missing data. Dataset 31: 0 voxels have no data, and 0 voxels have missing data. Dataset 32: 0 voxels have no data, and 0 voxels have missing data. Dataset 33: 0 voxels have no data, and 0 voxels have missing data. Elapsed: 0 s Analysis ...Error using tcdf Degrees of freedom must be positive.
Error in mediation>get_ols_stats (line 1514) stats.p = min(1, (2 .* (1 - tcdf(abs(stats.t), stats.df))));
Error in mediation (line 305) stats = get_ols_stats(paths(i,:) , sterrs(i,:), n(i), num_additionalM); % setup dummy stats structure
Error in mediation_brain_multilev_wrapper (line 28) [indiv_paths, toplevelstats, firstlevelstats] = mediation(X, Y, M, varargin{:});
Error in mediation_brain_multilevel>@(M)mediation_brain_multilev_wrapper(X,Y,M,varargin{:}) (line 110) fhandle = @(M) mediation_brain_multilev_wrapper(X, Y, M, varargin{:});
Error in image_eval_function_multisubj/analyze_slice_data (line 333) eval(fstr)
Error in image_eval_function_multisubj (line 272) sliceoutputs = analyze_slice_data;
Error in mediation_brain_multilevel (line 181) image_eval_function_multisubj(M, fhandle, 'mask', SETUP.mask, 'preprochandle', preprochandle, 'outnames', SETUP.outputnames, 'start', SETUP.startslice); ` See attached image for only the error message. Thanks for any support/suggrestions! Best