NiMARE FocusCounter - significant clusters different than nilearn cluster tables

Hi Taylor and NiMARE community,

I had a question regarding the new FocusCounter analysis. I ran a coordinate-based ALE, extracted significant clusters from my cluster-level corrected z-map image using nilearn, and then found that these ended up being different from the clusters output from the FocusCounter.

spatial2_dset = io.convert_sleuth_to_dataset("Spatial_PT_lvl2.txt")
ale = ALE(null_method="approximate")
spatial2_results = ale.fit(spatial2_dset)
corr = FWECorrector(method='montecarlo', voxel_thresh=0.005, n_iters=10000, n_cores=10)
spatial2_corrected_results = corr.transform(spatial2_results)
spatial2_corrected_results.save_maps(prefix="lvl2_spatial_005", prefix_sep="_")

clust_lv2_Spatial = nilearn.reporting.get_clusters_table("lvl2_spatial_005_z_desc-size_level-cluster_corr-FWE_method-montecarlo.nii.gz", 1.645)
clust_lv2_Spatial.head(20)

   Cluster ID     X     Y     Z  Peak Stat  Cluster Size (mm3)
0           1 -12.0 -70.0  54.0        NaN                3480
1           2 -38.0 -46.0  44.0        NaN                3312
2           3  14.0 -68.0  54.0        NaN                3160
3           4  38.0   2.0  52.0   2.300852                 264
4           5  26.0   2.0  58.0        NaN                1992
5           6 -32.0 -82.0  32.0        NaN                2120
6           7  50.0  10.0  24.0        NaN                1928
7           8 -24.0   0.0  56.0        NaN                1768
8           9  36.0 -48.0  50.0   1.656602                1728

counter = FocusCounter(
    target_image="z_desc-size_level-cluster_corr-FWE_method-montecarlo",
    voxel_thresh=None,
)
spatial2_count_table, _ = counter.transform(spatial2_corrected_results)
spatial2_count_table.head(10)
                             1              2            3              4              5               6               7             8               9               10
Cluster ID
Center of Mass      (50, 9, 24)  (35, -48, 49)  (28, 1, 56)  (18, -56, 17)  (15, -68, 54)  (-11, -70, 55)  (-16, -61, 19)  (-24, 0, 55)  (-31, -81, 31)  (-37, -45, 44)
2001_Creem-                   0              0            0              0              1               1               0             0               0               0
2003_Zacks-                   0              0            0              0              0               0               0             0               0               0
2004_Committeri-              3              1            3              2              3               2               1             0               1               0
2006_Aichhorn-                1              0            0              0              0               0               0             0               0               0
2006_David-                   0              0            1              0              0               0               0             0               0               0
2006_Wallentin-               0              0            1              1              3               2               1             0               1               1
2007_Creem-Regehr-            0              1            0              0              0               0               0             0               0               0
2007_Zaehle-                  1              0            0              0              0               0               0             0               0               0
2008_David-                   0              0            1              0              0               0               0             0               0               1

counter = FocusCounter(
    target_image="z_desc-size_level-cluster_corr-FWE_method-montecarlo",
    voxel_thresh=1.645,
)
spatial2_count_table, _ = counter.transform(spatial2_corrected_results)
spatial2_count_table.head(10)
                              1              2            3              4               5             6               7               8
Cluster ID
Center of Mass      (50, 9, 24)  (35, -48, 49)  (28, 1, 56)  (15, -68, 54)  (-11, -70, 55)  (-24, 0, 55)  (-31, -81, 31)  (-37, -45, 44)
2001_Creem-                   0              0            0              1               1             0               0               0
2003_Zacks-                   0              0            0              0               0             0               0               0
2004_Committeri-              3              1            3              3               2             0               1               0
2006_Aichhorn-                1              0            0              0               0             0               0               0
2006_David-                   0              0            1              0               0             0               0               0
2006_Wallentin-               0              0            1              3               2             0               1               1
2007_Creem-Regehr-            0              1            0              0               0             0               0               0
2007_Zaehle-                  1              0            0              0               0             0               0               0
2008_David-                   0              0            1              0               0             0               0               1

The cluster number and coordinates from FocusCounter differ from nilearn output. Do you have any ideas for what I might be doing wrong?

I’m not sure, but the difference could come from how Nilearn and NiMARE define clusters. Nilearn uses face connectivity, while NiMARE uses edge connectivity. This might explain how Nilearn ended up with 9 clusters, but NiMARE only ended up with 8.

Based on a quick check, it seems like the clusters Nilearn identified at (38, 2, 52) and (26, 2, 58) both correspond to the cluster NiMARE identified at (28, 1, 56).

As far as the minor differences in the centers of mass go, I’m not really sure. Nilearn’s approach is more geared toward peak identification, and that includes subpeaks, so the center of mass is identified with a more complicated procedure than NiMARE. I imagine that the extra processing might make the Nilearn report slightly less accurate, but the difference seems to generally only be one or two voxels, so it might not be a problem.