2.Brains Crack/SPM8 Batch/1stAnalysis

Top > 2.Brains Crack > SPM8 Batch > 1stAnalysis

1st Analysis|個人解析

*Specify 1st Analysis,fMRI model specification|一般線型モデルのモデリング

※ GUI の表記,Batch Editor での表記|日本語表記

サンプルコード

   
  % Initialise SPM
  spm('Defaults','fMRI');
   spm_jobman('initcfg');
   
   %%% fMRI Specification ---------------------------------------------------------------
   matlabbatch{1}.spm.stats.fmri_spec.dir = cellstr(spm_dir);
   matlabbatch{1}.spm.stats.fmri_spec.timing.units = 'scans'; % 'scans' or 'second'
   matlabbatch{1}.spm.stats.fmri_spec.timing.RT = 2;
   matlabbatch{1}.spm.stats.fmri_spec.timing.fmri_t = 30;
   matlabbatch{1}.spm.stats.fmri_spec.timing.fmri_t0 = 15;
   
   %%% Session 1
   % condition 1
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).scans = cellstr(image_files1);
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(1).name = 'Task onset';
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(1).onset = task_onset_tmp;
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(1).duration = task_duration_tmp;
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(1).tmod = 0;
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(1).pmod = struct('name', {}, 'param', {}, 'poly', {});
   % condition 2
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(2).name = 'Reward onset';
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(2).onset = reward_onset_tmp;
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(2).duration = 0;
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(2).tmod = 0;
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).cond(2).pmod = struct('name', {}, 'param', {}, 'poly', {});
   % etc 1
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).multi = {''};
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).regress = struct('name', {}, 'val', {});
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).multi_reg = cellstr(headmotion_files1);
   matlabbatch{1}.spm.stats.fmri_spec.sess(1).hpf = 128;
   
   %%% Session 2
   % condition 1
   matlabbatch{1}.spm.stats.fmri_spec.sess(2).scans = cellstr(image_files2);
   matlabbatch{1}.spm.stats.fmri_spec.sess(2).cond(1).name = 'Task onset';
   matlabbatch{1}.spm.stats.fmri_spec.sess(2).cond(1).onset = task_onset_tmp2;
   	...
   	...
   %%%
   matlabbatch{1}.spm.stats.fmri_spec.sess.multi = {''};
   matlabbatch{1}.spm.stats.fmri_spec.sess.regress = struct('name', {}, 'val', {});
   matlabbatch{1}.spm.stats.fmri_spec.sess.multi_reg = 'rf_***.txt';
   matlabbatch{1}.spm.stats.fmri_spec.sess.hpf = 128;
   %%%
   matlabbatch{1}.spm.stats.fmri_spec.fact = struct('name', {}, 'levels', {});
   matlabbatch{1}.spm.stats.fmri_spec.bases.hrf.derivs = [0 0];
   matlabbatch{1}.spm.stats.fmri_spec.volt = 1;
   matlabbatch{1}.spm.stats.fmri_spec.global = 'None';
   matlabbatch{1}.spm.stats.fmri_spec.mask = {''};
   matlabbatch{1}.spm.stats.fmri_spec.cvi = 'AR(1)';
   
   %% END: fMRI Specification --------------------------------------------------------------- 
   
   % Run Job file   
   spm_jobman('run', matlabbatch);



たいていの実験では,複数セッション,複数条件があるので,例えば,書きのようにするとコピペをしやすい.

   n_sess = 0; % <---
   n_con = 0; % <---
   % Session 1
   n_sess = n_sess +1; % <---
   % condition 1
   n_con = n_con +1; % <---
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).scans = cellstr(image_files1);
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).cond(n_con).name = 'Task onset';
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).cond(n_con).onset = task_onset_tmp;
   	...
   % condition 2
   n_con = n_con +1; % <---
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).cond(n_con).name = 'Reward onset';
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).cond(n_con).onset = reward_onset_tmp;
   	...
   	...
   % Session 2
   n_sess = n_sess +1; % <---
   % condition 1
   n_con = n_con +1; % <---
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).scans = cellstr(image_files2);
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).cond(n_con).name = 'Task onset';
   matlabbatch{1}.spm.stats.fmri_spec.sess(n_sess).cond(n_con).onset = task_onset_tmp2;

Estimate,Model Estimation|パラメータの推定

※ GUI の表記,Batch Editor での表記|日本語表記

サンプルコード

  % Initialise SPM
  spm('Defaults','fMRI');
   spm_jobman('initcfg');
   
   %%% fMRI Estimation 
   matlabbatch{1}.spm.stats.fmri_est.spmmat = ... % SPM.mat ファイルを指定 
                     cellstr(fullfile(spm_dir,'SPM.mat'));    
   % Run Job file   
    spm_jobman('run', matlabbatch);

Results, Contrast Manager|統計値画像の作成

※ GUI の表記,Batch Editor での表記|日本語表記

サンプルコード

  % Initialise SPM
  spm('Defaults','fMRI');
   spm_jobman('initcfg');
   	
   %%% Contrast
   matlabbatch{1}.spm.stats.con.spmmat = cellstr(fullfile(spm_dir,'SPM.mat'));
   % Contrast1 
   matlabbatch{1}.spm.stats.con.consess{1}.tcon.name   = 'Task1 - Task2';
   matlabbatch{1}.spm.stats.con.consess{1}.tcon.convec = ...
			[1, -1, zeros(1, 6), 1, -1, zeros(1, 6), zeros(1, 2)]; 
		% [1, -1, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0];
		% [task1, task2, motion x6, task1,  task2, motion x 6, residual x 2]
   matlabbatch{1}.spm.stats.con.consess{1}.tcon.sessrep = 'none';
   % Contrast2
   matlabbatch{1}.spm.stats.con.consess{2}.tcon.name   = 'Task2 - Task1';
   matlabbatch{1}.spm.stats.con.consess{2}.tcon.convec = [-1, 1, zeros(1, 6), -1, 1, zeros(1, 6), zeros(1, 2)];
   matlabbatch{1}.spm.stats.con.consess{2}.tcon.sessrep = 'none';
   % Contrast3
	...
	...
   % 
   matlabbatch{1}.spm.stats.con.delete = 1; % delete, 1; not delete, 0 
   
   % Run Job file   
   spm_jobman('run', matlabbatch);
  • matlabbatch{1}.spm.stats.con.delete = 1; としておいた方が良い.これによって既存の差分画像(con_*.img)が削除されて,改めて作成された順に投資番号がつけられる.2nd-Analysis で差分画像を指定する時にわかりやすい.
    • 差分画像(con_*.img)は通し番号がつけられている.matlabbatch{1}.spm.stats.con.delete = 0; とすると,それまでに差分画像(con_*.img)がある場合には,それに続けて通し番号がつけられる.場合によっては,被験者毎に通し番号が一致しなかったり,何度も繰り返すことで通し番号が大きくなりすぎてわかりにくい.

Header code

サンプルコード(まだ作業中:shikauchi)

   % Directory
   spm_dir_tmp = '***/fMRIanalysis/';
   
   % Make dir
   sbj_dir = sbj_dir_tmp;
   spm_dir = [spm_dir_tmp, sbj_dir, '/1stAnalysis/DM1'];
   
   % make dir
   mkdir(spm_dir);
   
   % epi image list
   sess1_dir = [spm_dir_tmp, sbj_dir, '/session1/'];
   image_files1= spm_select('FPList', sess1_dir, '^swaf.*.img$');
   sess2_dir = [spm_dir_tmp, sbj_dir, '/session2/'];
   image_files2= spm_select('FPList', sess2_dir, '^swaf.*.img$');
   
   % head motion parameter
   headmotion_files1 = spm_select('FPList', sess1_dir, '^rp_.*.txt$'); %rp_fRIs2_006.txt
   headmotion_files2 = spm_select('FPList', sess2_dir, '^rp_.*.txt$'); %rp_fRIs2_006.txt
   
   % Onset, Duration
   %Session 1 
   task1_onset_tmp  = OnsetDuration{n_sbj}.sess1.task1.Onset; 
   task1_duration_tmp  = OnsetDuration{n_sbj}.sess1.task1.Duration; 
   task2_onset_tmp  = OnsetDuration{n_sbj}.sess1.task2.Onset; 
   task2_duration_tmp = 2;
   %Session 2
   task1_onset_tmp2  = OnsetDuration{n_sbj}.sess2.task1.Onset; 
   task1_duration_tmp2  = OnsetDuration{n_sbj}.sess2.task1.Duration;
   task2_onset_tmp2  = OnsetDuration{n_sbj}.sess2.Task2.Onset;
   task2_duration_tmp2 = 2;

(まだ作業中:shikauchi)

想定しているディレクトリの階層構造.

被験者ディレクトリより下の階層は,全被験者で共通の構成・ディレクトリ名にしている.

fMRI_Analysis
	|-20110304SY
	|	|- 3D
	|	|- T2
	|	|- session1
	|	|- session 2
	|	|- ...
	|	|- 1stAnalysis
	|	|  |- DM1
	|	|  |- DM2
	|	|  |- ...
	|	|  
	|	|- DCM
	|	  |-DM1
	|	  |-DM2
	|	   |- ...
	|	   
	|- 20110311YK
	|	|- 3D
	|	|- T2
	|	|- session1
	|	|- session 2
	|	|- ...
	|	|- 1stAnalysis
	|	|  |- DM1
	|	|  |- DM2
	|	|  |- ...
	|	|  
	|	|- DCM
	|	  |-DM1
	|	  |-DM2
	|	   |- ...
	|
	|- ...
	|	
	|-2ndAnalysis
	|-DCM_allSbj

最終更新日: 2014-11-21 (金) 16:14:09 (1705d)

 

TOP