The effects of approach bias modification on smoking cue-reactivity in individuals who smoke: A randomized controlled fMRI study.
The 5 matches
- [1] § Interventions › Neuroimaging data ↔ fMRI Analysis/analysis scripts/063CBM ApBM Effects fMRI OSF.R, lines 434 to 475 · score 0.92 · medial prefrontal cortex, left angular gyrus, nucleus accumbens, dorsal striatum, right thalamus, smoking cue reactivity · Report a mismatch
- [2] § Results › Region of interest analysis ↔ fMRI Analysis/analysis scripts/063CBM ApBM Effects fMRI OSF.R, lines 434 to 475 · score 0.88 · medial prefrontal cortex, left angular gyrus, nucleus accumbens, dorsal striatum, right thalamus, activity · Report a mismatch
- [3] § Interventions › Data analysis › Data preprocessing and measure extraction › Behavioral data ↔ AAT_data_precprocessing.R, lines 133 to 174 · score 0.77 · pushsmoking pullsmoking, pull movements, untrained smoking related, joystick, picture, preprocessed · Report a mismatch
- [4] § Interventions › Statistical analysis ↔ fMRI Analysis/analysis scripts/063CBM ApBM Effects fMRI OSF.R, lines 612 to 678 · score 0.70 · pre post change, craving ratings, lme4, Cue reactivity, models, predictors · Report a mismatch
- [5] § Interventions › Study Arms: Approach bias modification, sham training, and TAU-only ↔ AAT_data_precprocessing.R, lines 1 to 42 · score 0.66 · smoking related pictures, positive pictures, Sham training, ApBm, joystick, bias · Report a mismatch
Paper
Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
R · 678 lines · 39 KB · no license · 3 matches
- ### load packages
- library("readxl")
- library(data.table)
- library("writexl")
- library(tidyverse)
- library("Hmisc")
- library(powerjoin)
- library(pastecs)
- library(haven)
- library(naniar)
- #install.packages("rcompanion")
- library(rcompanion)
- library(ltm)
- library(tidyverse)
- library(ggpubr)
- library(rstatix)
- library(broom)
- library(writexl)
- library(openxlsx)
- library(psych)
- library(janitor)
- library(dplyr)
- library(sjmisc)
- #install.packages("jtools")
- library(jtools)
- #install.packages("interactions")
- library(interactions)
- library(emmeans)
- library(lmerTest)
- #install.packages("effects")
- #library(effects)
- library(sjPlot)
- library(haven)
- options(scipen=9999)
- #install.packages("effsize")
- #library(effsize)
- library(lsr)
- library(scales)
- library(effectsize)
- library(readxl)
- #################################################################
- ## LOAD DATA
- #################################################################
- data <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_fMRI_intervention.xlsx")
- data[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- data_long2 <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_long2.xlsx")
- data_long2[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_long2[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- data_ApBM <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_ApBM.xlsx")
- data_ApBM[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_ApBM[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- data_Sham <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_Sham.xlsx")
- data_Sham[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_Sham[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- data_TAU <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_TAU.xlsx")
- data_TAU[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_TAU[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- ROIs <- c("ACC_L", "Angular_L", "Thalamus_R", "dorsal_Striatum_R", "MCC_R", "SupraMarginal_R", "Precuneus_R", "AMY_Bilateral", "Nacc_Bilateral", "mPFC")
- ROIs_CIGminNEU.t1 <- c("ACC_L_CIGminNEU.t1", "Angular_L_CIGminNEU.t1", "Thalamus_R_CIGminNEU.t1", "dorsal_Striatum_R_CIGminNEU.t1", "MCC_R_CIGminNEU.t1", "SupraMarginal_R_CIGminNEU.t1", "Precuneus_R_CIGminNEU.t1", "AMY_Bilateral_CIGminNEU.t1", "Nacc_Bilateral_CIGminNEU.t1", "mPFC_CIGminNEU.t1")
- ROIs_CIG.t2 <- c("rsum_AAL3_ACC_L_mean_cigarettes.t2", "rAAL3_Angular_L_mean_cigarettes.t2", "rsum_AAL3_Thalamus_R_mean_cigarettes.t2", "rsum_AAL3_dorsal_Striatum_R_mean_cigarettes.t2", "rspmT_0001_mask_cluster_782_MCC_R_mean_cigarettes.t2", "rspmT_0001_mask_cluster_381_SupraMarginal_R_mean_cigarettes.t2", "rspmT_0001_mask_cluster_336_Precuneus_R_mean_cigarettes.t2", "rAAL3_AMY_Bilateral_mean_cigarettes.t2", "rAAL3_Nacc_Bilateral_mean_cigarettes.t2", "rMedFC_HarvardOxford_thr25_mPFC_mean_cigarettes.t2")
- ROIs_CIG.t1 <- c("rsum_AAL3_ACC_L_mean_cigarettes.t1", "rAAL3_Angular_L_mean_cigarettes.t1", "rsum_AAL3_Thalamus_R_mean_cigarettes.t1", "rsum_AAL3_dorsal_Striatum_R_mean_cigarettes.t1", "rspmT_0001_mask_cluster_782_MCC_R_mean_cigarettes.t1", "rspmT_0001_mask_cluster_381_SupraMarginal_R_mean_cigarettes.t1", "rspmT_0001_mask_cluster_336_Precuneus_R_mean_cigarettes.t1", "rAAL3_AMY_Bilateral_mean_cigarettes.t1", "rAAL3_Nacc_Bilateral_mean_cigarettes.t1", "rMedFC_HarvardOxford_thr25_mPFC_mean_cigarettes.t1")
- ################################################################################
- # HYPOTHESIS 0: APPETITIVE RESPONSES AT T0
- ################################################################################
- ### AAT
- # all trials
- shapiro.test(data$AAT_finalRT_pushSMOminpullSMO_t1) #--> sig. --> no normal distribution
- stat.desc(data$AAT_finalRT_pushSMOminpullSMO_t1)
- t.test(data$AAT_finalRT_pushSMOminpullSMO_t1, mu = 0)
- AAT_w <- wilcox.test(data$AAT_finalRT_pushSMOminpullSMO_t1, mu=0, alternative = c("two.sided"))
- AAT_w
- wilcoxonZ(data$AAT_finalRT_pushSMOminpullSMO_t1, paired=F, exact=FALSE, correct=FALSE)
- summary(aov(AAT_finalRT_pushSMOminpullSMO_t1 ~ group, data = data))
- describeBy(data$AAT_finalRT_pushSMOminpullSMO_t1, data$group, mat = TRUE, digits = 2)
- # untrained trials
- shapiro.test(data$AAT_finalRT_pushSMOminpullSMO_t1_untrained) #--> sig. --> no normal distribution
- stat.desc(data$AAT_finalRT_pushSMOminpullSMO_t1_untrained)
- stat.desc(data$AAT_finalRT_pushSMOminpullSMO_t2_untrained)
- t.test(data$AAT_finalRT_pushSMOminpullSMO_t1_untrained, mu = 0)
- AAT_w <- wilcox.test(data$AAT_finalRT_pushSMOminpullSMO_t1_untrained, mu=0, alternative = c("two.sided"))
- AAT_w
- wilcoxonZ(data$AAT_finalRT_pushSMOminpullSMO_t1_untrained, paired=F, exact=FALSE, correct=FALSE)
- data %>% wilcox_effsize(AAT_finalRT_pushSMOminpullSMO_t1_untrained ~ 1, mu = 0)
- summary(aov(AAT_finalRT_pushSMOminpullSMO_t1_untrained ~ group, data = data))
- describeBy(data$AAT_finalRT_pushSMOminpullSMO_t1_untrained, data$group, mat = TRUE, digits = 3)
- describeBy(data$AAT_finalRT_pushSMOminpullSMO_t2_untrained, data$group, mat = TRUE, digits = 3)
- ### CRAVING RATING
- shapiro.test(data$craving_rating_smoking_t1) #--> sig. --> no normal distribution
- shapiro.test(data$craving_rating_neutral_t1) #--> sig. --> no normal distribution
- stat.desc(data$craving_rating_smoking_t1)
- stat.desc(data$craving_rating_smoking_t2)
- stat.desc(data$craving_rating_neutral_t1)
- t.test(data$craving_rating_smoking_t1, data$craving_rating_neutral_t1, paired = T, alternative = "two.sided")
- craving_rating_w <- wilcox.test(data$craving_rating_smoking_t1, data$craving_rating_neutral_t1, paired = TRUE, exact = F, correct = TRUE, conf.int = TRUE)
- craving_rating_w
- wilcoxonZ(x = data$craving_rating_smoking_t1, y = data$craving_rating_neutral_t1, paired=TRUE, exact=FALSE, correct=FALSE)
- data_long <- data %>% pivot_longer(cols = starts_with("craving_rating_smoking_t1") | starts_with("craving_rating_neutral_t1"), names_to = "condition", values_to = "value")
- data_long %>% wilcox_effsize(value ~ condition, paired = TRUE)
- summary(aov(craving_rating_smoking_t1 ~ group, data = data))
- describeBy(data$craving_rating_smoking_t1, data$group, mat = TRUE, digits = 3)
- describeBy(data$craving_rating_smoking_t2, data$group, mat = TRUE, digits = 3)
- ### fMRI
- results <- data.frame(Variable = character(), Test = character(), Statistic = numeric(), DF = numeric(), p_value = numeric(), EffectSize = numeric(), Mean = numeric(), SD = numeric(), stringsAsFactors = FALSE)
- for (ROI in ROIs_CIGminNEU.t1) {
- x <- data[[ROI]]
- shapiro_res <- shapiro.test(x)
- desc_stats <- stat.desc(x)
- df <- NA
- effect_size <- NA
- if (shapiro_res$p.value > 0.05) {
- test_res <- t.test(x, mu = 0, alternative = "two.sided")
- test_name <- "t-test"
- stat_value <- test_res$statistic
- df <- test_res$parameter
- p_value <- test_res$p.value
- effect_size <- lsr::cohensD(x, mu = 0)
- } else {
- test_res <- wilcox.test(x, mu = 0, alternative = "two.sided")
- wilcox_z <- wilcoxonZ(x, mu = 0, paired = FALSE, exact = FALSE, correct = FALSE)
- test_name <- "Wilcoxon test"
- stat_value <- wilcox_z
- p_value <- test_res$p.value
- effect_size <- data.frame(x = x) %>% wilcox_effsize(x ~ 1, mu = 0) %>% pull(effsize)
- }
- results <- rbind(results, data.frame(Variable = ROI, Test = test_name, Statistic = stat_value,
- DF = df, p_value = p_value, EffectSize = effect_size, Mean = desc_stats["mean"],
- SD = desc_stats["std.dev"], stringsAsFactors = FALSE))
- }
- print(results)
- p.adjust(c(results$p_value), method = "BH")
- ################################################################################
- ## HYPOTHESIS 1: PRE-POST CHANGES
- ################################################################################
- ### AAT #n=116, because CBM287 excluded at t0 and no t1 participation
- res_AAT_t0t1 <- lmer(AAT_untrained ~ t1 * group + (1 | subject) + (1 | course), data = data_long2)
- summary(res_AAT_t0t1)
- confint(res_AAT_t0t1)
- Anova(res_AAT_t0t1, type = 3, test.statistic = "F")
- plot_model_AAT_t0t1_2 <- interact_plot(res_AAT_t0t1, pred = t1, modx = group, plot.points = TRUE)
- plot_model_AAT_t0t1_2
- ### CRAVING RATING
- res_CRAVING_t0t1 <- lmer(Craving_Rating ~ t1 * group + (1 | subject) + (1 | course), data = data_long2)
- summary(res_CRAVING_t0t1)
- confint(res_CRAVING_t0t1)
- Anova(res_CRAVING_t0t1, type = 3, test.statistic = "F")
- plot_model_CRAVING_t0t1 <- interact_plot(res_CRAVING_t0t1, pred = t1, modx = group, plot.points = TRUE)
- plot_model_CRAVING_t0t1
- ### fMRI smoking cue-reactivity
- results <- list()
- plots <- list()
- anova_results_smoking_cue_reactivity <- data.frame(Region = character(), Df_t1 = numeric(), Df_res_t1 = numeric(), F_value_t1 = numeric(), Pr_t1 = numeric(), Df_t1_group = numeric(), Df_res_t1_group = numeric(), F_value_t1_group = numeric(), Pr_t1_group = numeric(), stringsAsFactors = FALSE)
- for (region in ROIs) {
- formula <- as.formula(paste0(region, " ~ t1 * group + (1 | subject) + (1 | course)"))
- model <- lmer(formula, data = data_long2)
- anova_res <- Anova(model, type = 3, test.statistic = "F")
- plot_model <- interact_plot(model, pred = t1, modx = group, plot.points = TRUE)
- results[[region]] <- list(summary = summary(model), anova = anova_res, plot = plot_model)
- anova_results_smoking_cue_reactivity <- rbind(anova_results_smoking_cue_reactivity, data.frame(
- Region = region,
- Df_time = anova_res["t1", "Df"],
- Df_res_time = anova_res["t1", "Df.res"],
- F_value_time = anova_res["t1", "F"],
- p_time = anova_res["t1", "Pr(>F)"],
- Df_inter_time_group = anova_res["t1:group", "Df"],
- Df_res_inter_time_group = anova_res["t1:group", "Df.res"],
- F_value_inter_time_group = anova_res["t1:group", "F"],
- p_inter_time_group = anova_res["t1:group", "Pr(>F)"]))
- print(plot_model)
- }
- print(anova_results_smoking_cue_reactivity)
- p.adjust(c(anova_results_smoking_cue_reactivity$p_time), method = "BH")
- p.adjust(c(anova_results_smoking_cue_reactivity$p_inter_time_group), method = "BH")
- # Precuneus_R
- res_Precuneus_R <- lmer(Precuneus_R ~ t1 * group + (1 | subject) + (1 | course), data = data_long2)
- summary(res_Precuneus_R)
- Anova(res_Precuneus_R, type = 3, test.statistic = "F")
- interact_plot(res_Precuneus_R, pred = t1, modx = group, plot.points = TRUE)
- # SupraMarginal_R
- res_SupraMarginal_R <- lmer(SupraMarginal_R ~ t1 * group + (1 | subject) + (1 | course), data = data_long2)
- summary(res_SupraMarginal_R)
- Anova(res_SupraMarginal_R, type = 3, test.statistic = "F")
- interact_plot(res_SupraMarginal_R, pred = t1, modx = group, plot.points = TRUE)
- # MCC_R
- res_MCC_R <- lmer(MCC_R ~ t1 * group + (1 | subject) + (1 | course), data = data_long2)
- summary(res_MCC_R)
- Anova(res_MCC_R, type = 3, test.statistic = "F")
- interact_plot(res_MCC_R, pred = t1, modx = group, plot.points = TRUE)
- # ACC_L
- res_ACC_L <- lmer(ACC_L ~ t1 * group + (1 | subject) + (1 | course), data = data_long2)
- summary(res_ACC_L)
- Anova(res_ACC_L, type = 3, test.statistic = "F")
- interact_plot(res_ACC_L, pred = t1, modx = group, plot.points = TRUE)
- # Loop across all ROIs
- results <- data.frame(ROI = character(0), F_value = numeric(0), p_value = numeric(0), stringsAsFactors = FALSE)
- for (i in seq_along(ROIs_CIG.t2)) {
- t2 <- ROIs_CIG.t2[i]
- t1 <- ROIs_CIG.t1[i]
- model <- lm(as.formula(paste(t2, "~ group +", t1)), data = data)
- anova_res <- Anova(model, type = 3, test.statistic = "F")
- F_value <- anova_res$`F value`[2]
- p_value <- anova_res$`Pr(>F)`[2]
- results <- rbind(results, data.frame(ROI = t2, F_value = F_value, p_value = p_value))
- p <- ggplot(data, aes_string(x = t1, y = t2, color = "as.factor(group)")) +
- geom_point() +
- geom_smooth(method = "lm", se = TRUE) +
- labs(x = paste("AMY Bilateral Mean (T1):", t1),
- y = paste("AMY Bilateral Mean (T2):", t2),
- color = "Group") +
- theme_minimal()
- print(p)
- }
- print(results)
- # rAAL3_AMY_Bilateral_mean_cigarettes
- model_AMY <- lm(rAAL3_AMY_Bilateral_mean_cigarettes.t2 ~ group + rAAL3_AMY_Bilateral_mean_cigarettes.t1, data = data)
- summary(model_AMY)
- # rAAL3_Angular_L_mean_cigarettes
- model_Angular <- lm(rAAL3_Angular_L_mean_cigarettes.t2 ~ group + rAAL3_Angular_L_mean_cigarettes.t1, data = data)
- summary(model_Angular)
- #################################################################
- ## HYPOTHESIS 2: ASSOCIATION CHANGES IN CUE-REACTIVITY - ABSTINENCE RATES
- #################################################################
- ### DESCRIPTIVE STATISTICS
- # post intervention
- chisq.test(data$abstinence.t2, data$group)
- tabyl(data, abstinence.t2)
- tabyl(data, abstinence.t2, group)
- tabyl(data, abstinence.t2, group) %>%
- adorn_percentages("col") %>%
- adorn_pct_formatting(digits = 2)
- # follow up
- chisq.test(data$abstinence.t3, data$group)
- chisq.test(data[data$group %in% c(1, 2), ]$abstinence.t3, data[data$group %in% c(1, 2), ]$group) # calculated because TAU+ApBM: 11 of 42 [26.2%], TAU+Sham: 6 of 36 [16.7%]
- tabyl(data, abstinence.t3)
- tabyl(data, abstinence.t3, group)
- tabyl(data, abstinence.t3, group) %>%
- adorn_percentages("col") %>%
- adorn_pct_formatting(digits = 2)
- ### ABSTINENCE AT POST
- anova_results_abs_fMRI_post <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- res_abs <- glm(as.formula(paste0("abstinence.t2 ~", ROI_t0minust1, " * group")), family = binomial, data = data)
- anova_res <- Anova(res_abs, type = 3, test.statistic = "F")
- residuals_df <- anova_res$Df[4]
- main_effect_df <- anova_res$Df[1]
- main_effect_f <- anova_res$`F value`[1]
- main_effect_p <- anova_res$`Pr(>F)`[1]
- interaction_df <- anova_res$Df[3]
- interaction_f <- anova_res$`F value`[3]
- interaction_p <- anova_res$`Pr(>F)`[3]
- anova_results_abs_fMRI_post <- rbind(anova_results_abs_fMRI_post, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- plot_model(res_abs, type = "int")
- print(plots)
- }
- print(anova_results_abs_fMRI_post)
- p.adjust(c(anova_results_abs_fMRI_post$MainEffect_P), method = "BH")
- p.adjust(c(anova_results_abs_fMRI_post$Interaction_P), method = "BH")
- # Contrasts for AMY_Bilateral
- res_abs_AMY_Bilateral_post <- glm(abstinence.t2 ~ AMY_Bilateral_t0minust1 * group, family = binomial, data=data)
- res_AMY_Bilateral_abstinence_post_emtrends <- emtrends(res_abs_AMY_Bilateral_post, ~ 1, var = "AMY_Bilateral_t0minust1")
- summary(res_AMY_Bilateral_abstinence_post_emtrends)
- plot_model(res_abs_AMY_Bilateral_post, type = "pred", terms = "AMY_Bilateral_t0minust1") + labs(x = "AMY_Bilateral_t0minust1", y = "Wahrscheinlichkeit für Abstinenz (t2)") + theme_minimal()
- ### ABSTINENCE AT FOLLOW-UP
- anova_results_abs_fMRI_FU <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- res_abs <- glm(as.formula(paste0("abstinence.t3 ~", ROI_t0minust1, " * group")), family = binomial, data = data)
- anova_res <- Anova(res_abs, type = 3, test.statistic = "F")
- residuals_df <- anova_res$Df[4]
- main_effect_df <- anova_res$Df[1]
- main_effect_f <- anova_res$`F value`[1]
- main_effect_p <- anova_res$`Pr(>F)`[1]
- interaction_df <- anova_res$Df[3]
- interaction_f <- anova_res$`F value`[3]
- interaction_p <- anova_res$`Pr(>F)`[3]
- anova_results_abs_fMRI_FU <- rbind(anova_results_abs_fMRI_FU, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- plot_model(res_abs, type = "int")
- print(plots)
- }
- print(anova_results_abs_fMRI_FU)
- p.adjust(c(anova_results_abs_fMRI_FU$MainEffect_P), method = "BH")
- p.adjust(c(anova_results_abs_fMRI_FU$Interaction_P), method = "BH")
- ### Precuneus_R
- res_abs_Precuneus_R_FU <- glm(abstinence.t3 ~ Precuneus_R_t0minust1 * group, family = binomial, data=data)
- res_Precuneus_R_abstinence_FU_emtrends <- emtrends(res_abs_Precuneus_R_FU, ~ group, var = "Precuneus_R_t0minust1")
- summary(res_Precuneus_R_abstinence_FU_emtrends)
- plot_interaction <- interact_plot(res_abs_Precuneus_R_FU,
- pred = Precuneus_R_t0minust1,
- modx = group,
- x.label = "t0-t1 change in smoking cue-reactivity",
- y.label = "Probability for abstinence at t2",
- vary.lty = FALSE,
- ggplot_component = TRUE) +
- scale_y_continuous(labels = percent, limits = c(0, 1)) +
- scale_color_manual(name = "Group",
- labels = c("TAU-only", "TAU+Sham", "TAU+ApBM"),
- values = c("blue", "green", "red"))
- plot_interaction
- ggsave("plot_interaction.jpg", plot = plot_interaction, width = 5, height = 4, dpi = 600)
- ### SupraMarginal_R
- res_abs_SupraMarginal_R_FU <- glm(abstinence.t3 ~ SupraMarginal_R_t0minust1 * group, family = binomial, data=data)
- res_SupraMarginal_R_abstinence_FU_emtrends <- emtrends(res_abs_SupraMarginal_R_FU, ~ group, var = "SupraMarginal_R_t0minust1")
- summary(res_SupraMarginal_R_abstinence_FU_emtrends)
- ###############################################################################
- ## HYPOTHESIS 3: ASSOCIATION fMRI - BEHAVIORAL DATA
- ###############################################################################
- ### AAT
- result_table_AAT_untrained_ROIs_lm <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- res_AAT_fMRI <- lm(as.formula(paste0("AAT_score_untrained_t0minust1 ~", ROI_t0minust1, " * group")), data = data)
- anova_res <- Anova(res_AAT_fMRI, type = 3, test.statistic = "F")
- residuals_df <- anova_res$Df[5]
- main_effect_df <- anova_res$Df[2]
- main_effect_f <- anova_res$`F value`[2]
- main_effect_p <- anova_res$`Pr(>F)`[2]
- interaction_df <- anova_res$Df[4]
- interaction_f <- anova_res$`F value`[4]
- interaction_p <- anova_res$`Pr(>F)`[4]
- result_table_AAT_untrained_ROIs_lm <- rbind(result_table_AAT_untrained_ROIs_lm, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- plot_model(res_AAT_fMRI, type = "int")
- print(plots)
- }
- print(result_table_AAT_untrained_ROIs_lm)
- p.adjust(c(result_table_AAT_untrained_ROIs_lm$MainEffect_P), method = "BH")
- p.adjust(c(result_table_AAT_untrained_ROIs_lm$Interaction_P), method = "BH")
- ### CRAVING RATING
- result_table_craving_rating_ROIs_lm <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- res_craving_rating_fMRI <- lm(as.formula(paste0("craving_rating_smoking_t0minust1 ~", ROI_t0minust1, " * group")), data = data)
- anova_res <- Anova(res_craving_rating_fMRI, type = 3, test.statistic = "F")
- residuals_df <- anova_res$Df[5]
- main_effect_df <- anova_res$Df[2]
- main_effect_f <- anova_res$`F value`[2]
- main_effect_p <- anova_res$`Pr(>F)`[2]
- interaction_df <- anova_res$Df[4]
- interaction_f <- anova_res$`F value`[4]
- interaction_p <- anova_res$`Pr(>F)`[4]
- result_table_craving_rating_ROIs_lm <- rbind(result_table_craving_rating_ROIs_lm, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- plot_model(res_craving_rating_fMRI, type = "int")
- print(plots)
- }
- print(result_table_craving_rating_ROIs_lm)
- p.adjust(c(result_table_craving_rating_ROIs_lm$MainEffect_P), method = "BH")
- p.adjust(c(result_table_craving_rating_ROIs_lm$Interaction_P), method = "BH")
- # ACC_L
- res_craving_rating_ACC_L <- lm(craving_rating_smoking_t0minust1 ~ ACC_L_t0minust1 * group, data=data)
- res_craving_rating_ACC_L_emtrends <- emtrends(res_craving_rating_ACC_L, ~ 1, var = "ACC_L_t0minust1")
- summary(res_craving_rating_ACC_L_emtrends)
- plot_model(res_craving_rating_ACC_L, type = "pred", terms = "ACC_L_t0minust1") + labs(x = "ACC_L_t0minust1", y = "craving_rating_smoking_t0minust1") + theme_minimal()
- ###############################################################################
- ## SUPPLEMENTAL: ASSOCIATION fMRI - SMOKING-RELATED VARIABLES
- ###############################################################################
- ### Cigarettes per day # CPD.CDS12_t0minust1
- result_table_CPD.CDS12_ROIs_lm <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- formula <- as.formula(paste0("CPD.CDS12_t0minust1 ~ ", ROI_t0minust1, " * group"))
- model <- lm(formula, data = data)
- model_anova <- Anova(model, type = 3, test.statistic = "F")
- residuals_df <- model_anova$Df[5]
- main_effect_df <- model_anova$Df[2]
- main_effect_f <- model_anova$`F value`[2]
- main_effect_p <- model_anova$`Pr(>F)`[2]
- interaction_df <- model_anova$Df[4]
- interaction_f <- model_anova$`F value`[4]
- interaction_p <- model_anova$`Pr(>F)`[4]
- result_table_CPD.CDS12_ROIs_lm <- rbind(result_table_CPD.CDS12_ROIs_lm, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- interact_plot(model, pred = !!ROI_t0minust1, modx = group, plot.points = TRUE, x.label = ROI_t0minust1, y.label = "craving_rating_smoking_t0minust1", legend.main = "Group")
- print(plots)
- }
- print(result_table_CPD.CDS12_ROIs_lm)
- p.adjust(c(result_table_CPD.CDS12_ROIs_lm$main_effect_p), method = "BH")
- p.adjust(c(result_table_CPD.CDS12_ROIs_lm$interaction_p), method = "BH")
- ### CDS12
- result_table_CDS12_ROIs_lm <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- formula <- as.formula(paste0("CDS12_t0minust1 ~ ", ROI_t0minust1, " * group"))
- model <- lm(formula, data = data)
- model_anova <- Anova(model, type = 3, test.statistic = "F")
- residuals_df <- model_anova$Df[5]
- main_effect_df <- model_anova$Df[2]
- main_effect_f <- model_anova$`F value`[2]
- main_effect_p <- model_anova$`Pr(>F)`[2]
- interaction_df <- model_anova$Df[4]
- interaction_f <- model_anova$`F value`[4]
- interaction_p <- model_anova$`Pr(>F)`[4]
- result_table_CDS12_ROIs_lm <- rbind(result_table_CDS12_ROIs_lm, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- interact_plot(model, pred = !!ROI_t0minust1, modx = group, plot.points = TRUE, x.label = ROI_t0minust1, y.label = "craving_rating_smoking_t0minust1", legend.main = "Group")
- print(plots)
- }
- print(result_table_CDS12_ROIs_lm)
- p.adjust(c(result_table_CDS12_ROIs_lm$main_effect_p), method = "BH")
- p.adjust(c(result_table_CDS12_ROIs_lm$interaction_p), method = "BH")
- ### CO value # CO_fMRT.t1
- result_table_CO_fMRT_ROIs_lm <- data.frame(ROI = character(),Residuals_Df = numeric(),MainEffect_Df = numeric(),MainEffect_F = numeric(),MainEffect_P = numeric(),Interaction_Df = numeric(),Interaction_F = numeric(),Interaction_P = numeric(),stringsAsFactors = FALSE)
- for (ROI in ROIs) {
- ROI_t0minust1 <- paste0(ROI, "_t0minust1")
- formula <- as.formula(paste0("CO_fMRT_t0minust1 ~ ", ROI_t0minust1, " * group"))
- model <- lm(formula, data = data)
- model_anova <- Anova(model, type = 3, test.statistic = "F")
- residuals_df <- model_anova$Df[5]
- main_effect_df <- model_anova$Df[2]
- main_effect_f <- model_anova$`F value`[2]
- main_effect_p <- model_anova$`Pr(>F)`[2]
- interaction_df <- model_anova$Df[4]
- interaction_f <- model_anova$`F value`[4]
- interaction_p <- model_anova$`Pr(>F)`[4]
- result_table_CO_fMRT_ROIs_lm <- rbind(result_table_CO_fMRT_ROIs_lm, data.frame(ROI = ROI,Residuals_Df = residuals_df,MainEffect_Df = main_effect_df,MainEffect_F = main_effect_f,MainEffect_P = main_effect_p,Interaction_Df = interaction_df,Interaction_F = interaction_f,Interaction_P = interaction_p))
- plots <- interact_plot(model, pred = !!ROI_t0minust1, modx = group, plot.points = TRUE, x.label = ROI_t0minust1, y.label = "craving_rating_smoking_t0minust1", legend.main = "Group")
- print(plots)
- }
- print(result_table_CO_fMRT_ROIs_lm)
- p.adjust(c(result_table_CO_fMRT_ROIs_lm$main_effect_p), method = "BH")
- p.adjust(c(result_table_CO_fMRT_ROIs_lm$interaction_p), method = "BH")
- #################################################################
- ## PLOTS
- #################################################################
- ############################# SMOKING CUE-REACTIVITY AT T0
- roi_labels <- c("Left ACC", "Left angular gyrus", "Right thalamus", "Dorsal striatum",
- "MCC", "Supramarginal gyrus", "Precuneus",
- "Amygdala", "Nucleus accumbens", "medial prefrontal cortex")
- plot_data <- data %>%
- select(all_of(ROIs_CIGminNEU.t1)) %>%
- pivot_longer(cols = everything(), names_to = "ROI", values_to = "Activity") %>%
- mutate(ROI = factor(ROI, levels = ROIs_CIGminNEU.t1, labels = roi_labels))
- # Calculate mean
- mean_values <- plot_data %>%
- group_by(ROI) %>%
- summarise(mean_activity = mean(Activity, na.rm = TRUE))
- # Boxplot with means
- ggplot(plot_data, aes(x = ROI, y = Activity)) +
- geom_boxplot(fill = "skyblue", alpha = 0.5, outlier.shape = NA) +
- geom_point(data = mean_values, aes(x = ROI, y = mean_activity), shape = 23, size = 3, fill = "red") +
- geom_hline(yintercept = 0, color = "darkblue", size = 1) + # Dunkelblaue 0-Linie
- theme_minimal() +
- labs(x = "Region of interest",
- y = "Smoking cue-reactivity at t0",
- title = "Activity Distribution in each region of interest at t1") +
- theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
- ylim(-0.3, 0.5)
- ############################# SMOKING CUE-REACTIVITY CHANGE FROM T0 TO T1
- ROIs_t0minust1 <- c("ACC_L_t0minust1", "Angular_L_t0minust1", "Thalamus_R_t0minust1", "dorsal_Striatum_R_t0minust1", "MCC_R_t0minust1", "SupraMarginal_R_t0minust1", "Precuneus_R_t0minust1", "AMY_Bilateral_t0minust1", "Nacc_Bilateral_t0minust1", "mPFC_t0minust1")
- roi_labels <- c("ACC (L)", "AngularG (L)", "Thal (R)", "Striatum (d)",
- "MCC (R)", "SupramarG (R)", "Precuneus (R)",
- "Amygdala", "NAcc", "mPFC")
- plot_data <- data %>% select(group, all_of(ROIs_t0minust1)) %>% pivot_longer(cols = all_of(ROIs_t0minust1), names_to = "ROI", values_to = "Activity") %>% mutate(ROI = factor(ROI, levels = ROIs_t0minust1, labels = roi_labels))
- mean_data <- plot_data %>% group_by(group, ROI) %>%summarise(Mean = mean(Activity, na.rm = TRUE),SD = sd(Activity, na.rm = TRUE),SE = SD / sqrt(n()), .groups = 'drop')
- boxplots <- ggplot(plot_data, aes(x = ROI, y = Activity, fill = factor(group))) +
- geom_boxplot(alpha = 0.5, outlier.shape = NA) +
- geom_point(data = mean_data, aes(x = ROI, y = Mean, fill = factor(group)),
- shape = 23, size = 3, color = "black", position = position_dodge(0.75)) +
- geom_hline(yintercept = 0, color = "darkblue", size = 1) +
- theme_minimal() +
- labs(x = "Region of interest", y = "Smoking cue-reactivity change (t0-t1)", fill = "Group") +
- theme(axis.text.x = element_text(angle = 45, hjust = 0.7, size = 13),
- axis.title.x = element_text(size = 14, face = "bold", margin = margin(t = 0.1)),
- axis.title.y = element_text(size = 14, face = "bold")) +
- ylim(-0.5, 0.6) +
- scale_fill_manual(values = c("blue", "green", "red"), labels = c("TAU-only", "TAU+Sham", "TAU+ApBM"))
- boxplots
- ggsave("boxplots.jpg", plot = boxplots, width = 10, height = 6, dpi = 600)
- describeBy(data$ACC_L_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$MCC_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$mPFC_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$Precuneus_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$SupraMarginal_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$N_Acc_L_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$N_Acc_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$Olfactory_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$Thalamus_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$dorsal_Striatum_R_t0minust1, data$group, mat = TRUE, digits=3)
- describeBy(data$Angular_L_t0minust1, data$group, mat = TRUE, digits=3)
- ###################################### TABLE
- variables <- c("ACC_L_CIGminNEU", "Angular_L_CIGminNEU", "Thalamus_R_CIGminNEU", "dorsal_Striatum_R_CIGminNEU",
- "MCC_R_CIGminNEU", "SupraMarginal_R_CIGminNEU", "Precuneus_R_CIGminNEU",
- "AMY_Bilateral_CIGminNEU", "Nacc_Bilateral_CIGminNEU", "mPFC_CIGminNEU")
- results <- list()
- for (var in variables) {
- var_t1 <- paste(var, "t1", sep = ".")
- var_t2 <- paste(var, "t2", sep = ".")
- desc_t1 <- describeBy(data[[var_t1]], data$group, mat = TRUE, digits = 3)
- desc_t2 <- describeBy(data[[var_t2]], data$group, mat = TRUE, digits = 3)
- overall_t1 <- describe(data[[var_t1]])
- overall_t2 <- describe(data[[var_t2]])
- extract_value <- function(desc, row, col) {
- if (nrow(desc) >= row) return(desc[row, col]) else return(NA)}
- results[[var]] <- data.frame(
- ROI = gsub("_CIGminNEU", "", var),
- Timepoint = c("t1", "t2"),
- Overall_M = round(c(overall_t1$mean, overall_t2$mean), 3),
- Overall_SD = round(c(overall_t1$sd, overall_t2$sd), 3),
- `TAU+ApBM_M` = c(extract_value(desc_t1, 3, "mean"), extract_value(desc_t2, 3, "mean")),
- `TAU+ApBM_SD` = c(extract_value(desc_t1, 3, "sd"), extract_value(desc_t2, 3, "sd")),
- `TAU+Sham_M` = c(extract_value(desc_t1, 2, "mean"), extract_value(desc_t2, 2, "mean")),
- `TAU+Sham_SD` = c(extract_value(desc_t1, 2, "sd"), extract_value(desc_t2, 2, "sd")),
- `TAU-Only_M` = c(extract_value(desc_t1, 1, "mean"), extract_value(desc_t2, 1, "mean")),
- `TAU-Only_SD` = c(extract_value(desc_t1, 1, "sd"), extract_value(desc_t2, 1, "sd")))
- }
- final_table <- do.call(rbind, results)
- print(final_table)
- write_xlsx(final_table, "table_ROIs_M_SD.xlsx")
- ################################################################################
- ## HYPOTHESIS 2: PRE-POST CHANGES FOR PARTICIPANTS WITH 5 TRAININGS
- ################################################################################
- ### LOAD DATA
- data_5trainings <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_5trainings.xlsx")
- data_5trainings[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_5trainings[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- data_long2_5trainings <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_long2_5trainings.xlsx")
- data_long2_5trainings[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_long2_5trainings[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- ROIs <- c("ACC_L", "Angular_L", "Thalamus_R", "dorsal_Striatum_R", "MCC_R", "SupraMarginal_R", "Precuneus_R", "AMY_Bilateral", "Nacc_Bilateral", "mPFC")
- ROIs_CIGminNEU.t1 <- c("ACC_L_CIGminNEU.t1", "Angular_L_CIGminNEU.t1", "Thalamus_R_CIGminNEU.t1", "dorsal_Striatum_R_CIGminNEU.t1", "MCC_R_CIGminNEU.t1", "SupraMarginal_R_CIGminNEU.t1", "Precuneus_R_CIGminNEU.t1", "AMY_Bilateral_CIGminNEU.t1", "Nacc_Bilateral_CIGminNEU.t1", "mPFC_CIGminNEU.t1")
- ### AAT #n=116, because CBM287 excluded at t0 and no t1 participation
- res_AAT_t0t1 <- lmer(AAT_untrained ~ t1 * group + (1 | subject) + (1 | course), data = data_long2_5trainings)
- summary(res_AAT_t0t1)
- confint(res_AAT_t0t1)
- Anova(res_AAT_t0t1, type = 3, test.statistic = "F")
- plot_model_AAT_t0t1_2 <- interact_plot(res_AAT_t0t1, pred = t1, modx = group, plot.points = TRUE)
- plot_model_AAT_t0t1_2
- ### CRAVING RATING
- res_CRAVING_t0t1 <- lmer(Craving_Rating ~ t1 * group + (1 | subject) + (1 | course), data = data_long2_5trainings)
- summary(res_CRAVING_t0t1)
- confint(res_CRAVING_t0t1)
- Anova(res_CRAVING_t0t1, type = 3, test.statistic = "F")
- plot_model_CRAVING_t0t1 <- interact_plot(res_CRAVING_t0t1, pred = t1, modx = group, plot.points = TRUE)
- plot_model_CRAVING_t0t1
- ### fMRI smoking cue-reactivity
- results <- list()
- plots <- list()
- anova_results_smoking_cue_reactivity <- data.frame(Region = character(), Df_t1 = numeric(), Df_res_t1 = numeric(), F_value_t1 = numeric(), Pr_t1 = numeric(), Df_t1_group = numeric(), Df_res_t1_group = numeric(), F_value_t1_group = numeric(), Pr_t1_group = numeric(), stringsAsFactors = FALSE)
- for (region in ROIs) {
- formula <- as.formula(paste0(region, " ~ t1 * group + (1 | subject) + (1 | course)"))
- model <- lmer(formula, data = data_long2_5trainings)
- anova_res <- Anova(model, type = 3, test.statistic = "F")
- plot_model <- interact_plot(model, pred = t1, modx = group, plot.points = TRUE)
- results[[region]] <- list(summary = summary(model), anova = anova_res, plot = plot_model)
- anova_results_smoking_cue_reactivity <- rbind(anova_results_smoking_cue_reactivity, data.frame(
- Region = region,
- Df_time = anova_res["t1", "Df"],
- Df_res_time = anova_res["t1", "Df.res"],
- F_value_time = anova_res["t1", "F"],
- p_time = anova_res["t1", "Pr(>F)"],
- Df_inter_time_group = anova_res["t1:group", "Df"],
- Df_res_inter_time_group = anova_res["t1:group", "Df.res"],
- F_value_inter_time_group = anova_res["t1:group", "F"],
- p_inter_time_group = anova_res["t1:group", "Pr(>F)"]))
- print(plot_model)
- }
- print(anova_results_smoking_cue_reactivity)
- ################################################################################
- ## HYPOTHESIS 2: PRE-POST CHANGES FOR PARTICIPANTS WHO ACHIEVED ABSTINENCE AT POST
- ################################################################################
- ### LOAD DATA
- data_abstinent <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_abstinent.xlsx")
- data_abstinent[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_abstinent[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- data_long2_abstinent <- read_excel("Z:/063CBM5/Datenauswertung/fMRI/scripts/R_scripts/datasets/data_long2_abstinent.xlsx")
- data_long2_abstinent[c("abstinence.t2", "abstinence.t3", "group", "sex")] <- lapply(data_long2_abstinent[c("abstinence.t2", "abstinence.t3", "group", "sex")], as.factor)
- ROIs <- c("ACC_L", "Angular_L", "Thalamus_R", "dorsal_Striatum_R", "MCC_R", "SupraMarginal_R", "Precuneus_R", "AMY_Bilateral", "Nacc_Bilateral", "mPFC")
- ROIs_CIGminNEU.t1 <- c("ACC_L_CIGminNEU.t1", "Angular_L_CIGminNEU.t1", "Thalamus_R_CIGminNEU.t1", "dorsal_Striatum_R_CIGminNEU.t1", "MCC_R_CIGminNEU.t1", "SupraMarginal_R_CIGminNEU.t1", "Precuneus_R_CIGminNEU.t1", "AMY_Bilateral_CIGminNEU.t1", "Nacc_Bilateral_CIGminNEU.t1", "mPFC_CIGminNEU.t1")
- ### N per group
- table(data_abstinent$group) # 0:18, 1:19, 2:19
- table(data_abstinent$group, !is.na(data_abstinent$ACC_L_CIGminNEU.t2)) # 0:17, 1:19, 2:19 #CBM308: NA for fMRI data post, but took part at main study t2
- ### AAT #n=116, because CBM287 excluded at t0 and no t1 participation
- res_AAT_t0t1 <- lmer(AAT_untrained ~ t1 * group + (1 | subject) + (1 | course), data = data_long2_abstinent)
- summary(res_AAT_t0t1)
- confint(res_AAT_t0t1)
- Anova(res_AAT_t0t1, type = 3, test.statistic = "F")
- plot_model_AAT_t0t1_2 <- interact_plot(res_AAT_t0t1, pred = t1, modx = group, plot.points = TRUE)
- plot_model_AAT_t0t1_2 # TAU-only: reduction in approach biases from t0 to t1, while training groups remained stable
- ### CRAVING RATING
- res_CRAVING_t0t1 <- lmer(Craving_Rating ~ t1 * group + (1 | subject) + (1 | course), data = data_long2_abstinent)
- summary(res_CRAVING_t0t1)
- confint(res_CRAVING_t0t1)
- Anova(res_CRAVING_t0t1, type = 3, test.statistic = "F")
- plot_model_CRAVING_t0t1 <- interact_plot(res_CRAVING_t0t1, pred = t1, modx = group, plot.points = TRUE)
- plot_model_CRAVING_t0t1
- ### fMRI smoking cue-reactivity
- results <- list()
- plots <- list()
- anova_results_smoking_cue_reactivity <- data.frame(Region = character(), Df_t1 = numeric(), Df_res_t1 = numeric(), F_value_t1 = numeric(), Pr_t1 = numeric(), Df_t1_group = numeric(), Df_res_t1_group = numeric(), F_value_t1_group = numeric(), Pr_t1_group = numeric(), stringsAsFactors = FALSE)
- for (region in ROIs) {
- formula <- as.formula(paste0(region, " ~ t1 * group + (1 | subject) + (1 | course)"))
- model <- lmer(formula, data = data_long2_abstinent)
- anova_res <- Anova(model, type = 3, test.statistic = "F")
- plot_model <- interact_plot(model, pred = t1, modx = group, plot.points = TRUE)
- results[[region]] <- list(summary = summary(model), anova = anova_res, plot = plot_model)
- anova_results_smoking_cue_reactivity <- rbind(anova_results_smoking_cue_reactivity, data.frame(
- Region = region,
- Df_time = anova_res["t1", "Df"],
- Df_res_time = anova_res["t1", "Df.res"],
- F_value_time = anova_res["t1", "F"],
- p_time = anova_res["t1", "Pr(>F)"],
- Df_inter_time_group = anova_res["t1:group", "Df"],
- Df_res_inter_time_group = anova_res["t1:group", "Df.res"],
- F_value_inter_time_group = anova_res["t1:group", "F"],
- p_inter_time_group = anova_res["t1:group", "Pr(>F)"]))
- print(plot_model)
- }
- print(anova_results_smoking_cue_reactivity)
- res_Nacc_Bilateral_abstinent <- lmer(Nacc_Bilateral ~ t1 * group + (1 | subject) + (1 | course), data = data_long2_abstinent)
- summary(res_Nacc_Bilateral_abstinent)
- ### Contrasts
- res_Nacc_Bilateral_abstinent_emtrends <- emtrends(res_Nacc_Bilateral_abstinent, ~ group, var = "t1")
- res_Nacc_Bilateral_abstinent_emtrends
- res_Nacc_Bilateral_abstinent_emtrends_contrasts <- contrast(res_Nacc_Bilateral_abstinent_emtrends, method = "pairwise", adjust = "none")
- res_Nacc_Bilateral_abstinent_emtrends_contrasts
063CBM ApBM Effects fMRI OSF.R, no license · at the source
Overview
- Division of Clinical Psychology and Psychological Treatment, Department of Psychology, Leopoldstraße 13, 80802 Munich, Germany
- NeuroImaging Core Unit Munich (NICUM), University Hospital, LMU Munich,Munich, Germany
- Central Institute of Mental Health, University of Heidelberg,Mannheim, Germany
- Mannheim Center of Translational Neurosciences (MCTN), Medical Faculty of Mannheim, University of Heidelberg,Mannheim, Germany
- German Center of Mental Health (DZPG), Partner Site Mannheim-Heidelberg-Ulm, Mannheim, Germany
- Department of Psychology I (Biological Psychology, Clinical Psychology, and Psychotherapy), University of Würzburg,Würzburg, Germany
- German Center for Mental Health (DZPG), Partner Site Munich/Augsburg,Munich, Germany
Abstract
Approach bias modification (ApBM), a computerized training designed to retrain involuntary approach action tendencies toward drug-related cues, has been shown to reduce relapse rates when added to treatment-as-usual (TAU) in alcohol use disorder. A potential working mechanism involves reduced neural drug cue-reactivity in reward-related brain regions. In smoking cessation, however, the efficacy and neural mechanisms of ApBM remain unclear. In this randomized-controlled trial, individuals with chronic, moderate-to-heavy tobacco dependence (N = 117, Mage = 41.5, 45.3% female) received a one-day smoking cessation intervention (TAU) and were subsequently randomized to complete seven sessions of ApBM (TAU+ApBM), Sham control training (TAU+Sham), or no training (TAU-only). Neural reactivity toward smoking-related versus neutral stimuli (smoking cue-reactivity) was assessed using functional magnetic resonance imaging (fMRI) before and after intervention. Abstinence was the primary clinical outcome. Results showed no significant group×time interactions on cue-reactivity, and ApBM did not enhance abstinence rates. In the precuneus (sensorimotor region), increased cue-reactivity following ApBM was associated with higher long-term abstinence probability, while the control groups showed the opposite descriptive pattern. In conclusion, ApBM did not reduce smoking cue-reactivity in reward-related regions, consistent with the lack of beneficial effects on clinical outcomes. Alternative neural target processes (e.g., sensorimotor-related) and respective training procedures should be explored.
Supplementary Information: The online version contains supplementary material available at 10.1038/
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 5 matches between paragraphs and lines of code.
OSF zcrbt
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
- 30 September 2026: the link answers (HTTP 200)
13 files
- AAT_data_precprocessing.
R , R, 405 lines, 2 matches - ApBM Smoking Syntax.sps, SPSS, 427 lines
- fMRI Analysis/
analysis scripts/ , R, 161 lines063CBM ApBM Baseline fMRI OSF.R - fMRI Analysis/
analysis scripts/ , R, 678 lines, 3 matches063CBM ApBM Effects fMRI OSF.R - fMRI Analysis/
analysis scripts/ , R, 490 lines063CBM ApBM fMRI AAT untrained OSF.R - fMRI Analysis/
analysis scripts/ , R, 17 lines063CBM ApBM fMRI craving rating OSF.R - fMRI Analysis/
analysis scripts/ , R, 22 lines063CBM ApBM fMRI memory task OSF.R - fMRI Analysis/
analysis scripts/ , MATLAB, 257 linesKaeseplatte.m - fMRI Analysis/
analysis scripts/ , MATLAB, 86 linesfunc_ROIextract_mean_fas t.m - fMRI Analysis/
analysis scripts/ , MATLAB, 62 linesscript_ROIextract_prepos t.m - fMRI Analysis/
analysis scripts/ , MATLAB, 192 linesscript_whole_brain_group _level.m - fMRI Analysis/
analysis scripts/ , MATLAB, 102 linesscript_whole_brain_group _level_pre_post.m - main_analysis_v4_osf.r, R, 661 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;
- 13 scripts, each with its path and the digest of its content;
- 5 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 and analysis code are available in the open science framework (OSF): 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, 5 authors, 9 keywords, 11 MeSH terms, 1 funder, 61 references.
Cite
This paper
Motka, F., Tan, H., Vollstädt-Klein, S., Bertsch, K., & Wittekind, C. E. (2026). The effects of approach bias modification on smoking cue-reactivity in individuals who smoke: A randomized controlled fMRI study. Scientific reports, 16(1), 10519. https://
BibTeX
@article{motka2026effect
author = {Motka, Franziska and Tan, Haoye and Vollstädt-Klein, Sabine and Bertsch, Katja and Wittekind, Charlotte E.},
title = {{The effects of approach bias modification on smoking cue-reactivity in individuals who smoke: A randomized controlled fMRI study}},
journal = {Scientific reports},
year = {2026},
month = mar,
volume = {16},
number = {1},
pages = {10519},
publisher = {Nature Publishing Group},
issn = {2045-2322},
doi = {10.1038/
url = {https://
pmid = {41904262},
pmcid = {PMC13035900}
}
RIS
TY - JOUR
AU - Motka, Franziska
AU - Tan, Haoye
AU - Vollstädt-Klein, Sabine
AU - Bertsch, Katja
AU - Wittekind, Charlotte E.
TI - The effects of approach bias modification on smoking cue-reactivity in individuals who smoke: A randomized controlled fMRI study
T2 - Scientific reports
J2 - Sci Rep
PY - 2026
DA - 2026/
VL - 16
IS - 1
SP - 10519
SN - 2045-2322
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "The effects of approach bias modification on smoking cue-reactivity in individuals who smoke: A randomized controlled fMRI study",
"container-title": "Scientific reports",
"author": [
{
"family": "Motka",
"given": "Franziska"
},
{
"family": "Tan",
"given": "Haoye"
},
{
"family": "Vollstädt-Klein",
"given": "Sabine"
},
{
"family": "Bertsch",
"given": "Katja"
},
{
"family": "Wittekind",
"given": "Charlotte E."
}
],
"container-title-short":
"volume": "16",
"issue": "1",
"page": "10519",
"DOI": "10.1038/
"PMID": "41904262",
"PMCID": "PMC13035900",
"ISSN": "2045-2322",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
28
]
]
}
}
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.1111/add.70283 [code]
- Appetitive responses toward smoking-related stimuli in abstinence-motivated, non-deprived individuals with chronic tobacco dependence: A multi-methodological investigation.Journal: Addiction (Abingdon, England)In common: lavaan, rstatix, psych, 6 other tools, fMRI, other condition, 22 references
- [2] doi:10.1093/brain/awaf302 [code]
- Parkinson's disease progression is shaped by longitudinal changes in cerebral compensation.Journal: Brain : a journal of neurologyIn common: lavaan, broom, easystats, 10 other tools, fMRI, clinical / translational, 1 reference
- [3] doi:10.1162/imag_a_00547 [code]
- Reliability of structural brain change in cognitively healthy adult samples.Journal: Imaging neuroscience (Cambridge, Mass.)In common: broom, easystats, psych, 5 other tools, 5 references
- [4] doi:10.1073/pnas.2603114123 [code]
- The human hippocampus can pattern separate memories by meaning.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: broom, easystats, rstatix, 6 other tools, 4 references
- [5] doi:10.1038/s41398-026-04010-9 [code]
- Bullying victimization and brain development: a longitudinal structural magnetic resonance imaging study from adolescence to early adulthood.Journal: Translational psychiatryIn common: lavaan, broom, easystats, 8 other tools, 1 reference
- [6] doi:10.1093/scan/nsae071 [code]
- A beautiful face is good when we're judged by others, a moral character is better.Journal: Social cognitive and affective neuroscienceIn common: lavaan, easystats, psych, 7 other tools, 2 references
- [7] doi:10.1093/scan/nsae072 [code]
- Proximity within adolescent peer networks predicts neural similarity during affective experience.Journal: Social cognitive and affective neuroscienceIn common: easystats, psych, car, 3 other tools, 7 references
- [8] doi:10.1016/j.neuroimage.2023.120373 [code]
- Adaptive short-term plasticity in the typical reading network.Journal: NeuroImageIn common: easystats, emmeans, car, 3 other tools, fMRI, other condition, 5 references
- [9] doi:10.64898/2026.03.20.713139 [code]
- Dissociable contributions of cortical thickness and surface area to cognitive ageing: evidence from multiple longitudinal cohortsJournal: bioRxiv (preprint)In common: lavaan, broom, easystats, 7 other tools
- [10] doi:10.1038/s41398-026-04122-2 [code]
- Multi-session CBM-I for social anxiety: examining psychopathology, cognitive, neural, and psychophysiological effects in a randomized controlled trial.Journal: Translational psychiatryIn common: lavaan, broom, psych, 4 other tools, clinical / translational, other condition, 2 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.
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, 13 scripts, and 5 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:ce88f7e4c8414ee5…
Add the badge to the code's README
If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.
Markdown
<!-- oscr-badge:start -->
[](https://openscicode.org/badge/doi/10.1038/s41598-026-45748-y)
<!-- oscr-badge:end -->reStructuredText
.. oscr-badge:start
.. image:: https://openscicode.org/badge/doi/10.1038/s41598-026-45748-y.svg
:target: https://openscicode.org/badge/doi/10.1038/s41598-026-45748-y
:alt: OSCR
.. oscr-badge:endHTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1038/s41598-026-45748-y"><img src="https://openscicode.org/badge/doi/10.1038/s41598-026-45748-y.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge 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: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.
Report a mismatch between the code and the paper · Report a code error (signed in)
Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.
Report a reproduction failure (signed in)
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
