Plastic brain mechanisms supporting reduction in cravings induced by response training.
The 10 matches
- [1] § Materials and Methods › Analysis plan › H2) Training-induced modifications of implicit wanting of the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 138 to 182 · score 0.85 · double interaction term, pre training session, implicit wanting, post compared, subject ANOVA, post training · Report a mismatch
- [2] § Materials and Methods › Analysis plan › HR) Training-induced modifications of explicit liking of the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 52 to 92 · score 0.81 · double interaction term, pre training session, post compared, subject ANOVA, post training, modification · Report a mismatch
- [3] § Materials and Methods › Analysis plan › H3) Moderating effect of learning biases on the reduction in “NoGo” cues explicit liking ↔ Registered Report Material/SCRIPTS/main.R, lines 227 to 276 · score 0.74 · Forced Choice task, error rate, learning biases, H3a, delta, Pavlovian · Report a mismatch
- [4] § Results › H2) Training-induced modifications of implicit wanting of the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 184 to 225 · score 0.65 · partial Cohen, implicit wanting, homoscedasticity assumption, Levene, BF01, minimal · Report a mismatch
- [5] § Results › H3) Moderating effect of learning biases on the reduction in “NoGo” cues explicit liking ↔ Registered Report Material/SCRIPTS/main.R, lines 227 to 276 · score 0.61 · affective learning bias, Pavlovian bias, delta explicit, pre post, biases, model · Report a mismatch
- [6] § Materials and Methods › Analysis plan › H1) Modifications in the global field power and/or topography of the event-related potentials to the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 52 to 92 · score 0.58 · double interaction, interaction term, post training, hypothesis, NoGo, Modifications · Report a mismatch
- [7] § Results › HR) Training-induced modifications of explicit liking of the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 94 to 136 · score 0.58 · partial Cohen, homoscedasticity assumption, Levene, BF01, minimal, HR · Report a mismatch
- [8] § Materials and Methods › Analysis plan › H3) Moderating effect of learning biases on the reduction in “NoGo” cues explicit liking ↔ Registered Report Material/SCRIPTS/main.R, lines 278 to 318 · score 0.52 · regression coefficient, learning bias, H3b, delta, pre post, model · Report a mismatch
- [9] § Materials and Methods › Analysis plan › H1) Modifications in the global field power and/or topography of the event-related potentials to the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 138 to 182 · score 0.52 · double interaction term, post training, NoGo, ANOVA, Modifications, pre · Report a mismatch
- [10] § Materials and Methods › Analysis plan › H2) Training-induced modifications of implicit wanting of the “NoGo” trained cues ↔ Registered Report Material/SCRIPTS/main.R, lines 184 to 225 · score 0.50 · RT.Away, implicit wanting, IW, H2, NoGo · 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 · 496 lines · 23 KB · no license · 10 matches
- # ----- Prep Session --------------------------------------------------------------
- # Install packages if not already installed then Load packages
- packages <- c("tidyverse","rstatix","BayesFactor","nparLD","effsize","lme4","scales","car","DescTools", "rapidsplithalf")
- new.packages <- packages[!(packages %in% installed.packages()[,"Package"])]
- if(length(new.packages)) install.packages(new.packages)
- invisible(lapply(packages, library, character.only = TRUE))
- rm(packages, new.packages)
- set.seed(1000)
- # ----- Load data --------------------------------------------------------------
- ## Paths
- data_path = 'DATA/main.csv'
- figure_path = 'RESULTS/'
- ## Load data
- df = read.csv2(data_path, sep=',', dec = ".")
- df$sbj = as.factor(df$sbj)
- df$condition = as.factor(df$condition)
- df$session = factor(df$session, levels = c("pre", "post"))
- # ----- Functions --------------------------------------------------------------
- ## Outlier exclusion function with dynamic column name (default threshold = 2.5)
- tag_outliers <- function(df, grouping_variable = c("condition","session"), input_variable, threshold_factor = 2.5) {
- # parsing the variables from vectors to symbols and dataframe environments
- grouping_variable_sym = syms(grouping_variable)
- input_variable_sym = sym(input_variable)
- grouping_variable_df = mget(grouping_variable, as.environment(df))
- input_variable_df = mget(input_variable, as.environment(df))
- # finding the mad threshold values
- threshold <- df %>% group_by(!!!grouping_variable_sym) %>% summarise(med = median(!!input_variable_sym, na.rm = T),
- mad = mad(!!input_variable_sym, na.rm = T),
- lowbound = med-mad*threshold_factor,
- upbound = med+mad*threshold_factor)
- # parsing the grouping variable into a dataframe environment
- grouping_variable_thr = mget(grouping_variable, as.environment(threshold))
- # indexing the group of thresholds
- groupIndex = match(interaction(grouping_variable_df), interaction(grouping_variable_thr))
- # tagging the outliers
- df$outlier = array(input_variable_df > threshold[groupIndex,"upbound"] | input_variable_df < threshold[groupIndex,"lowbound"])
- return(df)
- }
- etas2f <- function(etas){sqrt(etas / (1- etas))}
- # ----- Descriptives -----------------------------------------------------------
- ## Remove participant with only first session for all hypotheses
- df = df %>%
- group_by(sbj) %>%
- filter(n_distinct(session) > 1) %>%
- ungroup()
- ## Baseline explicit liking on included participants (n=60)
- mean(df$liking, na.rm=TRUE)
- sd(df$liking, na.rm=TRUE)
- # ----- Main Analysis ----------------------------------------------------------
- ###################################################################################
- # HR) Training-induced modifications of explicit liking of the "NoGo" trained cues
- ###################################################################################
- ## ---- Pre-processing ---
- ### Outliers removal
- df.liking = tag_outliers(df,c("condition","session"), "liking") # tag the outlier for liking at pre-post and Go-NoGo
- df.liking %>% group_by(condition, session) %>% summarise(n = length(sbj),
- n.na = sum(is.na(liking)),
- n.outlier = sum(outlier, na.rm=T))
- ### Identify subjects with any outlier records and create a data frame for exclusion
- outlier_subjects <- df.liking %>%
- filter(outlier == TRUE) %>% # Find all rows marked as outlier
- distinct(sbj) %>% # Get distinct subjects with outliers
- mutate(to_exclude = TRUE) # Add a column to mark them for exclusion
- ### Filter out these subjects from the original data frame
- df.liking <- df.liking %>%
- anti_join(outlier_subjects, by = "sbj")
- df.liking %>% group_by(session, condition) %>% summarise(mu = mean(liking, na.rm = T),
- sd = sd(liking, na.rm = T),
- n = sum(!is.na(liking)))
- ## ---- Inferential statistics ----
- # Modification in the participants’ average explicit liking of the “NoGo” trained items
- # assessed with the double interaction term of a Session (pre-, post-training) x Item Category (“Go”, “NoGo”) within-subject ANOVA.
- # We expect a larger reduction of explicit liking for “NoGo” than “Go” items at the post- compared to the pre-training session.
- ### Homoscedasticity assumption
- leveneTest(liking ~ session*condition, data=df.liking) # F[3, 220] = 0.28, p = .838
- ### Repeated measures ANOVA
- aov.liking = anova_test(data = df.liking, dv = liking, wid = sbj,
- within = c(session, condition), effect.size = "pes") # F[1,55] = 8.41, p = 0.005
- ### Partial Cohen’s f
- etas2f(aov.liking$pes[3]) # partial Cohen’s f = 0.39
- ### Add bayesian factors
- BF.liking = anovaBF(liking ~ condition*session + sbj, data = df.liking[!is.na(df.liking$liking), ], whichRandom = "sbj")
- BF01 = BF.liking[3] / BF.liking[4] # BF01 = 0.80713 ±7.23%
- ## ---- Plot----
- ggplot(df.liking, aes(x=session, y=liking, fill=session)) +
- facet_wrap(~ condition, labeller = as_labeller(c("go" = "Go", "nogo" = "NoGo"))) + # splitting by condition
- geom_violin() + geom_boxplot(width = 0.2) +
- geom_line(aes(group = sbj), size = 0.6, alpha = 0.6, color = "grey20") +
- geom_point(aes(color = session), size = 1.5, alpha = 0.4, color = 'grey20') +
- scale_fill_manual(values = c("lightblue", "darkcyan")) +
- stat_summary(fun = mean, geom = "point",
- shape = 21, size = 3, stroke = 1.2,
- color = "grey20", fill = "grey20") +
- labs(y = "explicit liking (%)", x = "") +
- theme_minimal() + theme(text = element_text(size = 14),
- strip.text.x = element_text(face="bold"),
- legend.text = element_text(face="bold"),
- axis.text.x = element_blank(),
- axis.ticks.x = element_blank(),
- plot.title = element_text(face = "bold"))
- ggsave(paste0(figure_path, 'HR_valuation.tiff'), dpi = 350,width = 4.63,height = 4.58) # 4.63 x 4.58 in image
- ## ---- Interaction summary & t-tests ----
- ### Interaction summary
- interaction_summary <- df.liking %>%
- group_by(session, condition) %>%
- summarise(mean_liking = mean(liking, na.rm = TRUE),
- SD = sd(liking, na.rm = TRUE),
- .groups = 'drop') %>%
- pivot_wider(names_from = session, values_from = mean_liking, names_prefix = "Session_")
- print(interaction_summary)
- ## T-test pre-post NoGo
- df.liking.nogo = df.liking %>%
- filter(condition == "nogo") %>%
- group_by(session)
- t.test(df.liking.nogo$liking[df.liking.nogo$session == "pre"],
- df.liking.nogo$liking[df.liking.nogo$session == "post"],
- paired = TRUE)
- ## T-test pre-post Go
- df.liking.go = df.liking %>%
- filter(condition == "go") %>%
- group_by(session)
- t.test(df.liking.go$liking[df.liking.go$session == "pre"],
- df.liking.go$liking[df.liking.go$session == "post"],
- paired = TRUE)
- ###################################################################################
- # H2) Training-induced modifications of implicit wanting of the “NoGo” trained cues
- ###################################################################################
- ## ---- Pre-processing ----
- df.iw = tag_outliers(df,c("condition","session"), "IW") # tag the outlier for IW at pre-post and Go-NoGo
- df.iw %>% group_by(condition, session) %>% summarise(n = sum(outlier, na.rm=T))
- df.iw %>% group_by(condition, session) %>% summarise(n = length(sbj),
- n.na = sum(is.na(IW)),
- n.outlier = sum(outlier, na.rm=T))
- ### Identify subjects with any outlier records and create a data frame for exclusion
- outlier_subjects <- df.iw %>%
- filter(outlier == TRUE) %>% # Find all rows marked as outlier
- distinct(sbj) %>% # Get distinct subjects with outliers
- mutate(to_exclude = TRUE) # Add a column to mark them for exclusion
- ### Filter out these subjects from the original data frame
- df.iw <- df.iw %>%
- anti_join(outlier_subjects, by = "sbj")
- df.iw %>% group_by(session, condition) %>% summarise(mu = mean(IW, na.rm = T),
- sd = sd(IW, na.rm = T),
- n = sum(!is.na(IW)))
- ## ---- Inferential statistics ----
- # Modification in the participants’ average IW of the “NoGo” trained items
- # assessed with the double interaction term of a Session (pre-, post-training) x Item Category (“Go”, “NoGo”) within-subject ANOVA.
- # We expect a larger reduction of IW for “NoGo” than “Go” items at the post- compared to the pre-training session.
- ### Homoscedasticity assumption
- leveneTest(IW ~ session*condition, data=df.iw) # F[3, 204] = 1.82, p = .144
- ### Repeated measures ANOVA
- aov.iw = anova_test(data = df.iw, dv = IW, wid = sbj,
- within = c(session, condition), effect.size = "pes") # F[1,55] = 8.41, p = 0.005
- ### Partial Cohen’s f
- etas2f(aov.iw$pes[3]) # partial Cohen's f = 0.02
- # Add bayesian factors
- BF.iw = anovaBF(IW ~ condition*session + sbj, data = df.iw, whichRandom = "sbj")
- BF01 = BF.iw[3] / BF.iw[4] # BF01 = 5.437177 ±7.88%
- ## ---- Plot ----
- ggplot(df.iw, aes(x=session, y=IW, fill=session)) +
- facet_wrap(~ condition, labeller = as_labeller(c("go" = "Go", "nogo" = "NoGo"))) + # splitting by condition
- geom_violin() + geom_boxplot(width = 0.2) +
- geom_line(aes(group = sbj), size = 0.6, alpha = 0.6, color = "grey20") +
- geom_point(aes(color = session), size = 1.5, alpha = 0.4, color = 'grey20') +
- scale_fill_manual(values = c("lightblue", "darkcyan")) +
- stat_summary(fun = mean, geom = "point",
- shape = 21, size = 3, stroke = 1.2,
- color = "grey20", fill = "grey20") +
- labs(y = "implicit wanting (RT.Away-RT.Towards) (s)", x = "") +
- theme_minimal() + theme(text = element_text(size = 14),
- strip.text.x = element_text(face="bold"),
- legend.text = element_text(face="bold"),
- axis.text.x = element_blank(),
- axis.ticks.x = element_blank(),
- plot.title = element_text(face = "bold"))
- ggsave(paste0(figure_path, 'H2_iw.tiff'), dpi = 350, width = 4.63,height = 4.58)
- ## ---- Interaction summary & t-tests ----
- ### Interaction summary
- interaction_summary <- df.iw %>%
- group_by(session, condition) %>%
- summarise(mean_iw = mean(IW, na.rm = TRUE),
- SD = sd(IW, na.rm = TRUE),
- .groups = 'drop') %>%
- pivot_wider(names_from = session, values_from = mean_iw, names_prefix = "Session_")
- print(interaction_summary)
- ### T-test pre-post NoGo
- df.iw.nogo = df.iw %>%
- filter(condition == "nogo") %>%
- group_by(session)
- t.test(df.iw.nogo$IW[df.iw.nogo$session == "pre"],
- df.iw.nogo$IW[df.iw.nogo$session == "post"],
- paired = TRUE)
- ### T-test pre-post Go
- df.iw.go = df.iw %>%
- filter(condition == "go") %>%
- group_by(session)
- t.test(df.iw.go$IW[df.iw.go$session == "pre"],
- df.iw.go$IW[df.iw.go$session == "post"],
- paired = TRUE)
- #####################################################################################################
- # H3) Moderating effect of affective learning biases on the reduction in “NoGo” cues explicit liking
- #####################################################################################################
- ## ---- Pre-processing ----
- ### Pre-Post reduction of explicit liking in the NoGo items. Cohen's d must be >= 0.4
- CohenD(df$liking[df$session == "pre" & df$condition == "nogo"],
- df$liking[df$session == "post" & df$condition == "nogo"], na.rm = T) # Cohen's D = 0.78
- ### Pivot the data frame into ∆ explicit liking
- df.H3 <- df[, c("sbj", "session", "condition", "liking", "beta1", 'error_rate_fc', "w")]
- df.H3 <- df.H3 %>% filter(condition == "nogo") %>%
- pivot_wider(names_from = session, values_from = liking) %>% # Pivoting session columns into 'pre' and 'post'
- mutate(delta_explicit_liking = pre - post) # Compute ∆ as pre-post explicit liking
- ### Remove error rate above 10% in forced choice task
- df.H3 = df.H3 %>% filter(error_rate_fc <= 0.1)
- ### Tagging the outlier for the ∆ explicit liking
- df.H3 = tag_outliers(df.H3,"condition","delta_explicit_liking") # tag the outliers for the ∆ explicit liking
- df.H3 = rename(df.H3, outlier.delta = outlier) # rename the variable to keep it without replacing it afterward
- ## ---- H3a) Learning bias as Pavlovian bias ----
- ### --- Pre-processing ---
- ### Tagged outliers removal
- df.pav = tag_outliers(df.H3,"condition", "beta1") # tag the outlier for the bias beta1
- df.pav %>% summarise(n.PAV = sum(outlier, na.rm=T),
- n.delta = sum(outlier.delta, na.rm=T),
- n.tot = sum(outlier.delta | outlier, na.rm=T)) # count the outliers
- df.pav = df.pav %>% filter(!outlier, !outlier.delta, !is.na(beta1), !is.na(delta_explicit_liking)) %>%
- dplyr::select(sbj, pre, beta1, delta_explicit_liking) %>% # remove outlier and clean the dataset
- mutate(sbj = droplevels(sbj)) # drop unused levels to avoid bugs during model fitting
- ### --- Inferential statistics ---
- ### Correlation matrix
- cor(df.pav[,-1], use = "pairwise.complete.obs")
- ### Model
- summary(fit <- lm(delta_explicit_liking ~ beta1 + pre, data = df.pav))
- ### Bayes factors
- df.bf = as.data.frame(df.pav)
- BF.full = lmBF(delta_explicit_liking ~ beta1 + pre, data = df.bf) #6.289147 ±0%
- BF.pre = lmBF(delta_explicit_liking ~ pre, data = df.bf) # 0.8898105 ±0%
- # BF01 = BF.pre/BF.full = 0.1414835
- ### --- Plot ---
- ggplot(data = df.pav, aes(x = delta_explicit_liking, y = beta1)) +
- geom_smooth(method = "lm", color = "lightblue", linewidth = 2) + # Regression line
- labs(x = "∆ explicit liking (% pre - % post)",
- y = "regression coefficient (high coefficient = ST)") +
- geom_point(color = "darkcyan", alpha = 0.6, size = 3) + # Scatter points with custom color and size
- theme_minimal() + theme(text = element_text(size = 14),
- axis.ticks.x = element_blank())
- ggsave(paste0(figure_path, 'H3a_pav_deval.tiff'), width = 5.47, height = 6.03, dpi = 350) # 5.47 x 6.03
- ## ---- H3b) Learning bias as reinforcement learning bias ----
- ### Tagged outliers removal
- df.rl = tag_outliers(df.H3,"condition", "w") # tag the outlier for the bias w
- df.rl %>% summarise(n.RL= sum(outlier, na.rm=T),
- n.delta = sum(outlier.delta, na.rm=T),
- n.tot = sum(outlier.delta | outlier, na.rm=T))
- df.rl = df.rl %>% filter(!outlier, !outlier.delta, !is.na(w), !is.na(delta_explicit_liking)) %>%
- dplyr::select(sbj, pre, w, delta_explicit_liking) %>%
- mutate(sbj = droplevels(sbj)) # drop unused levels to avoid bugs during model fitting
- ### ---- Inferential statistics ----
- ### Correlation matrix
- cor(df.rl[,-1], use = "pairwise.complete.obs")
- ### Model
- summary(fit <- lm(delta_explicit_liking ~ w + pre, data = df.rl))
- # Bayes factors
- df.bf = as.data.frame(df.rl)
- BF.full = lmBF(delta_explicit_liking ~ w + pre, data = df.bf) # 0.8886224 ±0%
- BF.pre = lmBF(delta_explicit_liking ~ pre, data = df.bf) # 1.624119 ±0%
- # BF01 = BF.pre/BF.full = 1.827682
- ### ---- Plot ----
- ggplot(data = df.rl, aes(x = delta_explicit_liking, y = w)) +
- geom_smooth(method = "lm", color = "lightblue", linewidth = 2) + # Regression line
- labs(x = "∆ explicit liking (% pre - % post)",
- y = "w (high coefficient = model-based bias)") +
- geom_point(color = "darkcyan", alpha = 0.6, size = 3) + # Scatter points with custom color and size
- theme_minimal() + theme(text = element_text(size = 14),
- axis.ticks.x = element_blank())
- ggsave(paste0(figure_path, 'H3b_w_deval.tiff'), dpi = 350, width = 5.47,height = 6.03)
- # ----- Supplementary analysis -------------------------------------------------
- ####################################################################
- # H2) Supplementary: There is an effect of session in the SRC task
- ####################################################################
- ## ---- Pre-processing ----
- df.src = read.csv2('DATA/supp_iw.csv', sep=',', dec = ".")
- # Merged original data frame with details from iw task
- df.merged = df.iw %>%
- dplyr::select(sbj, session, condition, RT_Hit) %>%
- inner_join(
- df.src %>% dplyr::select(sbj, session, condition, RT_towards, RT_away),
- by = c("sbj", "session", "condition")
- )
- ## --- H2 Supplementary a: RT towards ---
- ### -- Pre-processing --
- #### Outlier removal
- df.RT_towards = tag_outliers(df.merged,c("condition","session"), "RT_towards") # tag the outlier for RT at pre-post and Go-NoGo
- df.RT_towards %>% group_by(condition, session) %>% summarise(n = length(sbj),
- n.na = sum(is.na(RT_towards)),
- n.outlier = sum(outlier, na.rm=T)) # count the outliers for each condition
- outlier_subjects <- df.RT_towards %>%
- filter(outlier == TRUE) %>% # Find all rows marked as outlier
- distinct(sbj) %>% # Get distinct subjects with outliers
- mutate(to_exclude = TRUE) # Add a column to mark them for exclusion
- df.RT_towards <- df.RT_towards %>%
- anti_join(outlier_subjects, by = "sbj")
- df.RT_towards %>% group_by(session, condition) %>% summarise(mu = mean(RT_towards, na.rm = T),
- sd = sd(RT_towards, na.rm = T),
- n = sum(!is.na(RT_towards)))
- ### -- Inferential statistics --
- #### Homoscedasticity assumption
- leveneTest(RT_towards ~ session*condition, data=df.RT_towards) # F(3, 184) = 0.20, p = .895.
- #### Repeated measures ANOVA
- aov.RT.towards = anova_test(data = df.RT_towards, dv = RT_towards, wid = sbj,
- within = c(session, condition), effect.size = "pes") # F(1,46) = 63.68, p < .005
- ### -- Plot --
- df.RT_towards$session <- factor(df.RT_towards$session, levels = c("pre", "post"))
- ggplot(df.RT_towards, aes(x=session, y=RT_towards, fill=session)) +
- facet_wrap(~ condition, labeller = as_labeller(c("go" = "Go", "nogo" = "NoGo"))) + # splitting by condition
- geom_violin() + geom_boxplot(width = 0.2) +
- geom_line(aes(group = sbj), size = 0.6, alpha = 0.6, color = "grey20") +
- geom_point(aes(color = session), size = 1.5, alpha = 0.4, color = 'grey20') +
- scale_fill_manual(values = c("lightblue", "darkcyan")) +
- labs(y = "RT.Towards (s)", x = "") +
- theme_minimal() + theme(text = element_text(size = 14),
- strip.text.x = element_text(face="bold"),
- legend.text = element_text(face="bold"),
- axis.text.x = element_blank(),
- axis.ticks.x = element_blank(),
- plot.title = element_text(face = "bold"))
- ggsave(paste0(figure_path, 'H2Supa_RTtowards.tiff'), dpi = 350, width = 4.63,height = 4.58)
- ### --- H2 Supplementary b: RT away ---
- ### -- Pre-processing --
- #### Outlier removal
- df.RT_away = tag_outliers(df.merged,c("condition","session"), "RT_away") # tag the outlier for RT at pre-post and Go-NoGo
- df.RT_away %>% group_by(condition, session) %>% summarise(n = length(sbj),
- n.na = sum(is.na(RT_away)),
- n.outlier = sum(outlier, na.rm=T)) # count the outliers for each condition
- outlier_subjects <- df.RT_away %>%
- filter(outlier == TRUE) %>% # Find all rows marked as outlier
- distinct(sbj) %>% # Get distinct subjects with outliers
- mutate(to_exclude = TRUE) # Add a column to mark them for exclusion
- df.RT_away <- df.RT_away %>%
- anti_join(outlier_subjects, by = "sbj")
- df.RT_away %>% group_by(session, condition) %>% summarise(mu = mean(RT_away, na.rm = T),
- sd = sd(RT_away, na.rm = T),
- n = sum(!is.na(RT_away)))
- ### -- Inferential statistics --
- #### Homoscedasticity assumption
- leveneTest(RT_away ~ session*condition, data=df.RT_away) # F(180, 3) = 0.39, p = .760
- #### Repeated measures ANOVA
- aov.RT.away = anova_test(data = df.RT_away, dv = RT_away, wid = sbj,
- within = c(session, condition), effect.size = "pes") # F(45, 1) = 60.29, p < .005
- #### -- Plot --
- df.RT_away$session <- factor(df.RT_away$session, levels = c("pre", "post"))
- ggplot(df.RT_away, aes(x=session, y=RT_away, fill=session)) +
- facet_wrap(~ condition, labeller = as_labeller(c("go" = "Go", "nogo" = "NoGo"))) + # splitting by condition
- geom_violin() + geom_boxplot(width = 0.2) +
- geom_line(aes(group = sbj), size = 0.6, alpha = 0.6, color = "grey20") +
- geom_point(aes(color = session), size = 1.5, alpha = 0.4, color = 'grey20') +
- scale_fill_manual(values = c("lightblue", "darkcyan")) +
- labs(y = "RT.Away (s)", x = "") +
- theme_minimal() + theme(text = element_text(size = 14),
- strip.text.x = element_text(face="bold"),
- legend.text = element_text(face="bold"),
- axis.text.x = element_blank(),
- axis.ticks.x = element_blank(),
- plot.title = element_text(face = "bold"))
- ggsave(paste0(figure_path, 'H2Supb_RTaway.tiff'), dpi = 350, width = 4.63,height = 4.58)
- ######################################################
- # H2) Supplementary: SRC task half-split reliability
- ######################################################
- df.halfsplit = read.csv('DATA/supp_src_long.csv',sep=',', dec = ".")
- ## Keep only participants from the main analysis (without outliers)
- df.halfsplit <- df.halfsplit %>%
- filter(sbj %in% df.iw$sbj)
- ## Compute half-split reliability
- rel <- rapidsplit(
- data = df.halfsplit,
- subjvar = "sbj",
- diffvars = "Instruction", # Away vs Toward
- stratvar = "imageUID", # Stimulus ID
- aggvar = "RT",
- aggfunc = "medians", # or "means"
- splits = 6000
- )
- print(rel)
- ## Plot
- ggplot(data.frame(corrs = rel$allcors), aes(x = corrs)) +
- geom_histogram(bins = 40, fill = 'darkcyan') +
- geom_vline(xintercept = mean(rel$r), linewidth = 1, color = 'grey20') +
- labs(
- x = "Permutation-based split-half correlations",
- y = "Count"
- ) +
- theme_classic()
- ggsave(paste0(figure_path, 'H2SupReliability.tiff'), dpi = 350, width = 4.63,height = 4.58)
- ######################################################
- # H3) Supplementary: Visit order influence on bias
- ######################################################
- df.visit_order = read_csv('DATA/supp_visit_order.csv')
- ### -- Pavlovian conditioning --
- df.pav_with_visit <- df.pav %>%
- left_join(
- df.visit_order %>%
- filter(task == "PAV"),
- by = "sbj"
- )
- ## Model
- summary(fit <- lm(beta1 ~ visit, data = df.pav_with_visit))
- ### -- Sequential learning --
- df.rl_with_visit <- df.rl %>%
- left_join(
- df.visit_order %>%
- filter(task == 'SL'),
- by = "sbj"
- )
- ## Model
- summary(fit <- lm(w ~ visit, data = df.rl_with_visit))
main.R, no license · at the source
Overview
- Laboratory for Neurorehabilitation Science, Medicine Section, Faculty of Science and Medicine, University of Fribourg, Fribourg, Switzerland
- Department of Psychology, Faculty of Psychology and Educational Sciences, University of Geneva, Geneva, Switzerland
- Swiss Center for Affective Sciences, University of Geneva, Geneva, Switzerland
Abstract
Recent evidence indicates that interventions involving the repeated inhibition of motor responses to environmental cues reduce brain reward responses and craving for these cues, and in turn their consumption. Such approaches have been put forward as a promising solution to unhealthy food overconsumption. Yet, the neurocognitive mechanisms underlying inhibition training to reduce reward responses remain largely unknown. We addressed those questions in a within-participant pre–post intervention study examining how target stimuli (Go)/
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 10 matches between paragraphs and lines of code.
OSF y49gv
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
- 30 September 2026: the link answers (HTTP 200)
2 files
- Registered Report Material/
SCRIPTS/ , R, 25 linesdemographic.R - Registered Report Material/
SCRIPTS/ , R, 496 lines, 10 matchesmain.R
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;
- 10 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
Datasets cited
Data and Code Availability
The data and analyses scripts are available on our OSF page: 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, pages, dates, 4 authors, 6 keywords, 1 funder, 86 references.
Cite
This paper
Tapparel, M., Pool, E. R., Najberg, H., & Spierer, L. (2026). Plastic brain mechanisms supporting reduction in cravings induced by response training. Imaging neuroscience (Cambridge, Mass.), 4, IMAG.a.1180. https://
BibTeX
@article{tapparel2026pla
author = {Tapparel, Malika and Pool, Eva R and Najberg, Hugo and Spierer, Lucas},
title = {{Plastic brain mechanisms supporting reduction in cravings induced by response training}},
journal = {Imaging neuroscience (Cambridge, Mass.)},
year = {2026},
month = mar,
volume = {4},
pages = {IMAG.a.1180},
publisher = {MIT Press},
issn = {2837-6056},
doi = {10.1162/
url = {https://
pmid = {41924031},
pmcid = {PMC13037660}
}
RIS
TY - JOUR
AU - Tapparel, Malika
AU - Pool, Eva R
AU - Najberg, Hugo
AU - Spierer, Lucas
TI - Plastic brain mechanisms supporting reduction in cravings induced by response training
T2 - Imaging neuroscience (Cambridge, Mass.)
J2 - Imaging Neurosci (Camb)
PY - 2026
DA - 2026/
VL - 4
SP - IMAG.a.1180
SN - 2837-6056
PB - MIT Press
DO - 10.1162/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1162/
"type": "article-journal",
"title": "Plastic brain mechanisms supporting reduction in cravings induced by response training",
"container-title": "Imaging neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Tapparel",
"given": "Malika"
},
{
"family": "Pool",
"given": "Eva R"
},
{
"family": "Najberg",
"given": "Hugo"
},
{
"family": "Spierer",
"given": "Lucas"
}
],
"container-title-short":
"volume": "4",
"page": "IMAG.a.1180",
"DOI": "10.1162/
"PMID": "41924031",
"PMCID": "PMC13037660",
"ISSN": "2837-6056",
"publisher": "MIT Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
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.1162/imag.a.1118 [code]
- Sign-tracking bias is associated with the inhibition of motor response to appetitive food cues.Journal: Imaging neuroscience (Cambridge, Mass.)In common: BayesFactor, tidyverse, EEG, cognitive, 28 references, 3 authors
- [2] doi:10.1038/s41467-023-43747-5 [code]
- Neural substrates of parallel devaluation-sensitive and devaluation-insensitive Pavlovian learning in humans.Journal: Nature communicationsIn common: BayesFactor, car, lme4, 1 other tool, cognitive, 5 references, author Eva R Pool
- [3] doi:10.1371/journal.pbio.3003979 [code]
- Impaired midfrontal‑motor theta phase synchronization characterizes maladaptive motivational behavior in people with obsessive‑compulsive disorder.Journal: PLoS biologyIn common: BayesFactor, car, lme4, 1 other tool, EEG, 4 references
- [4] doi:10.1007/s10548-025-01131-0 [code]
- ERP Signals During Speech Articulation: Does Auditory Feedback Mask Other Ongoing Cognitive-motor Processes?Journal: Brain topographyIn common: EEG, cognitive, 8 references
- [5] doi:10.1038/s41598-026-58046-4 [code]
- Dissecting the interplay of model-based control, impulsivity and compulsivity on self-control in daily life.Journal: Scientific reportsIn common: car, lme4, tidyverse, EEG, cognitive, 5 references
- [6] doi:10.1093/cercor/bhae187 [code]
- Asynchronous behavioral and neurophysiological changes in word production in the adult lifespan.Journal: Cerebral cortex (New York, N.Y. : 1991)In common: car, lme4, tidyverse, EEG, cognitive, 4 references
- [7] doi:10.1007/s10548-024-01057-z [code]
- The Role of Anatomic Connectivity in Inhibitory Control Revealed by Combining Connectome-based Lesion-symptom Mapping with Event-related Potentials.Journal: Brain topographyIn common: EEG, cognitive, 6 references
- [8] doi:10.1038/s41598-024-71692-w [code]
- On the effects of impulsivity and compulsivity on neural correlates of model-based performance.Journal: Scientific reportsIn common: lme4, tidyverse, EEG, cognitive, 5 references
- [9] doi:10.3390/nu15010244 [code]
- Differential Orbitofrontal Cortex Responses to Chocolate Images While Performing an Approach-Avoidance Task in the MRI Environment.Journal: NutrientsIn common: 5 references
- [10] 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: rstatix, car, tidyverse, 3 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, 2 scripts, and 10 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:cda2f1ac8d8498e5…
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.1162/imag.a.1180)
<!-- oscr-badge:end -->reStructuredText
.. oscr-badge:start
.. image:: https://openscicode.org/badge/doi/10.1162/imag.a.1180.svg
:target: https://openscicode.org/badge/doi/10.1162/imag.a.1180
:alt: OSCR
.. oscr-badge:endHTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1162/imag.a.1180"><img src="https://openscicode.org/badge/doi/10.1162/imag.a.1180.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.
