OSCR

Brain structure in the cingulate cortex and locus coeruleus in late life is associated with engagement in complex mental activities across the life span.

Code ↔ Paper

3 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 3 matches
  1. [1] § Methods › Neuroimaging acquisition and processing › MRI acquisition and processing: gray matter volume and thickness ↔ Analysis Scripts/BABS_LEQ_analysis.Rmd, lines 147–201 · score 0.58 · prACC, aMCC, pMCC, brain structure, cingulate, thickness
  2. [2] § Results › Brain structure in the cingulate cortex is associated with engagement in complex mental activities ↔ Analysis Scripts/BABS_LEQ_analysis.Rmd, lines 147–201 · score 0.57 · prACC, aMCC, pMCC, brain structure, predictor, model
  3. [3] § Methods › Neuroimaging acquisition and processing › MRI acquisition and processing: locus coeruleus integrity ↔ Analysis Scripts/BABS_LEQ_analysis.Rmd, lines 231–255 · score 0.51 · LC MRI contrast, contrast ratios, linear, integrity

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 Markdown · 267 lines · 18 KB · no license · 3 matches

  1. ---
  2. title: "Brain structure in the cingulate cortex and locus coeruleus in late life is associated with engagement in complex mental activities across the life span"
  3. author: "J.L. Crawford et al."
  4. date: "`r Sys.Date()`"
  5. output: "html_document"
  6. ---
  7. ```{r setup, warning=FALSE, message=FALSE}
  8. rm(list=ls())
  9. # Packages
  10. library(knitr); library(ggpubr); library(easystats); library(sjPlot); library(lme4); library(car); library(tidyverse)
  11. #Create data directories
  12. demo.path<-"~/Library/CloudStorage/Box-Box/BABS_Neuropsych/Data/BABS_Demo.csv"
  13. age.path <- "~/Library/CloudStorage/Box-Box/BABS_Neuropsych/Data/NeuropsychDates_BABS_withAges.csv"
  14. age.FMT.path <- "~/Library/CloudStorage/Box-Box/BABS_Neuropsych/Data/Age_at_FMT_02192026.csv"
  15. sess.path <-"/Volumes/berry-lab/berry-lab/Brandeis_Aging_Brain_Study/BABS Data/"
  16. LEQ.path <- "/Volumes/berry-lab/berry-lab/Brandeis_Aging_Brain_Study/BABS Data/Analysis/Qualtrics_Surveys/LEQ_sum.csv"
  17. scanTime.path <- "~/Library/CloudStorage/Box-Box/BABS_Neuropsych/Data/BABS_Tau_Dates.csv"
  18. SUVR.path <-"/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANETauTime01_MK_SUVR/"
  19. MRI.vol.path <-"/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANETauTime01_StructuralMRI/asegstats.csv"
  20. MRI.cort.vol.L.path <-"/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANETauTime01_StructuralMRI/aparcstats_volume_lh.csv"
  21. MRI.cort.vol.R.path <-"/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANETauTime01_StructuralMRI/aparcstats_volume_rh.csv"
  22. MRI.cort.thick.L.path <-"/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANETauTime01_StructuralMRI/aparcstats_thickness_lh.csv"
  23. MRI.cort.thick.R.path <-"/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANETauTime01_StructuralMRI/aparcstats_thickness_rh.csv"
  24. LC.MRI.path <- "/Volumes/berry-lab/berry-lab/Aging_Norepinephrine_Tau/Data/ANEFMTTime01_LCMRIratio/LCratio_bymean_Bay7_3segs_Table_2026-02-04.csv"
  25. #Make data frames for age, tau SUVR, and LC data
  26. BABS.demo <- read_csv(demo.path) %>% select(BABS_ID, Age_V1, Sex, Edu) %>%
  27. mutate(Subject = parse_number(BABS_ID),
  28. sexCode = factor(Sex, levels = c("Female","Male"), labels = c(0,1))) %>% select(-c(BABS_ID, Sex))
  29. BABS.demo$sexCode <- as.numeric(as.character(BABS.demo$sexCode))
  30. BABS.age <- read_csv(age.path) %>% select(BABS_ID, Session_Age) %>% mutate(Subject = parse_number(BABS_ID))
  31. FMT.age <- read_csv(age.FMT.path) %>% mutate(Subject = parse_number(BABS_ID))
  32. d.SUVR <- list.files(path = SUVR.path, pattern = ".csv", full.names = T) %>%
  33. lapply(read_csv) %>%
  34. bind_rows %>% as_tibble() %>% pivot_longer(values_to = "SUVR", names_to = "PVC", -c(BABSID,label, num_voxels)) %>%
  35. mutate(PVC = factor(PVC, levels = c("nonPVC_SUVR","PVC_SUVR"), labels = c("nonPVC","PVC")))
  36. d.LC.MRI <- read_csv(LC.MRI.path) %>% mutate(Subject = parse_number(SubjectID)) %>% select(Subject, ends_with("mean"), WholeLC)
  37. #Make data frames for neuropsych battery items
  38. LEQ <- read.csv(LEQ.path, header = T) %>% filter(LEQ_Session == 1)
  39. ```
  40. ```{r ROIs, message=FALSE, warning=FALSE}
  41. #Braak staging ROI groups
  42. BRAAK1 = c("L_entorhinal","R_entorhinal")
  43. BRAAK2 = c("L_hippocampus","R_hippocampus")
  44. ```
  45. ```{r tau_dataframes, warning=FALSE, message=FALSE}
  46. #creating data frame with relevant variables
  47. d.Braak1 <- d.SUVR %>% filter(label %in% BRAAK1) %>% group_by(BABSID, PVC) %>%
  48. summarise(mean_weighted_SUVR = (sum(num_voxels*SUVR)/sum(num_voxels))) %>% mutate(ROI = "Braak1") %>% filter(PVC == "PVC") %>% select(-PVC)
  49. d.Braak2 <- d.SUVR %>% filter(label %in% BRAAK2) %>% group_by(BABSID, PVC) %>%
  50. summarise(mean_weighted_SUVR = (sum(num_voxels*SUVR)/sum(num_voxels))) %>% mutate(ROI = "Braak2") %>% filter(PVC == "PVC") %>% select(-PVC)
  51. d.Tau <- rbind(d.Braak1, d.Braak2) %>%
  52. pivot_wider(id_cols = "BABSID",names_from = "ROI", values_from = "mean_weighted_SUVR") %>% ungroup() %>%
  53. mutate(Subject = parse_number(BABSID)) %>% select(-BABSID)
  54. ```
  55. ```{r MRI_struct_cleaning, warning=FALSE, message=FALSE}
  56. #cortical volume estimates
  57. d.MRI.vol <- read_csv(MRI.vol.path) %>%
  58. mutate(Subject = parse_number(BABSID)) %>% select(-BABSID) %>%
  59. select(Subject, ends_with("IntraCranialVol")) %>%
  60. rename(total_ICV = EstimatedTotalIntraCranialVol)
  61. d.MRI.vol.adj <- d.MRI.vol %>%
  62. mutate(mean_total_ICV = mean(total_ICV),
  63. ICV_diff = total_ICV - mean_total_ICV)
  64. d.LH.cort.vol <- read_csv(MRI.cort.vol.L.path) %>%
  65. mutate(Subject = parse_number(BABSID)) %>% select(-BABSID) %>%
  66. select(Subject, starts_with("lh_posteriorcingulate"), starts_with("lh_caudalanteriorcingulate"), starts_with("lh_rostralanteriorcingulate")) %>%
  67. rename(ACC_post_L = lh_posteriorcingulate_volume, ACC_caud_L = lh_caudalanteriorcingulate_volume, ACC_rost_L = lh_rostralanteriorcingulate_volume)
  68. d.RH.cort.vol <- read_csv(MRI.cort.vol.R.path) %>%
  69. mutate(Subject = parse_number(BABSID)) %>% select(-BABSID) %>%
  70. select(Subject, starts_with("rh_posteriorcingulate"), starts_with("rh_caudalanteriorcingulate"), starts_with("rh_rostralanteriorcingulate")) %>%
  71. rename(ACC_post_R = rh_posteriorcingulate_volume, ACC_caud_R = rh_caudalanteriorcingulate_volume, ACC_rost_R = rh_rostralanteriorcingulate_volume)
  72. d.MRI.all.vol.adj <- d.LH.cort.vol %>% inner_join(d.RH.cort.vol) %>% inner_join(d.MRI.vol.adj, by = "Subject")
  73. #calculating slopes for volume adjustment
  74. ##posterior ACC
  75. m.pACC.R <- lm(data = d.MRI.all.vol.adj, ACC_post_R ~ total_ICV)
  76. m.pACC.R.coef <- m.pACC.R$coefficients %>% as_data_frame() %>% slice(2) %>% as.numeric()
  77. m.pACC.L <- lm(data = d.MRI.all.vol.adj, ACC_post_L ~ total_ICV)
  78. m.pACC.L.coef <- m.pACC.L$coefficients %>% as_data_frame() %>% slice(2) %>% as.numeric()
  79. ##caudal ACC
  80. m.cACC.R <- lm(data = d.MRI.all.vol.adj, ACC_caud_R ~ total_ICV)
  81. m.cACC.R.coef <- m.cACC.R$coefficients %>% as_data_frame() %>% slice(2) %>% as.numeric()
  82. m.cACC.L <- lm(data = d.MRI.all.vol.adj, ACC_caud_L ~ total_ICV)
  83. m.cACC.L.coef <- m.cACC.L$coefficients %>% as_data_frame() %>% slice(2) %>% as.numeric()
  84. ##rostral ACC
  85. m.rACC.R <- lm(data = d.MRI.all.vol.adj, ACC_rost_R ~ total_ICV)
  86. m.rACC.R.coef <- m.rACC.R$coefficients %>% as_data_frame() %>% slice(2) %>% as.numeric()
  87. m.rACC.L <- lm(data = d.MRI.all.vol.adj, ACC_rost_L ~ total_ICV)
  88. m.rACC.L.coef <- m.rACC.L$coefficients %>% as_data_frame() %>% slice(2) %>% as.numeric()
  89. d.MRI.all.vol.adj <- d.MRI.all.vol.adj %>%
  90. mutate(pACC_L_slope = m.pACC.L.coef,
  91. pACC_R_slope = m.pACC.R.coef,
  92. cACC_L_slope = m.cACC.L.coef,
  93. cACC_R_slope = m.cACC.R.coef,
  94. rACC_L_slope = m.rACC.L.coef,
  95. rACC_R_slope = m.rACC.R.coef,
  96. pACC_L_vol_adj = ACC_post_L - (pACC_L_slope*ICV_diff),
  97. pACC_R_vol_adj = ACC_post_R - (pACC_R_slope*ICV_diff),
  98. cACC_L_vol_adj = ACC_caud_L - (cACC_L_slope*ICV_diff),
  99. cACC_R_vol_adj = ACC_caud_R - (cACC_R_slope*ICV_diff),
  100. rACC_L_vol_adj = ACC_rost_L - (rACC_L_slope*ICV_diff),
  101. rACC_R_vol_adj = ACC_rost_R - (rACC_R_slope*ICV_diff),
  102. pACC_bilateral_sum_adj = pACC_L_vol_adj + pACC_R_vol_adj,
  103. pACC_bilateral_mean_adj = (pACC_L_vol_adj + pACC_R_vol_adj)/2,
  104. cACC_bilateral_sum_adj = cACC_L_vol_adj + cACC_R_vol_adj,
  105. cACC_bilateral_mean_adj = (cACC_L_vol_adj + cACC_R_vol_adj)/2,
  106. rACC_bilateral_sum_adj = rACC_L_vol_adj + rACC_R_vol_adj,
  107. rACC_bilateral_mean_adj = (rACC_L_vol_adj + rACC_R_vol_adj)/2)
  108. #thickness estimates
  109. d.LH.cort.thick <- read_csv(MRI.cort.thick.L.path) %>%
  110. mutate(Subject = parse_number(BABSID)) %>% select(-BABSID) %>%
  111. select(Subject, starts_with("lh_posteriorcingulate"), starts_with("lh_caudalanteriorcingulate"), starts_with("lh_rostralanteriorcingulate")) %>%
  112. rename(pACC_L = lh_posteriorcingulate_thickness, ACC_caud_L = lh_caudalanteriorcingulate_thickness, ACC_rost_L = lh_rostralanteriorcingulate_thickness)
  113. d.RH.cort.thick <- read_csv(MRI.cort.thick.R.path) %>%
  114. mutate(Subject = parse_number(BABSID)) %>% select(-BABSID) %>%
  115. select(Subject, starts_with("rh_posteriorcingulate"), starts_with("rh_caudalanteriorcingulate"), starts_with("rh_rostralanteriorcingulate")) %>%
  116. rename(pACC_R = rh_posteriorcingulate_thickness, ACC_caud_R = rh_caudalanteriorcingulate_thickness, ACC_rost_R = rh_rostralanteriorcingulate_thickness)
  117. d.MRI.thickness <- d.LH.cort.thick %>% inner_join(d.RH.cort.thick, by = "Subject") %>%
  118. mutate(pACC_thick_avg = (pACC_L + pACC_R)/2,
  119. cACC_thick_avg = (ACC_caud_L + ACC_caud_R)/2,
  120. rACC_thick_avg = (ACC_rost_L + ACC_rost_R)/2)
  121. ```
  122. ```{r age_MRI_desc, warning=FALSE, message=FALSE}
  123. #import tau data
  124. d.LEQ <- LEQ %>% mutate(Subject = parse_number(BABS_ID)) %>% select(-BABS_ID) %>% select(Subject, ends_with("Total"), ends_with("Spec"), ends_with("NonSpec")) %>% mutate_if(is.character, as.numeric) %>%
  125. mutate(across(YA_Total:OA_NonSpec, ~ c(scale(.)))) %>% inner_join(BABS.demo)
  126. d.LEQ.tau <- d.LEQ %>% inner_join(d.Tau, by = "Subject") %>% inner_join(d.MRI.all.vol.adj, by = "Subject") %>% inner_join(d.MRI.thickness, by = "Subject") %>% inner_join(BABS.age)
  127. d.LEQ.MRI <- d.LEQ %>% inner_join(d.MRI.all.vol.adj, by = "Subject") %>% inner_join(d.MRI.thickness, by = "Subject") %>% inner_join(BABS.age)
  128. ```
  129. ## Examining the association between the LEQ total score with age and sex
  130. ```{r LEQ_desc, warning=FALSE, message=FALSE}
  131. #basic descriptive models
  132. m.LEQ.covariates <- lm(data = d.LEQ.MRI, LEQ_Total ~ Age_V1 + sexCode)
  133. #summary table
  134. tab_model(m.LEQ.covariates, digits = 2, show.stat = T, pred.labels = c("Intercept","Age", "Sex"), dv.labels = c("LEQ Total Score"), show.icc = F, show.re.var = F, show.obs = F)
  135. ```
  136. ## Testing for the relationships between LEQ and cingulate brain structure (controlling for age and sex)
  137. ```{r LEQ_MRI, warning=FALSE, message=FALSE}
  138. #relationship between LEQ and volume
  139. #pACC
  140. m.LEQ.vol.pACC <- lm(data = d.LEQ.MRI, pACC_bilateral_mean_adj ~ LEQ_Total + Session_Age + sexCode)
  141. bootstrap_parameters(m.LEQ.vol.pACC, test = "pd")
  142. #cACC
  143. m.LEQ.vol.cACC <- lm(data = d.LEQ.MRI, cACC_bilateral_mean_adj ~ LEQ_Total + Session_Age + sexCode)
  144. bootstrap_parameters(m.LEQ.vol.cACC, test = "pd")
  145. #rACC
  146. m.LEQ.vol.rACC <- lm(data = d.LEQ.MRI, rACC_bilateral_mean_adj ~ LEQ_Total + Session_Age + sexCode)
  147. bootstrap_parameters(m.LEQ.vol.rACC, test = "pd")
  148. #summary table
  149. tab_model(m.LEQ.vol.pACC,m.LEQ.vol.cACC,m.LEQ.vol.rACC, digits = 2, show.stat = T, pred.labels = c("Intercept","LEQ Total Score", "Age", "Sex"), dv.labels = c("pMCC Volume (mm^3)","aMCC Volume (mm^3)", "prACC Volume (mm^3)"), show.icc = F, show.re.var = F, show.obs = F)
  150. #plotting associations
  151. d.cACC.vol.plot <- get_datagrid(m.LEQ.vol.cACC, by = c("LEQ_Total"), preserve_range = TRUE)
  152. cACC.vol.result <- estimate_relation(m.LEQ.vol.cACC, include_random = F, data = d.cACC.vol.plot)
  153. fig.cACC.vol.LEQ <- plot(cACC.vol.result,
  154. point = list(color = "cyan3", alpha = 0.3, size = 4),
  155. line = list(color = "cyan4", size = 2),
  156. ribbon = list(alpha = 0.2)) + theme_classic() + labs(title = NULL, y = "aMCC Volume (mm^3)", x = "LEQ Total Score [Z-Scored]")
  157. fig.cACC.vol.LEQ
  158. d.pACC.vol.plot <- get_datagrid(m.LEQ.vol.pACC, by = c("LEQ_Total"), preserve_range = TRUE)
  159. pACC.vol.result <- estimate_relation(m.LEQ.vol.pACC, include_random = F, data = d.pACC.vol.plot)
  160. fig.pACC.vol.LEQ <- plot(pACC.vol.result,
  161. point = list(color = "cyan3", alpha = 0.3, size = 4),
  162. line = list(color = "cyan4", size = 2),
  163. ribbon = list(alpha = 0.2)) + theme_classic() + labs(title = NULL, y = "pMCC Volume (mm^3)", x = "LEQ Total Score [Z-Scored]")
  164. fig.pACC.vol.LEQ
  165. #relationship between LEQ and thickness
  166. m.LEQ.thick.pACC <- lm(data = d.LEQ.MRI, pACC_thick_avg ~ LEQ_Total + Session_Age + sexCode)
  167. bootstrap_parameters(m.LEQ.thick.pACC, test = "pd")
  168. m.LEQ.thick.cACC <- lm(data = d.LEQ.MRI, cACC_thick_avg ~ LEQ_Total + Session_Age + sexCode)
  169. bootstrap_parameters(m.LEQ.thick.cACC, test = "pd")
  170. m.LEQ.thick.rACC <- lm(data = d.LEQ.MRI, rACC_thick_avg ~ LEQ_Total + Session_Age + sexCode)
  171. bootstrap_parameters(m.LEQ.thick.rACC, test = "pd")
  172. #summary table
  173. tab_model(m.LEQ.thick.pACC,m.LEQ.thick.cACC,m.LEQ.thick.rACC, digits = 2, show.stat = T, pred.labels = c("Intercept","LEQ Total Score", "Age", "Sex"), dv.labels = c("pMCC Thickness (mm)", "aMCC Thickness (mm)", "prACC Thickness (mm)"), show.icc = F, show.re.var = F, show.obs = F)
  174. #plotting associations
  175. d.cACC.thick.plot <- get_datagrid(m.LEQ.thick.cACC, by = c("LEQ_Total"), preserve_range = TRUE)
  176. cACC.thick.result <- estimate_relation(m.LEQ.thick.cACC, include_random = F, data = d.cACC.thick.plot)
  177. fig.cACC.thick.LEQ <- plot(cACC.thick.result,
  178. point = list(color = "chartreuse2", alpha = 0.3, size = 4),
  179. line = list(color = "chartreuse4", size = 2),
  180. ribbon = list(alpha = 0.2)) + theme_classic() + labs(title = NULL, y = "aMCC Thickness (mm)", x = "LEQ Total Score [Z-Scored]")
  181. fig.cACC.thick.LEQ
  182. d.pACC.thick.plot <- get_datagrid(m.LEQ.thick.pACC, by = c("LEQ_Total"), preserve_range = TRUE)
  183. pACC.thick.result <- estimate_relation(m.LEQ.thick.pACC, include_random = F, data = d.pACC.thick.plot)
  184. fig.pACC.thick.LEQ <- plot(pACC.thick.result,
  185. point = list(color = "chartreuse2", alpha = 0.3, size = 4),
  186. line = list(color = "chartreuse4", size = 2),
  187. ribbon = list(alpha = 0.2)) + theme_classic() + labs(title = NULL, y = "pMCC Thickness (mm)", x = "LEQ Total Score [Z-Scored]")
  188. fig.pACC.thick.LEQ
  189. ```
  190. ## Exploratory analyses examining the specificity of LEQ sub-scores on cingulate volume and thickness
  191. ```{r LEQ_MRI_followup, warning=FALSE, message=FALSE}
  192. #follow-up analyses looking at LEQ sub-components and caudal ACC volume and thickness
  193. #volume
  194. m.LEQ.subscores.cACC.vol <- lm(data = d.LEQ.MRI, cACC_bilateral_mean_adj ~ YA_Total + MA_Total + OA_Total + Session_Age + sexCode)
  195. bootstrap_parameters(m.LEQ.subscores.cACC.vol, test = "pd")
  196. linearHypothesis(m.LEQ.subscores.cACC.vol, "YA_Total - MA_Total = 0")
  197. linearHypothesis(m.LEQ.subscores.cACC.vol, "YA_Total - OA_Total = 0")
  198. m.LEQ.subscores.pACC.vol <- lm(data = d.LEQ.MRI, pACC_bilateral_mean_adj ~ YA_Total + MA_Total + OA_Total + Session_Age + sexCode)
  199. bootstrap_parameters(m.LEQ.subscores.pACC.vol, test = "pd")
  200. linearHypothesis(m.LEQ.subscores.pACC.vol, "YA_Total - MA_Total = 0")
  201. linearHypothesis(m.LEQ.subscores.pACC.vol, "YA_Total - OA_Total = 0")
  202. #summary table
  203. tab_model(m.LEQ.subscores.cACC.vol,m.LEQ.subscores.pACC.vol, digits = 2, show.stat = T, pred.labels = c("Intercept","Early Life Total Score", "Midlife Total Score", "Late Life Total Score", "Age", "Sex"), dv.labels = c("pMCC Volume (mm^3)", "aMCC Volume (mm^3)"), show.icc = F, show.re.var = F, show.obs = F)
  204. #thickness
  205. m.LEQ.subscores.cACC.thick <- lm(data = d.LEQ.MRI, cACC_thick_avg ~ YA_Total + MA_Total + OA_Total + Session_Age + sexCode)
  206. bootstrap_parameters(m.LEQ.subscores.cACC.thick, test = "pd")
  207. linearHypothesis(m.LEQ.subscores.cACC.thick, "YA_Total - MA_Total = 0")
  208. linearHypothesis(m.LEQ.subscores.cACC.thick, "YA_Total - OA_Total = 0")
  209. m.LEQ.subscores.pACC.thick <- lm(data = d.LEQ.MRI, pACC_thick_avg ~ YA_Total + MA_Total + OA_Total + Session_Age + sexCode)
  210. bootstrap_parameters(m.LEQ.subscores.pACC.thick, test = "pd")
  211. linearHypothesis(m.LEQ.subscores.pACC.thick, "YA_Total - MA_Total = 0")
  212. linearHypothesis(m.LEQ.subscores.pACC.thick, "YA_Total - OA_Total = 0")
  213. #summary table
  214. tab_model(m.LEQ.subscores.cACC.thick,m.LEQ.subscores.pACC.thick, digits = 2, show.stat = T, pred.labels = c("Intercept","Early Life Total Score", "Midlife Total Score", "Late Life Total Score", "Age", "Sex"), dv.labels = c("pMCC Thickness (mm)", "aMCC Thickness (mm)"), show.icc = F, show.re.var = F, show.obs = F)
  215. ```
  216. ## Testing for the associations between LC integrity and LEQ
  217. ```{r LEQ_LC, warning=FALSE, message=FALSE}
  218. d.LEQ.LC.MRI <- d.LEQ.MRI %>% inner_join(d.LC.MRI, by = "Subject") %>% inner_join(FMT.age)
  219. #relationship between LEQ and LC MRI (whole LC)
  220. m.LEQ.LC.MRI <- lm(data = d.LEQ.LC.MRI, WholeLC ~ LEQ_Total + Age_V1 + sexCode)
  221. bootstrap_parameters(m.LEQ.LC.MRI, test = "pd")
  222. #summary table
  223. tab_model(m.LEQ.LC.MRI, digits = 2, show.stat = T, pred.labels = c("Intercept","LEQ Total Score", "Age", "Sex"), dv.labels = c("LC MRI Contrast Ratio"), show.icc = F, show.re.var = F, show.obs = F)
  224. #plotting association
  225. d.LC.MRI.plot <- get_datagrid(m.LEQ.LC.MRI, by = c("LEQ_Total"), preserve_range = TRUE)
  226. MRI.LEQ.result <- estimate_relation(m.LEQ.LC.MRI, include_random = F, data = d.LC.MRI.plot)
  227. fig.LC.MRI.LEQ <- plot(MRI.LEQ.result,
  228. point = list(color = "slateblue2", alpha = 0.3, size = 4),
  229. line = list(color = "slateblue4", size = 2),
  230. ribbon = list(alpha = 0.2)) + theme_classic() + labs(title = NULL, y = "LC MRI Contrast Ratio", x = "LEQ Total Score [Z-Scored]")
  231. fig.LC.MRI.LEQ
  232. #exploratory analyses looking at LEQ sub-components and LC MRI
  233. m.LEQ.subscores.LC.MRI <- lm(data = d.LEQ.LC.MRI, WholeLC ~ YA_Total + MA_Total + OA_Total + Age_V1 + sexCode)
  234. bootstrap_parameters(m.LEQ.subscores.LC.MRI, test = "pd")
  235. linearHypothesis(m.LEQ.subscores.LC.MRI, "YA_Total - MA_Total = 0")
  236. linearHypothesis(m.LEQ.subscores.LC.MRI, "YA_Total - OA_Total = 0")
  237. #summary table
  238. tab_model(m.LEQ.subscores.LC.MRI, digits = 2, show.stat = T, pred.labels = c("Intercept", "Early Life Score", "Midlife Score", "Late Life Score", "Age", "Sex"), dv.labels = c("LC MRI Contrast Ratio"), show.icc = F, show.re.var = F, show.obs = F)
  239. ```
  240. ## Testing for the relationships between LEQ and tau (controlling for age and sex)
  241. ```{r LEQ_tau, warning=FALSE, message=FALSE}
  242. #relationship between LEQ and tau
  243. m.LEQ.tau.braak1 <- lm(data = d.LEQ.tau, Braak1 ~ LEQ_Total + Session_Age + sexCode)
  244. bootstrap_parameters(m.LEQ.tau.braak1, test = "pd")
  245. m.LEQ.tau.braak2 <- lm(data = d.LEQ.tau, Braak2 ~ LEQ_Total + Session_Age + sexCode)
  246. bootstrap_parameters(m.LEQ.tau.braak2, test = "pd")
  247. #summary table
  248. tab_model(m.LEQ.tau.braak1,m.LEQ.tau.braak2, digits = 2, show.stat = T, pred.labels = c("Intercept","LEQ Total Score", "Age", "Sex"), dv.labels = c("Entorhinal Tau [SUVR]","Hippocampal Tau [SUVR]"), show.icc = F, show.re.var = F, show.obs = F)
  249. ```

BABS_LEQ_analysis.Rmd, no license · at the source

Overview

Authors: Jennifer L. Crawford1, Hsiang-Yu Chen1, Alex A. Adornato1, Johanna Matulonis1, Jacob M. Hooker2, Heidi I.L. Jacobs2, Anne S. Berry1
  1. Department of Psychology, Brandeis University, Waltham, MA, USA
  2. Athinoula A. Martinos Center for Biomedical Imaging, Massachusetts General Hospital, Harvard Medical School, Boston, MA, USA
Institutions: Brandeis University (United States); Harvard University (United States); Massachusetts General Hospital (United States); Athinoula A. Martinos Center for Biomedical Imaging (United States)
Journal: Neurobiology of aging, volume 167, pages 120-128
Dates: published online 30 June 2026; in print November 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1016/j.neurobiolaging.2026.06.012 · PMID 42392002 · PMCID PMC13403197 · OpenAlex W7166729257
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: structural MRI / diffusion (modality), PET / SPECT (modality), human (organism)
Methods: fMRI & imaging, Preprocessing
Keywords: Gray matter volume, Cortical thickness, Enrichment, Mentally stimulating activities
MeSH: Aging*, Gyrus Cinguli*, Locus Coeruleus*, Aged, Aged, 80 and over, Female, Gray Matter, Humans, Magnetic Resonance Imaging, Male, Organ Size, Positron-Emission Tomography (* major topic)
Topic: Functional Brain Connectivity Studies (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: NIA NIH HHS (R01 AG082006, F32 AG085890, R01 AG062559, R01 AG068062, R01 AG074330); National Institute on Aging (F32-AG085890, R01-AG074330); National Institutes of Health; NINDS NIH HHS (T32 NS007292); National Institute of Neurological Disorders and Stroke (T32-NS007292)
Citations: not cited yet (Europe PMC); 57 references in the paper

Abstract

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

Repository

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

OSF 63ays

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Languages: R (2)
Size: 6 files, 2 scripts
Software Heritage: not checked
Found in: “Data availability”
Holds: 2 notebooks
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: easystats (2 files), ggpubr (2 files), lme4 (2 files), tidyverse (2 files), car (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
2 files
At the source: osf.io/63ays

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;
  • 2 scripts, each with its path and the digest of its content;
  • 3 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-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1016/j.neurobiolaging.2026.06.012.

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

  • Publisher: n/a → Elsevier BV

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, pages, dates, 7 authors, 4 keywords, 12 MeSH terms, 5 funders, 54 references, 7 RRIDs.

Cite

This paper

Crawford, J. L., Chen, H.-Y., Adornato, A. A., Matulonis, J., Hooker, J. M., Jacobs, H. I., & Berry, A. S. (2026). Brain structure in the cingulate cortex and locus coeruleus in late life is associated with engagement in complex mental activities across the life span. Neurobiology of aging, 167, 120-128. https://doi.org/10.1016/j.neurobiolaging.2026.06.012

BibTeX

@article{crawford2026brain,
author = {Crawford, Jennifer L. and Chen, Hsiang-Yu and Adornato, Alex A. and Matulonis, Johanna and Hooker, Jacob M. and Jacobs, Heidi I.L. and Berry, Anne S.},
title = {{Brain structure in the cingulate cortex and locus coeruleus in late life is associated with engagement in complex mental activities across the life span}},
journal = {Neurobiology of aging},
year = {2026},
month = jun,
volume = {167},
pages = {120--128},
publisher = {Elsevier BV},
issn = {0197-4580},
doi = {10.1016/j.neurobiolaging.2026.06.012},
url = {https://doi.org/10.1016/j.neurobiolaging.2026.06.012},
pmid = {42392002},
pmcid = {PMC13403197}
}

RIS

TY - JOUR
AU - Crawford, Jennifer L.
AU - Chen, Hsiang-Yu
AU - Adornato, Alex A.
AU - Matulonis, Johanna
AU - Hooker, Jacob M.
AU - Jacobs, Heidi I.L.
AU - Berry, Anne S.
TI - Brain structure in the cingulate cortex and locus coeruleus in late life is associated with engagement in complex mental activities across the life span
T2 - Neurobiology of aging
J2 - Neurobiol Aging
PY - 2026
DA - 2026/06/30
VL - 167
SP - 120
EP - 128
SN - 0197-4580
PB - Elsevier BV
DO - 10.1016/j.neurobiolaging.2026.06.012
UR - https://doi.org/10.1016/j.neurobiolaging.2026.06.012
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.neurobiolaging.2026.06.012",
"type": "article-journal",
"title": "Brain structure in the cingulate cortex and locus coeruleus in late life is associated with engagement in complex mental activities across the life span",
"container-title": "Neurobiology of aging",
"author": [
{
"family": "Crawford",
"given": "Jennifer L."
},
{
"family": "Chen",
"given": "Hsiang-Yu"
},
{
"family": "Adornato",
"given": "Alex A."
},
{
"family": "Matulonis",
"given": "Johanna"
},
{
"family": "Hooker",
"given": "Jacob M."
},
{
"family": "Jacobs",
"given": "Heidi I.L."
},
{
"family": "Berry",
"given": "Anne S."
}
],
"container-title-short": "Neurobiol Aging",
"volume": "167",
"page": "120-128",
"DOI": "10.1016/j.neurobiolaging.2026.06.012",
"PMID": "42392002",
"PMCID": "PMC13403197",
"ISSN": "0197-4580",
"publisher": "Elsevier BV",
"URL": "https://doi.org/10.1016/j.neurobiolaging.2026.06.012",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
30
]
]
}
}

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.1002/hipo.70100 [code]
Dissociable Mechanisms Underlie Differences Between Memory and Metamemory in Older Adults: The Differentiating Role of Anxiety and Depression Symptoms.
Journal: Hippocampus
In common: easystats, ggpubr, tidyverse, PET / SPECT, structural MRI / diffusion, 12 references, author Jennifer L. Crawford
[2] doi:10.1093/geront/gnaf277 [code]
What characterizes the exceptional cognition of superagers? A systematic review of multidomain biomarkers of successful cognitive aging.
Journal: The Gerontologist
In common: ggpubr, tidyverse, PET / SPECT, structural MRI / diffusion, 5 references
[3] doi:10.1186/s13195-026-02054-z [code]
Pathways to resilience: relationships between cognitive reserve, psychological debt, and Alzheimer's disease biomarkers.
Journal: Alzheimer's research & therapy
In common: car, tidyverse, 5 references
[4] doi:10.1093/braincomms/fcag279 [code]
Network flexibility facilitates treatment-induced recovery in post-stroke aphasia.
Journal: Brain communications
In common: easystats, car, lme4, 2 other tools, 2 references
[5] doi:10.1093/braincomms/fcag176 [code]
Tau topography subtypes account for clinical heterogeneity and longitudinal trajectories in early-onset Alzheimer's disease.
Journal: Brain communications
In common: easystats, car, lme4, 2 other tools, PET / SPECT
[6] doi:10.1038/s41398-026-03966-y [code]
Augmenting extinction with counterconditioning strengthens and sustains neural safety representations in PTSD.
Journal: Translational psychiatry
In common: easystats, car, lme4, 2 other tools, 1 reference
[7] doi:10.1162/imag.a.1321 [code]
Phase similarity between similar objects indicates representational merging across retrieval training but not sleep.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: easystats, car, lme4, 2 other tools, 1 reference
[8] doi:10.1038/s41467-026-73262-2 [code]
Robust but independent sex differences in human brain function, structure, and behavior.
Journal: Nature communications
In common: easystats, car, lme4, 2 other tools, structural MRI / diffusion
[9] doi:10.1002/trc2.70257 [code]
Blood DNA methylation signature of cognitive reserve moderates the association between CSF tau pathology and memory in prodromal Alzheimer's disease.
Journal: Alzheimer's & dementia (New York, N. Y.)
In common: lme4, ggpubr, tidyverse, structural MRI / diffusion, 2 references
[10] 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, tidyverse, structural MRI / diffusion, 5 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.