Hello! I am currently using nilearn for MVPA analysis to distinguish which brain regions represent word properties. However, I’ve encountered a confusing issue and need your assistance.
Following the official nilearn tutorials, I extracted the beta maps for all of my trials using LSA (a similar procedure was used in RSA, yielding results akin to previous studies). Then, I conducted a whole-brain searchlight analysis using the SVM classifier with
class_weight='balanced' to account for the differences in the number of trials, iterating 2000 times with L2 penalty. I used LeaveOneGroupOut based on the runs to obtain decoding accuracy. However, during second-level analysis, I found decoding accuracy above the chance level (0.5) across almost the entire brain, which is puzzling. Is this a normal occurrence?
This is the result image of the second-level analysis with a cluster threshold of 50, height control set to ‘fdr’, and alpha at 0.001.
Could the presence of this situation be due to an incorrect second-level analysis? I processed the decoding accuracy maps registered to the standard space using ants with the following code:
image_data = math_img("np.maximum(img - 0.5, 0)", img=image.load_img(second_level_inputs[img])). For the second-level analysis, I then entered these processed data with a design matrix of
*n_subject and contrast matrix of
Here is the code for my second-level analysis：
folder_path = '/Users/caofeizhen/Desktop/pos_and_composition/fMRI_data/fmri/RawData/derivatives/mvpa_glm/searchlight_nv_task_iter1000/Picture' os.chdir(folder_path) second_level_inputs = glob.glob('*.nii') n_subjects = 13 design_matrix=pd.read_excel('/Users/caofeizhen/Desktop/pos_and_composition/fMRI_data/fmri/RawData/derivatives/mvpa_glm/searchlight_名动-任务_迭代20000/Word/design_matrix.xlsx',header=None) #%% second_level_model_paired = SecondLevelModel(smoothing_fwhm=4).fit(second_level_inputs, design_matrix=design_matrix) plot_design_matrix(second_level_model_paired.design_matrix_) stat_maps_paired = second_level_model_paired.compute_contrast(, output_type="all") #%% cluster_threshold = 50 height_control = 'fdr' alpha = 0.001 # Load MNI template gm_target = '/Users/caofeizhen/.cache/templateflow/tpl-MNI152NLin2009cAsym/tpl-MNI152NLin2009cAsym_res-02_label-GM_probseg.nii.gz' gm_target_img = check_niimg(gm_target) gm_target_data = get_data(gm_target_img) gm_target_mask = (gm_target_data > 0.2).astype("int8") gm_target_mask = binary_closing(gm_target_mask, iterations=2) gm_mask_img = new_img_like(gm_target_img, gm_target_mask) clean_map, threshold = threshold_stats_img(stat_maps_paired['z_score'], alpha=alpha, height_control=height_control, cluster_threshold=cluster_threshold, two_sided=True,mask_img = gm_mask_img) plotting.plot_stat_map(clean_map,threshold=threshold,colorbar=True) plotting.show()
Could you please offer some guidance? Thank you in advance for your help. I have learned a lot from this forum and always recommend it to other researchers I know.