OSCR

Mapping Individual Neuroanatomical Alterations to Schizophrenia Psychopathology with Normative Modeling

Code ↔ Paper

6 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 6 matches
  1. [1] § Methods › Applying clinical datasets to the normative models ↔ scripts/apply_normative_models_ct.ipynb, lines 257–387 · score 0.69 · aleatoric uncertainty, epistemic uncertainty, variance components, predicted, normative, models
  2. [2] § Methods › Applying clinical datasets to the normative models ↔ scripts/apply_normative_models_ct.py, lines 300–339 · score 0.69 · aleatoric uncertainty, epistemic uncertainty, variance components, predicted, normative, models
  3. [3] § Methods › Establishing and evaluating normative models of GMV ↔ scripts/fit_normative_models_ct.ipynb, lines 87–109 · score 0.65 · Gaussian noise, spline basis expansion, cubic, knots, linear, age
  4. [4] § Methods › Establishing and evaluating normative models of GMV ↔ scripts/fit_normative_models_yeo17.ipynb, lines 77–99 · score 0.65 · Gaussian noise, spline basis expansion, cubic, knots, linear, age
  5. [5] § Methods › Establishing and evaluating normative models of GMV ↔ scripts/fit_normative_models_ct.ipynb, lines 180–243 · score 0.53 · standardized log loss, MSLL, kurtosis, skew, fit, variance
  6. [6] § Methods › Establishing and evaluating normative models of GMV ↔ scripts/fit_normative_models_yeo17.ipynb, lines 170–233 · score 0.53 · standardized log loss, MSLL, kurtosis, skew, fit, variance

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Jupyter notebook · 249 lines · 10 KB · GPL-3.0 · 2 matches

  1. # %% [markdown]
  2. # ## Estimating lifespan normative models
  3. #
  4. # This notebook provides a complete walkthrough for an analysis of normative modelling in a large sample as described in the accompanying paper. Note that this script is provided principally for completeness (e.g. to assist in fitting normative models to new datasets). All pre-estimated normative models are already provided.
  5. #
  6. # First, if necessary, we install PCNtoolkit (note: this tutorial requires at least version 0.27)
  7. # %%
  8. ! pip install pcntoolkit==0.35
  9. # %% [markdown]
  10. # Then we import the required libraries
  11. # %%
  12. import os
  13. import numpy as np
  14. import pandas as pd
  15. import pickle
  16. from matplotlib import pyplot as plt
  17. import seaborn as sns
  18. from pcntoolkit.normative import estimate, predict, evaluate
  19. from pcntoolkit.util.utils import compute_MSLL, create_design_matrix
  20. from nm_utils import calibration_descriptives, remove_bad_subjects, load_2d
  21. # %% [markdown]
  22. # Now, we configure the locations in which the data are stored. You will need to configure this for your specific installation
  23. #
  24. # **Notes:**
  25. # - The data are assumed to be in CSV format and will be loaded as pandas dataframes
  26. # - Generally the raw data will be in a different location to the analysis
  27. # - The data can have arbitrary columns but some are required by the script, i.e. 'age', 'sex' and 'site', plus the phenotypes you wish to estimate (see below)
  28. # %%
  29. # where the raw data are stored
  30. data_dir = '<path-to-your>/data'
  31. # where the analysis takes place
  32. root_dir = '<path-to-your>/braincharts'
  33. out_dir = os.path.join(root_dir,'models','test')
  34. # create the output directory if it does not already exist
  35. os.makedirs(out_dir, exist_ok=True)
  36. # %% [markdown]
  37. # Now we load the data.
  38. #
  39. # We will load one pandas dataframe for the training set and one dataframe for the test set. We will also filter out low quality scans on the basis of the Freesurfer [Euler Characteristic](https://surfer.nmr.mgh.harvard.edu/fswiki/EulerNumber) (EC). This is a proxy for scan quality and is described in the publications below. Note that this requires the column 'avg_en' in the pandas dataframe, which is simply the average EC of left and right hemisphere.
  40. #
  41. # We also configrure a list of site ids
  42. #
  43. # **References**
  44. # - [Kia et al 2021](https://www.biorxiv.org/content/10.1101/2021.05.28.446120v1.abstract)
  45. # - [Rosen et al 2018](https://www.sciencedirect.com/science/article/abs/pii/S1053811917310832?via%3Dihub)
  46. # %%
  47. df_tr = pd.read_csv(os.path.join(data_dir,'lifespan_big_controls_tr_mqc.csv'), index_col=0)
  48. df_te = pd.read_csv(os.path.join(data_dir,'lifespan_big_controls_te_mqc.csv'), index_col=0)
  49. # remove some bad subjects
  50. df_tr, bad_sub = remove_bad_subjects(df_tr, df_tr)
  51. df_te, bad_sub = remove_bad_subjects(df_te, df_te)
  52. # extract a list of unique site ids from the training set
  53. site_ids = sorted(set(df_tr['site'].to_list()))
  54. # %% [markdown]
  55. # ### Configure which models to fit
  56. #
  57. # Next, we load the image derived phenotypes (IDPs) which we will process in this analysis. This is effectively just a list of columns in your dataframe. Here we estimate normative models for the left hemisphere, right hemisphere and cortical structures.
  58. # %%
  59. # load the idps to process
  60. with open(os.path.join(root_dir,'docs','phenotypes_ct_lh.txt')) as f:
  61. idp_ids_lh = f.read().splitlines()
  62. with open(os.path.join(root_dir,'docs','phenotypes_ct_rh.txt')) as f:
  63. idp_ids_rh = f.read().splitlines()
  64. with open(os.path.join(root_dir,'docs','phenotypes_sc.txt')) as f:
  65. idp_ids_sc = f.read().splitlines()
  66. # we choose here to process all idps
  67. idp_ids = idp_ids_lh + idp_ids_rh + idp_ids_sc
  68. # we could also just specify a list of IDPs
  69. #idp_ids = ['lh_MeanThickness_thickness', 'rh_MeanThickness_thickness']
  70. # %% [markdown]
  71. # ### Configure model parameters
  72. #
  73. # Now, we configure some parameters for the regression model we use to fit the normative model. Here we will use a 'warped' Bayesian linear regression model. To model non-Gaussianity, we select a sin arcsinh warp and to model non-linearity, we stick with the default value for the basis expansion (a cubic b-spline basis set with 5 knot points). Since we are sticking with the default value, we do not need to specify any parameters for this, but we do need to specify the limits. We choose to pad the input by a few years either side of the input range. We will also set a couple of options that control the estimation of the model
  74. #
  75. # For further details about the likelihood warping approach, see [Fraza et al 2021](https://www.biorxiv.org/content/10.1101/2021.04.05.438429v1).
  76. # %%
  77. # which data columns do we wish to use as covariates?
  78. cols_cov = ['age','sex']
  79. # which warping function to use? We can set this to None in order to fit a vanilla Gaussian noise model
  80. warp = 'WarpSinArcsinh'
  81. # limits for cubic B-spline basis
  82. xmin = -5
  83. xmax = 110
  84. # Do we want to force the model to be refit every time?
  85. force_refit = True
  86. # Absolute Z treshold above which a sample is considered to be an outlier (without fitting any model)
  87. outlier_thresh = 7
  88. # %% [markdown]
  89. # ### Fit the models
  90. #
  91. # Now we fit the models. This involves looping over the IDPs we have selected. We will use a module from PCNtoolkit to set up the design matrices, containing the covariates, fixed effects for site and nonlinear basis expansion.
  92. # %%
  93. for idp_num, idp in enumerate(idp_ids):
  94. print('Running IDP', idp_num, idp, ':')
  95. # set output dir
  96. idp_dir = os.path.join(out_dir, idp)
  97. os.makedirs(os.path.join(idp_dir), exist_ok=True)
  98. os.chdir(idp_dir)
  99. # extract the response variables for training and test set
  100. y_tr = df_tr[idp].to_numpy()
  101. y_te = df_te[idp].to_numpy()
  102. # remove gross outliers and implausible values
  103. yz_tr = (y_tr - np.mean(y_tr)) / np.std(y_tr)
  104. yz_te = (y_te - np.mean(y_te)) / np.std(y_te)
  105. nz_tr = np.bitwise_and(np.abs(yz_tr) < outlier_thresh, y_tr > 0)
  106. nz_te = np.bitwise_and(np.abs(yz_te) < outlier_thresh, y_te > 0)
  107. y_tr = y_tr[nz_tr]
  108. y_te = y_te[nz_te]
  109. # write out the response variables for training and test
  110. resp_file_tr = os.path.join(idp_dir, 'resp_tr.txt')
  111. resp_file_te = os.path.join(idp_dir, 'resp_te.txt')
  112. np.savetxt(resp_file_tr, y_tr)
  113. np.savetxt(resp_file_te, y_te)
  114. # configure the design matrix
  115. X_tr = create_design_matrix(df_tr[cols_cov].loc[nz_tr],
  116. site_ids = df_tr['site'].loc[nz_tr],
  117. basis = 'bspline',
  118. xmin = xmin,
  119. xmax = xmax)
  120. X_te = create_design_matrix(df_te[cols_cov].loc[nz_te],
  121. site_ids = df_te['site'].loc[nz_te],
  122. all_sites=site_ids,
  123. basis = 'bspline',
  124. xmin = xmin,
  125. xmax = xmax)
  126. # configure and save the covariates
  127. cov_file_tr = os.path.join(idp_dir, 'cov_bspline_tr.txt')
  128. cov_file_te = os.path.join(idp_dir, 'cov_bspline_te.txt')
  129. np.savetxt(cov_file_tr, X_tr)
  130. np.savetxt(cov_file_te, X_te)
  131. if not force_refit and os.path.exists(os.path.join(idp_dir, 'Models', 'NM_0_0_estimate.pkl')):
  132. print('Making predictions using a pre-existing model...')
  133. suffix = 'predict'
  134. # Make prdictsion with test data
  135. predict(cov_file_te,
  136. alg='blr',
  137. respfile=resp_file_te,
  138. model_path=os.path.join(idp_dir,'Models'),
  139. outputsuffix=suffix)
  140. else:
  141. print('Estimating the normative model...')
  142. estimate(cov_file_tr, resp_file_tr, testresp=resp_file_te,
  143. testcov=cov_file_te, alg='blr', optimizer = 'l-bfgs-b',
  144. savemodel=True, warp=warp, warp_reparam=True)
  145. suffix = 'estimate'
  146. # %% [markdown]
  147. # ### Compute error metrics
  148. #
  149. # In this section we compute the following error metrics for all IDPs (all evaluated on the test set):
  150. #
  151. # - Negative log likelihood (NLL)
  152. # - Explained variance (EV)
  153. # - Mean standardized log loss (MSLL)
  154. # - Bayesian information Criteria (BIC)
  155. # - Skew and Kurtosis of the Z-distribution
  156. # %%
  157. # initialise dataframe we will use to store quantitative metrics
  158. blr_metrics = pd.DataFrame(columns = ['eid', 'NLL', 'EV', 'MSLL', 'BIC','Skew','Kurtosis'])
  159. for idp_num, idp in enumerate(idp_ids):
  160. idp_dir = os.path.join(out_dir, idp)
  161. # load the predictions and true data. We use a custom function that ensures 2d arrays
  162. # equivalent to: y = np.loadtxt(filename); y = y[:, np.newaxis]
  163. yhat_te = load_2d(os.path.join(idp_dir, 'yhat_' + suffix + '.txt'))
  164. s2_te = load_2d(os.path.join(idp_dir, 'ys2_' + suffix + '.txt'))
  165. y_te = load_2d(os.path.join(idp_dir, 'resp_te.txt'))
  166. with open(os.path.join(idp_dir,'Models', 'NM_0_0_estimate.pkl'), 'rb') as handle:
  167. nm = pickle.load(handle)
  168. # compute error metrics
  169. if warp is None:
  170. metrics = evaluate(y_te, yhat_te)
  171. # compute MSLL manually as a sanity check
  172. y_tr_mean = np.array( [[np.mean(y_tr)]] )
  173. y_tr_var = np.array( [[np.var(y_tr)]] )
  174. MSLL = compute_MSLL(y_te, yhat_te, s2_te, y_tr_mean, y_tr_var)
  175. else:
  176. warp_param = nm.blr.hyp[1:nm.blr.warp.get_n_params()+1]
  177. W = nm.blr.warp
  178. # warp predictions
  179. med_te = W.warp_predictions(np.squeeze(yhat_te), np.squeeze(s2_te), warp_param)[0]
  180. med_te = med_te[:, np.newaxis]
  181. # evaluation metrics
  182. metrics = evaluate(y_te, med_te)
  183. # compute MSLL manually
  184. y_te_w = W.f(y_te, warp_param)
  185. y_tr_w = W.f(y_tr, warp_param)
  186. y_tr_mean = np.array( [[np.mean(y_tr_w)]] )
  187. y_tr_var = np.array( [[np.var(y_tr_w)]] )
  188. MSLL = compute_MSLL(y_te_w, yhat_te, s2_te, y_tr_mean, y_tr_var)
  189. Z = np.loadtxt(os.path.join(idp_dir, 'Z_' + suffix + '.txt'))
  190. [skew, sdskew, kurtosis, sdkurtosis, semean, sesd] = calibration_descriptives(Z)
  191. BIC = len(nm.blr.hyp) * np.log(y_tr.shape[0]) + 2 * nm.neg_log_lik
  192. blr_metrics.loc[len(blr_metrics)] = [idp, nm.neg_log_lik, metrics['EXPV'][0],
  193. MSLL[0], BIC, skew, kurtosis]
  194. display(blr_metrics)
  195. blr_metrics.to_pickle(os.path.join(out_dir,'blr_metrics.pkl'))
  196. # %%
  197. blr_metrics.to_csv(os.path.join(out_dir,'blr_metrics.csv'))
  198. # %%

fit_normative_models_ct.ipynb at commit 5a1a782, under GPL-3.0 · at the source

Overview

Authors: Johanna Spaeth1, Charlotte Fraza2,3, Deniz Yilmaz1,4, Lena Deller1, BrainTrain Working Group1, CDP Working Group1, Genc Hasanaj1,5,6, Marcel Kallweit1,5, Maxim Korman1,5, Emanuel Boudriot1,7, Vladislav Yakimov1,8, Joanna Moussiopoulou1,5, Florian J. Raabe1,7, Elias Wagner6,9, Andrea Schmitt1,7,10,11, Astrid Roeh9, Peter Falkai1,7,11, Daniel Keeser1,5, Isabel Maurus1,8, Lukas Roell1,5,7,12
  1. Department of Psychiatry and Psychotherapy, LMU University Hospital, Ludwig-Maximilians-University Munich, Munich, Germany
  2. Donders Institute for Brain, Cognition, and Behavior, Radboud University, Nijmegen, the Netherlands
  3. Department of Cognitive Neuroscience, Radboud University Medical Center, Nijmegen, the Netherlands
  4. Max Planck School of Cognition, Leipzig, Germany
  5. NeuroImaging Core Unit Munich (NICUM), LMU University Hospital, Ludwig-Maximilians-University Munich, Munich, Germany
  6. Evidence-Based Psychiatry and Psychotherapy, Faculty of Medicine, University of Augsburg, Augsburg, Germany
  7. Max Planck Institute of Psychiatry, Munich, Germany
  8. International Max Planck Research School for Translational Psychiatry (IMPRS-TP), Munich, Germany
  9. Department of Psychiatry, Psychotherapy, and Psychosomatics, Medical Faculty, University of Augsburg, Bezirkskrankenhaus Augsburg, Augsburg, Germany
  10. Laboratory of Neuroscience (LIM27), Institute of Psychiatry, University of Sao Paulo, São Paulo, Brazil
  11. German Center for Mental Health (DZPG), partner site Munich-Augsburg, Munich, Germany
  12. Systems Lab, Department of Psychiatry, The University of Melbourne, Melbourne, VIC, Australia
Dates: published online 1 April 2026
Type: Preprint
License: CC BY-ND
Identifiers: DOI 10.64898/2026.03.31.26349848 · OpenAlex W7147270884
Open access: green, a free copy (OpenAlex)
Status: code verified
Categories: structural MRI / diffusion (modality), human (organism), schizophrenia / psychosis (population), computational (subfield)
Methods: Statistics, Machine learning, Preprocessing, Connectivity, fMRI & imaging, Physiology & signal measures
Topic: Schizophrenia research and treatment (Psychiatry and Mental health, Medicine), according to OpenAlex
Funding: Biotechnology and Biological Sciences Research Council (BB/H008217/1)
Citations: not cited yet (Europe PMC); 99 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repositories

Its files are read in the Code ↔ Paper reader above, with 6 matches between paragraphs and lines of code.

OSF etdvu

License: none: the authors keep all their rights
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Size: 2 files
Software Heritage: not checked
Found in: “Code availability and Data availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
  • 28 September 2026: the link answers (HTTP 200)

predictive-clinical-neuroscience/braincharts

License: GPL-3.0
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 5a1a7822e6f54405b0a826cf137d584240af307c, 30 June 2025
Languages: Jupyter (6), Python (3)
Size: 1,193 files, 9 scripts
Software Heritage: archived
Found in: “Code availability and Data availability”
Holds: README, license file, documentation, 6 notebooks
Not found: CITATION.cff, environment file, tests, continuous integration
Tools: NumPy (8 files), pandas (8 files), Matplotlib (7 files), seaborn (7 files), FreeSurfer (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
11 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 9 scripts, each with its path and the digest of its content;
  • 6 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Code and data availability statement

The paper has a code and data availability statement. Its license (CC BY-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.64898/2026.03.31.26349848.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 2, 28 September 2026

  • Authors: added Johanna Spaeth (0009-0007-6550-0638); Vladislav Yakimov (0000-0001-9559-7492); Lukas Roell (0000-0002-0284-2290); removed Johanna Spaeth; Vladislav Yakimov; Lukas Roell

Version 1, 28 September 2026: the first record

Recorded: type, journal, dates, 20 authors, 1 funder, 88 references.

Cite

This paper

Spaeth, J., Fraza, C., Yilmaz, D., Deller, L., BrainTrain Working Group, CDP Working Group, Hasanaj, G., Kallweit, M., Korman, M., Boudriot, E., Yakimov, V., Moussiopoulou, J., Raabe, F. J., Wagner, E., Schmitt, A., Roeh, A., Falkai, P., Keeser, D., Maurus, I., & Roell, L. (2026). Mapping Individual Neuroanatomical Alterations to Schizophrenia Psychopathology with Normative Modeling. medRxiv (preprint). https://doi.org/10.64898/2026.03.31.26349848

BibTeX

@article{spaeth2026mapping,
author = {Spaeth, Johanna and Fraza, Charlotte and Yilmaz, Deniz and Deller, Lena and {BrainTrain Working Group} and {CDP Working Group} and Hasanaj, Genc and Kallweit, Marcel and Korman, Maxim and Boudriot, Emanuel and Yakimov, Vladislav and Moussiopoulou, Joanna and Raabe, Florian J. and Wagner, Elias and Schmitt, Andrea and Roeh, Astrid and Falkai, Peter and Keeser, Daniel and Maurus, Isabel and Roell, Lukas},
title = {{Mapping Individual Neuroanatomical Alterations to Schizophrenia Psychopathology with Normative Modeling}},
journal = {medRxiv (preprint)},
year = {2026},
month = apr,
publisher = {medRxiv},
doi = {10.64898/2026.03.31.26349848},
url = {https://doi.org/10.64898/2026.03.31.26349848}
}

RIS

TY - JOUR
AU - Spaeth, Johanna
AU - Fraza, Charlotte
AU - Yilmaz, Deniz
AU - Deller, Lena
AU - BrainTrain Working Group
AU - CDP Working Group
AU - Hasanaj, Genc
AU - Kallweit, Marcel
AU - Korman, Maxim
AU - Boudriot, Emanuel
AU - Yakimov, Vladislav
AU - Moussiopoulou, Joanna
AU - Raabe, Florian J.
AU - Wagner, Elias
AU - Schmitt, Andrea
AU - Roeh, Astrid
AU - Falkai, Peter
AU - Keeser, Daniel
AU - Maurus, Isabel
AU - Roell, Lukas
TI - Mapping Individual Neuroanatomical Alterations to Schizophrenia Psychopathology with Normative Modeling
T2 - medRxiv (preprint)
J2 - medRxiv
PY - 2026
DA - 2026/04/01
PB - medRxiv
DO - 10.64898/2026.03.31.26349848
UR - https://doi.org/10.64898/2026.03.31.26349848
ER -

CSL-JSON

{
"id": "10.64898/2026.03.31.26349848",
"type": "article",
"title": "Mapping Individual Neuroanatomical Alterations to Schizophrenia Psychopathology with Normative Modeling",
"container-title": "medRxiv (preprint)",
"author": [
{
"family": "Spaeth",
"given": "Johanna"
},
{
"family": "Fraza",
"given": "Charlotte"
},
{
"family": "Yilmaz",
"given": "Deniz"
},
{
"family": "Deller",
"given": "Lena"
},
{
"literal": "BrainTrain Working Group"
},
{
"literal": "CDP Working Group"
},
{
"family": "Hasanaj",
"given": "Genc"
},
{
"family": "Kallweit",
"given": "Marcel"
},
{
"family": "Korman",
"given": "Maxim"
},
{
"family": "Boudriot",
"given": "Emanuel"
},
{
"family": "Yakimov",
"given": "Vladislav"
},
{
"family": "Moussiopoulou",
"given": "Joanna"
},
{
"family": "Raabe",
"given": "Florian J."
},
{
"family": "Wagner",
"given": "Elias"
},
{
"family": "Schmitt",
"given": "Andrea"
},
{
"family": "Roeh",
"given": "Astrid"
},
{
"family": "Falkai",
"given": "Peter"
},
{
"family": "Keeser",
"given": "Daniel"
},
{
"family": "Maurus",
"given": "Isabel"
},
{
"family": "Roell",
"given": "Lukas"
}
],
"container-title-short": "medRxiv",
"DOI": "10.64898/2026.03.31.26349848",
"publisher": "medRxiv",
"URL": "https://doi.org/10.64898/2026.03.31.26349848",
"issued": {
"date-parts": [
[
2026,
4,
1
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1162/imag.a.1269 [code]
From early to contemporary normative modeling: Mapping individual differences in neurophysiological signals.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: FreeSurfer, seaborn, pandas, 2 other tools, computational, 15 references
[2] doi:10.1073/pnas.2521055123 [code]
Empirical validation of race-neutral normative brain morphometry models across ethnoracially diverse populations.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: FreeSurfer, pandas, NumPy, computational, structural MRI / diffusion, 6 references, author Daniel Keeser
[3] doi:10.1038/s41467-026-72875-x [code]
Lifespan normative modeling of brain microstructure.
Journal: Nature communications
In common: seaborn, pandas, Matplotlib, 1 other tool, schizophrenia / psychosis, structural MRI / diffusion, 9 references
[4] doi:10.1038/s41593-026-02359-0 [code]
The cross-site reproducibility of MRI morphometric phenotypes in psychiatric disorders.
Journal: Nature neuroscience
In common: FreeSurfer, pandas, Matplotlib, 1 other tool, schizophrenia / psychosis, structural MRI / diffusion, 7 references
[5] doi:10.64898/2026.08.13.26360304 [code]
Lifespan brain structural variation reveals shared organization across mental health conditions
Journal: medRxiv (preprint)
In common: seaborn, pandas, Matplotlib, 1 other tool, 7 references
[6] doi:10.1371/journal.pbio.3003856 [code]
Aging and metabolism contribute separately to brain-body health.
Journal: PLoS biology
In common: FreeSurfer, seaborn, pandas, 2 other tools, structural MRI / diffusion, 4 references
[7] doi:10.1038/s41398-026-03902-0 [code]
Mapping heterogeneous brain structural subtypes in alzheimer's disease and mild cognitive impairment using normative models.
Journal: Translational psychiatry
In common: seaborn, pandas, Matplotlib, 1 other tool, structural MRI / diffusion, 5 references
[8] doi:10.1371/journal.pmed.1004809 [code]
Brain morphology in Anorexia Nervosa and its subtypes: A multi-cohort study of individual participant data.
Journal: PLoS medicine
In common: seaborn, pandas, Matplotlib, 1 other tool, structural MRI / diffusion, 4 references
[9] doi:10.1038/s41467-026-75585-6 [code]
Brain network dynamics reflect psychiatric illness status and transdiagnostic symptom profiles across health and disease.
Journal: Nature communications
In common: seaborn, pandas, Matplotlib, 1 other tool, schizophrenia / psychosis, 4 references
[10] doi:10.1038/s41467-026-71555-0 [code]
A deep representation learning model to predict response to vagus nerve stimulation.
Journal: Nature communications
In common: FreeSurfer, seaborn, pandas, 2 other tools, structural MRI / diffusion, 4 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.