Skip to content

Instantly share code, notes, and snippets.

@tsalo
Created June 17, 2020 19:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tsalo/f335aac15ff964a46edf8bd99c80b4ab to your computer and use it in GitHub Desktop.
Save tsalo/f335aac15ff964a46edf8bd99c80b4ab to your computer and use it in GitHub Desktop.
Decoding an atlas with NiMARE v0.0.3
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Decode atlases with NiMARE"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"200617-15:39:49,296 nipype.utils INFO:\n",
"\t Running nipype version 1.4.2 (latest: 1.5.0)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:nipype.utils:Running nipype version 1.4.2 (latest: 1.5.0)\n",
"/Users/tsalo/anaconda/envs/python3/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
" return f(*args, **kwds)\n",
"/Users/tsalo/Documents/tsalo/NiMARE/nimare/annotate/__init__.py:17: ImportWarning: nimare.annotate is an experimental module under active development; use it at your own risk.\n",
" ImportWarning\n",
"/Users/tsalo/Documents/tsalo/NiMARE/nimare/decode/__init__.py:17: ImportWarning: nimare.decode is an experimental module under active development; use it at your own risk.\n",
" ImportWarning\n"
]
}
],
"source": [
"from nimare.dataset import Dataset\n",
"from nimare.annotate.cogat import download_cognitive_atlas\n",
"from nimare.decode.discrete import NeurosynthDecoder\n",
"\n",
"import nibabel as nib\n",
"from nilearn.image import math_img, resample_to_img\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# this Dataset will be uploaded to the OSF\n",
"dset = Dataset.load('neurosynth_with_cogat.pkl.gz')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"decoder = NeurosynthDecoder(feature_group='CogAt_ExpandedCount', correction=None)\n",
"decoder.fit(dset)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# load atlas\n",
"atlas = nib.load('atlases/0025427_1_parcels_masked_rsn-Vis.nii.gz')\n",
"atlas_values = np.unique(atlas.get_fdata()).astype(int)\n",
"atlas_values = atlas_values[atlas_values != 0] # drop background\n",
"\n",
"# resample now to make things easier\n",
"atlas = resample_to_img(atlas, dset.masker.mask_img, interpolation='nearest')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# run decoder on each node separately\n",
"for atlas_value in atlas_values:\n",
" roi_img = math_img('img == {}'.format(atlas_value), img=atlas)\n",
" ids = dset.get_studies_by_mask(roi_img)\n",
" roi_df = decoder.transform(ids)\n",
" if atlas_value == atlas_values[0]:\n",
" output_df = pd.DataFrame(index=atlas_values, columns=roi_df.index.tolist())\n",
" output_df.index.name = 'Atlas Label'\n",
" # grab reverse inference posterior probability. it's probably the most relevant.\n",
" output_df.loc[atlas_value, roi_df.index.tolist()] = roi_df['probReverse'].tolist()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# map cognitive atlas IDs to terms\n",
"cogat = download_cognitive_atlas()\n",
"cogat_ids = pd.read_csv(cogat['ids'])\n",
"cogat_ids = cogat_ids.drop_duplicates(subset=['id'])\n",
"cogat_ids = dict(zip(cogat_ids['id'], cogat_ids['name']))\n",
"\n",
"# drop feature group from terms\n",
"cols = {c: c.split('__')[-1] for c in output_df.columns}\n",
"# map to cogat terms\n",
"cols = {k: cogat_ids.get(v, v) for k, v in cols.items()}\n",
"\n",
"output_df = output_df.rename(columns=cols)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ctp_C1</th>\n",
" <th>ctp_C10</th>\n",
" <th>ctp_C2</th>\n",
" <th>ctp_C3</th>\n",
" <th>ctp_C4</th>\n",
" <th>ctp_C5</th>\n",
" <th>ctp_C6</th>\n",
" <th>ctp_C7</th>\n",
" <th>ctp_C8</th>\n",
" <th>ctp_C9</th>\n",
" <th>...</th>\n",
" <th>trail making test a and b</th>\n",
" <th>unified parkinson's disease rating scale</th>\n",
" <th>visuospatial cueing task</th>\n",
" <th>wechsler adult intelligence scale-revised</th>\n",
" <th>wisconsin card sorting test</th>\n",
" <th>word generation task</th>\n",
" <th>word identification</th>\n",
" <th>memory encoding task</th>\n",
" <th>error awareness task</th>\n",
" <th>donation task</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Atlas Label</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.531967</td>\n",
" <td>0.529357</td>\n",
" <td>0.552705</td>\n",
" <td>0.496546</td>\n",
" <td>0.495185</td>\n",
" <td>0.540121</td>\n",
" <td>0.514478</td>\n",
" <td>0.510664</td>\n",
" <td>0.451981</td>\n",
" <td>0.509114</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.807941</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.564535</td>\n",
" <td>0.495542</td>\n",
" <td>0.510406</td>\n",
" <td>0.478477</td>\n",
" <td>0.459614</td>\n",
" <td>0.581696</td>\n",
" <td>0.604602</td>\n",
" <td>0.45572</td>\n",
" <td>0.475638</td>\n",
" <td>0.492821</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0.547948</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.39075</td>\n",
" <td>0.576918</td>\n",
" <td>0</td>\n",
" <td>0.521717</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.445186</td>\n",
" <td>0.532407</td>\n",
" <td>0.519911</td>\n",
" <td>0.503666</td>\n",
" <td>0.481625</td>\n",
" <td>0.533964</td>\n",
" <td>0.49305</td>\n",
" <td>0.424654</td>\n",
" <td>0.525304</td>\n",
" <td>0.585231</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.734608</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.570809</td>\n",
" <td>0.540433</td>\n",
" <td>0.542051</td>\n",
" <td>0.476555</td>\n",
" <td>0.468824</td>\n",
" <td>0.511354</td>\n",
" <td>0.548932</td>\n",
" <td>0.499389</td>\n",
" <td>0.463078</td>\n",
" <td>0.521759</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0.396291</td>\n",
" <td>0.855306</td>\n",
" <td>0</td>\n",
" <td>0.410009</td>\n",
" <td>0.596364</td>\n",
" <td>0.74723</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0.508548</td>\n",
" <td>0.516868</td>\n",
" <td>0.547398</td>\n",
" <td>0.505307</td>\n",
" <td>0.505882</td>\n",
" <td>0.527073</td>\n",
" <td>0.48912</td>\n",
" <td>0.508642</td>\n",
" <td>0.476124</td>\n",
" <td>0.504205</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.535128</td>\n",
" <td>0.709867</td>\n",
" <td>0</td>\n",
" <td>0.661845</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>0.543747</td>\n",
" <td>0.536733</td>\n",
" <td>0.548711</td>\n",
" <td>0.520427</td>\n",
" <td>0.538448</td>\n",
" <td>0.550642</td>\n",
" <td>0.560411</td>\n",
" <td>0.4863</td>\n",
" <td>0.462322</td>\n",
" <td>0.44048</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>0.532242</td>\n",
" <td>0.443947</td>\n",
" <td>0.538187</td>\n",
" <td>0.514165</td>\n",
" <td>0.486663</td>\n",
" <td>0.497864</td>\n",
" <td>0.476665</td>\n",
" <td>0.479299</td>\n",
" <td>0.456607</td>\n",
" <td>0.425538</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.951152</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.795636</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>0.578008</td>\n",
" <td>0.546042</td>\n",
" <td>0.537487</td>\n",
" <td>0.490319</td>\n",
" <td>0.485862</td>\n",
" <td>0.524366</td>\n",
" <td>0.53128</td>\n",
" <td>0.4999</td>\n",
" <td>0.482228</td>\n",
" <td>0.515186</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0.370699</td>\n",
" <td>0.841384</td>\n",
" <td>0</td>\n",
" <td>0.237621</td>\n",
" <td>0.799217</td>\n",
" <td>0.72623</td>\n",
" <td>0.514707</td>\n",
" <td>0</td>\n",
" <td>0.726184</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>0.515759</td>\n",
" <td>0.514961</td>\n",
" <td>0.527936</td>\n",
" <td>0.509543</td>\n",
" <td>0.487498</td>\n",
" <td>0.533873</td>\n",
" <td>0.473915</td>\n",
" <td>0.510254</td>\n",
" <td>0.494575</td>\n",
" <td>0.50206</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.907713</td>\n",
" <td>0</td>\n",
" <td>0.366258</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>0.45583</td>\n",
" <td>0.491494</td>\n",
" <td>0.480041</td>\n",
" <td>0.486344</td>\n",
" <td>0.453343</td>\n",
" <td>0.600126</td>\n",
" <td>0.420463</td>\n",
" <td>0.427813</td>\n",
" <td>0.559755</td>\n",
" <td>0.487224</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>0.513093</td>\n",
" <td>0.504824</td>\n",
" <td>0.540188</td>\n",
" <td>0.516864</td>\n",
" <td>0.510139</td>\n",
" <td>0.532263</td>\n",
" <td>0.562512</td>\n",
" <td>0.487365</td>\n",
" <td>0.47849</td>\n",
" <td>0.499184</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>11 rows × 1061 columns</p>\n",
"</div>"
],
"text/plain": [
" ctp_C1 ctp_C10 ctp_C2 ctp_C3 ctp_C4 ctp_C5 \\\n",
"Atlas Label \n",
"1 0.531967 0.529357 0.552705 0.496546 0.495185 0.540121 \n",
"2 0.564535 0.495542 0.510406 0.478477 0.459614 0.581696 \n",
"3 0.445186 0.532407 0.519911 0.503666 0.481625 0.533964 \n",
"4 0.570809 0.540433 0.542051 0.476555 0.468824 0.511354 \n",
"5 0.508548 0.516868 0.547398 0.505307 0.505882 0.527073 \n",
"6 0.543747 0.536733 0.548711 0.520427 0.538448 0.550642 \n",
"7 0.532242 0.443947 0.538187 0.514165 0.486663 0.497864 \n",
"8 0.578008 0.546042 0.537487 0.490319 0.485862 0.524366 \n",
"9 0.515759 0.514961 0.527936 0.509543 0.487498 0.533873 \n",
"10 0.45583 0.491494 0.480041 0.486344 0.453343 0.600126 \n",
"11 0.513093 0.504824 0.540188 0.516864 0.510139 0.532263 \n",
"\n",
" ctp_C6 ctp_C7 ctp_C8 ctp_C9 ... \\\n",
"Atlas Label ... \n",
"1 0.514478 0.510664 0.451981 0.509114 ... \n",
"2 0.604602 0.45572 0.475638 0.492821 ... \n",
"3 0.49305 0.424654 0.525304 0.585231 ... \n",
"4 0.548932 0.499389 0.463078 0.521759 ... \n",
"5 0.48912 0.508642 0.476124 0.504205 ... \n",
"6 0.560411 0.4863 0.462322 0.44048 ... \n",
"7 0.476665 0.479299 0.456607 0.425538 ... \n",
"8 0.53128 0.4999 0.482228 0.515186 ... \n",
"9 0.473915 0.510254 0.494575 0.50206 ... \n",
"10 0.420463 0.427813 0.559755 0.487224 ... \n",
"11 0.562512 0.487365 0.47849 0.499184 ... \n",
"\n",
" trail making test a and b \\\n",
"Atlas Label \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 \n",
"5 0 \n",
"6 0 \n",
"7 0 \n",
"8 0 \n",
"9 0 \n",
"10 0 \n",
"11 0 \n",
"\n",
" unified parkinson's disease rating scale visuospatial cueing task \\\n",
"Atlas Label \n",
"1 0 0 \n",
"2 0.547948 0 \n",
"3 0 0 \n",
"4 0.396291 0.855306 \n",
"5 0 0 \n",
"6 0 0 \n",
"7 0 0.951152 \n",
"8 0.370699 0.841384 \n",
"9 0 0.907713 \n",
"10 0 0 \n",
"11 0 0 \n",
"\n",
" wechsler adult intelligence scale-revised \\\n",
"Atlas Label \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 \n",
"5 0 \n",
"6 0 \n",
"7 0 \n",
"8 0 \n",
"9 0 \n",
"10 0 \n",
"11 0 \n",
"\n",
" wisconsin card sorting test word generation task \\\n",
"Atlas Label \n",
"1 0 0 \n",
"2 0.39075 0.576918 \n",
"3 0 0 \n",
"4 0.410009 0.596364 \n",
"5 0.535128 0.709867 \n",
"6 0 0 \n",
"7 0 0 \n",
"8 0.237621 0.799217 \n",
"9 0.366258 0 \n",
"10 0 0 \n",
"11 0 0 \n",
"\n",
" word identification memory encoding task error awareness task \\\n",
"Atlas Label \n",
"1 0 0.807941 0 \n",
"2 0 0.521717 0 \n",
"3 0 0.734608 0 \n",
"4 0.74723 0 0 \n",
"5 0 0.661845 0 \n",
"6 0 0 0 \n",
"7 0 0.795636 0 \n",
"8 0.72623 0.514707 0 \n",
"9 0 0 0 \n",
"10 0 0 0 \n",
"11 0 0 0 \n",
"\n",
" donation task \n",
"Atlas Label \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 \n",
"5 0 \n",
"6 0 \n",
"7 0 \n",
"8 0.726184 \n",
"9 0 \n",
"10 0 \n",
"11 0 \n",
"\n",
"[11 rows x 1061 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output_df"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:python3]",
"language": "python",
"name": "conda-env-python3-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment