Unveiling the glymphatic system's role in brain aging: A comprehensive biomarker and modifiable intervention target.
The 17 matches · 1 of them tie a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
- [1] § Materials and Methods › Development and Validation of Brain Age Models. ↔ Brain age models/brain_age_model.py, lines 44–124 · score 0.86 · fold cross validation, absolute error, model training, chronological age, brain age model, XGBoost
- [2] § paragraph 3 ↔ DTI-ALPS Association/2_factor_analysis_ml.py, lines 1–25 · score 0.77 · CatBoost, LightGBM, machine learning, XGBoost, DTI ALPS, algorithms
- [3] § Materials and Methods › Protein-Wide and Genome-Wide Analysis of BAGs. ↔ BAGs Associations/BAG_GWAS/1_run_gwas.sh, the whole file · a weak match · score 0.76 · age squared sex, age sex interaction, GWAS, batch, gene, positional
- [4] § Results › Protein-Wide and Genome-Wide Associations of BAGs. ↔ BAGs Associations/BAG_associations_analysis.R, lines 407–457 · score 0.76 · IL18R1, BAG related proteins, BAG associated, CD36, CXCL17, LRRN1
- [5] § Results › BAGs in Organ-Specific Chronic Disease and Predict Mortality Risk. ↔ Brain age models/disease_analysis.py, lines 37–59 · score 0.73 · heart failure, respiratory failure, bipolar disorder, Nervous, stroke, parkinsonism
- [6] § Results › BAGs in Organ-Specific Chronic Disease and Predict Mortality Risk. ↔ BAGs Associations/BAG_associations_analysis.R, lines 41–120 · score 0.73 · heart failure, respiratory failure, bipolar disorder, stroke, parkinsonism, diabetes
- [7] § Materials and Methods › Modifiable Factors and Their Trajectory with BAG Change. ↔ BAGs Associations/BAG_associations_analysis.R, lines 614–663 · score 0.69 · latent class growth, modifiable factors, LCGA, trajectories, population, brain age
- [8] § Results › Specific Organ Age Gap on BAGs Derived from the DTI-ALPS. ↔ BAGs Associations/BAG_associations_visualization.R, lines 81–131 · score 0.66 · 60–65, 45–50, 70–75, organs, females, Pulmonary
- [9] § Materials and Methods › Development and Validation of Brain Age Models. ↔ Brain age models/visualize_predictions.py, lines 93–192 · score 0.65 · linear regression, predicted age, chronological age, brain age model, Pearson, correlation
- [10] § Results › Protein-Wide and Genome-Wide Associations of BAGs. ↔ BAGs Associations/BAG_associations_visualization.R, lines 485–560 · score 0.62 · BAG related proteins, genome wide, mortality risk, Manhattan, log10, Brain age gap
- [11] § Results › Modifiable Factors and Their Trajectories Associate with BAGs. ↔ BAGs Associations/BAG_associations_analysis.R, lines 726–768 · score 0.62 · red wine, mmHg, modifiable factors, WHR, trajectories, females
- [12] § Results › Protein-Wide and Genome-Wide Associations of BAGs. ↔ BAGs Associations/BAG_associations_analysis.R, lines 324–379 · score 0.60 · BAG related proteins, smoke status, alcohol frequency, Brain age gap, BMI, Cox
- [13] § Results › Modifiable Factors and Their Trajectories Associate with BAGs. ↔ BAGs Associations/BAG_associations_analysis.R, lines 614–663 · score 0.55 · latent class growth, Modifiable factors, LCGA, Brain age gap, trajectories, SBP
- [14] § Materials and Methods › Health-Related Outcomes and Mortality Risk Prediction. ↔ BAGs Associations/BAG_associations_analysis.R, lines 41–120 · score 0.55 · disease categories, chronic diseases, Stroke, Cohen, Disorders, healthy
- [15] § Results › Characteristic of the Study Population. ↔ Population characteristics/Population_characteristics.R, lines 1–50 · score 0.54 · multimodal brain imaging, age SD, Population, males, healthy, Disease
- [16] § Results › Specific Organ Age Gap on BAGs Derived from the DTI-ALPS. ↔ DTI-ALPS Association/2_factor_analysis_ml.py, lines 111–139 · score 0.53 · Gradient Boosting, XGBoost, SHAP, DTI ALPS, model
- [17] § Results › BAGs in Organ-Specific Chronic Disease and Predict Mortality Risk. ↔ BAGs Associations/BAG_associations_analysis.R, lines 1–39 · score 0.52 · Deceased individuals, mortality risk, fitting, Chronic, Organ, BAG
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 · 837 lines · 32 KB · no license · 8 matches
- # BAG Associations
- # This script investigates the association of Brain Age Gap (BAG) with organ age gap, disease, mortality risk, proteins, and modifiable factors
- # Workflow:
- # 1. Associations of organ age gap on brain and cognition age gap
- # 2. Brain age gaps in chronic diseases and deceased individuals
- # 3. Brain age gaps predict mortality risk
- # 4. Proteomic analysis of brain age gaps
- # 5. Association of modifiable factors with brain age gaps
- # 6. Trajectories of modifiable factors with brain age gaps
- #=============================================================================
- #1. Associations of organ age gap on brain and cognition age gap
- #=============================================================================
- library(lm.beta)
- data_all<-read.csv("Data_Brain_Organ_predictions.csv")
- data_female<-subset(data_all, Sex == 0)
- data_male<-subset(data_all, Sex == 1)
- ######1.1 All population
- data_all$Sex<-factor(data_all$Sex)
- for (col in 2:7){
- data_all[,col]<-scale(data_all[,col])
- }
- Brain_total<- c()
- for (i in c(4:6)){
- fit<-lm(Brain_age_gap_resid~data_all[,i]+Sex+Age_attending_2,data=data_all)
- n_obs <- nobs(fit)
- Brain_total<- rbind(Brain_total, c(colnames(data_all)[i], "Brain_Total", coef(summary(fit))[2,], confint(fit)[2,c(1,2)], n_obs))
- }
- Brain_total <- data.frame(Brain_total)
- Cognition_total<- c()
- for (i in c(4:6)){
- fit<-lm(Cognition_age_gap_resid~data_all[,i]+Sex+Age_attending_2,data=data_all)
- n_obs <- nobs(fit)
- Cognition_total<- rbind(Cognition_total, c(colnames(data_all)[i], "Cognition_Total", coef(summary(fit))[2,], confint(fit)[2,c(1,2)], n_obs))
- }
- Cognition_total <- data.frame(Cognition_total)
- ######1.2 Female
- Brain_female <- lm(Brain_age_gap_resid~data_female[,i]+Age_attending_2,data=data_female)
- Cognition_female <-lm(Cognition_age_gap_resid~data_female[,i]+Age_attending_2,data=data_female)
- ######1.3 Male
- Brain_male <- lm(Brain_age_gap_resid~data_male[,i]+Age_attending_2,data=data_male)
- Cognition_male <- lm(Cognition_age_gap_resid~data_male[,i]+Age_attending_2,data=data_male)
- ##Merge results
- Brain<-c()
- Brain<-rbind(Brain,
- Brain_total,
- Brain_female,
- Brain_male
- )
- write.csv(Brain,file="Regression_Brain_age_model_healthy.csv",row.names=FALSE)
- Cognition<-c()
- Cognition<-rbind(Cognition,
- Cognition_total,
- Cognition_female,
- Cognition_male
- )
- write.csv(Cognition,file="Regression_Cognition_age_model_healthy.csv",row.names=FALSE)
- #=============================================================================
- #2.Brain age gaps in chronic diseases and deceased individuals
- #=============================================================================
- ######4.1 18 disease categories
- data_list <- list(
- list(data = dt1, response_var = "Anxiety_disorders", group_var = "Group1"),
- list(data = dt2, response_var = "Bipolar_disorder", group_var = "Group2"),
- list(data = dt3, response_var = "Cancer", group_var = "Group3"),
- list(data = dt4, response_var = "COPD", group_var = "Group4"),
- list(data = dt5, response_var = "Dementia_Parkinsonism", group_var = "Group5"),
- list(data = dt6, response_var = "Depression", group_var = "Group6"),
- list(data = dt7, response_var = "Diabetes", group_var = "Group7"),
- list(data = dt8, response_var = "Heart_failure", group_var = "Group8"),
- list(data = dt9, response_var = "Hypertension", group_var = "Group9"),
- list(data = dt10, response_var = "Liver_disease", group_var = "Group10"),
- list(data = dt11, response_var = "Ischaemic_HD", group_var = "Group11"),
- list(data = dt12, response_var = "Multiple_sclerosis", group_var = "Group12"),
- list(data = dt13, response_var = "Osteoarthritis", group_var = "Group13"),
- list(data = dt14, response_var = "Osteoporosis", group_var = "Group14"),
- list(data = dt15, response_var = "Renal_failure", group_var = "Group15"),
- list(data = dt16, response_var = "Respiratory_failure", group_var = "Group16"),
- list(data = dt17, response_var = "Schizophrenia", group_var = "Group17"),
- list(data = dt18, response_var = "Stroke", group_var = "Group18")
- )
- results <- list()
- for (item in data_list) {
- data <- item$data
- response_var <- item$response_var
- group_var <- item$group_var
- fit <- t.test(as.formula(paste(response_var, "~", group_var)), data = data)
- n_disease <- sum(data[[group_var]] == "disease")
- n_healthy <- sum(data[[group_var]] == "healthy")
- sd_disease <- sd(data[[response_var]][data[[group_var]] == "disease"], na.rm = TRUE)
- sd_healthy <- sd(data[[response_var]][data[[group_var]] == "healthy"], na.rm = TRUE)
- result <- c(
- response_var,
- fit$statistic,
- fit$p.value,
- fit$conf.int[1],
- fit$conf.int[2],
- fit$estimate[1],
- fit$estimate[2],
- n_disease,
- n_healthy,
- sd_disease,
- sd_healthy
- )
- results[[length(results) + 1]] <- result
- }
- results_df <- do.call(rbind, results)
- ##calculate Cohen's d
- data <- data.frame(results_df)
- calculate_cohens_d <- function(t_value, n1, n2) {
- d <- t_value * sqrt((n1 + n2) / (n1 * n2))
- return(d)
- }
- t_value <- data$t.value
- n1 <- data$N_Healthy
- n2 <- data$N_Disease
- t_value <- as.numeric(t_value)
- n1 <- as.numeric(n1)
- n2 <- as.numeric(n2)
- Cohens_d <- calculate_cohens_d(t_value, n1, n2)
- Cohens_d <- data.frame(Cohens_d)
- Results <- cbind(data, Cohens_d)
- write.csv(Results, "Results_brain_age_gap_single_disease.csv", row.names = FALSE)
- ######2.2 eight major system diseases
- data_list <- list(
- list(data = dt1, response_var = "Abdominal", group_var = "Group1"),
- list(data = dt2, response_var = "Cancer", group_var = "Group2"),
- list(data = dt3, response_var = "Cardiovascular", group_var = "Group3"),
- list(data = dt4, response_var = "Endocrine", group_var = "Group4"),
- list(data = dt5, response_var = "Mental", group_var = "Group5"),
- list(data = dt6, response_var = "Musculoskeletal", group_var = "Group6"),
- list(data = dt7, response_var = "Nervous", group_var = "Group7"),
- list(data = dt8, response_var = "Pulmonary", group_var = "Group8")
- )
- results <- list()
- for (item in data_list) {
- data <- item$data
- response_var <- item$response_var
- group_var <- item$group_var
- fit <- t.test(as.formula(paste(response_var, "~", group_var)), data = data)
- n_disease <- sum(data[[group_var]] == "disease")
- n_healthy <- sum(data[[group_var]] == "healthy")
- sd_disease <- sd(data[[response_var]][data[[group_var]] == "disease"], na.rm = TRUE)
- sd_healthy <- sd(data[[response_var]][data[[group_var]] == "healthy"], na.rm = TRUE)
- result <- c(
- response_var,
- fit$statistic,
- fit$p.value,
- fit$conf.int[1],
- fit$conf.int[2],
- fit$estimate[1],
- fit$estimate[2],
- n_disease,
- n_healthy,
- sd_disease,
- sd_healthy
- )
- results[[length(results) + 1]] <- result
- }
- results_df <- do.call(rbind, results)
- ##calculate Cohen's d
- data <- data.frame(results_df)
- calculate_cohens_d <- function(t_value, n1, n2) {
- d <- t_value * sqrt((n1 + n2) / (n1 * n2))
- return(d)
- }
- t_value <- data$t.value
- n1 <- data$N_Healthy
- n2 <- data$N_Disease
- t_value <- as.numeric(t_value)
- n1 <- as.numeric(n1)
- n2 <- as.numeric(n2)
- Cohens_d <- calculate_cohens_d(t_value, n1, n2)
- Cohens_d <- data.frame(Cohens_d)
- Results <- cbind(data, Cohens_d)
- write.csv(Results, "Results_brain_age_gap_system_disease.csv", row.names = FALSE)
- ######2.3 Deceased individuals
- data <-read.csv("Data_Brain_age_mortality.csv")
- results <- data.frame(Group = character(),
- Statistic = numeric(),
- P_Value = numeric(),
- Conf_Int_Lower = numeric(),
- Conf_Int_Upper = numeric(),
- Mean_Disease = numeric(),
- Mean_Healthy = numeric(),
- N_Disease = integer(),
- N_Healthy = integer(),
- SD_Disease = numeric(),
- SD_Healthy = numeric(),
- stringsAsFactors = FALSE)
- fit <- t.test(age_gap_resid ~ group, data = data)
- n_mortality <- sum(data$group == "mortality")
- n_healthy <- sum(data$group == "healthy")
- sd_mortality <- sd(data$group == "mortality", na.rm = TRUE)
- sd_healthy <- sd(data$group == "healthy", na.rm = TRUE)
- result <- c("Condition", fit$statistic, fit$p.value, fit$conf.int[1], fit$conf.int[2],
- fit$estimate[1], fit$estimate[2], n_mortality, n_healthy, sd_mortality, sd_healthy)
- results <- rbind(results, result)
- write.csv(results, "Results_brain_age_gap_mortality.csv", row.names = FALSE)
- #=============================================================================
- #3.Brain age gaps predict mortality risk
- #=============================================================================
- library(survival)
- data <-read.csv("Data_Brain_age_mortality.csv")
- for (col in 4:14){
- data[,col]<-scale(data[,col])
- }
- data$Townsend_index <-scale(data$Townsend_index)
- for (col in 15:37){
- data[,col]<-factor(data[,col])
- }
- ##model 0
- data0 <- data
- cox_model0 <- coxph(Surv(t_death, Death_status) ~ true_age+Sex, data = data0)
- summary_cox <- summary(cox_model0)
- coef_table <- summary_cox$coefficients
- coef_df <- as.data.frame(coef_table)
- hr <- exp(coef_table[, "coef"])
- conf_int <- exp(confint(cox_model0))
- coef_df$HR_lower_95CI <- conf_int[, 1]
- coef_df$HR_upper_95CI <- conf_int[, 2]
- total_sample <- nrow(data0)
- total_events <- sum(data0$Death_status)
- write.csv(coef_df, file = "Cox_age_gap_mortality_m0.csv", row.names = TRUE)
- ##model 1
- data1 <- data
- cox_model1 <- coxph(Surv(t_death, Death_status) ~ age_gap_resid+true_age+Sex, data = data1)
- summary_cox <- summary(cox_model1)
- coef_table <- summary_cox$coefficients
- coef_df <- as.data.frame(coef_table)
- hr <- exp(coef_table[, "coef"])
- conf_int <- exp(confint(cox_model1))
- coef_df$HR_lower_95CI <- conf_int[, 1]
- coef_df$HR_upper_95CI <- conf_int[, 2]
- used_data <- model.frame(cox_model1)
- actual_sample <- nrow(used_data)
- actual_events <- sum(used_data$Death_status)
- write.csv(coef_df, file = "Cox_age_gap_mortality_m1.csv", row.names = TRUE)
- ##model2
- data2 <- data[complete.cases(data[, c(19:37)]), ]
- cox_model2 <- coxph(Surv(t_death, Death_status) ~ age_gap_resid+true_age+Sex+Cancer_2+Diabetes_2+
- Dementia_2+Parkinsonism_2+Multiple_sclerosis_2+Hypertension_2+Ischaemic_HD_2+
- Heart_failure_2+Stroke_2+COPD_2+Respiratory_failure_2+Iiver_disease_2+
- Osteoarthritis_2+Osteoporosis_2+Renal_failure_2+Bipolar_disorder_2
- +Depression_2+Anxiety_disorders_2, data = data2)
- summary_cox <- summary(cox_model2)
- ##model3
- data3 <- data[complete.cases(data[, c(18:38)]), ]
- cox_model3 <- coxph(Surv(t_death, Death_status) ~ age_gap_resid+true_age+Sex+Cancer_2+Diabetes_2+
- Dementia_2+Parkinsonism_2+Multiple_sclerosis_2+Hypertension_2+Ischaemic_HD_2+
- Heart_failure_2+Stroke_2+COPD_2+Respiratory_failure_2+Iiver_disease_2+
- Osteoarthritis_2+Osteoporosis_2+Renal_failure_2+Bipolar_disorder_2
- +Depression_2+Anxiety_disorders_2+Townsend_index+Ethnicity, data = data3)
- summary_cox <- summary(cox_model3)
- ##model4
- data4 <- data[complete.cases(data[, c(6:38)]), ]
- cox_model4 <- coxph(Surv(t_death, Death_status) ~ age_gap_resid+true_age+Sex+Cancer_2+Diabetes_2+
- Dementia_2+Parkinsonism_2+Multiple_sclerosis_2+Hypertension_2+Ischaemic_HD_2+
- Heart_failure_2+Stroke_2+COPD_2+Respiratory_failure_2+Iiver_disease_2+
- Osteoarthritis_2+Osteoporosis_2+Renal_failure_2+Bipolar_disorder_2
- +Depression_2+Anxiety_disorders_2+Townsend_index+Ethnicity+
- Walkpace_2+Mean_SBP_2+Mean_Pulse_2+Carotid_IMT_2+Hand_strength_2+
- WHR_2+BodyFat_Whole_2+Trunk_fat_mass_2+Leg_fat_mass_2+Arm_predict_mass_2+
- Long_illness_2, data = data4)
- summary_cox <- summary(cox_model4)
- ##calculate C-index
- library(survcomp)
- cindex0 <- concordance.index(predict(cox_model0),
- surv.time = data0$t_death,
- surv.event = data0$Death_status)
- cindex1 <- concordance.index(predict(cox_model1),
- surv.time = data1$t_death,
- surv.event = data1$Death_status)
- cindex2 <- concordance.index(predict(cox_model2),
- surv.time = data2$t_death,
- surv.event = data2$Death_status)
- cindex3 <- concordance.index(predict(cox_model3),
- surv.time = data3$t_death,
- surv.event = data3$Death_status)
- cindex4 <- concordance.index(predict(cox_model4),
- surv.time = data4$t_death,
- surv.event = data4$Death_status)
- print(paste("C-index for model 0:", cindex0$c.index))
- print(paste("C-index for model 1:", cindex1$c.index))
- print(paste("C-index for model 2:", cindex2$c.index))
- print(paste("C-index for model 3:", cindex3$c.index))
- print(paste("C-index for model 4:", cindex4$c.index))
- #=============================================================================
- #4. Proteomic analysis of brain age gaps
- #=============================================================================
- ######4.1 Association of proteins with brain age gaps
- library(lm.beta)
- data<-read.csv("Data_Brain_age_Proteomics.csv")
- data$Sex<-factor(data$Sex)
- data$Ethnicity<-factor(data$Ethnicity)
- result<- c()
- for (i in 12:2934){
- fit<-lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Sex+Townsend_index,data=data)
- fit.std <- lm.beta(fit)
- result<- rbind(result, c(colnames(data)[i], coef(summary(fit.std))[2,]))
- }
- result <- data.frame(result)
- write.csv(result,file="Regression_brain_age_proteomics.csv",row.names=FALSE)
- ######4.2 BAG related proteins predict dementia risk
- library(survival)
- df <-read.csv("Data_Proteomics_dementia.csv")
- df1 <- df[, c(1,3,4,12:17,19,20,22)]
- df2 <- df[, c("id", "ART3", "EGLN1", "IGF2R", "PLA2G15", "ADAMTSL2", "ADGRD1", "CDH2",
- "CRIP2", "ACP5", "AGER", "CXCL17", "IL18R1", "LAMP3", "SCGB1A1", "TNFRSF6B",
- "LILRA5", "ADM", "ANGPTL7", "CD36", "CPM", "FABP4", "GPD1", "IL6", "LEP",
- "SELE", "TIMP4", "APLP1", "BCAN", "CA14", "CDH3", "KLK6", "LRRN1", "LRTM2",
- "MOG", "NCAN", "NFASC", "NPTXR", "OMG", "OXT", "PGF", "PODXL2", "SEZ6L",
- "SFRP1", "SLITRK1", "WFIKKN2")]
- data <- merge(df1, df2, by = "id")
- for (col in 13:57){
- data[,col]<-scale(data[,col])
- }
- data$Age_attending_0 <-scale(data$Age_attending_0)
- data$Townsend_index <-scale(data$Townsend_index)
- data$Mean_SBP_0 <-scale(data$Mean_SBP_0)
- data$BMI_0 <-scale(data$BMI_0)
- data$Sex <-factor(data$Sex)
- for (col in 7:10){
- data[,col]<-factor(data[,col])
- }
- model_configs <- list(
- # model1
- list(
- name = "m1",
- adjust_vars = "+ Age_attending_0 + Sex + Townsend_index + Education_0 + Ethnicity",
- output_file = "Cox_Proteomics_dementia_m1.csv"
- ),
- # model2
- list(
- name = "m2",
- adjust_vars = "+ Age_attending_0 + Sex + Townsend_index + Education_0 + Ethnicity + Smoke_status_0 + Alcohol_frequency_0 + Mean_SBP_0 + BMI_0",
- output_file = "Cox_Proteomics_dementia_m2.csv"
- )
- )
- run_protein_cox <- function(data, model_config, protein_cols = 13:57) {
- results_list <- list()
- for (i in protein_cols) {
- protein_name <- colnames(data)[i]
- formula_str <- paste("Surv(t_Dementia, Dementia_status) ~ ", protein_name, model_config$adjust_vars)
- formula <- as.formula(formula_str)
- cox_model <- coxph(formula, data = data)
- summary_cox <- summary(cox_model)
- coef_table <- summary_cox$coefficients
- coef_df <- as.data.frame(coef_table)
- hr <- exp(coef_table[, "coef"])
- conf_int <- exp(confint(cox_model))
- coef_df$HR_lower_95CI <- conf_int[, 1]
- coef_df$HR_upper_95CI <- conf_int[, 2]
- coef_df <- coef_df[1, ]
- coef_df$N_event <- summary_cox$nevent
- coef_df$N_total <- summary_cox$n
- coef_df$Protein <- protein_name
- results_list[[i - 12]] <- coef_df # 保持原索引对应逻辑(i-12)
- }
- final_results <- do.call(rbind, results_list)
- final_results <- data.frame(final_results)
- write.csv(final_results, file = model_config$output_file, row.names = TRUE)
- return(final_results)
- }
- all_model_results <- list()
- for (config in model_configs) {
- model_result <- run_protein_cox(data, config)
- all_model_results[[config$name]] <- model_result
- }
- ######4.3 BAG related proteins predict mortality risk
- df <-read.csv("Data_Proteomics_mortality.csv")
- df1 <- df[, c(1,2,3,10:17,19:39)]
- df2 <- df[, c("id", "ART3", "EGLN1", "IGF2R", "PLA2G15", "ADAMTSL2", "ADGRD1", "CDH2",
- "CRIP2", "ACP5", "AGER", "CXCL17", "IL18R1", "LAMP3", "SCGB1A1", "TNFRSF6B",
- "LILRA5", "ADM", "ANGPTL7", "CD36", "CPM", "FABP4", "GPD1", "IL6", "LEP",
- "SELE", "TIMP4", "APLP1", "BCAN", "CA14", "CDH3", "KLK6", "LRRN1", "LRTM2",
- "MOG", "NCAN", "NFASC", "NPTXR", "OMG", "OXT", "PGF", "PODXL2", "SEZ6L",
- "SFRP1", "SLITRK1", "WFIKKN2")]
- data <- merge(df1, df2, by = "id")
- for (col in 33:77){
- data[,col]<-scale(data[,col])
- }
- data$Age_attending_0 <-scale(data$Age_attending_0)
- data$Townsend_index <-scale(data$Townsend_index)
- data$Mean_SBP_0 <-scale(data$Mean_SBP_0)
- data$BMI_0 <-scale(data$BMI_0)
- data$Sex <-factor(data$Sex)
- for (col in 7:10){
- data[,col]<-factor(data[,col])
- }
- for (col in 13:32){
- data[,col]<-factor(data[,col])
- }
- model_configs <- list(
- # model1
- list(
- name = "m1",
- adjust_vars = "+ Age_attending_0 + Sex + Townsend_index + Education_0 + Ethnicity",
- output_file = "Cox_Proteomics_mortality_m1.csv"
- ),
- # model2
- list(
- name = "m2",
- adjust_vars = "+ Age_attending_0 + Sex + Townsend_index + Education_0 + Ethnicity + Smoke_status_0 + Alcohol_frequency_0 + Mean_SBP_0 + BMI_0",
- output_file = "Cox_Proteomics_mortality_m2.csv"
- ),
- # model3
- list(
- name = "m3",
- adjust_vars = "+ Age_attending_0 + Sex + Townsend_index + Education_0 + Ethnicity + Smoke_status_0 + Alcohol_frequency_0 + Mean_SBP_0 + BMI_0 + Cancer_0 + Diabetes_0 + Schizophrenia_0 + Bipolar_disorder_0 + Depression_0 + Anxiety_disorders_0 + Dementia_0 + Parkinsonism_0 + Multiple_sclerosis_0 + Hypertension_0 + Ischaemic_HD_0 + Heart_failure_0 + Stroke_0 + COPD_0 + Respiratory_failure_0 + Liver_disease_0 + Osteoarthritis_0 + Osteoporosis_0 + Renal_failure_0",
- output_file = "Cox_Proteomics_mortality_m3.csv"
- )
- )
- run_protein_mortality_cox <- function(data, model_config, protein_cols = 33:77) {
- results_list <- list()
- for (i in protein_cols) {
- protein_name <- colnames(data)[i]
- formula_str <- paste("Surv(t_Death, Death_status) ~ ", protein_name, model_config$adjust_vars)
- formula <- as.formula(formula_str)
- cox_model <- coxph(formula, data = data)
- summary_cox <- summary(cox_model)
- coef_table <- summary_cox$coefficients
- coef_df <- as.data.frame(coef_table)
- hr <- exp(coef_table[, "coef"])
- conf_int <- exp(confint(cox_model))
- coef_df$HR_lower_95CI <- conf_int[, 1]
- coef_df$HR_upper_95CI <- conf_int[, 2]
- coef_df <- coef_df[1, ]
- coef_df$N_event <- summary_cox$nevent
- coef_df$N_total <- summary_cox$n
- coef_df$Protein <- protein_name
- results_list[[i - 12]] <- coef_df
- }
- final_results <- do.call(rbind, results_list)
- final_results <- data.frame(final_results)
- write.csv(final_results, file = model_config$output_file, row.names = TRUE)
- return(final_results)
- }
- all_model_results <- list()
- for (config in model_configs) {
- model_result <- run_protein_mortality_cox(data, config)
- all_model_results[[config$name]] <- model_result
- }
- #=============================================================================
- #5.Association of modifiable factors with brain age gaps
- #=============================================================================
- ######5.1 All modifiable factors
- ######5.1.1 Total
- data<-read.csv("Data_Brain_age_modifiable_factors_total.csv")
- data$Sex<-factor(data$Sex)
- data$Ethnicity<-factor(data$Ethnicity)
- #Continuous variables
- result1<-c()
- for (i in 11:90){
- fit<-lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2,data=data)
- fit.std <- lm.beta(fit)
- result1<-rbind(result1,
- c(colnames(data)[i], "0", coef(summary(fit.std))[2,]))
- }
- df1 <- data.frame(result1)
- #Categorical variables
- for (col in 91:167){
- data[,col]<-factor(data[,col])
- }
- result1 <- c()
- result2 <- c()
- for (i in 91:167) {
- fit <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2,data=data)
- fit.std <- lm.beta(fit)
- for (j in 2:length(levels(data[, i]))) {
- coef_summary <- coef(summary(fit.std))[j, c(1:5)] # 获取系数、标准误和p值
- result1 <- rbind(result1, c(colnames(data)[i], coef_summary))
- result2 <- rbind(result2, levels(data[, i])[j])
- }
- }
- colnames(result2) <- "Levels"
- result <- cbind(result1, result2)
- df2 <- data.frame(result[,c(1,10,2,3,4,5,6)])
- Results <- rbind(df1, df2)
- write.csv(Results, file = "Regression_Brain_age_modifiable_factors_total.csv", row.names = FALSE)
- ######5.1.2 Female
- data_female<-subeset(data, Sex == 0)
- fit<-lm(Brain_age_gap_resid~data[,i]+Age_attending_2,data=data_female)
- ######5.1.3 Male
- data_male<-subeset(data, Sex == 1)
- fit<-lm(Brain_age_gap_resid~data[,i]+Age_attending_2,data=data_male)
- ######5.2 The top ten modifiable factors
- ######5.2.1 Total
- df_all<-read.csv("Data_Brain_age_Factors_group_total.csv")
- group_vars <- c("SBP_group_T2", "DBP_group_T2", "WHR_group_T2", "Arm_mass_group_T2",
- "Arm_fatfree_group_T2", "Leg_fatfree_group_T2", "Leg_fat_group_T2",
- "Body_fatfree_group_T2", "Beer_intake_group_T2", "Walkpace_group_T2")
- results <- data.frame(Group = character(),
- Statistic = numeric(),
- P_Value = numeric(),
- Conf_Int_Lower = numeric(),
- Conf_Int_Upper = numeric(),
- Mean_Normal = numeric(),
- Mean_Abnormal = numeric(),
- N_Normal = integer(),
- N_Abnormal = integer(),
- stringsAsFactors = FALSE)
- for (group_var in group_vars) {
- df_filtered <- df_all[complete.cases(df_all[[group_var]], df_all$Brain_age_gap_resid), ]
- fit <- t.test(Brain_age_gap_resid ~ df_filtered[[group_var]], data = df_filtered)
- n_normal <- sum(df_filtered[[group_var]] == "0", na.rm = TRUE)
- n_abnormal <- sum(df_filtered[[group_var]] == "1", na.rm = TRUE)
- result <- c(group_var, fit$statistic, fit$p.value, fit$conf.int[1], fit$conf.int[2],
- fit$estimate[1], fit$estimate[2], n_normal, n_abnormal)
- results <- rbind(results, result)
- }
- #Calculate Cohen's d
- calculate_cohens_d <- function(t_value, n1, n2) {
- d <- t_value / sqrt(n1 + n2)
- return(d)
- }
- t_value <- results$T_value
- n1 <- results$N_Normal
- n2 <- results$N_Abnormal
- t_value <- as.numeric(t_value)
- n1 <- as.numeric(n1)
- n2 <- as.numeric(n2)
- Cohens_d <- calculate_cohens_d(t_value, n1, n2)
- Cohens_d <- data.frame(Cohens_d)
- Results <- cbind(results, Cohens_d)
- write.csv(Results, "All_T-test_age_gap_factors.csv", row.names = FALSE)
- ######5.2.2 Female:same as the total population
- df_female<-read.csv("Data_Brain_age_Factors_group_female.csv")
- group_vars <- c("SBP_group_T2", "DBP_group_T2", "WHR_group_T2", "Heel_BMD_group_T2",
- "Walkpace_group_T2", "Red_wine_group_T2", "Coffee_group_T2",
- "Sun_group_T2", "Confide_group_T2", "Employment_group_T2")
- ######5.2.3 Male: same as the total population
- df_male<-read.csv("Data_Brain_age_Factors_group_male.csv")
- group_vars <- c("BMI_group_T2", "WHR_group_T2", "Leg_fat_group_T2", "Arm_fat_group_T2",
- "Body_fat_group_T2", "Trunk_fat_group_T2", "Leg_fat_per_group_T2",
- "Arm_fat_per_group_T2", "Body_fat_per_group_T2", "Trunk_fat_per_group_T2")
- ######5.3 Risk groups of modifiable factors
- ######5.3.1 Total
- data<-read.csv("Data_Brain_age_Risk_group_total.csv")
- data$Risk_group_T2<-factor(data$Risk_group_T2)
- fit<-lm(Brain_age_gap_resid~Risk_group_T2+Sex+Age_attending_2,data=data)
- coef_summary <- coef(summary(fit))[2:4, c(1:4)]
- result1 <- data.frame(coef_summary)
- result1$Group <- "Total"
- write.csv(result1, file = "Regression_Brain_age_risk_groups_total.csv", row.names = FALSE)
- ######5.3.2 Female
- data_female<-subeset(data, Sex == 0)
- fit<-lm(Brain_age_gap_resid~Risk_group_T2+Age_attending_2,data=data_female)
- ######5.3.3 Male
- data_male<-subeset(data, Sex == 1)
- fit<-lm(Brain_age_gap_resid~Risk_group_T2+Age_attending_2,data=data_male)
- #=============================================================================
- #6.Trajectories of modifiable factors with brain age gaps
- #=============================================================================
- ######6.1 Latent class growth analysis(LCGA)
- library("lcmm")
- library(ggplot2)
- library(dplyr)
- ######8.1.1 Total population: including SBP, DBP, WHR, we take SBP as an example
- ##SBP
- data_SBP<-read.csv("Data_SBP_healthy.csv")
- # basic model
- m1<-hlme(SBP~Time*Sex,subject='id',ng=1,data=data_SBP)
- summarytable(m1)
- #2 class
- m2a<-hlme(SBP~Time*Sex,mixture=~Time, subject='id',
- ng=2,data=data_SBP, B=m1)
- summary(m2a)
- postprob(m2a)
- summarytable(m2a)
- p2<- plot(m2a,
- which = "fit",
- var.time = "Time",
- ylab = "SBP (mmHg)",
- xlab = "Time (years)",
- lwd = 1.2,
- legend.loc = "top",
- cex = 0.75,
- cex.axis = 0.9,
- font.axis = 1,
- cex.lab = 1,
- font.lab = 2,
- xlim = c(2, 12),
- ylim = c(120, 180),
- mgp = c(1.8, 0.6, 0),
- main = " "
- )
- p2
- x<-m2a$pprob[,1:2]
- newdata<-merge(data_SBP,x,by="id")
- write.csv(newdata, file = "SBP_traj_long_healthy_2.csv", row.names = FALSE)
- #3 class
- m3a<-hlme(SBP~Time*Sex,mixture=~Time, subject='id',
- ng=3,data=data_SBP,B=m1)
- summary(m3a)
- postprob(m3a)
- summarytable(m3a)
- p3<- plot(m3a,
- which = "fit",
- var.time = "Time",
- ylab = "SBP (mmHg)",
- xlab = "Time (years)",
- lwd = 1.2,
- legend.loc = "top",
- cex = 0.75,
- cex.axis = 0.9,
- font.axis = 1,
- cex.lab = 1,
- font.lab = 2,
- xlim = c(2, 12),
- ylim = c(112, 205),
- mgp = c(1.8, 0.6, 0),
- main = " "
- )
- p3
- x<-m3a$pprob[,1:2]
- newdata<-merge(data_SBP,x,by="id")
- write.csv(newdata, file = "SBP_traj_long_healthy_3.csv", row.names = FALSE)
- #4 class
- m4a<-hlme(SBP~Time*Sex,mixture=~Time, subject='id',
- ng=4,data=data_SBP,B=m1)
- summary(m4a)
- postprob(m4a)
- summarytable(m4a)
- p4 <- plot(m4a,
- which = "fit",
- var.time = "Time",
- ylab = "",
- xlab = "",
- lwd = 1.2,
- legend.loc = "",
- cex = 0.75,
- cex.axis = 0.9,
- font.axis = 1,
- cex.lab = 1,
- font.lab = 2,
- xlim = c(2, 12),
- ylim = c(100, 190),
- mgp = c(1.8, 0.6, 0),
- main = " ",
- col = "blue",
- axes = FALSE
- )
- x<-m4a$pprob[,1:6]
- newdata<-merge(data_SBP,x,by= "id")
- write.csv(newdata, file = "SBP_traj_long_healthy_4.csv", row.names = FALSE)
- #5 class
- m5a<-hlme(SBP~Time*Sex,mixture=~Time, subject='id',
- ng=5,data=data_SBP,B=m1)
- summary(m5a)
- postprob(m5a)
- summarytable(m5a)
- p5<- plot(m5a,
- which = "fit",
- var.time = "Time",
- ylab = "SBP (mmHg)",
- xlab = "Time (years)",
- lwd = 1.2,
- legend.loc = "",
- cex = 0.75,
- cex.axis = 0.9,
- font.axis = 1,
- cex.lab = 1,
- font.lab = 2,
- xlim = c(2, 12),
- ylim = c(100, 200),
- mgp = c(1.8, 0.6, 0),
- main = " "
- )
- p5
- x<-m5a$pprob[,1:2]
- newdata<-merge(data_SBP,x,by="id")
- write.csv(newdata, file = "SBP_traj_long_healthy_5.csv", row.names = FALSE)
- ######6.1.2 Female: including WHR and the frequency of red wine intake, the method is the same as SBP
- ######6.1.3 Male: including BMI and leg fat mass, the method is the same as SBP
- ######6.2 Trajectory groups of modifiable factors with brain age gaps
- ######6.2.1 Total: taking SBP as an example
- ##SBP
- data<-read.csv("Brain_age_SBP_traj_wide_healthy.csv")
- data$Sex<-factor(data$Sex)
- data$Ethnicity<-factor(data$Ethnicity)
- data$Walkpace_2<-factor(data$Walkpace_2)
- for (col in 6:9){
- data[,col]<-factor(data[,col])
- }
- #model1
- result1 <- c()
- result2 <- c()
- result3 <- c()
- for (i in 6:9) {
- fit <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2+Ethnicity+Townsend_index,data=data)
- for (j in 2:length(levels(data[, i]))) {
- coef_summary <- coef(summary(fit))[j, c(1:4)]
- result1 <- rbind(result1, c(colnames(data)[i], coef_summary))
- confint_values <- confint(fit)[j, c(1, 2)]
- result2 <- rbind(result2, c(colnames(data)[i], confint_values))
- result3 <- rbind(result3, levels(data[, i])[j])
- }
- }
- colnames(result3) <- "Levels"
- result <- cbind(result1, result2, result3)
- m1 <- data.frame(result[,c(1,9,2,7,8,3,4,5)])
- m1$Model <- "model1"
- #model2
- result1 <- c()
- result2 <- c()
- result3 <- c()
- for (i in 6:9) {
- fit <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2+Ethnicity+Townsend_index+Walkpace_2+
- Leg_fat_percentage_2+WHR_2+BeerIntake_Weekly_2,data=data)
- for (j in 2:length(levels(data[, i]))) {
- coef_summary <- coef(summary(fit))[j, c(1:4)]
- result1 <- rbind(result1, c(colnames(data)[i], coef_summary))
- confint_values <- confint(fit)[j, c(1, 2)]
- result2 <- rbind(result2, c(colnames(data)[i], confint_values))
- result3 <- rbind(result3, levels(data[, i])[j])
- }
- }
- colnames(result3) <- "Levels"
- result <- cbind(result1, result2, result3)
- m2 <- data.frame(result[,c(1,9,2,7,8,3,4,5)])
- m2$Model <- "model2"
- Results <- rbind(m1, m2)
- write.csv(Results, file = "Regression_Brain_age_SBP_traj_total.csv", row.names = FALSE)
- ##DBP
- m1 <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2+Ethnicity+Townsend_index,data=data)
- m2 <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2+Ethnicity+Townsend_index+Walkpace_2+Leg_fat_percentage_2+WHR_2+BeerIntake_Weekly_2,data=data)
- ##WHR
- m1 <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2+Ethnicity+Townsend_index,data=data)
- m2 <- lm(Brain_age_gap_resid~data[,i]+Sex+Age_attending_2+Ethnicity+Townsend_index+Walkpace_2+Leg_fat_percentage_2+Mean_DBP_2+BeerIntake_Weekly_2,data=data)
- ######6.2.2 Female
- ##WHR
- m1 <- lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index,data=data)
- m2 <- lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index+Walkpace_2+Mean_DBP_2+RedWineIntake_Weekly_2,data=data)
- ##Red Wine
- m1 <-lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index,data=data)
- m2 <-lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index+Walkpace_2+Mean_DBP_2+WHR_2,data=data)
- ######6.2.3 Male
- ##BMI
- m1 <- lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index,data=data)
- m2 <- lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index+Leg_fat_mass_2+Mean_SBP_2+BeerIntake_Weekly_2,data=data)
- ##Leg fat mass
- m1 <- lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index,data=data)
- m2 <- lm(Brain_age_gap_resid~data[,i]+Age_attending_2+Ethnicity+Townsend_index+BMI_2+Mean_SBP_2+BeerIntake_Weekly_2,data=data)
BAG_associations_analysis.R at commit ad082d1, no license · at the source
Overview
- Department of Neurology, Tongji Hospital, Tongji Medical College, Huazhong University of Science and Technology, Wuhan 430030, China
- Hubei Key Laboratory of Neural Injury and Functional Reconstruction, Huazhong University of Science and Technology, Wuhan 430030, China
- College of Life Science and Technology, Huazhong University of Science and Technology, Wuhan 430030, China
- School of Computer Science and Technology, National Engineering Research Center for Big Data Technology and System, Services Computing Technology and System Lab, Cluster and Grid Computing Lab, Huazhong University of Science and Technology, Wuhan 430030, China
- Clinical Research Center, Tongji Hospital, Tongji Medical College, Huazhong University of Science and Technology, Wuhan 430030, China
- Department of Epidemiology and Biostatistics, Ministry of Education Key Laboratory of Environment and Health, School of Public Health, Tongji Medical College, Huazhong University of Science and Technology, Wuhan 430030, China
Abstract
The focus of this study is to investigate the role of diffusion tensor imaging along the perivascular space (DTI-ALPS) index in brain aging. To address this, we first examined the association of DTI-ALPS with aging hallmarks among 40,488 UK Biobank (UKB) participants. Next, we developed normative brain age models incorporating the DTI-ALPS index from 12,401 healthy UKB adults and validated in UKB-ADNI and UKB-TALENT datasets. Finally, we explored the relationship between brain age gap (BAG) with peripheral organ function, chronic diseases, proteomics, and genetics, while identifying modifiable factors in a longitudinal cohort. The findings revealed that DTI-ALPS index correlated with chronological age, telomere length, brain structure, and cognition. A brain age model integrating the DTI-ALPS index achieved good accuracy in the UKB (r = 0.756) and replicated well in two independent datasets (UKB-ADNI: r = 0.766; UKB-TALENT: r = 0.724), with choroid plexus volume emerging as an additional contributor. Musculoskeletal health was a key driver for brain aging in females, while pulmonary metrics prevailed in males. Neurodegenerative and metabolic disorders increased BAGs, imparting increased mortality risk. Protein-wide and genome-wide analysis identified 154 BAG-related proteins and 11 loci. Modifiable factors, particularly systolic blood pressure below 120 mmHg, were strongly associated with reduced BAGs. Overall, the DTI-ALPS index is a promising brain aging biomarker, offering insights into links between brain and peripheral health, and highlighting sex-stratified therapeutic strategies. Aggressive blood pressure control may mitigate brain aging and promote long-term brain health.
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 17 matches between paragraphs and lines of code.
Lwxixixi/Brain-Aging
ad082d1bbae62ca6420bc8f3ea2434cb4917f219, 25 January 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
16 files
- BAGs Associations/
BAG_GWAS/ , Shell, 29 lines, 1 match1_run_gwas.sh - BAGs Associations/
BAG_GWAS/ , Shell, 9 lines2_merge.sh - BAGs Associations/
BAG_GWAS/ , Shell, 15 lines3_clump.sh - BAGs Associations/
BAG_associations_analysi , R, 837 lines, 8 matchess.R - BAGs Associations/
BAG_associations_visuali , R, 758 lines, 2 matcheszation.R - Brain age models/
brain_age_model.py , Python, 229 lines, 1 match - Brain age models/
disease_analysis.py , Python, 194 lines, 1 match - Brain age models/
visualize_predictions.py , Python, 228 lines, 1 match - DTI-ALPS Association/
1_Data_processing.py , Python, 187 lines - DTI-ALPS Association/
2_factor_analysis_ml.py , Python, 217 lines, 2 matches - DTI-ALPS Association/
3_plot_SHAP_Age.py , Python, 255 lines - DTI-ALPS Association/
DTI-ALPS_associtions_ana , R, 111 lineslysis.R - DTI-ALPS Association/
DTI-ALPS_associtions_vis , R, 98 linesualization.R - DTI-ALPS Association/
utils_ml.py , Python, 257 lines - Population characteristics/
Population_characteristi , R, 227 lines, 1 matchcs.R - README.md, Text, 36 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;
- 15 scripts, each with its path and the digest of its content;
- 17 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, Materials, and Software Availability
Data for this study were sourced from publicly available datasets, including UK Biobank (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, 30 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 17 authors, 5 keywords, 11 MeSH terms, 5 funders, 70 references.
Cite
This paper
Fang, Y., Luo, W., Huang, H., Ran, L., He, Y., Cheng, C., Yao, Y., Hou, Y., Zheng, H., Pan, D., Xu, S., Luo, X., Qin, T., Hao, X., Lu, F., Wang, W., & Wang, M. (2026). Unveiling the glymphatic system's role in brain aging: A comprehensive biomarker and modifiable intervention target. Proceedings of the National Academy of Sciences of the United States of America, 123(18), e2516601123. https://
BibTeX
@article{fang2026unveili
author = {Fang, Yuanyuan and Luo, Wenxi and Huang, Hao and Ran, Lusen and He, Yuqin and Cheng, Chang and Yao, Yao and Hou, Yuxiang and Zheng, Haibo and Pan, Dengji and Xu, Shabei and Luo, Xiang and Qin, Tingting and Hao, Xingjie and Lu, Feng and Wang, Wei and Wang, Minghuan},
title = {{Unveiling the glymphatic system's role in brain aging: A comprehensive biomarker and modifiable intervention target}},
journal = {Proceedings of the National Academy of Sciences of the United States of America},
year = {2026},
month = apr,
volume = {123},
number = {18},
pages = {e2516601123},
publisher = {National Academy of Sciences},
issn = {0027-8424},
doi = {10.1073/
url = {https://
pmid = {42044335},
pmcid = {PMC13142974}
}
RIS
TY - JOUR
AU - Fang, Yuanyuan
AU - Luo, Wenxi
AU - Huang, Hao
AU - Ran, Lusen
AU - He, Yuqin
AU - Cheng, Chang
AU - Yao, Yao
AU - Hou, Yuxiang
AU - Zheng, Haibo
AU - Pan, Dengji
AU - Xu, Shabei
AU - Luo, Xiang
AU - Qin, Tingting
AU - Hao, Xingjie
AU - Lu, Feng
AU - Wang, Wei
AU - Wang, Minghuan
TI - Unveiling the glymphatic system's role in brain aging: A comprehensive biomarker and modifiable intervention target
T2 - Proceedings of the National Academy of Sciences of the United States of America
J2 - Proc Natl Acad Sci U S A
PY - 2026
DA - 2026/
VL - 123
IS - 18
SP - e2516601123
SN - 0027-8424
PB - National Academy of Sciences
DO - 10.1073/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1073/
"type": "article-journal",
"title": "Unveiling the glymphatic system's role in brain aging: A comprehensive biomarker and modifiable intervention target",
"container-title": "Proceedings of the National Academy of Sciences of the United States of America",
"author": [
{
"family": "Fang",
"given": "Yuanyuan"
},
{
"family": "Luo",
"given": "Wenxi"
},
{
"family": "Huang",
"given": "Hao"
},
{
"family": "Ran",
"given": "Lusen"
},
{
"family": "He",
"given": "Yuqin"
},
{
"family": "Cheng",
"given": "Chang"
},
{
"family": "Yao",
"given": "Yao"
},
{
"family": "Hou",
"given": "Yuxiang"
},
{
"family": "Zheng",
"given": "Haibo"
},
{
"family": "Pan",
"given": "Dengji"
},
{
"family": "Xu",
"given": "Shabei"
},
{
"family": "Luo",
"given": "Xiang"
},
{
"family": "Qin",
"given": "Tingting"
},
{
"family": "Hao",
"given": "Xingjie"
},
{
"family": "Lu",
"given": "Feng"
},
{
"family": "Wang",
"given": "Wei"
},
{
"family": "Wang",
"given": "Minghuan"
}
],
"container-title-short":
"volume": "123",
"issue": "18",
"page": "e2516601123",
"DOI": "10.1073/
"PMID": "42044335",
"PMCID": "PMC13142974",
"ISSN": "0027-8424",
"publisher": "National Academy of Sciences",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
27
]
]
}
}
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/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: survival, SHAP, XGBoost, 12 other tools
- [2] doi:10.1093/bioinformatics/btag592 [code]
- Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.Journal: Bioinformatics (Oxford, England)In common: pROC, survival, ComplexHeatmap, 11 other tools
- [3] doi:10.3390/ijms27156925 [code]
- XGBoost-SHAP Interpretable Modeling Identifies and Validates an Eight-Gene Biomarker for Hepatic Encephalopathy Risk Prediction in Cirrhosis.Journal: International journal of molecular sciencesIn common: LightGBM, pROC, survival, 6 other tools
- [4] doi:10.1016/j.xcrm.2026.102766 [code]
- A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.Journal: Cell reports. MedicineIn common: pROC, ComplexHeatmap, pheatmap, 10 other tools
- [5] doi:10.1016/j.nicl.2026.104012 [code]
- Structural-functional multilayer brain network properties and outcome of combined repetitive transcranial magnetic stimulation and psychotherapy for obsessive-compulsive disorder.Journal: NeuroImage. ClinicalIn common: survival, SHAP, XGBoost, 9 other tools, structural MRI / diffusion
- [6] doi:10.1186/s13073-026-01704-z [code]
- Gene expression profiling enables refined parcellation of cortical layers in the heterogeneous human cerebral cortex.Journal: Genome medicineIn common: XGBoost, ComplexHeatmap, pheatmap, 10 other tools
- [7] doi:10.1016/j.isci.2026.115657 [code]
- Integration of machine learning to develop a disulfidptosis model for predicting glioma prognosis, immunotherapy response, and drug.Journal: iScienceIn common: pROC, survival, ComplexHeatmap, 7 other tools, clinical / translational
- [8] doi:10.1371/journal.pmed.1004860 [code]
- Brain aging patterns among nine neurological disorders: A case-control study.Journal: PLoS medicineIn common: SHAP, XGBoost, scikit-learn, 3 other tools, structural MRI / diffusion, 5 references
- [9] doi:10.1038/s41467-026-76837-1 [code]
- Drug screen and machine learning predict neuroprotective agents in a preclinical human model of childhood dementia.Journal: Nature communicationsIn common: SHAP, XGBoost, ComplexHeatmap, 9 other tools
- [10] doi:10.1093/neuonc/noag128 [code]
- Spatially-resolved single-cell imaging of melanoma brain metastases identifies localized immune patterns predictive of immune checkpoint blockade response.Journal: Neuro-oncologyIn common: pROC, survival, ComplexHeatmap, 7 other tools, clinical / translational
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, 15 scripts, and 17 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:7cc68a76b74a3a60…
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.
