Brain network reconfiguration during reward prediction error processing.
The 18 matches
- [1] § METHODS › Experimental Procedures ↔ behavioral_analysis/dn_ba_02_task_logs_processing.ipynb, lines 26–105 · score 0.97 · fixation circle, decision phase indicated, right thumb, circle represented, trial began, punished box
- [2] § METHODS › Experimental Procedures ↔ behavioral_analysis/dn_ba_02_task_logs_processing.ipynb, lines 26–105 · score 0.92 · lab computer, MRI scan, explicitly instructed, inaccurate behavioral, prior expectations, feedback indicating
- [3] § METHODS › Beta-Series Correlation ↔ activation_analysis/dn_aa_01_first_level.ipynb, lines 163–291 · score 0.92 · FirstLevelModel, left button press, right button press, decision onset, outcome phase, motion parameter
- [4] § METHODS › Beta-Series Correlation ↔ connectivity_analysis/ppi/dn_pp_01_ppi_linear_model.ipynb, lines 1–71 · score 0.84 · head motion parameter, left button press, right button press, outcome phase, expected probability, convolved
- [5] § METHODS › Brain Parcellation ↔ connectivity_analysis/ppi/dn_pp_03_analysis_300ROI.ipynb, lines 45–88 · score 0.83 · cingulo opercular, dorsal attention, ventral attention, auditory, somatomotor, salience
- [6] § RESULTS › Functional Networks Involved in RPE Processing ↔ connectivity_analysis/ppi/dn_pp_03_analysis_300ROI.ipynb, lines 45–88 · score 0.74 · cingulo opercular, dorsal attention, ventral attention, auditory, somatomotor, salience
- [7] § METHODS › The Behavioral Model Space ↔ behavioral_analysis/dn_ba_03_single_subject_model_fit.ipynb, lines 10–45 · score 0.69 · loss aversion, inverse temperature, reward magnitudes, Choice probability, softmax, Utility
- [8] § METHODS › The Behavioral Model Space ↔ behavioral_analysis/dn_ba_07_parameter_recovery.ipynb, lines 22–72 · score 0.69 · inverse temperature, reward magnitudes, softmax, Utility, minus, box
- [9] § RESULTS › Behavioral Modeling of RPE Coding in Reward-Seeking and Punishment-Avoiding Contexts ↔ behavioral_analysis/matjags-dn/dn_bm_05_results_reporting.ipynb, lines 25–118 · score 0.66 · exceedance probabilities, PDCI model, submodel, PDCD, PICD, PICI
- [10] § METHODS › Bayesian Modeling ↔ behavioral_analysis/matjags-dn/dn_bm_02_model_selection.ipynb, lines 1–28 · score 0.57 · model selection, protected exceedance probabilities, MCMC, matjags, Bayesian, submodel
- [11] § METHODS › Experimental Procedures ↔ activation_analysis/dn_aa_01_first_level.ipynb, lines 163–291 · score 0.54 · decision phase, outcome phase, ITI, button, pressing, fMRI
- [12] § METHODS › Community-Level Agreement ↔ connectivity_analysis/bsc/dn_bs_10_agreement_monte_carlo.ipynb, lines 60–98 · score 0.54 · Monte Carlo, shuffled, agreement, LSN, connections, network
- [13] § RESULTS › Behavioral Modeling of RPE Coding in Reward-Seeking and Punishment-Avoiding Contexts ↔ behavioral_analysis/matjags-dn/dn_bm_02_model_selection.ipynb, lines 178–198 · score 0.53 · Bayes Factor, PDCD, PICD, PICI, marginalized, PDCI
- [14] § METHODS › Participants ↔ activation_analysis/dn_aa_02_exclusion.ipynb, lines 90–131 · score 0.53 · framewise displacement, FD, motion
- [15] § METHODS › Bayesian Modeling ↔ behavioral_analysis/matjags-dn/models/HLM_sequential_split.m, lines 39–79 · score 0.53 · Markov Chain, MATLAB, HLM, matjags, model
- [16] § METHODS › Bayesian Modeling ↔ behavioral_analysis/dn_ba_06_beta_distribution.ipynb, lines 162–182 · score 0.52 · beta distribution, lognormal, uniform, model, behaviorally
- [17] § METHODS › Bayesian Modeling ↔ behavioral_analysis/matjags-dn/dn_bm_05_results_reporting.ipynb, lines 25–118 · score 0.52 · behavioral parameters, hierarchical, submodels, PDCD, PICD, PICI
- [18] § METHODS › Bayesian Modeling ↔ behavioral_analysis/matjags-dn/dn_bm_04_parameter_estimation.ipynb, lines 22–47 · score 0.52 · behavioral parameters, hierarchical, submodels, PDCD, PICD, PICI
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
Jupyter notebook · 390 lines · 17 KB · MIT · 2 matches
- # %% [markdown]
- # ## Processing PRL task logs
- #
- # This script process raw, but validated PRL task logs. Script features:
- # - creates new useful variables and removes other not used ones
- # - aggregates behavioral data into single, easy to work DataFrame
- # - creates metadata describing aggregated behavioral data
- # - provides `plot_response` function for intuitive response pattern visualisation
- #
- # ---
- # **Last update**: 07.01.2020
- #
- # **Todo**: Clean REF
- # %%
- import matplotlib.pyplot as plt
- import matplotlib
- import pandas as pd
- import numpy as np
- import json
- import os
- import scipy.io
- path_root = '/home/kmb/Desktop/Neuroscience/Projects/BONNA_decide_net/'
- # %% [markdown]
- # ### The probabilistic reversal learning task
- #
- # During the fMRI scanning session participants carried out the PRL task in two conditions: (1) reward-seeking and (2) punishment-avoiding. Participants were instructed to repeatedly choose between yellow and blue boxes in order to collect as many points as possible in the reward-seeking condition or loose as little points as possible in the punishment-avoiding condition (**Fig. 1**). One of the boxes had the probability to be correct (rewarding or non-punishing depending on the condition) p = 0.8 and the other one p = 0.2. This reward contingency changed four times throughout each task condition. Reward probabilities were unknown to the subjects and had to be learned from experience. Each box had also associated reward magnitude, randomly selected at the beginning of each trial. These reward magnitudes represented as numbers within the box indicated possible gain in the reward-seeking condition or possible loss in the punishment-avoiding condition. To be successful in this task decision maker had to correctly estimate reward probabilities from experience and take into account reward magnitudes to choose an option with higher expected value.
- #
- # Each task condition was associated with the separate fMRI run and consisted of N=110 trials. Each trial began with the decision phase indicated by the question mark appearing within the fixation circle. During decision phase subject had 2 s to choose one of the boxes by pressing button on the response grip with either left or right thumb. Decision phase was followed by a variable inter-stimulus-interval (ISI; 3-7 s, jittered), after which an outcome was presented for 2 s. During the outcome phase fixation circle was colored accordingly to rewarded or punished box and the number within the circle represented number of gained or lost points (see **Fig. 1**). Outcome phase was followed by a variable inter-trial-interval (ITI; 3-7 s, jittered).
- #
- #
- # The number of points which subject gathered in the reward-seeking condition or the remaining number of points in the punishment-avoiding conditions was represented by the gray account bar on the bottom of the screen. Subjects were informed that if they manage to fill half of the bar or the entire bar in the reward-seeking condition they will receive 10 PLN or 20 PLN respectively. In the punishment-avoiding condition subjects were informed that they will receive 20 PLN if they are left with more than half of the bar, 10 PLN if they are left with less than half of the bar or that do not receive any money if they lose all of their points. To maintain constant level of motivation throughout the task, incentives thresholds were set such that all participants acquired 10 PLN from either task.
- #
- #
- # PsychoPy software (v. 1.90.1, www.psychopy.org (Peirce, 2007)) was used for task presentation on the MRI compatible NNL goggles (NordicNeuroLab, Bergen, Norway). Behavioral responses were collected using MRI compatible NNL response grips (NordicNeuroLab, Bergen, Norway), which were hold in both hands. Each condition lasted approximately 24 min. The order of task conditions as well as the colors for left and right box (yellow and blue) were counterbalanced across subjects. Before the MRI scan, subjects practiced both task conditions on the lab computer.
- # Heterogeneity in the prior expectations regarding the task structure may lead to heterogeneity in behavior even in simple tasks leading to inaccurate behavioral modelling (Shteingart and Loewenstein, 2014). To tackle this challenge, we explicitly instructed participants that one of the boxes will be more frequently rewarded in the reward-seeking condition or punished in the punishment-avoiding condition and that this contingency may reverse several times during the task. In order to further ensure that participants grasp correct model of the task environment, they were provided with the feedback indicating which box is more frequently correct during the first phase of the training.
- # %% [markdown]
- # Function `process_log_df()` cleans behavioral response dataframe changing data types, inverting interpretation of certain variables depending on task condition and drops irrelevant columns.
- # %%
- def process_log_df(df):
- '''Cleaning and pre-processing of log dataframe.
- Args:
- df (pd.Dataframe): raw log dataframe
- Returns:
- info (dictionary): contains task metadata
- df_clean (pd.Dataframe): pre-processed log dataframe
- '''
- df_clean = df.copy(deep=True)
- # Grab additional info
- info = {}
- info['n_trials'] = df_clean.shape[0]
- info['n_blocks'] = 5
- info['condition'] = df_clean['condition'][0]
- info['subject'] = df_clean['subject_id'][0]
- info['group'] = df_clean['group'][0]
- # Reaname non-intuitive columns according to guidlines
- df_clean.rename(columns={'block': 'block_bci'}, inplace=True)
- df_clean.rename(columns={'rwd': 'side_bci'}, inplace=True)
- if info['condition'] == 'pun':
- df_clean['block'] = (-1) * df_clean['block_bci']
- df_clean['side'] = (-1) * df_clean['side_bci']
- else:
- df_clean['block'] = df_clean['block_bci']
- df_clean['side'] = df_clean['side_bci']
- # Convert subject responses to integers
- df_clean.loc[df['response'] == 'a', 'response'] = -1
- df_clean.loc[df['response'] == 'd', 'response'] = 1
- try:
- df_clean.loc[df_clean['response'] == 'None', 'response'] = 0
- except:
- pass
- # Convert reaction time to float
- df_clean['rt'] = pd.to_numeric(df_clean['rt'], errors='coerce')
- # Reverse incorrect sign for punishment variables
- if info['condition'] == 'pun':
- df_clean['won_bool'] = ~ df_clean['won_bool']
- df_clean['won_magn'] *= (-1)
- df_clean['magn_left'] *= (-1)
- df_clean['magn_right'] *= (-1)
- # Drop unnecessary columns
- df_clean = df_clean[['block', 'block_bci', 'side', 'side_bci',
- 'magn_left', 'magn_right',
- 'response', 'rt',
- 'won_bool', 'won_magn', 'acc_after_trial',
- 'onset_iti', 'onset_iti_plan', 'onset_iti_glob',
- 'onset_dec', 'onset_dec_plan', 'onset_dec_glob',
- 'onset_isi', 'onset_isi_plan', 'onset_isi_glob',
- 'onset_out', 'onset_out_plan', 'onset_out_glob']]
- return info, df_clean
- # %% [markdown]
- # (1) load logs for all subjects
- #
- # (2) cleaning them using `process_log_df()` function
- #
- # (3) aggregate them to single list containing all dataframes accompanied with metadata
- # %%
- path_logs = os.path.join(
- path_root,
- 'data/main_fmri_study/sourcedata/behavioral/task_logs'
- )
- subjects = [f'm{sub:02}' for sub in range(2, 34)]
- df_all_rew, df_all_pun = [], []
- for subject in subjects:
- # Load behavioral responses for signle subject
- path_rew = f"{path_logs}/sub-{subject}/{subject}_prl_DecideNet_rew.csv"
- path_pun = f"{path_logs}/sub-{subject}/{subject}_prl_DecideNet_pun.csv"
- df_rew = pd.read_csv(path_rew)
- df_pun = pd.read_csv(path_pun)
- # Clean behavioral responses
- info_rew, df_rew = process_log_df(df_rew)
- info_pun, df_pun = process_log_df(df_pun)
- df_all_rew.append((info_rew, df_rew))
- df_all_pun.append((info_pun, df_pun))
- # %% [markdown]
- # ### Create single variable to represent all behavioral responses
- # Use aggregated lists of clean dataframes (`df_all_rew` and `df_all_pun`) and convert them to single numpy array representing all behavioral responses and task onsets. Size of aggregated array is: n_subjects x n_conditions x n_trials x 21. Array metadata decoding dimensions is stored in variable `meta`.
- # %%
- out_path = os.path.join(path_root, 'data/main_fmri_study/sourcedata/behavioral')
- filename = "behavioral_data_clean_all_REF"
- beh = np.zeros((len(subjects), 2, 110, 23))
- # Create & save metadata
- meta = {}
- meta['dim1'] = subjects
- meta['dim2'] = ['rew', 'pun']
- meta['dim3'] = [f'trial_{i+1}' for i in range(110)]
- meta['dim4'] = list(df_all_rew[0][1].keys())
- path_meta = os.path.join(out_path, f"{filename}.json")
- with open(path_meta, 'w') as f:
- json.dump(meta, f, indent=4)
- # Create & save numpy aggregated array
- for i, (df_rew, df_pun) in enumerate(zip(df_all_rew, df_all_pun)):
- beh[i, 0] = np.array(df_rew[1], dtype='float')
- beh[i, 1] = np.array(df_pun[1], dtype='float')
- path_beh_npy = os.path.join(out_path, f"{filename}.npy")
- path_beh_mat = os.path.join(out_path, f"{filename}.mat")
- # Save to both numpy and MATLAB formats
- np.save(path_beh_npy, beh)
- scipy.io.savemat(path_beh_mat, {'beh': beh}, appendmat=False)
- # %% [markdown]
- # ### Visualisation of subject responses
- # Function `plot_response()` creates friendly visualisation of subject responses throughout the task. Visualisation consists of:
- # - **top panel**: represents internal task structure
- # - blue and yellow blocks show stable phases for which box reward probabilities do not change (color is coding more profitable side; blue=left, yellow=right)
- # - dark blue line show reward magnitude for the left box
- # - yellow and blue dots show winning sides (rewarded / not punished)
- # - **middle panel**: represents subject's reaction times and account balance
- # - red line: reaction time,
- # - red rectangles: highlight misses
- # - black dashed line: account balance throughout the task
- # - dark shaded area: trials for which subject crossed reward threshold
- # - **bottom panel**: represetnes subject's trialwise responses
- # - green dot = rewarded / not punished; red dot = not rewarded / punished
- # - dark dashed line: idle time (how many stable trials subject experienced)
- # - colored rectangles: which side is more profitable in terms of reward magnitude
- # %% [markdown]
- # Load aggregated behavioral data.
- # %%
- import sys
- sys.path.append(os.path.join(path_root, 'code'))
- from dn_utils.behavioral_models_REF import load_behavioral_data
- path_beh = os.path.join(path_root, 'data/main_fmri_study/sourcedata/behavioral/')
- beh, meta = load_behavioral_data(path_beh)
- n_subjects = len(meta['dim1'])
- # %%
- def plot_response(beh, meta, subject, condition, save=False, **kwargs):
- '''Visualising useful aspects of subjects responses.
- Args:
- beh (np.array): aggregated behavioral responses
- meta (dict): description of beh array coding
- subject (int): subject index
- condition (int): task condition index
- 0 for reward condition or 1 for punishment condition
- save (bool): should I save your plot?
- ...
- **out_path (Str): path to folder to save plot
- '''
- col_blu = "#56B4E9" # left
- col_yel = "#F0E442" # right
- col_blu_d = "#0B3A54"
- # Get proper task & response features
- block_bci = beh[subject, condition, :, meta['dim4'].index('block_bci')]
- side_bci = beh[subject, condition, :, meta['dim4'].index('side_bci')]
- magn_left = beh[subject, condition, :, meta['dim4'].index('magn_left')]
- magn_right = beh[subject, condition, :, meta['dim4'].index('magn_right')]
- response = beh[subject, condition, :, meta['dim4'].index('response')]
- rt = beh[subject, condition, :, meta['dim4'].index('rt')]
- won_bool = beh[subject, condition, :, meta['dim4'].index('won_bool')]
- acc_after_trial = beh[subject, condition, :, meta['dim4'].index('acc_after_trial')]
- magn_diff = magn_right - magn_left
- n_blocks = np.nonzero(np.diff(block_bci))[0].shape[0] + 1
- n_trials = beh.shape[2]
- x_trials = np.arange(1, n_trials+1)
- # Determine begin and end of the blocks and rewarded side
- blocks = np.zeros((2, n_blocks+1), dtype='int')
- blocks[0, 0:n_blocks] = np.hstack((
- np.ones((1), dtype=int),
- np.nonzero(np.diff(beh[subject, condition, :, 0]))[0] + 2
- ))
- blocks[0, n_blocks] = n_trials
- blocks[1, 0:n_blocks] = beh[subject, condition, blocks[0][:-1], 0]
- if condition == 1: blocks[1, :] *= (-1)
- # Create plot
- fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True,
- figsize=(20, 10), facecolor='w')
- ### Subplot 1 ###########################################################
- # True reward contingencies (more profitable side)
- for i in range(n_blocks):
- if blocks[1, i] == -1: col = col_blu
- else: col = col_yel
- ax1.fill_between(
- x=[blocks[0, i], blocks[0, i+1]],
- y1=-1, y2=1,
- color=col, alpha=.5)
- # Rewarded / punished side
- if condition == 1:
- ax1.scatter(x_trials, (-1)*side_bci*.9, c=(-1)*side_bci,
- cmap='cividis', vmin=-1.5, vmax=1.5)
- else:
- ax1.scatter(x_trials, side_bci*.9, c=side_bci,
- cmap='cividis', vmin=-1.5, vmax=1.5)
- ax1.set_ylim(-1, 1)
- ax1.set_yticks([-0.9, 0.9])
- ax1.set_yticklabels(['left', 'right'])
- ax1.set_ylabel('Better option')
- # Magnitude for left box
- ax1b = ax1.twinx()
- ax1b.plot(x_trials, magn_left, color=col_blu_d)
- ax1b.set_ylabel('$x(t)$ for left box', color=col_blu_d)
- ax1b.set_xlim(1, n_trials)
- if condition == 1:
- ax1b.set_ylim(-50, 0)
- else:
- ax1b.set_ylim(0, 50)
- ax1b.set_xlim(1, n_trials)
- ### Subplot 2 ###########################################################
- # Misses
- for miss in np.argwhere(np.isnan(rt)):
- ax2.fill_between(
- x=[miss[0]+.5, miss[0]+1.5],
- y1=0, y2=1.5,
- color='r', alpha=.5)
- # Reaction times
- ax2.plot(x_trials, rt, 'r')
- ax2.set_ylabel('reaction time $[s]$', color='r')
- ax2.set_xticks(blocks[0, 1:-1])
- ax2.set_ylim(0, 1.5)
- ax2.grid(axis='x')
- # Account
- ax2b = ax2.twinx()
- ax2b.plot(x_trials, acc_after_trial, 'k--')
- ax2b.set_ylabel('account balance')
- # Crossing predefined task threshold
- if condition == 1:
- acc_thr = np.ones(x_trials.shape) * 650
- ax2b.fill_between(x_trials, acc_after_trial, acc_thr,
- where=acc_after_trial <=acc_thr,
- color='k', alpha=.2)
- else:
- acc_thr = np.ones(x_trials.shape) * 1150
- ax2b.fill_between(x_trials, acc_after_trial, acc_thr,
- where=acc_after_trial >=acc_thr,
- color='k', alpha=.2)
- ### Subplot 3 ###########################################################
- # Idle time (repeated winning / not loosing side)
- idle = np.zeros(side_bci.shape)
- for i in range(1, len(side_bci)):
- current = side_bci[i]
- last_trials = np.flip(side_bci[:i] == current)
- t = 0
- while last_trials[t] == True:
- t += 1
- if t == len(last_trials):
- break
- if condition == 1: idle[i] = t * current * (-1)
- else: idle[i] = t * current
- ax3.plot(x_trials, idle, 'k')
- ax3.set_ylim(-np.max(np.abs(idle)) - 2, np.max(np.abs(idle)) + 2)
- ax3.set_ylabel('Idle time')
- # Difference in magnitude
- norm = matplotlib.colors.Normalize(-45, 45)
- colors = [[norm(-45), col_blu],
- [norm(0), "white"],
- [norm(45), col_yel]]
- cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", colors)
- ax3b = ax3.twinx()
- for trial in range(n_trials):
- ax3b.fill_between(
- x=[trial+.5, trial+1.5],
- y1=-1, y2=1,
- color=cmap(norm(magn_diff[trial])), alpha=.7)
- # Subject respnses
- ax3b.scatter(x_trials, response*.75, c=won_bool,
- cmap='RdYlGn', vmin=-.2, vmax=1.2, s=50)
- ax3b.set_ylim(-1, 1)
- ax3b.set_yticks([-0.75, 0, .75])
- ax3b.set_yticklabels(['left', 'miss', 'right'])
- ax3b.grid(axis='both')
- ax3b.spines['top'].set_color(col_yel)
- ax3b.spines['top'].set_linewidth(3)
- ax3b.spines['bottom'].set_color(col_blu)
- ax3b.spines['bottom'].set_linewidth(3)
- if save:
- if "out_path" in kwargs: out_path = kwargs["out_path"] + "/"
- else: out_path = ""
- filename = f"{out_path}sub-{meta['dim1'][subject]}_{meta['dim2'][condition]}_respplot"
- plt.savefig(filename)
- plt.close()
- # %% [markdown]
- # Show example plot.
- # %%
- plot_response(beh, meta, 5, 0)
- # %% [markdown]
- # Generate and save response plots.
- # %%
- out_path = os.path.join(path_root, 'code/behavioral_analysis/figures/respplots');
- for i in range(n_subjects):
- # Save respplots to file
- plot_response(beh, meta, i, 0,
- save=True, out_path=out_path);
- plot_response(beh, meta, i, 1,
- save=True, out_path=out_path);
dn_ba_02_task_logs_processing.ipynb at commit e0d6323, under MIT · at the source
Overview
- Centre for Modern Interdisciplinary Technologies, Nicolaus Copernicus University in Toruń, Toruń, Poland
- Institute of Cognitive Science, Faculty of Philosophy and Social Sciences, Nicolaus Copernicus University in Toruń, Toruń, Poland
- Danish Research Centre for Magnetic Resonance, Department of Radiology and Nuclear Medicine, Copenhagen University Hospital - Amager and Hvidovre, Copenhagen, Denmark
- London Mathematical Laboratory, London, UK
- Department of Psychology, University of Copenhagen, Copenhagen, Denmark
- Department of Informatics, Institute of Engineering and Technology, Faculty of Physics, Astronomy and Informatics, Nicolaus Copernicus University in Toruń, Toruń, Poland
- Institute of Advanced Studies, Centre for Modern Interdisciplinary Technologies, Nicolaus Copernicus University in Toruń, Toruń, Poland
Abstract
Learning from experience is theorized to be driven by reward prediction error (RPE) signals that reflect updates to our expectations of reward. Despite numerous studies on the neural correlates of RPEs, the question of how large-scale networks (LSN) in the brain reconfigure in response to an RPE learning signal remains open. Here, we examine how functional networks change in response to RPEs depending on the context. In our study, participants performed a probabilistic reversal learning task while we acquired fMRI data in two experimental settings: reward-seeking and punishment-avoiding. Participants’ behavior was best explained by models with different learning rates for positive and negative RPEs. Furthermore, no evidence was found for context-dependent learning rates. Using behaviorally fitted RPE models, we performed a whole-brain network analysis. This analysis revealed classical reward structures, where striatal reward networks emerge as modules when the community structure is examined at a finer resolution, and a ventromedial prefrontal network emerges at a coarser resolution. Using the same behavioral model, we found that, compared with negative RPEs, positive RPEs increased within-network integration and decreased between-community integration. This indicates that there are distinctly different neural processes for positive and negative RPEs.
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 18 matches between paragraphs and lines of code.
kbonna/decidenet
e0d63237383a71808d1e40103a86777fbad46076, 30 June 2022Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
57 files
- activation_analysis/
dn_aa_00_calculate_modul , Jupyter, 83 linesations.ipynb - activation_analysis/
dn_aa_01_first_level.ipy , Jupyter, 292 lines, 2 matchesnb - activation_analysis/
dn_aa_02_exclusion.ipynb , Jupyter, 131 lines, 1 match - activation_analysis/
dn_aa_03_second_level.ip , Jupyter, 152 linesynb - activation_analysis/
dn_aa_04_brain_atlases.i , Jupyter, 202 linespynb - activation_analysis/
dn_aa_05_results_reporti , Jupyter, 332 linesng.ipynb - behavioral_analysis/
db_ba_09_cognitive_load. , Jupyter, 70 linesipynb - behavioral_analysis/
dn_ba_01_task_logs_valid , Jupyter, 137 linesation.ipynb - behavioral_analysis/
dn_ba_02_task_logs_proce , Jupyter, 390 lines, 2 matchesssing.ipynb - behavioral_analysis/
dn_ba_03_single_subject_ , Jupyter, 248 lines, 1 matchmodel_fit.ipynb - behavioral_analysis/
dn_ba_04_behavioral_metr , Jupyter, 175 linesics.ipynb - behavioral_analysis/
dn_ba_05_model_explorati , Jupyter, 162 lineson.ipynb - behavioral_analysis/
dn_ba_06_beta_distributi , Jupyter, 209 lines, 1 matchon.ipynb - behavioral_analysis/
dn_ba_07_parameter_recov , Jupyter, 269 lines, 1 matchery.ipynb - behavioral_analysis/
dn_ba_08_task_figure.ipy , Jupyter, 81 linesnb - behavioral_analysis/
matjags-dn/ , Jupyter, 32 linesdn_bm_01_convergence.ipy nb - behavioral_analysis/
matjags-dn/ , Jupyter, 214 lines, 2 matchesdn_bm_02_model_selection .ipynb - behavioral_analysis/
matjags-dn/ , MATLAB, 19 linesdn_bm_03_vba.m - behavioral_analysis/
matjags-dn/ , Jupyter, 131 lines, 1 matchdn_bm_04_parameter_estim ation.ipynb - behavioral_analysis/
matjags-dn/ , Jupyter, 317 lines, 2 matchesdn_bm_05_results_reporti ng.ipynb - behavioral_analysis/
matjags-dn/ , MATLAB, 53 linesfunctions/ gen_logbf_barplot.m - behavioral_analysis/
matjags-dn/ , MATLAB, 29 linesfunctions/ gen_pep_barplot.m - behavioral_analysis/
matjags-dn/ , MATLAB, 11 linesfunctions/ my_num2str.m - behavioral_analysis/
matjags-dn/ , MATLAB, 20 linesfunctions/ print_rhats.m - behavioral_analysis/
matjags-dn/ , MATLAB, 3 linesfunctions/ shuffle.m - behavioral_analysis/
matjags-dn/ , MATLAB, 58 linesfunctions/ tight_subplot.m - behavioral_analysis/
matjags-dn/ , MATLAB, 97 lines, 1 matchmodels/ HLM_sequential_split.m - behavioral_analysis/
matjags-dn/ , MATLAB, 89 linesmodels/ H_pdci.m - behavioral_analysis/
matjags-dn/ , MATLAB, 125 linesmodels/ SS_pdci.m - connectivity_analysis/
bsc/ , Jupyter, 79 linesdn_bs_00_extract_data_pa ths.ipynb - connectivity_analysis/
bsc/ , Jupyter, 207 linesdn_bs_01_betamaps_glm.ip ynb - connectivity_analysis/
bsc/ , Jupyter, 175 linesdn_bs_02_betamaps_explor ation.ipynb - connectivity_analysis/
bsc/ , Jupyter, 197 linesdn_bs_03_betaseries_extr action.ipynb - connectivity_analysis/
bsc/ , Jupyter, 153 linesdn_bs_04_betaseries_corr elation.ipynb - connectivity_analysis/
bsc/ , Jupyter, 369 linesdn_bs_05_optimal_gamma.i pynb - connectivity_analysis/
bsc/ , Jupyter, 130 linesdn_bs_06_graph_measures_ unthr.ipynb - connectivity_analysis/
bsc/ , Jupyter, 129 linesdn_bs_07_modularity.ipyn b - connectivity_analysis/
bsc/ , Jupyter, 96 linesdn_bs_08_consensus_calcu lation.ipynb - connectivity_analysis/
bsc/ , Jupyter, 200 linesdn_bs_09_consensus_visua lization.ipynb - connectivity_analysis/
bsc/ , Jupyter, 98 lines, 1 matchdn_bs_10_agreement_monte _carlo.ipynb - connectivity_analysis/
bsc/ , Jupyter, 93 linesdn_bs_11_agreement_stati stics.ipynb - connectivity_analysis/
bsc/ , Jupyter, 159 linesdn_bs_12_agreement_resul ts.ipynb - connectivity_analysis/
bsc/ , Jupyter, 151 linesdn_bs_13_node_profile_ca lculation.ipynb - connectivity_analysis/
bsc/ , Jupyter, 69 linesdn_bs_14_node_profile_vi sualisation.ipynb - connectivity_analysis/
bsc/ , Jupyter, 112 linesdn_bs_15_nodal_metrics.i pynb - connectivity_analysis/
bsc/ , Jupyter, 102 linesdn_bs_90_agreement_simpl e.ipynb - connectivity_analysis/
bsc/ , Jupyter, 114 linesdn_bs_91_lsn_connectivit y.ipynb - connectivity_analysis/
bsc/ , Jupyter, 112 linesdn_bs_92_consensus_figur e.ipynb - connectivity_analysis/
bsc/ , Jupyter, 137 linesdn_bs_98_distributions_T OREF.ipynb - connectivity_analysis/
parcellations/ , Jupyter, 108 linesdn_pa_01_combine_parcell ations.ipynb - connectivity_analysis/
parcellations/ , Jupyter, 32 linesdn_pa_02_parcellation_fi gure.ipynb - connectivity_analysis/
ppi/ , Jupyter, 407 lines, 1 matchdn_pp_01_ppi_linear_mode l.ipynb - connectivity_analysis/
ppi/ , Jupyter, 294 linesdn_pp_02_analysis_custom ROI.ipynb - connectivity_analysis/
ppi/ , Jupyter, 147 linesdn_pp_02b_analysis_custo mROI.ipynb - connectivity_analysis/
ppi/ , Jupyter, 319 lines, 2 matchesdn_pp_03_analysis_300ROI .ipynb - repository limit reached (2,000 files or 30 MB): the rest is at the source (35 files)
- LICENCE.md, License, 7 lines
- README.md, Text, 20 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;
- 55 scripts, each with its path and the digest of its content;
- 18 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 and code availability
All code used for neuroimaging and behavioral data processing and statistical data analyses are publicly available at 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, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 7 keywords, 1 funder, 68 references.
Cite
This paper
Bonna, K., Hulme, O. J., Steinkamp, S. R., Meder, D., van der Weij, M. E. C., Duch, W., & Finc, K. (2026). Brain network reconfiguration during reward prediction error processing. Network neuroscience (Cambridge, Mass.), 10(3), 853-883. https://
BibTeX
@article{bonna2026brain,
author = {Bonna, Kamil and Hulme, Oliver J. and Steinkamp, Simon R. and Meder, David and van der Weij, Maria E. C. and Duch, Włodzisław and Finc, Karolina},
title = {{Brain network reconfiguration during reward prediction error processing}},
journal = {Network neuroscience (Cambridge, Mass.)},
year = {2026},
month = aug,
volume = {10},
number = {3},
pages = {853--883},
publisher = {MIT Press},
issn = {2472-1751},
doi = {10.1162/
url = {https://
pmid = {42730454},
pmcid = {PMC13569333}
}
RIS
TY - JOUR
AU - Bonna, Kamil
AU - Hulme, Oliver J.
AU - Steinkamp, Simon R.
AU - Meder, David
AU - van der Weij, Maria E. C.
AU - Duch, Włodzisław
AU - Finc, Karolina
TI - Brain network reconfiguration during reward prediction error processing
T2 - Network neuroscience (Cambridge, Mass.)
J2 - Netw Neurosci
PY - 2026
DA - 2026/
VL - 10
IS - 3
SP - 853
EP - 883
SN - 2472-1751
PB - MIT Press
DO - 10.1162/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1162/
"type": "article-journal",
"title": "Brain network reconfiguration during reward prediction error processing",
"container-title": "Network neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Bonna",
"given": "Kamil"
},
{
"family": "Hulme",
"given": "Oliver J."
},
{
"family": "Steinkamp",
"given": "Simon R."
},
{
"family": "Meder",
"given": "David"
},
{
"family": "van der Weij",
"given": "Maria E. C."
},
{
"family": "Duch",
"given": "Włodzisław"
},
{
"family": "Finc",
"given": "Karolina"
}
],
"container-title-short":
"volume": "10",
"issue": "3",
"page": "853-883",
"DOI": "10.1162/
"PMID": "42730454",
"PMCID": "PMC13569333",
"ISSN": "2472-1751",
"publisher": "MIT Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
8,
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.1038/s41467-026-74466-2 [code]
- Neuromorphic hierarchical modular reservoirs.Journal: Nature communicationsIn common: Brain Connectivity Toolbox, Nilearn, statsmodels, 7 other tools, 3 references
- [2] doi:10.1038/s41467-026-75959-w [code]
- Charting higher-order models of brain function beyond pairwise interactions.Journal: Nature communicationsIn common: Nilearn, statsmodels, NiBabel, 6 other tools, 5 references
- [3] doi:10.7554/elife.103097 [code]
- Canonical neurodevelopmental trajectories of structural and functional manifolds.Journal: eLifeIn common: Brain Connectivity Toolbox, Nilearn, Plotly, 6 other tools, 3 references
- [4] doi:10.1016/j.nicl.2026.104012 [code]
- Structural-functional multilayer brain network properties and outcome of combined repetitive transcranial magnetic stimulation and psychotherapy for obsessive-compulsive disorder.Journal: NeuroImage. ClinicalIn common: Brain Connectivity Toolbox, statsmodels, NiBabel, 6 other tools, fMRI, 3 references
- [5] doi:10.1016/j.isci.2026.117180 [code]
- Developmental changes in similarity between neural representations of mental arithmetic and artificial neural networks.Journal: iScienceIn common: PyBIDS, Nilearn, statsmodels, 7 other tools, fMRI, 2 references
- [6] doi:10.1073/pnas.2531706123 [code]
- Metabolism-weighted brain connectome reveals synaptic integration and vulnerability to neurodegeneration.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: Nilearn, Plotly, statsmodels, 7 other tools, 3 references
- [7] doi:10.1038/s41467-026-72931-6 [code]
- Three parsimonious spatiotemporal patterns in cerebellum reveal individual traits in function and behavior.Journal: Nature communicationsIn common: Brain Connectivity Toolbox, Nilearn, statsmodels, 7 other tools, fMRI, cognitive, 1 reference
- [8] doi:10.1038/s41467-026-71151-2 [code]
- Common and distinct neural correlates of social interaction processing and theory of mind in narratives.Journal: Nature communicationsIn common: Brain Connectivity Toolbox, Nilearn, statsmodels, 7 other tools, cognitive, 2 references
- [9] doi:10.1162/imag.a.105 [code]
- Right posterior theta reflects human parahippocampal phase resetting by salient cues during goal-directed navigationJournal: n/aIn common: Nilearn, statsmodels, NiBabel, 5 other tools, fMRI, cognitive, 3 references
- [10] doi:10.1038/s41467-026-74566-z [code]
- Low-dimensional and optimised representations of high-level information in the expert brain.Journal: Nature communicationsIn common: Nilearn, Plotly, statsmodels, 7 other tools, cognitive, 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, 55 scripts, and 18 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:6ab6a9565162f8f6…
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.
