The time interval from amyloid to tau PET positivity varies by age, sex and APOE-ε4 status.
The 2 matches
- [1] § Methods › Statistical analyses ↔ main stats analyses.R, lines 407–458 · score 0.64 · concurrent amyloid tau, CDR SB, 65–75, LME, symptom onset, pairwise
- [2] § Methods › Amyloid and tau PET measures ↔ Dataset creation and variables definition.R, lines 1–58 · score 0.52 · Mesial temporal, ucberkeley, parietal, FBB, FBP, composite
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 · 458 lines · 23 KB · no license · 1 match
- ###factors influencing amyloid or tau onset age ###
- dataset_agespaper <- read_csv("/Users/martamilaaloma/Documents/Datasets/ADNI/Onset ages project/dataset_agespaper.csv")
- ####Demographics and estimated ages by sex ####
- table <- CreateTableOne(vars = c("Age_amyPET", "APOE_binary", "Race", "PTEDUCAT", "DIAGNOSIS", "MMSCORE","CDRSB", "CDGLOBAL", "SUVR_compositeRef", "AmyPET_bin", "MesialTemporal", "TauPET_bin"), strata = "PTGENDER", addOverall = T, data = dataset_all_bl_, test=T, testNonNormal = TRUE)
- df_table <- as.data.frame(print(table, showAllLevels = TRUE, quote = FALSE, noSpaces = TRUE, printToggle = FALSE))
- df_table <- df_table %>%
- rownames_to_column(var = "Variable")
- n_counts <- sapply(dataset_all_bl_amy [, c("Age", "APOE_binary", "Race", "PTEDUCAT","CDGLOBAL", "SUVR_compositeRef", "MesialTemporal", "Amyloid_age_mean", "Tau_age_mean", "est_conversion_age_tau")],
- function(x) sum(!is.na(x)))
- write.csv(df_table, "results_sex.csv", row.names = FALSE)
- #### Main effects of demographics on age at amyloid and tau positivity ####
- model_amyloid <- lm(Amyloid_age_mean ~ APOE_binary, data = subset(dataset_bl_amy, PTGENDER=="Men"))
- summary(model_amyloid )
- model_tau <- lm(Tau_age_mean ~ PTGENDER*APOE_binary , data = dataset_bl_tau)
- summary(model_tau )
- #### Association between age at amyloid and tau positivity####
- model_age_Ass <- lm( Tau_age_mean ~ Amyloid_age_mean*PTGENDER*APOE_binary , data = dataset_bl_cdr, family = gaussian)
- summary(model_age_Ass)
- ####lag between amyloid and tau ages####
- lag_model <- lm(year_diff_amytau ~ Amyloid_age_mean*PTGENDER*APOE_binary , data = dataset_bl_cdr)
- summary(lag_model)
- #HIST of lag distribution
- hist(dataset_bl_cdr$year_diff_amytau, col = rgb(0, 0, 1, 0.1),
- main = "Amyloid-tau interval distribution", xlab = "Amyloid-tau interval (years)", breaks = 20, xlim = c(-20, 30), ylim = c(0,20))
- abline(v = 0, col = "red", lwd = 2)
- abline(v = -4, col = "black", lty = 2, lwd = 2)
- abline(v = 4, col = "black", lty = 2, lwd = 2)
- ####figures####
- #boxplot ages and interval by sex and apoe
- A <- ggplot(subset(dataset_bl_cdr, !is.na(APOE_binary)),
- aes(x = interaction(PTGENDER, APOE_binary),
- y = Amyloid_age_mean,
- fill = interaction(PTGENDER, APOE_binary))) +
- geom_boxplot(outlier.shape = NA, alpha = 0.3, show.legend = FALSE) +
- geom_jitter(aes(color = interaction(PTGENDER, APOE_binary), shape = APOE_binary),
- width = 0.2, alpha = 0.8, size = 1.5, show.legend = F) +
- scale_fill_manual(values = c("forestgreen", "purple", "forestgreen", "purple")) +
- scale_color_manual(values = c("forestgreen", "purple", "forestgreen", "purple")) +
- scale_shape_manual(values = c("non-carrier" = 16, "carrier" = 17)) +
- scale_y_continuous(limits = c(30, 95), breaks = seq(35, 95, by = 10)) +
- scale_x_discrete(labels = c(
- "Men.carrier" = "Men",
- "Women.carrier" = "Women",
- "Men.non-carrier" = "Men",
- "Women.non-carrier" ="Women"))+
- theme_classic() + theme(axis.title.y = element_text(size = 16),
- axis.text.x = element_text(size = 14),
- axis.text.y = element_text(size = 14)) +
- labs(title = "",
- x = "",
- y = "Estimated age at amyloid PET positivity (years)")
- B <- ggplot(subset(dataset_bl_cdr, !is.na(APOE_binary)),
- aes(x = interaction(PTGENDER, APOE_binary),
- y = Tau_age_mean,
- fill = interaction(PTGENDER, APOE_binary))) +
- geom_boxplot(outlier.shape = NA, alpha = 0.3, show.legend = FALSE) +
- geom_jitter(aes(color = interaction(PTGENDER, APOE_binary), shape = APOE_binary),
- width = 0.2, alpha = 0.8, size = 1.5, show.legend = F) +
- scale_y_continuous(limits = c(30, 95), breaks = seq(35, 95, by = 10)) +
- scale_fill_manual(values = c("forestgreen", "purple", "forestgreen", "purple")) +
- scale_color_manual(values = c("forestgreen", "purple", "forestgreen", "purple")) +
- scale_shape_manual(values = c("non-carrier" = 16, "carrier" = 17)) +
- scale_x_discrete(labels = c(
- "Men.carrier" = "Men",
- "Women.carrier" = "Women",
- "Men.non-carrier" = "Men",
- "Women.non-carrier" ="Women"
- )) +
- theme_classic() + theme(axis.title.y = element_text(size = 16),
- axis.text.x = element_text(size = 14),
- axis.text.y = element_text(size = 14)) +
- labs(title ="",
- x = "",
- y = "Estimated age at tau PET positivity (years)" )
- library(cowplot)
- fig1 <- plot_grid(A,B, nrow=1)
- ggsave("~/Documents/positivity ages paper/Fig1.pdf", plot = fig1 , width = 12, height = 6)
- fig2b <- ggplot(subset(dataset_bl_cdr, !is.na(APOE_binary)),
- aes(x = interaction(PTGENDER, APOE_binary),
- y = year_diff_amytau,
- fill = interaction(PTGENDER, APOE_binary))) +
- geom_boxplot(outlier.shape = NA, alpha = 0.3, show.legend = FALSE) +
- geom_jitter(aes(color = interaction(PTGENDER, APOE_binary), shape = APOE_binary),
- width = 0.2, alpha = 0.8, size = 1.5, show.legend = F) +
- scale_fill_manual(values = c("forestgreen", "purple", "forestgreen", "purple")) +
- scale_color_manual(values = c("forestgreen", "purple", "forestgreen", "purple")) +
- scale_shape_manual(values = c("non-carrier" = 16, "carrier" = 17)) +
- theme_classic() + theme(axis.title.y = element_text(size = 16),
- axis.text.x = element_text(size = 14),
- axis.text.y = element_text(size = 14)) +
- scale_x_discrete(labels = c(
- "Men.carrier" = "Men",
- "Women.carrier" = "Women",
- "Men.non-carrier" = "Men",
- "Women.non-carrier" ="Women")) +
- labs(title = "",
- x = "",
- y = "Amyloid-tau interval (years)")
- ggsave("~/Documents/positivity ages paper/Fig2b.pdf", plot = fig2b , width = 6, height = 6)
- #scatterplots correlations amyloid and tau ages
- a <- ggplot(subset(dataset_bl_cdr, !is.na(APOE_binary)),
- aes(x = Amyloid_age_mean, y = Tau_age_mean,
- colour = APOE_binary, shape = APOE_binary)) + # Map both here
- geom_smooth(method = "lm", show.legend = TRUE) +
- geom_point(show.legend = TRUE) +
- geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "black") +
- scale_color_manual(
- values = c("non-carrier" = "blue", "carrier" = "orange2"),
- name = expression(APOE*epsilon*4~status),
- labels = c("non-carrier" = "Non-carrier", "carrier" = "Carrier")
- ) +
- scale_shape_manual(
- values = c("non-carrier" = 16, "carrier" = 17),
- name = expression(APOE*epsilon*4~status),
- labels = c("non-carrier" = "Non-carrier", "carrier" = "Carrier")
- ) + ylim(35,90) +
- theme_classic() +
- xlab("Estimated age at amyloid PET positivity (years)") +
- ylab("Estimated age at tau PET positivity (years)") +
- theme(
- plot.title = element_text(size = 16, face = "bold"),
- axis.title = element_text(size = 14),
- axis.text = element_text(size = 12),
- legend.position = c(0.05, 0.95),
- legend.justification = c("left", "top")
- )
- b <- ggplot(dataset_bl_cdr, aes(x=Amyloid_age_mean, y=Tau_age_mean, group = PTGENDER, colour = PTGENDER)) +
- geom_smooth(method="lm",show.legend = T) + geom_point(aes(color= PTGENDER),show.legend = T)+ scale_color_manual(values=c("forestgreen", "purple"),name= "Sex") +
- geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "black") + ylim(35,90) +
- theme_classic() + xlab("Estimated age at amyloid PET positivity (years)") + ylab("Estimated age at tau PET positivity (years)") + theme(plot.title = element_text(size = 16, face = "bold"),axis.title = element_text(size = 14), # Axis titles
- axis.text = element_text(size = 12), legend.position = c(0.05, 0.95), legend.justification = c("left", "top"))
- fig3 <- plot_grid(a,b, nrow=1)
- ggsave("~/Documents/positivity ages paper/Fig3.pdf", plot = fig3 , width = 12, height = 6)
- #correlations amyloid age and interval
- c <- ggplot(subset(dataset_bl_cdr, !is.na(APOE_binary)),
- aes(x = Amyloid_age_mean, y = year_diff_amytau,
- colour = APOE_binary, shape = APOE_binary)) + # Map both here
- geom_smooth(method = "lm", show.legend = TRUE) +
- geom_point(show.legend = TRUE) + # Don't remap inside geom_point
- scale_color_manual(
- values = c("non-carrier" = "blue", "carrier" = "orange2"),
- name = expression(APOE*epsilon*4~status),
- labels = c("non-carrier" = "Non-carrier", "carrier" = "Carrier")
- ) +
- scale_shape_manual(
- values = c("non-carrier" = 16, "carrier" = 17),
- name = expression(APOE*epsilon*4~status),
- labels = c("non-carrier" = "Non-carrier", "carrier" = "Carrier")
- ) +
- theme_classic() +
- xlab("Estimated age at amyloid PET positivity (years)") +
- ylab("Amyloid-tau interval (years)") +
- theme(
- plot.title = element_text(size = 16, face = "bold"),
- axis.title = element_text(size = 14),
- axis.text = element_text(size = 12),
- legend.position = c(0.05, 0.05),
- legend.justification = c("left", "bottom")
- )
- d <- ggplot(dataset_bl_cdr, aes(x=Amyloid_age_mean, y=year_diff_amytau, group = PTGENDER, colour = PTGENDER)) +
- geom_smooth(method="lm",show.legend = T) + geom_point(aes(color= PTGENDER),show.legend = T)+ scale_color_manual(values=c("forestgreen", "purple"), name="Sex") +
- theme_classic() + xlab("Estimated age at amyloid PET positivity (years)") + ylab("Amyloid-tau interval (years)") + theme(plot.title = element_text(size = 16, face = "bold"),axis.title = element_text(size = 14), # Axis titles
- axis.text = element_text(size = 12),legend.position = c(0.05, 0.05), # Top left inside the plot
- legend.justification = c("left", "bottom"))
- fig4 <- plot_grid(c,d, nrow=1)
- ggsave("~/Documents/positivity ages paper/Fig4.pdf", plot = fig4 , width = 12, height = 6)
- # correlations interval and conversion age
- e <- ggplot(subset(dataset_all_bl_comb, !is.na(APOE_binary)), aes(x=year_diff_amytau, y=est_conversion_age_tau, group = APOE_binary, colour = APOE_binary)) +
- geom_smooth(method="lm", show.legend = F) + geom_point(aes(color= APOE_binary), show.legend = F)+ scale_color_manual(values=c("darkblue", "forestgreen"),name= expression(APOE*epsilon*4~status)) +
- theme_classic() + xlab("Amyloid-tau lag (years)") + ylab("Symptom onset age (years)")
- f <- ggplot(dataset_all_bl_comb, aes(x=year_diff_amytau, y=est_conversion_age_tau, group = PTGENDER, colour = PTGENDER)) +
- geom_smooth(method="lm", show.legend = F) + geom_point(aes(color= PTGENDER), show.legend = F)+ scale_color_manual(values=c("darkgrey", "purple"), name="Sex") +
- theme_classic() + xlab("Amyloid-tau lag (years)") + ylab("Symptom onset age (years)")
- fig <- plot_grid(a, b, c, d, e, f, nrow=3)
- ggsave("~/Documents/AAIC25/Fig.pdf", plot = fig , width = 4, height = 7)
- ##plotting CDRSB trajectories as function of amyloid time by estimated ages groups ####
- dataset_agespaper$years_amy_onset <- dataset_agespaper$Age_cdr - dataset_agespaper$Amyloid_age_mean
- dataset_agespaper$years_tau_onset <- dataset_agespaper$Age_cdr - dataset_agespaper$Tau_age_mean
- #plot amyloid time
- amy_plot <- ggplot(subset(dataset_agespaper, !is.na(amy_age_group)), aes(x = years_amy_onset, y = CDRSB)) +
- geom_point(size = 1, show.legend = FALSE, aes(color = amy_age_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color = amy_age_group), alpha = 0.3, size = 0.2, show.legend = FALSE) +
- geom_smooth(aes(color = amy_age_group), method = "gam", show.legend = FALSE,
- formula = y ~ s(x, k = 3), size = 1.5) +
- geom_hline(yintercept = 2.5, linetype = "solid", color = "black") +
- # Arrows
- annotate("segment", x = 15.7, xend = 15.7, y = 2.8 - arrow_length , yend = -2.2,
- arrow = arrow(length = unit(0.25, "cm")), color = "#7570b3", size = 1) +
- annotate("segment", x = 14.1, xend = 14.1, y = 2.8 - arrow_length, yend = -2.2 ,
- arrow = arrow(length = unit(0.25, "cm")), color = "#d95f02", size = 1) +
- scale_x_continuous(breaks = seq(-10, 30, by = 5)) +
- scale_color_manual(values = c("< 65" = "#7570b3", "65-75" = "#d95f02", "> 75" = "#1b9e77")) +
- labs(x = "Estimated years from amyloid PET positivity", y = "CDR-SB") +
- theme_classic() +
- coord_cartesian(ylim = c(y_target - arrow_length - 0.5, max(dataset_agespaper$CDRSB, na.rm = TRUE))) +
- theme(
- axis.title.x = element_text(size = 14),
- axis.title.y = element_text(size = 14)
- )
- #plot tau time
- tau_plot <- ggplot(subset(dataset_agespaper, !is.na(tau_age_group)&!is.na(APOE_binary) ), aes(x = years_tau_onset, y = CDRSB)) +
- geom_point(size = 1, show.legend = FALSE, aes(color = tau_age_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color = tau_age_group), alpha = 0.3, size = 0.2, show.legend = FALSE) +
- geom_smooth(aes(color = tau_age_group), method = "gam", show.legend = FALSE,
- formula = y ~ s(x, k = 3), size = 1.5) +
- geom_hline(yintercept = 2.5, linetype = "solid", color = "black") +
- # Arrows
- annotate("segment", x = 11.7, xend = 11.7, y = 2.9 - arrow_length , yend = -2.2,
- arrow = arrow(length = unit(0.25, "cm")), color = "#7570b3", size = 1) +
- annotate("segment", x = 8.7, xend = 8.7, y = 2.9 - arrow_length, yend = -2.2 ,
- arrow = arrow(length = unit(0.25, "cm")), color = "#d95f02", size = 1) +
- annotate("segment", x = 8.4, xend = 8.4, y = 2.9 - arrow_length, yend = -2.2 ,
- arrow = arrow(length = unit(0.25, "cm")), color = "#1b9e77", size = 1) +
- scale_x_continuous(breaks = seq(-10, 20, by = 5)) +
- scale_color_manual(values = c("< 65" = "#7570b3", "65-75" = "#d95f02", "> 75" = "#1b9e77")) +
- labs(x = "Estimated years from tau PET positivity", y = "CDR-SB") +
- theme_classic() +
- coord_cartesian(ylim = c(y_target - arrow_length - 0.5, max(dataset_agespaper$CDRSB, na.rm = TRUE))) +
- theme(
- axis.title.x = element_text(size = 14),
- axis.title.y = element_text(size = 14)
- )
- #plot interval
- plot_int_amy <- ggplot(subset(dataset_agespaper, interval_group== "AmyFirst_less10" |interval_group== "AmyFirst_more10" | interval_group== "Concurrent_amytau" ), aes(x = years_amy_onset, y = CDRSB)) +
- geom_point(size = 1, show.legend = FALSE, aes(color = interval_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color = interval_group), alpha = 0.3, size = 0.2, show.legend = FALSE) +
- geom_smooth(aes(color = interval_group), method = "gam", show.legend = FALSE,
- formula = y ~ s(x, k = 3), size = 1.5) +
- geom_hline(yintercept = 2.5, linetype = "solid", color = "black") +
- # Arrows
- annotate("segment", x = 13.2, xend = 13.2, y = 2.9 - arrow_length , yend = -2.2,
- arrow = arrow(length = unit(0.25, "cm")), color = "brown", size = 1) +
- annotate("segment", x = 25.8, xend = 25.8, y = 2.9 - arrow_length, yend = -2.2 ,
- arrow = arrow(length = unit(0.25, "cm")), color = "red", size = 1) +
- scale_x_continuous(breaks = seq(-10, 30, by = 5)) +
- scale_color_manual(values = c("Concurrent_amytau" = "brown","AmyFirst_less10" = "orange", "AmyFirst_more10" = "red")) +
- labs(x = "Estimated years from amyloid PET positivity", y = "CDR-SB") +
- theme_classic() +
- coord_cartesian(ylim = c(y_target - arrow_length - 0.5, max(dataset_agespaper$CDRSB, na.rm = TRUE))) +
- theme(
- axis.title.x = element_text(size = 14),
- axis.title.y = element_text(size = 14)
- )
- plot_int_tau <- ggplot(subset(dataset_agespaper, interval_group== "AmyFirst_less10" |interval_group== "AmyFirst_more10" | interval_group== "Concurrent_amytau" ), aes(x = years_tau_onset, y = CDRSB)) +
- geom_point(size = 1, show.legend = FALSE, aes(color = interval_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color = interval_group), alpha = 0.3, size = 0.2, show.legend = FALSE) +
- geom_smooth(aes(color = interval_group), method = "gam", show.legend = FALSE,
- formula = y ~ s(x, k = 3), size = 1.5) +
- geom_hline(yintercept = 2.5, linetype = "solid", color = "black") +
- # Arrows
- annotate("segment", x = 11.3, xend = 11.3, y = 2.9 - arrow_length , yend = -2.2,
- arrow = arrow(length = unit(0.25, "cm")), color = "brown", size = 1) +
- annotate("segment", x = 10.4, xend = 10.4, y = 2.9 - arrow_length, yend = -2.2 ,
- arrow = arrow(length = unit(0.25, "cm")), color = "orange", size = 1) +
- annotate("segment", x = 10.7, xend = 10.7, y = 2.9 - arrow_length, yend = -2.2 ,
- arrow = arrow(length = unit(0.25, "cm")), color = "red", size = 1) +
- scale_x_continuous(breaks = seq(-10, 20, by = 5)) +
- scale_color_manual(values = c("Concurrent_amytau" = "brown","AmyFirst_less10" = "orange", "AmyFirst_more10" = "red")) +
- labs(x = "Estimated years from tau PET positivity", y = "CDR-SB") +
- theme_classic() +
- coord_cartesian(ylim = c(y_target - arrow_length - 0.5, max(dataset_agespaper$CDRSB, na.rm = TRUE))) +
- theme(
- axis.title.x = element_text(size = 14),
- axis.title.y = element_text(size = 14)
- )
- fig_gams <- plot_grid(amy_plot,tau_plot,plot_int_amy, plot_int_tau, nrow=2)
- ggsave("~/Documents/positivity ages paper/Fig_gams.jpg", plot = fig_gams , width = 12, height = 12)
- ####Analyses of rates of change from CDR >0 in CI individuals ####
- # filter those RID with two consecutive CDR>0 and a last visit of CDR>0
- CI_data <- dataset_agespaper %>%
- arrange(RID, VISDATE) %>% # Make sure data is ordered correctly
- group_by(RID) %>%
- mutate(
- cdr_positive = CDGLOBAL > 0,
- lead_cdr_positive = lead(cdr_positive),
- is_first_of_two = cdr_positive & lead_cdr_positive
- ) %>%
- # Identify first visit where two consecutive CDR > 0 begin
- mutate(first_pos_visdate = ifelse(is_first_of_two, VISDATE, NA)) %>%
- fill(first_pos_visdate, .direction = "down") %>%
- # Keep only those with a valid starting point
- filter(!is.na(first_pos_visdate)) %>%
- # Keep only visits from that point onward
- filter(VISDATE >= first_pos_visdate) %>%
- # Check that the LAST visit per person still has CDR > 0
- group_by(RID) %>%
- filter(last(CDGLOBAL) > 0) %>%
- ungroup()
- #time since first cdr>0
- CI_data <- CI_data %>%
- arrange(RID, VISDATE) %>%
- group_by(RID) %>%
- mutate(
- CIonset_date = min(VISDATE), # first CDR > 0 visit already in data
- years_since_CIonset = as.numeric(difftime(VISDATE, CIonset_date, units = "days")) / 365.25
- ) %>%
- ungroup()
- CI_5Y <- subset(CI_data, years_since_CIonset<=5)
- CI_5Y <- CI_5Y %>%
- group_by(RID) %>%
- arrange(VISDATE) %>% # or whatever your time variable is
- mutate(last_cdr = last(CDGLOBAL)) %>% # assuming CDR global score is called `CDR`
- filter(last_cdr != 0) %>% # keep only if last CDR > 0
- ungroup()
- ##bl datasets to report characteristics of CI subset##
- ##for amyloid data
- dataset_bl_amyCI <- CI_5Y %>%
- filter(!is.na(Amyloid_age_mean))%>%
- arrange(RID, VISDATE)
- dataset_bl_amyCI <- dataset_bl_amyCI %>%
- distinct(RID, .keep_all = TRUE)
- ##for tau data##
- dataset_bl_tauCI <- CI_5Y %>%
- filter(!is.na(Tau_age_mean))%>%
- arrange(RID, VISDATE)
- dataset_bl_tauCI <- dataset_bl_tauCI %>%
- distinct(RID, .keep_all = TRUE)
- dataset_bl_combCI <- subset(dataset_bl_amyCI, !is.na(Tau_age_mean))
- ##characteristics of the CI dataset
- table <- CreateTableOne(vars = c("Age", "Edu_level", "PTGENDER", "Amyloid_age_mean", "Tau_age_mean","amy_age_group", "tau_age_group","Centiloids", "TRACER" ,"APOE_binary", "Race", "PTEDUCAT", "DIAGNOSIS", "MMSCORE","CDRSB", "CDGLOBAL", "SUVR_compositeRef", "AmyPET_bin", "MesialTemporal", "TauPET_bin"), addOverall = T, data = dataset_bl_amyCI, test=T, testNonNormal = TRUE)
- df_table <- as.data.frame(print(table, showAllLevels = TRUE, quote = FALSE, noSpaces = TRUE, printToggle = FALSE))
- df_table <- df_table %>%
- rownames_to_column(var = "Variable")
- n_counts <- sapply(dataset_bl_amyCI [, c("Age", "APOE_binary", "Race", "PTEDUCAT","CDGLOBAL", "SUVR_compositeRef", "MesialTemporal", "Amyloid_age_mean", "Tau_age_mean", "est_conversion_age_tau")],
- function(x) sum(!is.na(x)))
- dataset_last_amyCI <- CI_5Y %>%
- filter(!is.na(Amyloid_age_mean))%>%
- arrange(RID, desc(VISDATE))
- dataset_last_amyCI <- dataset_last_amyCI %>%
- distinct(RID, .keep_all = TRUE)
- dataset_last_tauCI <- CI_5Y %>%
- filter(!is.na(Tau_age_mean))%>%
- arrange(RID, desc(VISDATE))
- dataset_last_tauCI <- dataset_last_tauCI %>%
- distinct(RID, .keep_all = TRUE)
- dataset_last_combCI <- subset(dataset_last_amyCI, !is.na(Tau_age_mean))
- ##Run LME models##
- library(lme4)
- library(lmerTest)
- library(emmeans)
- model1 <- lmer(CDRSB ~ years_since_CIonset *tau_age_group*PTGENDER + (1 +years_since_CIonset | RID), data = CI_5Y)
- summary(model1)
- anova(model1)
- emm <- emtrends(model1, pairwise ~tau_age_group, var = "years_since_CIonset")
- emm$contrasts
- ##plot trajectories results##
- plot_amyage <- ggplot(subset(CI_5Y,!is.na(amy_age_group)), aes(x = years_since_CIonset, y = CDRSB)) +
- geom_point(size=1, show.legend = F, aes(color=amy_age_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color =amy_age_group), alpha = 0.2, size = 0.1, show.legend = FALSE) +
- geom_smooth( aes(color = amy_age_group), method="lm", show.legend = F, size=1.5, linetype="solid") +
- scale_color_manual(values = c("< 65" = "#7570B3", "65-75" = "#D95F02", "> 75" = "#1B9E77")) +
- labs(x = "Years since symptom onset", y ="CDR-SB") +
- theme_classic() +
- theme(
- axis.title.x = element_text(size = 14), # Change x-axis label size
- axis.title.y = element_text(size = 14))
- plot_tauage <- ggplot(subset(CI_5Y,!is.na(tau_age_group)), aes(x = years_since_CIonset, y = CDRSB)) +
- geom_point(size=1, show.legend = F, aes(color=tau_age_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color =tau_age_group), alpha = 0.2, size = 0.1, show.legend = F) +
- geom_smooth( aes(color = tau_age_group), method="lm", show.legend = F, size=1.5, linetype="solid") +
- scale_color_manual(values = c("< 65" = "#7570B3", "65-75" = "#D95F02", "> 75" = "#1B9E77")) +
- labs(x = "Years since symptom onset", y ="CDR-SB") +
- theme_classic() +
- theme(
- axis.title.x = element_text(size = 14), # Change x-axis label size
- axis.title.y = element_text(size = 14))
- plot_int <- ggplot(subset(CI_5Y, !is.na(interval_group) & interval_group!= "Tau first"), aes(x = years_since_CIonset, y = CDRSB)) +
- geom_point(size=1, show.legend = F, aes(color=interval_group, shape = APOE_binary)) +
- geom_line(aes(group = RID, color =interval_group), alpha = 0.2, size = 0.1, show.legend = FALSE) +
- geom_smooth( aes(color = interval_group), method="lm", show.legend = F, size=1.5, linetype="solid") +
- #scale_color_manual(values = c("< 65" = "#7570B3", "65-75" = "#D95F02", "> 75" = "#1B9E77")) +
- scale_color_manual(values = c( "Concurrent amyloid-tau" = "brown","Amyloid first < 10 years" = "orange", "Amyloid first > 10 years" = "red")) +
- labs(x = "Years since symptom onset", y ="CDR-SB") +
- theme_classic() +
- theme(
- axis.title.x = element_text(size = 14), # Change x-axis label size
- axis.title.y = element_text(size = 14))
- fig_LME <- plot_grid(plot_amyage,plot_tauage,plot_int, nrow=2)
- ggsave("~/Documents/positivity ages paper/Fig_LME.pdf", plot = fig_LME , width = 12, height = 12)
- #########################################################################################
main stats analyses.R at commit a2fc82a, no license · at the source
Overview
- Northern California Institute for Research and Education, San Francisco, CA, USA
- Department of Radiology and Biomedical Imaging, University of California San Francisco, San Francisco, CA, USA
- Department of Neurology, Washington University in St. Louis, St. Louis, MO, USA
Abstract
Background: Alzheimer’s disease (AD) progression varies widely among individuals. Identifying factors influencing timing of pathology and clinical progression is crucial for optimizing early intervention trials.
Objectives: To investigate how the estimated age at amyloid and tau PET positivity, and the time interval between these two key events (“amyloid–tau time interval”), relate to symptom onset and clinical progression, and to assess the effects of APOE-ε4 status and sex on these associations.
Design: This analysis used data from the Alzheimer’s Disease Neuroimaging Initiative (ADNI) and the Harvard Aging Brain Study (HABS).
Setting: The ADNI is a multicenter observational cohort conducted at 55 sites across the United States; The HABS is a longitudinal, single-center observational cohort.
Participants: This study included participants with at least one positive amyloid PET scan (ADNI n = 792; HABS n = 104) or at least one positive tau PET scan (ADNI n = 212; HABS n = 48). All participants had information on sex, APOE-ε4 status, and longitudinal cognitive assessments.
Measurements: We examined the influence of APOE-ε4 status, sex, and their interaction on the estimated age at biomarker positivity and the amyloid-tau time interval. Accelerated Failure Time (AFT) models were used to predict time to symptom onset (CDR > 0) based on estimated biomarker positivity age and the amyloid-tau time interval. Linear mixed-effects (LME) models evaluated differences in the rate of cognitive decline, as measured by CDR-SB, over five years following symptom onset according to estimated biomarker positivity age and amyloid-tau time interval. Additional models included interaction terms with sex or APOE-ε4 status.
Results: The amyloid-tau time interval varied markedly between individuals and was shorter in APOE-ε4 carriers, women, and those with older age at amyloid PET positivity. APOE-ε4 carriers and women became amyloid and tau PET positive at younger ages. Following amyloid PET positivity, a shorter time to tau PET positivity predicted earlier symptom onset. After symptom onset, faster cognitive decline was observed in individuals with younger ages at amyloid or tau PET positivity. The time to symptom onset following tau PET positivity, or the rate of cognitive decline after symptom onset, were not influenced by the amyloid-tau time interval.
Conclusions: After becoming amyloid PET positive, APOE-ε4 carriers, women and older individuals may have a shorter window for detection and treatment before they become tau PET positive and develop symptoms. These findings should guide the identification of individuals at highest risk of rapid AD progression, enabling more efficient participant selection for clinical trials.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 2 matches between paragraphs and lines of code.
cind/Amyloid-tau-interval-paper-Mil--Alom-
a2fc82ac10bf3a531551ae579bbd6813adbaebfe, 29 September 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
3 files
- AFT_analyses.R, R, 196 lines
- Dataset creation and variables definition.R, R, 287 lines, 1 match
- main stats analyses.R, R, 458 lines, 1 match
cind/Amyloid-tau-interval-paper-Mil-Alom
Availability: 1 check, the latest on 27 September 2026: the link is dead
- 27 September 2026: the link is dead
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 3 scripts, each with its path and the digest of its content;
- 2 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
Data from this study and the study methodology report may be accessed from the ADNI Laboratory of NeuroImaging (LONI) database: adni.loni.usc.edu. Access the HABS data may be requested at habs.mgh.harvard.edu/
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 2, 28 September 2026
- Authors: added Marta Milà-Alomà (0000-0002-5687-4597); Pamela Thropp (0009-0006-5371-8667); removed Marta Milà-Alomà; Pamela Thropp
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 6 keywords, 16 MeSH terms, 1 funder, 49 references.
Cite
This paper
Milà-Alomà, M., Hausle, I., Petersen, K. K., Thropp, P., Schindler, S. E., & Tosun, D. (2026). The time interval from amyloid to tau PET positivity varies by age, sex and APOE-ε4 status. The journal of prevention of Alzheimer's disease, 13(8), 100622. https://
BibTeX
@article{milaaloma2026ti
author = {Milà-Alomà, Marta and Hausle, Isabella and Petersen, Kellen K and Thropp, Pamela and Schindler, Suzanne E and Tosun, Duygu},
title = {{The time interval from amyloid to tau PET positivity varies by age, sex and APOE-ε4 status}},
journal = {The journal of prevention of Alzheimer's disease},
year = {2026},
month = jun,
volume = {13},
number = {8},
pages = {100622},
publisher = {Elsevier},
issn = {2426-0266},
doi = {10.1016/
url = {https://
pmid = {42309020},
pmcid = {PMC13284470}
}
RIS
TY - JOUR
AU - Milà-Alomà, Marta
AU - Hausle, Isabella
AU - Petersen, Kellen K
AU - Thropp, Pamela
AU - Schindler, Suzanne E
AU - Tosun, Duygu
TI - The time interval from amyloid to tau PET positivity varies by age, sex and APOE-ε4 status
T2 - The journal of prevention of Alzheimer's disease
J2 - J Prev Alzheimers Dis
PY - 2026
DA - 2026/
VL - 13
IS - 8
SP - 100622
SN - 2426-0266
PB - Elsevier
DO - 10.1016/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1016/
"type": "article-journal",
"title": "The time interval from amyloid to tau PET positivity varies by age, sex and APOE-ε4 status",
"container-title": "The journal of prevention of Alzheimer's disease",
"author": [
{
"family": "Milà-Alomà",
"given": "Marta"
},
{
"family": "Hausle",
"given": "Isabella"
},
{
"family": "Petersen",
"given": "Kellen K"
},
{
"family": "Thropp",
"given": "Pamela"
},
{
"family": "Schindler",
"given": "Suzanne E"
},
{
"family": "Tosun",
"given": "Duygu"
}
],
"container-title-short":
"volume": "13",
"issue": "8",
"page": "100622",
"DOI": "10.1016/
"PMID": "42309020",
"PMCID": "PMC13284470",
"ISSN": "2426-0266",
"publisher": "Elsevier",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
17
]
]
}
}
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/s41593-026-02363-4 [code]
- Cortical thickness changes precede high levels of amyloid by at least 7 years.Journal: Nature neuroscienceIn common: broom, lmerTest, lme4, 3 other tools, PET / SPECT, Alzheimer's / dementia, 5 references
- [2] doi:10.1038/s44400-026-00100-z [code]
- Peripheral blood microarray-based transcriptomic and epigenetic analyses identify immune, inflammation, and metabolic dysregulation in Alzheimer's disease.Journal: NPJ dementiaIn common: survival, broom, lme4, 1 other tool, Alzheimer's / dementia, 4 references
- [3] doi:10.1038/s41467-026-71732-1 [code]
- Trajectories of plasma and CSF MTBR-tau243 and phosphorylated-tau species across the Alzheimer's disease continuum.Journal: Nature communicationsIn common: PET / SPECT, Alzheimer's / dementia, 3 references, author Suzanne E Schindler
- [4] doi:10.1126/sciadv.aee2305 [code]
- Prediction of mild cognitive impairment progression using time-sensitive multimodal biomarkers.Journal: Science advancesIn common: survival, ggplot2, tidyverse, PET / SPECT, Alzheimer's / dementia, clinical / translational, 3 references
- [5] doi:10.1038/s41467-026-77170-3 [code]
- DNA methylation profiling identifies long-range epigenetic silencing of clustered protocadherins as a key determinant of meningioma progression.Journal: Nature communicationsIn common: survival, broom, emmeans, 4 other tools
- [6] 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: survival, broom, emmeans, 4 other tools
- [7] doi:10.1002/alz.71711 [code]
- Exploring longitudinal relationships among Alzheimer's disease biomarkers.Journal: Alzheimer's & dementia : the journal of the Alzheimer's AssociationIn common: ggplot2, tidyverse, PET / SPECT, Alzheimer's / dementia, clinical / translational, 4 references
- [8] doi:10.1093/brain/awag075 [code]
- Modelling the temporal evolution of plasma p-tau217, amyloid PET, tau PET and cognition.Journal: Brain : a journal of neurologyIn common: tidyverse, PET / SPECT, Alzheimer's / dementia, 5 references
- [9] doi:10.1016/j.nicl.2026.104053 [code]
- Childhood white matter organization predicts adolescent internalizing problems among youth with and without ADHD.Journal: NeuroImage. ClinicalIn common: broom, emmeans, lmerTest, 4 other tools
- [10] doi:10.1016/j.isci.2026.116747 [code]
- Age and loneliness relate to reduced trust learning and alterations in amygdala function.Journal: iScienceIn common: broom, emmeans, lmerTest, 4 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: 2 repositories of the authors' code, each at its verified commit and with its license, 3 scripts, and 2 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:66bc195478b19688…
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.
