Plasma Glial Fibrillary Acidic Protein (GFAP) shows age-dependent associations with externalizing psychopathology and atypical brain connectivity.
The 7 matches
- [1] § Materials and methods › Multivariate modeling of brain–GFAP/ NfL associations ↔ 05_run_sPLS.R, lines 1–41 · score 0.96 · optimal sparsity, cv.spls, sparse Partial, cross validation, brain connectivity deviation, brain connectivity features
- [2] § Materials and methods › Normative modeling ↔ 03_apply_normative_models.py, lines 1–15 · score 0.81 · normative models, pre trained, cVEDA, network connectivity, python, transfer
- [3] § Materials and methods › Sample size justification ↔ 04_run_clinical.R, lines 90–136 · score 0.80 · post hoc power, Johnson Neyman, Gamma GLMs, tailed, JN, EXT
- [4] § Materials and methods › Multivariate modeling of brain–GFAP/ NfL associations ↔ 05_run_sPLS.R, lines 1–41 · score 0.76 · ci.spls, optimized parameters, excluded zero, fitting, bootstrapping, Multivariate
- [5] § Materials and methods › Moderation analysis ↔ 04_run_clinical.R, lines 1–44 · score 0.62 · Gamma GLMs, age ranges, Moderation, JN, BMI, interaction
- [6] § Materials and methods › Functional brain connectivity ↔ 01_run_3dnetcorr.py, lines 1–13 · score 0.61 · dNetCorr, AFNI, network connectivity, Yeo
- [7] § Results › Association of resting brain networks with plasma GFAP/ NfL ↔ 05_run_sPLS.R, lines 94–136 · score 0.57 · optimal parameters, sPLS, variance, R2, components, bootstrap
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
R · 310 lines · 13 KB · MIT · 3 matches
- # =============================================================================
- # 05_run_sPLS.R
- # Sparse Partial Least Squares (sPLS) for brain connectivity vs. biomarkers
- # =============================================================================
- #
- # Methods (multivariate modeling):
- # - Separate sPLS regressions per outcome (e.g. GFAP, NfL).
- # - Predictors: brain connectivity deviation (Z) features; standardized.
- # - (1) Cross-validation (cv.spls) for optimal sparsity (eta) and K components.
- # - (2) Fit sPLS with optimized parameters.
- # - (3) Bootstrap (ci.spls, 10,000 resamples); retain predictors whose 95% CI
- # excludes zero (correct.spls).
- #
- # Requires: R package 'spls'
- # install.packages("spls")
- #
- # =============================================================================
- library(spls)
- # -----------------------------------------------------------------------------
- # Configuration: paths and column names (edit for your data)
- # -----------------------------------------------------------------------------
- # Path to analysis dataset (relative to working directory or absolute).
- # Dataset must contain:
- # - Outcome variable(s), e.g. GFAP and NfL (concentrations or log-transformed).
- # - Predictor columns: connectivity deviation (Z) scores (e.g. 136 BNFC edges),
- # in the same order as your template (e.g. VisualA_VisualB ... DefaultC_TemporalParietal).
- path_data <- "data_connectivity_biomarkers.csv"
- # Column name(s) of outcome(s) to model (one model per outcome).
- outcome_names <- c("GFAP_n", "NFL_n")
- # How to define predictor columns (connectivity features). Option A or B:
- # A) By first and last column names (inclusive).
- pred_first <- "VisualA_VisualB"
- pred_last <- "DefaultC_TemporalParietal"
- # B) Or set pred_cols explicitly, e.g.:
- # pred_cols <- setdiff(names(dat), c("sub_id", "age", "sex", outcome_names))
- # Cross-validation search grid (sparsity and number of components).
- eta_grid <- seq(0.1, 0.9, 0.1)
- K_grid <- 3:10
- # Bootstrap for confidence intervals.
- n_boot <- 10000
- ci_level <- 0.95
- set_seed <- 1
- # Multiple comparison correction over tested predictors (sPLS-selected only).
- # "none" = no correction; "bonferroni" = FWER; "BH" = FDR (Benjamini-Hochberg).
- # P-values are approximated from the bootstrap 95% CI (SE from CI width, then 2-tailed normal).
- multi_correction <- "BH"
- # -----------------------------------------------------------------------------
- # Load data and define predictor matrix
- # -----------------------------------------------------------------------------
- dat <- read.csv(path_data, stringsAsFactors = FALSE)
- # Predictor columns: connectivity features (between first and last, inclusive).
- idx_first <- which(names(dat) == pred_first)
- idx_last <- which(names(dat) == pred_last)
- if (length(idx_first) != 1 || length(idx_last) != 1)
- stop("pred_first and pred_last must each match exactly one column name.")
- pred_cols <- names(dat)[idx_first:idx_last]
- # Predictor matrix (standardized) and sample size
- X_raw <- as.matrix(dat[, pred_cols])
- X <- scale(X_raw, center = TRUE, scale = TRUE)
- if (is.null(colnames(X))) colnames(X) <- pred_cols
- n <- nrow(X)
- if (n != nrow(dat)) stop("Row mismatch between dat and X.")
- # -----------------------------------------------------------------------------
- # Run sPLS for each outcome
- # -----------------------------------------------------------------------------
- results <- list()
- for (outcome_name in outcome_names) {
- if (!outcome_name %in% names(dat))
- stop("Outcome column not found: ", outcome_name)
- Y <- as.matrix(dat[[outcome_name]])
- if (any(is.na(Y))) stop("Outcome ", outcome_name, " contains NA; remove or impute.")
- message("\n========== Outcome: ", outcome_name, " ==========")
- # ---- Step 1: Cross-validation for eta and K ----
- set.seed(set_seed)
- cv_fit <- cv.spls(X, Y, eta = eta_grid, K = K_grid)
- eta_opt <- cv_fit$eta.opt
- K_opt <- cv_fit$K.opt
- message("CV optimal: eta = ", eta_opt, ", K = ", K_opt)
- # ---- Step 2: Fit sPLS with optimal parameters ----
- fit <- spls::spls(X, Y, eta = eta_opt, K = K_opt)
- print(fit)
- # Variance explained (R²) and per-component R²
- Y_hat <- predict(fit)
- Y_true <- as.numeric(Y)
- R2 <- 1 - sum((Y_true - Y_hat)^2) / sum((Y_true - mean(Y_true))^2)
- message("Total R² = ", round(R2, 4))
- # Component scores and correlation with outcome (squared = variance explained per component)
- selected_vars <- rownames(fit$projection)
- X_sel <- X[, selected_vars, drop = FALSE]
- X_centered <- scale(X_sel, center = fit$meanx[selected_vars], scale = FALSE)
- W <- fit$projection
- components <- as.matrix(X_centered) %*% as.matrix(W)
- colnames(components) <- paste0("Component_", seq_len(fit$K))
- R2_components <- apply(components, 2, function(z) cor(z, Y_true)^2)
- message("Variance explained per component: ",
- paste(round(100 * R2_components, 2), "%", collapse = ", "))
- # ---- Step 3: Bootstrap CIs; retain only predictors whose CI excludes zero ----
- set.seed(set_seed)
- ci_fit <- ci.spls(fit, coverage = ci_level, B = n_boot,
- plot.it = FALSE, plot.fix = "y", plot.var = TRUE,
- K = fit$K, fit = fit$fit)
- # Corrected coefficients from bootstrap (beta = 0 for non-significant; rownames = predictor names)
- cf <- correct.spls(ci_fit)
- # Coefficient CIs (cibeta: matrix with rows = predictors, cols = lower, upper)
- cibeta <- ci_fit$cibeta
- if (is.list(cibeta)) cibeta <- cibeta[[1]]
- lb <- cibeta[, 1]
- ub <- cibeta[, 2]
- betas <- coef(fit)
- betas <- betas[betas != 0]
- # Variable names: same order as cibeta rows (use rownames if present, else names(betas))
- var_names <- if (!is.null(rownames(cibeta)) && length(rownames(cibeta)) == nrow(cibeta)) {
- rownames(cibeta)
- } else {
- names(betas)
- }
- # Significant predictors: 95% CI excludes zero (interval does not contain 0)
- sig_pred <- var_names[(lb > 0) | (ub < 0)]
- n_sig <- length(sig_pred)
- n_total <- ncol(X)
- n_selected <- length(selected_vars)
- # Optional multiple comparison correction (over n_selected tested predictors)
- sig_pred_final <- sig_pred
- n_sig_corrected <- n_sig
- if (multi_correction %in% c("bonferroni", "BH") && length(var_names) > 0) {
- beta_point <- cf[var_names, 1]
- if (is.null(names(beta_point))) names(beta_point) <- var_names
- na_beta <- is.na(beta_point)
- beta_point[na_beta] <- (lb[na_beta] + ub[na_beta]) / 2
- SE_approx <- (ub - lb) / (2 * 1.96)
- SE_approx[SE_approx <= 0] <- 1e-10
- p_approx <- 2 * pnorm(-abs(beta_point) / SE_approx)
- p_adj <- p.adjust(p_approx, method = if (multi_correction == "bonferroni") "bonferroni" else "BH")
- sig_pred_corrected <- var_names[p_adj < 0.05]
- n_sig_corrected <- length(sig_pred_corrected)
- sig_pred_final <- sig_pred_corrected
- message("After ", multi_correction, " correction: ", n_sig_corrected, " predictor(s) significant (uncorrected: ", n_sig, ").")
- }
- message("After bootstrap correction: ", n_sig, " predictor(s) with 95% CI excluding zero.")
- # Beta from corrected coefficients (cf); fallback to midpoint of CI if cf has no rownames/match
- beta_sig <- cf[sig_pred_final, 1]
- if (is.null(names(beta_sig))) names(beta_sig) <- sig_pred_final
- if (length(sig_pred_final) > 0 && any(is.na(beta_sig))) beta_sig[is.na(beta_sig)] <- (cibeta[sig_pred_final, 1][is.na(beta_sig)] + cibeta[sig_pred_final, 2][is.na(beta_sig)]) / 2
- # Variance explained using significant pairs only (after multi-test correction if applied)
- R2_sig <- NA_real_
- R2_components_sig <- NULL
- if (length(sig_pred_final) > 0) {
- sig_in_X <- intersect(sig_pred_final, colnames(X))
- if (length(sig_in_X) == 0) sig_in_X <- intersect(sig_pred_final, pred_cols)
- if (length(sig_in_X) > 0) {
- X_sig <- X[, sig_in_X, drop = FALSE]
- beta_use <- beta_sig[sig_in_X]
- Y_hat_sig <- as.numeric(X_sig %*% beta_use)
- R2_sig <- 1 - sum((Y_true - Y_hat_sig)^2) / sum((Y_true - mean(Y_true))^2)
- message("Variance explained (significant pairs only): R² = ", round(R2_sig, 4))
- # Per-predictor squared correlation with Y (marginal variance explained by each)
- R2_components_sig <- setNames(
- vapply(sig_in_X, function(v) cor(X_sig[, v] * beta_use[v], Y_true)^2, 0),
- sig_in_X
- )
- }
- }
- message("Correction summary: sPLS selected ", n_selected, " of ", n_total, " predictors; ",
- n_sig, " remained significant after bootstrap",
- if (multi_correction %in% c("bonferroni", "BH")) paste0("; ", n_sig_corrected, " after ", multi_correction) else "",
- ". R² (full sPLS) = ", round(100 * R2, 2), "%; R² (significant only) = ",
- if (length(sig_pred_final) > 0 && !is.na(R2_sig)) round(100 * R2_sig, 2) else "—", "%.")
- # Store for reporting / export
- res <- list(
- outcome_name = outcome_name,
- eta_opt = eta_opt,
- K_opt = K_opt,
- R2 = R2,
- R2_sig = R2_sig,
- R2_components = R2_components,
- R2_components_sig = R2_components_sig,
- fit = fit,
- coef = betas,
- coef_corrected = cf,
- cibeta = cibeta,
- significant = sig_pred,
- significant_final = sig_pred_final,
- n_sig_corrected = n_sig_corrected,
- multi_correction = multi_correction,
- components = components,
- Y_hat = Y_hat,
- Y_true = Y_true
- )
- results[[outcome_name]] <- res
- # Optional: add component scores and composite to dataset for this outcome
- comp_df <- as.data.frame(components)
- names(comp_df) <- paste0(outcome_name, "_", names(comp_df))
- n_obs <- nrow(X)
- # Composite = X_selected %*% coefs (same order: columns of X_sel match order of non-zero coefs from fit)
- coefs <- coef(fit)
- coefs <- coefs[coefs != 0]
- if (length(coefs) == ncol(X_sel)) {
- composite <- as.numeric(as.matrix(X_sel) %*% coefs)
- } else {
- # coef(fit) may be full-length; take coefficients for selected vars by position
- idx <- match(selected_vars, colnames(X))
- coefs_sel <- coef(fit)[idx]
- composite <- as.numeric(as.matrix(X_sel) %*% coefs_sel)
- }
- if (length(composite) != n_obs) composite <- rep(NA_real_, n_obs)
- dat[[paste0(outcome_name, "_Component_Composite")]] <- composite
- dat <- cbind(dat, comp_df)
- # Print results immediately (significant net pairs with beta and CI, by sign)
- cat("\n========== ", outcome_name, " ==========\n", sep = "")
- cat("eta = ", eta_opt, ", K = ", K_opt, "\n", sep = "")
- cat("Variables: ", n_selected, " selected by sPLS, ", n_sig, " significant after bootstrap", sep = "")
- if (multi_correction %in% c("bonferroni", "BH")) cat(" (", n_sig_corrected, " after ", multi_correction, ")", sep = "")
- cat(" (of ", n_total, " total).\n", sep = "")
- cat("R² (full sPLS) = ", round(100 * R2, 2), "%; R² (significant pairs only) = ", sep = "")
- if (length(sig_pred_final) > 0 && !is.na(R2_sig)) {
- cat(round(100 * R2_sig, 2), "%.\n", sep = "")
- } else {
- cat(round(100 * R2, 2), "%.\n", sep = "")
- }
- if (length(sig_pred_final) == 0) {
- cat("No significant connectivity features (95% CI excluding zero", if (multi_correction %in% c("bonferroni", "BH")) paste0("; ", multi_correction, " applied") else "", ").\n")
- } else {
- # Beta from correct.spls (bootstrap-corrected coefficients)
- ci_lo <- cibeta[sig_pred_final, 1]
- ci_hi <- cibeta[sig_pred_final, 2]
- beta_vals <- cf[sig_pred_final, 1]
- if (is.null(names(beta_vals))) names(beta_vals) <- sig_pred_final
- if (any(is.na(beta_vals))) beta_vals[is.na(beta_vals)] <- (ci_lo[is.na(beta_vals)] + ci_hi[is.na(beta_vals)]) / 2
- pos <- sig_pred_final[beta_vals > 0]
- neg <- sig_pred_final[beta_vals < 0]
- cat("\nSignificant net pairs (positive association with ", outcome_name, "):\n", sep = "")
- if (length(pos) > 0) {
- for (v in pos) {
- b <- beta_vals[v]
- ci <- c(ci_lo[v], ci_hi[v])
- cat(" ", v, " beta = ", round(b, 3), ", 95% CI [", round(ci[1], 3), ", ", round(ci[2], 3), "]\n", sep = "")
- }
- } else {
- cat(" (none)\n")
- }
- cat("\nSignificant net pairs (negative association with ", outcome_name, "):\n", sep = "")
- if (length(neg) > 0) {
- for (v in neg) {
- b <- beta_vals[v]
- ci <- c(ci_lo[v], ci_hi[v])
- cat(" ", v, " beta = ", round(b, 3), ", 95% CI [", round(ci[1], 3), ", ", round(ci[2], 3), "]\n", sep = "")
- }
- } else {
- cat(" (none)\n")
- }
- }
- }
- # -----------------------------------------------------------------------------
- # Optional: write results to CSV (coefficients and CIs per outcome)
- # -----------------------------------------------------------------------------
- #
- for (outcome_name in names(results)) {
- res <- results[[outcome_name]]
- vars <- rownames(res$cibeta)
- if (is.null(vars) || length(vars) == 0) next
- beta_vals <- res$coef_corrected[vars, 1]
- if (is.null(names(beta_vals))) names(beta_vals) <- vars
- tbl <- data.frame(
- outcome = outcome_name,
- predictor = vars,
- beta = beta_vals,
- CI_lower = res$cibeta[, 1],
- CI_upper = res$cibeta[, 2],
- significant = vars %in% res$significant
- )
- write.csv(tbl, paste0("sPLS_", outcome_name, "_coefficients.csv"), row.names = FALSE)
- }
- write.csv(dat, "data_connectivity_biomarkers_with_sPLS.csv", row.names = FALSE)
05_run_sPLS.R at commit 45856ec, under MIT · at the source
Overview
and 18 other authors
Kamakshi Kartik17, Kartik Kalyanram17, Sylvane Desrivieres18, Gareth Barker19, Dimitri Papadopoulos Orfanos20, Mireille B Toledano21, Pratima Murthy6, Nilakshi Vaidya22, Ghattu Krishnaveni13, Gunter Schumann22,23, Kuldeep Kumar Sharma24, Binukumar Bhaskarapillai24, K Thennarasu24, Rajan Kashyap25, Rose Dawn Bharath25, Amit Chakrabarti26, G K Chetan1, Muchukunte Mukunda Srinivas Bharath2,2727 affiliations
- Department of Human Genetics, National Institute of Mental Health and Neurosciences (NIMHANS), No. 2900, Hosur Road, Bengaluru, 560029 Karnataka India
- Department of Clinical Psychopharmacology and Neurotoxicology, NIMHANS, Bengaluru, Karnataka India
- Department of Integrative Medicine, NIMHANS, Bengaluru, Karnataka India
- Department of Neurochemistry, NIMHANS, Bengaluru, Karnataka India
- Department of Child and Adolescent Psychiatry, NIMHANS, Bengaluru, Karnataka India
- Department of Psychiatry, NIMHANS, Bengaluru, Karnataka India
- Rohini Nilekani Centre for Brain and Mind, Department of Psychiatry, NIMHANS, Bengaluru, Karnataka India
- Population Health Sciences, Bristol Medical School, University of Bristol, Beacon House, Queens Road, Bristol, BS8 1QU United Kingdom
- Department of Psychiatry, Post Graduate Institute of Medical Education and Research, Chandigarh, 160012 India
- Department of Psychiatry, Regional Institute of Medical Sciences, Lamphel Road, Lamphelpat, Imphal, Manipur 795004 India
- Department of Psychology, Regional Institute of Medical Sciences, Imphal, 795004 India
- Primary Care, Population Sciences and Medical Education, University of Southampton, Southampton, United Kingdom
- Epidemiology Research Unit, CSI Holdsworth Memorial Hospital, Mysuru, 570001 Karnataka India
- Division of Nutrition, St John’s Research Institute, Bengaluru, 560034 India
- Department of Psychiatry, St. John’s Medical College and Hospital, Bengaluru, 560034 Karnataka India
- Department of Medical Ethics, St. John’s Medical College and Hospital, Bengaluru, 560034 Karnataka India
- Rishi Valley Rural Health Centre, Madanapalle, Chittoor, Andhra Pradesh 517352 India
- Centre for Population Neuroscience and Precision Medicine, Institute of Psychology, Psychiatry & Neuroscience, MRC SGDP Centre, King’s College London, 16 De Crespgny Park, SE5 8AF London, United Kingdom
- Department of Neuroimaging, Institute of Psychology, Psychiatry and Neuroscience, King’s College London, London, SE5 8AF United Kingdom
- NeuroSpin, CEA, Université Paris-Saclay, Paris, France
- Mohn Centre for Children’s Health and Wellbeing, School of Public Health, Imperial College London, London, United Kingdom
- Centre for Population Neuroscience and Precision Medicine, Charite Mental Health, Dept. of Psychiatry and Psychotherapy, Charite Universitaetsmedizin Berlin, Berlin, Germany
- Centre for Population Neuroscience and Precision Medicine, Institute for Science and Technology of Brain-Inspired Intelligence, Fudan University, Shanghai, China
- Department of Biostatistics, NIMHANS, Bengaluru, Karnataka India
- Department of Neuroimaging and Interventional Radiology, NIMHANS, Bengaluru, Karnataka India
- ICMR-Centre for Ageing and Mental Health, Indian Council of Medical Research, Block-DP1, Sector-V, Salt Lake, Kolkata, 700 091 India
- Centre for Neurobehavioral Toxicology, Department of Clinical Psychopharmacology and Neurotoxicology, NIMHANS, Bengaluru, Karnataka India
Abstract
Externalizing disorders are common neurodevelopmental conditions, yet their underlying biology is not fully understood. Integrating peripheral biomarkers with brain imaging offers a powerful approach to elucidate the pathophysiology of these disorders. This study aimed to investigate the association between indicators of glial activation (glial fibrillary acidic protein; GFAP) and axonal injury (neurofilament light chain; NfL) in plasma with functional brain connectivity, and externalizing psychopathology (EXT) in a neurodevelopmental cohort. Towards this, a cross-sectional study was conducted with 144 participants selected from the Indian cVEDA cohort and balanced into EXT and healthy control (HC) groups using Mahalanobis distance matching. Plasma GFAP and NfL were quantified using Simoa technology. Resting-state fMRI data were used to generate between-network connectivity deviation scores via normative modelling. We used Gamma General Linear Models (Gamma GLMs) to test for an age-by-EXT interaction on GFAP/ NfL levels and sparse partial least squares (sPLS) regression to identify connectivity features that correlated with them. We found a significant age-by-EXT interaction for GFAP (p = 0.002), where EXT was associated with higher GFAP levels only in younger participants (<14 years). No significant effects were found for NfL. The sPLS analysis identified a significant five-feature brain connectivity signature that correlated with GFAP levels. This pattern was characterized by atypically strong connectivity between sensorimotor-limbic and attention-default mode networks, and weaker-than-expected connectivity within the default mode network. In conclusion, our findings identify a strong association between plasma GFAP and EXT in youth in an age dependent manner, suggesting a key role for glial activation in the early pathophysiology of these disorders. This process is linked to a specific, multivariate pattern of brain dysconnectivity, providing a potential neurobiological signature that warrants further investigation.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 7 matches between paragraphs and lines of code.
hollabharath/cveda-simoa-connectivity
45856ecf6e58e4b352cd85192e38bfeec4f49621, 8 February 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
8 files
- 01_run_3dnetcorr.py, Python, 138 lines, 1 match
- 02_extract_FZ.py, Python, 126 lines
- 03_apply_normative_model
s.py , Python, 439 lines, 1 match - 04_run_clinical.R, R, 136 lines, 2 matches
- 05_run_sPLS.R, R, 310 lines, 3 matches
- 06_run_fMRI.R, R, 141 lines
- LICENSE, License, 21 lines
- README.md, Text, 48 lines
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:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 6 scripts, each with its path and the digest of its content;
- 7 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.
Data availability
The analysis scripts used in this study are available in a public GitHub repository: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
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 1, 28 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 38 authors, 2 keywords, 13 MeSH terms, 3 funders, 45 references.
Cite
This paper
Niveditha, B. S., Holla, B., Subramanian, S., Gagana, N., Bhargavi, K. M., Sharma, E., Mahadevan, J., Purushottam, M., Viswanath, B., Benegal, V., Arunachal, G., Heron, J., Hickman, M., Basu, D., Subodh, B. N., Singh, L., Singh, R., Kumaran, K., Kuriyan, R., . . . Srinivas Bharath, M. M. (2026). Plasma Glial Fibrillary Acidic Protein (GFAP) shows age-dependent associations with externalizing psychopathology and atypical brain connectivity. Translational psychiatry, 16(1), 382. https://
BibTeX
@article{niveditha2026pl
author = {Niveditha, B S and Holla, Bharath and Subramanian, Sarada and Gagana, N and Bhargavi, K M and Sharma, Eesha and Mahadevan, Jayant and Purushottam, Meera and Viswanath, Biju and Benegal, Vivek and Arunachal, Gautham and Heron, Jon and Hickman, Matthew and Basu, Debasish and Subodh, B N and Singh, Lenin and Singh, Roshan and Kumaran, Kalyanaraman and Kuriyan, Rebecca and Kurpad, Sunita Simon and Kartik, Kamakshi and Kalyanram, Kartik and Desrivieres, Sylvane and Barker, Gareth and Papadopoulos Orfanos, Dimitri and Toledano, Mireille B and Murthy, Pratima and Vaidya, Nilakshi and Krishnaveni, Ghattu and Schumann, Gunter and Sharma, Kuldeep Kumar and Bhaskarapillai, Binukumar and Thennarasu, K and Kashyap, Rajan and Bharath, Rose Dawn and Chakrabarti, Amit and Chetan, G K and Srinivas Bharath, Muchukunte Mukunda},
title = {{Plasma Glial Fibrillary Acidic Protein (GFAP) shows age-dependent associations with externalizing psychopathology and atypical brain connectivity}},
journal = {Translational psychiatry},
year = {2026},
month = may,
volume = {16},
number = {1},
pages = {382},
publisher = {Nature Publishing Group},
issn = {2158-3188},
doi = {10.1038/
url = {https://
pmid = {42215432},
pmcid = {PMC13407853}
}
RIS
TY - JOUR
AU - Niveditha, B S
AU - Holla, Bharath
AU - Subramanian, Sarada
AU - Gagana, N
AU - Bhargavi, K M
AU - Sharma, Eesha
AU - Mahadevan, Jayant
AU - Purushottam, Meera
AU - Viswanath, Biju
AU - Benegal, Vivek
AU - Arunachal, Gautham
AU - Heron, Jon
AU - Hickman, Matthew
AU - Basu, Debasish
AU - Subodh, B N
AU - Singh, Lenin
AU - Singh, Roshan
AU - Kumaran, Kalyanaraman
AU - Kuriyan, Rebecca
AU - Kurpad, Sunita Simon
AU - Kartik, Kamakshi
AU - Kalyanram, Kartik
AU - Desrivieres, Sylvane
AU - Barker, Gareth
AU - Papadopoulos Orfanos, Dimitri
AU - Toledano, Mireille B
AU - Murthy, Pratima
AU - Vaidya, Nilakshi
AU - Krishnaveni, Ghattu
AU - Schumann, Gunter
AU - Sharma, Kuldeep Kumar
AU - Bhaskarapillai, Binukumar
AU - Thennarasu, K
AU - Kashyap, Rajan
AU - Bharath, Rose Dawn
AU - Chakrabarti, Amit
AU - Chetan, G K
AU - Srinivas Bharath, Muchukunte Mukunda
TI - Plasma Glial Fibrillary Acidic Protein (GFAP) shows age-dependent associations with externalizing psychopathology and atypical brain connectivity
T2 - Translational psychiatry
J2 - Transl Psychiatry
PY - 2026
DA - 2026/
VL - 16
IS - 1
SP - 382
SN - 2158-3188
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Plasma Glial Fibrillary Acidic Protein (GFAP) shows age-dependent associations with externalizing psychopathology and atypical brain connectivity",
"container-title": "Translational psychiatry",
"author": [
{
"family": "Niveditha",
"given": "B S"
},
{
"family": "Holla",
"given": "Bharath"
},
{
"family": "Subramanian",
"given": "Sarada"
},
{
"family": "Gagana",
"given": "N"
},
{
"family": "Bhargavi",
"given": "K M"
},
{
"family": "Sharma",
"given": "Eesha"
},
{
"family": "Mahadevan",
"given": "Jayant"
},
{
"family": "Purushottam",
"given": "Meera"
},
{
"family": "Viswanath",
"given": "Biju"
},
{
"family": "Benegal",
"given": "Vivek"
},
{
"family": "Arunachal",
"given": "Gautham"
},
{
"family": "Heron",
"given": "Jon"
},
{
"family": "Hickman",
"given": "Matthew"
},
{
"family": "Basu",
"given": "Debasish"
},
{
"family": "Subodh",
"given": "B N"
},
{
"family": "Singh",
"given": "Lenin"
},
{
"family": "Singh",
"given": "Roshan"
},
{
"family": "Kumaran",
"given": "Kalyanaraman"
},
{
"family": "Kuriyan",
"given": "Rebecca"
},
{
"family": "Kurpad",
"given": "Sunita Simon"
},
{
"family": "Kartik",
"given": "Kamakshi"
},
{
"family": "Kalyanram",
"given": "Kartik"
},
{
"family": "Desrivieres",
"given": "Sylvane"
},
{
"family": "Barker",
"given": "Gareth"
},
{
"family": "Papadopoulos Orfanos",
"given": "Dimitri"
},
{
"family": "Toledano",
"given": "Mireille B"
},
{
"family": "Murthy",
"given": "Pratima"
},
{
"family": "Vaidya",
"given": "Nilakshi"
},
{
"family": "Krishnaveni",
"given": "Ghattu"
},
{
"family": "Schumann",
"given": "Gunter"
},
{
"family": "Sharma",
"given": "Kuldeep Kumar"
},
{
"family": "Bhaskarapillai",
"given": "Binukumar"
},
{
"family": "Thennarasu",
"given": "K"
},
{
"family": "Kashyap",
"given": "Rajan"
},
{
"family": "Bharath",
"given": "Rose Dawn"
},
{
"family": "Chakrabarti",
"given": "Amit"
},
{
"family": "Chetan",
"given": "G K"
},
{
"family": "Srinivas Bharath",
"given": "Muchukunte Mukunda"
}
],
"container-title-short":
"volume": "16",
"issue": "1",
"page": "382",
"DOI": "10.1038/
"PMID": "42215432",
"PMCID": "PMC13407853",
"ISSN": "2158-3188",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
29
]
]
}
}
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.1038/s41398-026-04010-9 [code]
- Bullying victimization and brain development: a longitudinal structural magnetic resonance imaging study from adolescence to early adulthood.Journal: Translational psychiatryIn common: easystats, ggpubr, ggplot2, 1 other tool, 1 reference, 5 authors
- [2] doi:10.1126/sciadv.aed0772 [code]
- Deep learning reveals a neurocomputational mechanism predicting depression risk in adolescents.Journal: Science advancesIn common: ggplot2, tidyverse, 5 authors
- [3] doi:10.1038/s41386-026-02401-6 [code]
- Model-based analysis of stop-signal data reveals robust neural and clinical correlates of evidence accumulation but not inhibition.Journal: Neuropsychopharmacology : official publication of the American College of NeuropsychopharmacologyIn common: ggplot2, tidyverse, pandas, 1 other tool, 1 reference, 3 authors
- [4] doi:10.1093/nc/niag029 [code]
- A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception.Journal: Neuroscience of consciousnessIn common: AFNI, easystats, ggpubr, 7 other tools, 1 reference
- [5] doi:10.1038/s41597-026-07350-9 [code]
- An open multi-center MEG-EEG dataset for studying conscious visual perception.Journal: Scientific dataIn common: AFNI, easystats, ggplot2, 6 other tools
- [6] doi:10.1038/s41597-026-07377-y [code]
- An open-access multi-site fMRI dataset for investigating conscious visual perception.Journal: Scientific dataIn common: AFNI, easystats, ggplot2, 6 other tools
- [7] doi:10.1162/imag.a.1325 [code]
- Decoding everyday levels of musical training from subcortical white-matter architecture.Journal: Imaging neuroscience (Cambridge, Mass.)In common: ggpubr, ggplot2, seaborn, 5 other tools, 2 references
- [8] 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: seaborn, pandas, SciPy, 2 other tools, 4 references
- [9] doi:10.1162/imag.a.1245 [code]
- Towards precision EEG connectomics: Evaluating the benefits of dense sampling.Journal: Imaging neuroscience (Cambridge, Mass.)In common: AFNI, ggpubr, ggplot2, 6 other tools
- [10] doi:10.7554/elife.107088 [code]
- Development of auditory and spontaneous movement responses to music over the first postnatal year.Journal: eLifeIn common: easystats, ggpubr, ggplot2, 6 other tools
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.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 6 scripts, and 7 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:9b966ea257df10ab…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
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.
