<div dir="ltr"><div><div>Dear pyMVPA experts, <br><br></div>

<p class="MsoNormal"><span lang="EN-US">I am
working on my first fMRI data and would like to try MVPA analysis. I have two
classes that I have classified with linear SVM. I would like to determine which
voxels contribute most to the clasifier’s successful discrimination of the
classes. As far as understand,</span><span lang="EN-US" style="font-size:10pt;line-height:115%;font-family:Verdana,sans-serif;color:black"> </span><span lang="EN-US">the absolute
value of the SVM weights directly reflect the importance of a feature (voxel)
in discriminating the two classes. I would like to average the SVM weights
across all 18 cross-validation folds for each voxel and wrap the resulting map
into the standard space in order to display a map of the resulting overlap.  My script is shown below. The results seems
reasonable, but could you please yet check that the visualization is correctly done. </span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"><br></span></p><p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"># Select the classifier</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">clf = LinearCSVMC()</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> </span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"># select top 5% of the ANOVA F-scores</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">fsel = SensitivityBasedFeatureSelection(OneWayAnova(),
FractionTailSelector(0.05, mode='select', tail='upper'))</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">fclf = FeatureSelectionClassifier(clf, fsel)</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">cvte = CrossValidation(fclf, NFoldPartitioner(), errorfx=lambda p, t:
np.mean(p == t), enable_ca=['stats'])</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">sensana = fclf.get_sensitivity_analyzer()</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> </span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">cv_sensana = RepeatedMeasure(sensana,</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">                             
ChainNode((NFoldPartitioner(),</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">                                        
Splitter('partitions',</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">                                        
attr_values=(1,)))))</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"># Get 18 sensitivity maps, one for each cross-validation fold</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">sens = cv_sensana(ds)</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> </span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">#Get absolute values:</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">sens_abs = sens.get_mapped(absolute_features())</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> </span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"># Get average over the 18 folds:</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">sens_avg = sens_abs.get_mapped(mean_sample())</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> </span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"># Map data into the original dataspace and wrap it into an Image</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">map2nifti(ds, <span style="font-size:14.6667px">sens_avg</span>).to_filename(fname</span><span style="font-family:Calibri,sans-serif;font-size:11pt">)</span></p>

<p class="MsoNormal" style="margin-bottom:0.0001pt"><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> </span></p><br></div><div><div>Thanks,</div><div>Maria<br><br><br></div></div></div>