A neural signature of adaptive mentalization.
The 18 matches · 3 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
- [1] § Results › Characterizing adaptive mentalization with the CHASE model ↔ source/BAKR_2024_CHASE_model.m, lines 1–31 · score 0.84 · rock paper scissors, strategic player, best respond, recursive reasoning steps, CHASE model, exploitable
- [2] § Methods › CHASE model ↔ source/BAKR_2024_CHASE_model.m, lines 1–31 · score 0.81 · Strategic players, best responding, recursive reasoning steps, CHASE model, iteratively, rock
- [3] § Methods › Neuroimaging data acquisition and analysis › Univariate analysis ↔ source/BAKR_2024_2L.m, lines 140–212 · score 0.73 · SnPM, cluster forming threshold, SPM, FWE, inference, mask
- [4] § Methods › Alternative models › Self-tuning EWA ↔ source/BAKR_2024_CHASE_LR_update.m, lines 74–151 · score 0.73 · change detector function, foregone payoffs, empirical, tuning, EWA, model
- [5] § Methods › Neuroimaging data acquisition and analysis › Univariate analysis ↔ source/BAKR_2024_create_nuisance_regressors.m, the whole file · a weak match · score 0.69 · global signal, motion parameters, derivatives, confounds, regressors, uniformity
- [6] § Methods › CHASE model › Loss sensitivity and learning differences ↔ source/BAKR_2024_CHASE_model.m, lines 33–144 · score 0.68 · loss aversion, payoff matrix, recursive reasoning, wins
- [7] § Methods › CHASE model › Loss sensitivity and learning differences ↔ source/BAKR_2024_ToMk_model.m, lines 6–117 · score 0.68 · loss aversion, payoff matrix, recursive reasoning, wins
- [8] § Methods › CHASE model › A3: adaptive players ( > 1) try to infer the level of the opponent ↔ source/BAKR_2024_CHASE_model.m, lines 33–144 · score 0.62 · KL divergence, possible opponent, successive belief, BU, prediction
- [9] § Methods › CHASE model › A3: adaptive players ( > 1) try to infer the level of the opponent ↔ source/BAKR_2024_ToMk_model.m, lines 6–117 · score 0.62 · KL divergence, possible opponent, successive belief, BU, prediction
- [10] § Methods › Neuroimaging data acquisition and analysis › Multivariate analysis ↔ source/BAKR_2024_apply_pattern.m, the whole file · a weak match · score 0.58 · correlation coefficients, neural activation, bins, vector, adaptive, BU
- [11] § Methods › Neuroimaging data acquisition and analysis › Functional connectivity analysis › Denoising ↔ source/BAKR_2024_create_nuisance_regressors.m, the whole file · a weak match · score 0.55 · nuisance regressor, derivatives, confounding, signal
- [12] § Methods › Computational models ↔ BAKR_2024_run_model_fitting.m, lines 14–33 · score 0.55 · fictitious play, reinforcement learning, EWA, behavior, models
- [13] § Results › Opponent-level BUs can be decoded from neural activity ↔ BAKR_2024_results_and_figures.m, lines 530–596 · score 0.55 · multivariate activation pattern, social brain, overlaps, univariate, ROIs, decoding
- [14] § Results › Participants track action frequencies to predict nonstrategic play ↔ source/MERLIN_toolbox/mn_compare.m, lines 218–296 · score 0.54 · protected exceedance probability, model comparison, PXP
- [15] § Methods › Alternative models › Experience-weighted attraction (EWA) ↔ source/BAKR_2024_CHASE_LR_update.m, lines 74–151 · score 0.54 · foregone payoffs, forgetting, RL, attraction, EWA, weighted
- [16] § Results › CHASE outperforms existing alternative models ↔ BAKR_2024_run_model_fitting.m, lines 14–33 · score 0.52 · fictitious play, reinforcement learning, CHASE model, EWA, behavior
- [17] § Methods › Neuroimaging data acquisition and analysis › Replication in an independent dataset ↔ BAKR_2024_results_and_figures.m, lines 530–596 · score 0.52 · activation patterns, social brain, Univariate, Multivariate, correlation, decoding
- [18] § Results › Brain regions linked to evaluation and adaptation of mentalization strategies ↔ source/BAKR_2024_2L.m, lines 140–212 · score 0.51 · cluster forming threshold, SPM, FWE, Pos, Neg, mask
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
MATLAB · 380 lines · 16 KB · no license · 4 matches
- function [negLL,states,data] = BAKR_2024_CHASE_model(data,model,curr_params,type)
- %
- % Code to fit the CHASE model (Buergi, Aydogan, Konovalov, & Ruff; under review)
- %
- % In brief, this model captures mentalization in strategic interactions by assuming that:
- % - Non-strategic players (defined as k = 0) have a tendency to repeat their historical action frequencies.
- % - Strategic players try to exploit this tendency by performing a limited number of recursive reasoning steps
- % (k > 0), i.e. iteratively (and noisily) best-responding to that action distribution.
- % - Finally, adaptive players (kappa >= 2) assume that they are facing a strategic player and try to infer
- % their level of recursive reasoning, by integrating evidence for the different levels over time.
- %
- % Inputs
- % - data: struct containing the experimental data (i.e. choices in Rock-Paper-Scissors) of both players
- % . choice_own: vector containing the chosen actions of the subject (from 1:3)
- % . choice_other: vector containing the chosen actions of the opponent (from 1:3)
- % - curr_params: vector containing the model parameters
- % . alpha: speed of updating attractions (i.e. learning rate of a delta rule over chosen actions)
- % . beta: recursive reasoning noise (i.e. softmax inverse decision temperature)
- % . gamma: sensitivity to evidence for the sophistication of the opponent
- % . lambda: loss aversion (or lack thereof)
- % . kappa: depth of mentalization (note: equal to k if kappa < 2)
- % Outputs
- % - negLL: scalar negative log-likelihood of the data, given the model and the parameters
- % - states: struct containing the inferred internal states (for e.g. use in neuroimaging analysis)
- % . SV: subjective value of the chosen action, given the current predictions about the opponent
- % . APE: opponent action prediction error, i.e. level of surprise about the observed opponent action
- % . BU: opponent sophistication belief update, i.e. the Kullback-Leibler divergence between successive
- % beliefs
- %
- % Niklas Buergi, 2024
- %% Initialize
- switch type
- case 'fit'
- % set game defaults, if none provided
- if ~any(isfield(data,{'strat_space','win','loss','tie'}))
- data.win = 1;
- data.loss = -1;
- data.tie = 0;
- data.strat_space = 3;
- end
- % extract variables
- choice_own = data.choice_own;
- choice_other = data.choice_other;
- % nTrials = size(choice_own,1);
- assert(numel(choice_own) > 1 & numel(choice_other) > 1 & numel(data.missing) > 1);
- case 'sim'
- task = data;
- data = struct();
- [data,env] = task.fxn(data,task,'init');
- data.n_trials = numel(data.trial);
- data.missing = zeros(data.n_trials,1);
- [data.score_own,data.score_other,choice_own,choice_other] = deal(NaN(data.n_trials,1));
- end
- nTrials = data.n_trials;
- nActions = data.strat_space(1);
- % name parameters
- params = array2table(curr_params','VariableNames',{model.params.name});
- % ======================== adapt to parameterization ========================= %
- % add loss aversion, if parameter provided
- if any(strcmp(params.Properties.VariableNames,'lambda')) % lossav
- data.loss = data.loss*params.lambda;
- end
- % construct payoff matrices
- [pi_own, pi_other] = comp_paymatrix(data);
- % set exp_max_k
- if strcmp(model.maxK_type,'fitted') % || strcmp(type,'sim')
- exp_max_k = params.kappa;
- else
- exp_max_k = model.exp_max_k; % i.e. if not provided via parameters, take from settings
- end
- % ========================= pre-allocate variables =========================== %
- % main variables
- subj_pred = NaN(nTrials,nActions); % subject's estimated probability of the different possible opponent actions
- subj_resp = NaN(nTrials,nActions); % subject's response probabilities to the estimate above (based on a noisy best-response)
- subj_KL_div = NaN(nTrials,1); % belief update (BU), given by the KL-divergence between successive beliefs
- subj_APE = NaN(nTrials,1); % 1 minus the probability assigned to the action chosen by the opponent (from subj_pred)
- subj_SV = NaN(nTrials,1); % subjective value of choosing the different actions, given one's predictions of the opponent
- % recursive reasoning steps (either from own perspetive ('LK'), or from the perspective of the opponent ('CH-leaky'))
- if exp_max_k < 2 || strcmp(model.architecture,'LK')
- subj_pred_k = deal(NaN(exp_max_k+1,nActions)); % 1st order beliefs (what subjects think the opponent will play)
- subj_resp_k = deal(NaN(exp_max_k+1,nActions)); % subject's response probabilities (BR), in response to their beliefs above
- elseif exp_max_k >= 2 && contains(model.architecture,'CH')
- opp_pred_oppk = NaN(exp_max_k,nActions); % 2nd order beliefs (what subject thinks opponent thinks about them)
- opp_resp_oppk = NaN(exp_max_k,nActions); % opponent's response probabilities, in response to their beliefs above (as perceived by the subject)
- subj_beliefs = ones(1,exp_max_k)/exp_max_k; % priors of the subject about the opponents's current level k, bounded by their own sophistication
- end
- % outputs for figures
- beliefs = NaN(nTrials,3);
- likelihoods = NaN(nTrials,3);
- % initialize attractions
- switch model.learning_rule
- case 'RW-freq'
- [f_mat_own,f_mat_other] = BAKR_2024_CHASE_LR_init(model.learning_rule,nTrials,nActions);
- case {'RW-reward','RW-hybrid'}
- [f_mat_own,f_mat_other] = BAKR_2024_CHASE_LR_init(model.learning_rule,nTrials,nActions,pi_own,pi_other);
- score_own = data.score_own; score_other = data.score_other;
- case 'RW-regret'
- [f_mat_own,f_mat_other,score_pot_own,score_pot_other] = BAKR_2024_CHASE_LR_init(...
- model.learning_rule,nTrials,nActions,...
- pi_own,pi_other,...
- choice_own,choice_other);
- case {'EWA-full','EWA-single'}
- [f_mat_own,f_mat_other,score_pot_own,score_pot_other,N_own,N_other] = BAKR_2024_CHASE_LR_init(...
- model.learning_rule,nTrials,nActions,...
- pi_own,pi_other,...
- choice_own,choice_other);
- end
- % =========================== save initial values ============================ %
- f_mat_own_0 = f_mat_own(1,:);
- f_mat_other_0 = f_mat_other(1,:);
- if exp_max_k >= 2 && contains(model.architecture,'CH')
- subj_beliefs_0 = subj_beliefs;
- end
- if any(strcmp(model.learning_rule,{'EWA-full','EWA-single'}))
- N_own_0 = N_own(1);
- N_other_0 = N_other(1);
- end
- %% Trial loop
- for iTrial = 1:nTrials
- % if any(data.choice_own == 0 | isnan(data.choice_own))
- % error('Missing choices - have to adapt first.');
- % end
- % skip updates if missing trial
- if numel(data.missing) > 1 && data.missing(iTrial)
- f_mat_own(iTrial,:) = f_mat_own(max(1,iTrial-1),:);
- f_mat_other(iTrial,:) = f_mat_other(max(1,iTrial-1),:);
- if any(strcmp(model.learning_rule,{'EWA-full','EWA-single'}))
- N_own(iTrial,:) = N_own(max(1,iTrial-1),:);
- N_other(iTrial,:) = N_other(max(1,iTrial-1),:);
- end
- continue
- end
- % re-set initial values (if fitting across blocks)
- if data.trial(iTrial) == 1 && iTrial > 1
- f_mat_own_old = f_mat_own(iTrial-1,:);
- f_mat_other_old = f_mat_other(iTrial-1,:);
- f_mat_own(iTrial-1,:) = f_mat_own_0; % need to overwrite old ones to ensure correct update below
- f_mat_other(iTrial-1,:) = f_mat_other_0;
- if exp_max_k >= 2 && contains(model.architecture,'CH')
- subj_beliefs = subj_beliefs_0; % will be overwritten at end of trial
- end
- if any(strcmp(model.learning_rule,{'EWA-full','EWA-single'}))
- N_own_old = N_own(iTrial-1);
- N_other_old = N_other(iTrial-1);
- N_own(iTrial-1) = N_own_0;
- N_other(iTrial-1) = N_other_0;
- end
- end
- % strategic reasoning
- if exp_max_k < 2 || strcmp(model.architecture,'LK')
- % ======================================================================
- % Low-level or static reasoning
- % ======================================================================
- for k = 0:exp_max_k
- % ========================= (Re-)active strategies =================== %
- if k == 0 % egocentric strategy (ignoring opponent)
- subj_pred_k(1,:) = ones(1,nActions)/nActions;
- subj_resp_k(1,:) = softmax_fxn(f_mat_own(max(1,iTrial-1),:),params.beta);
- elseif k == 1 % responding to the other's egocentric strategy
- subj_pred_k(2,:) = softmax_fxn(f_mat_other(max(1,iTrial-1),:),params.beta);
- subj_resp_k(2,:) = softmax_fxn((pi_own*subj_pred_k(2,:)')',params.beta);
- elseif k >= 2
- % ===================== LK: Higher-level reasoning =================== %
- % always add two steps of reasoning to last estimate of same type (i.e. odd vs even)
- subj_pred_k(k+1,:) = softmax_fxn((pi_other*subj_resp_k(k+1-2,:)')',params.beta);
- subj_resp_k(k+1,:) = softmax_fxn((pi_own*subj_pred_k(k+1,:)')',params.beta);
- end
- subj_pred(iTrial,:) = subj_pred_k(end,:);
- subj_resp(iTrial,:) = subj_resp_k(end,:);
- end
- elseif exp_max_k >= 2 && contains(model.architecture,'CH')
- % ======================================================================
- % CH: Belief-based strategies
- % ======================================================================
- % subject simulates reasoning process *of the opponent* to:
- % - form and update beliefs about the opponent's level of reasoning
- % - predict the next opponent action, marginalizing over these beliefs
- for k = 2:exp_max_k
- if k == 2 % opponent levels 0 & 1
- opp_pred_oppk(1,:) = ones(1,nActions)/nActions; % i.e. no expectations; used only for computing subject action predictions
- opp_resp_oppk(1,:) = softmax_fxn(f_mat_other(max(1,iTrial-1),:),params.beta); % = exp_p_a_opp(2,:)
- opp_pred_oppk(2,:) = softmax_fxn(f_mat_own(max(1,iTrial-1),:),params.beta); % = exp_p_a_subj(1,:)
- opp_resp_oppk(2,:) = softmax_fxn((pi_other*opp_pred_oppk(2,:)')',params.beta);
- elseif k > 2 % higher levels: add two more steps to last action estimate of same type (i.e. odd vs even)
- opp_pred_oppk(k,:) = softmax_fxn((pi_own*opp_resp_oppk(k-2,:)')',params.beta); % ..compute their opponent's best response to that..
- opp_resp_oppk(k,:) = softmax_fxn((pi_other*opp_pred_oppk(k,:)')',params.beta); % ..and compute their own best response to that
- end
- end
- % ========================= Subject beliefs ========================== %
- % subject's weighted opponent action prediction & response to that
- subj_pred(iTrial,:) = subj_beliefs * opp_resp_oppk;
- subj_resp(iTrial,:) = softmax_fxn(pi_own*subj_pred(iTrial,:)',params.beta);
- end
- % =========================== Action simulation ========================== %
- if strcmp(type,'sim')
- % subject
- choice_own(iTrial) = find(mnrnd(1,subj_resp(iTrial,:)));
- data.choice_own(iTrial) = choice_own(iTrial);
- % bot
- [data,env] = task.fxn(data,task,'update',env,iTrial); % need only: choice_other(iTrial)
- choice_other(iTrial,1) = data.choice_other(iTrial);
- score_own(iTrial,1) = data.score_own(iTrial);
- score_other(iTrial,1) = data.score_other(iTrial);
- end
- % ========================= Subject beliefs ========================== %
- if exp_max_k >= 2 && contains(model.architecture,'CH')
- % belief update
- prior = subj_beliefs;
- likelihood = softmax_fxn(opp_resp_oppk(:,choice_other(iTrial)),params.gamma);
- posterior = (likelihood .* prior') ./ sum(likelihood .* prior');
- subj_KL_div(iTrial) = nansum(posterior .* log(posterior ./ prior'));
- % save
- beliefs(iTrial,1:exp_max_k) = subj_beliefs;
- likelihoods(iTrial,1:exp_max_k) = likelihood;
- % replace with new belief
- subj_beliefs = posterior';
- end
- % compute internal states
- subj_APE(iTrial) = 1 - subj_pred(iTrial,choice_other(iTrial));
- subj_SV(iTrial) = pi_own(choice_own(iTrial),:) * subj_pred(iTrial,:)';
- % ==========================================================================
- % Level-0 update
- % ==========================================================================
- % L0 representation
- switch model.learning_rule
- case 'RW-freq'
- [f_mat_own,f_mat_other] = BAKR_2024_CHASE_LR_update(model.learning_rule,iTrial,f_mat_own,f_mat_other,...
- choice_own,choice_other,params);
- case {'RW-reward','RW-hybrid'}
- [f_mat_own,f_mat_other] = BAKR_2024_CHASE_LR_update(model.learning_rule,iTrial,f_mat_own,f_mat_other,...
- choice_own,choice_other,params,...
- score_own,score_other);
- case 'RW-regret'
- [f_mat_own,f_mat_other] = BAKR_2024_CHASE_LR_update(model.learning_rule,iTrial,f_mat_own,f_mat_other,...
- choice_own,choice_other,params,...
- score_pot_own,score_pot_other);
- case {'EWA-full','EWA-single'}
- [f_mat_own,f_mat_other,N_own,N_other] = BAKR_2024_CHASE_LR_update(model.learning_rule,iTrial,f_mat_own,f_mat_other,...
- choice_own,choice_other,params,...
- score_pot_own,score_pot_other,N_own,N_other);
- end
- % put overwritten values back (if fitting across blocks) <- cannot do earlier because this is used for update above
- if data.trial(iTrial) == 1 && iTrial > 1
- f_mat_own(iTrial-1,:) = f_mat_own_old;
- f_mat_other(iTrial-1,:) = f_mat_other_old;
- if any(strcmp(model.learning_rule,{'EWA-full','EWA-single'}))
- N_own(iTrial-1) = N_own_old;
- N_other(iTrial-1) = N_other_old;
- end
- end
- end
- %% Post-processing
- % internal states
- states.subj_SV = subj_SV;
- states.subj_APE = subj_APE;
- states.subj_KL_div = subj_KL_div;
- % states for figures
- % states.f_mat_own = f_mat_own;
- % states.likelihoods = likelihoods;
- states.beliefs = beliefs;
- switch type
- case 'fit'
- lik = NaN(nTrials,1);
- lik(~data.missing) = subj_resp(sub2ind([nTrials,nActions],find(~data.missing),choice_own(~data.missing))); % chosen action
- states.lik = lik;
- % states.p_a = subj_resp;
- negLL = -sum(log(lik(~data.missing)));
- case 'sim'
- states.beliefs = beliefs;
- states.level_k = env.level_k;
- % states.score_own = score_own;
- states.score = NaN(nTrials,1);
- for i_block = 1:task.n_blocks
- idx = (task.n_trials*(i_block-1))+1:(task.n_trials*(i_block));
- states.score(idx) = cumsum(score_own(idx));
- end
- % states.gamma = curr_gamma(1:nTrials);
- data.choice_own = choice_own;
- data.choice_other = choice_other;
- data.score_own = score_own;
- data.score_other = score_other;
- data.n_blocks = 1;
- data.bot_level = task.bot.levels;
- negLL = NaN;
- end
- end
- function p_actions = softmax_fxn(inputs,beta)
- p_actions = exp(beta*inputs)/(sum(exp(beta*inputs)));
- end
BAKR_2024_CHASE_model.m at commit 95c6522, no license · at the source
Overview
- Zurich Center for Neuroeconomics, Department of Economics, University of Zurich, Zurich, Switzerland
- Max Planck Institute for Biological Cybernetics, Tübingen, Germany
- University Research Priority Program ‘Adaptive Brain Circuits in Development and Learning’ (URPP AdaBD), University of Zurich, Zurich, Switzerland
- School of Psychology, Centre for Human Brain Health, University of Birmingham, Birmingham, UK
- Faculty of Medicine, University of Zurich, Zurich, Switzerland
Abstract
Mentalization, inferring others’ emotions and intentions, is crucial for human social interactions and is impaired in various brain disorders. While previous neuroscience research has focused on static mentalization strategies, we know little about how the brain adaptively selects which strategies to use at any given moment. Here we investigate this core aspect of mentalization with computational modeling and functional magnetic resonance imaging (fMRI) during interactive strategic games. We find that most participants can adapt their strategies to the changing sophistication of their opponents, though there are considerable individual differences. Model-based fMRI analyses identify a distributed brain network in which activity and connectivity track this mentalization-belief adaptation. The extent to which people update their beliefs about others’ sophistication can be predicted out of sample from neural activity, providing a neural signature of adaptive mentalization. Our model elucidates the neural basis of mentalization ability and provides a method for assessing these capabilities in healthy and clinical populations.
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.
ruffgroup/neural_signature_of_mentalization
95c6522696ed3129c05e8932ce4f257ffd28ccc8, 13 November 2025Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
52 files
- BAKR_2024_results_and_fi
gures.m , MATLAB, 1,376 lines, 2 matches - BAKR_2024_run_fmri_analy
ses.m , MATLAB, 176 lines - BAKR_2024_run_model_fitt
ing.m , MATLAB, 185 lines, 2 matches - source/
BAKR_2024_1L_con.m , MATLAB, 131 lines - source/
BAKR_2024_1L_model.m , MATLAB, 441 lines - source/
BAKR_2024_2L.m , MATLAB, 225 lines, 2 matches - source/
BAKR_2024_CHASE_LR_init. , MATLAB, 38 linesm - source/
BAKR_2024_CHASE_LR_updat , MATLAB, 151 lines, 2 matchese.m - source/
BAKR_2024_CHASE_config.m , MATLAB, 120 lines - source/
BAKR_2024_CHASE_model.m , MATLAB, 380 lines, 4 matches - source/
BAKR_2024_Fig_3_clusters , Python, 101 lines_main.py - source/
BAKR_2024_Fig_4_voxel_ov , Python, 26 lineserlap.py - source/
BAKR_2024_Fig_5_clusters , Python, 97 lines_replication.py - source/
BAKR_2024_ToMk_config.m , MATLAB, 41 lines - source/
BAKR_2024_ToMk_model.m , MATLAB, 357 lines, 2 matches - source/
BAKR_2024_apply_pattern. , MATLAB, 53 lines, 1 matchm - source/
BAKR_2024_conn_batch.m , MATLAB, 158 lines - source/
BAKR_2024_create_nuisanc , MATLAB, 53 lines, 2 matchese_regressors.m - source/
BAKR_2024_decode_BU.m , MATLAB, 484 lines - source/
BAKR_2024_decode_levels. , MATLAB, 183 linesm - source/
BAKR_2024_model_recovery , MATLAB, 42 lines_plot.m - source/
BAKR_2024_plotActivation , MATLAB, 130 liness.m - source/
BAKR_2024_plotSlopes.m , MATLAB, 352 lines - source/
BAKR_2024_plotWeights.m , MATLAB, 82 lines - source/
BAKR_2024_plot_neural_ef , MATLAB, 223 linesfect_sizes.m - source/
BAKR_2024_posterior_pred , MATLAB, 343 linesictive_check.m - source/
BAKR_2024_simulate_data. , MATLAB, 42 linesm - source/
MERLIN_toolbox/ , MATLAB, 40 linesmn_RPS_config.m - source/
MERLIN_toolbox/ , MATLAB, 219 linesmn_RPS_task.m - source/
MERLIN_toolbox/ , MATLAB, 371 lines, 1 matchmn_compare.m - source/
MERLIN_toolbox/ , MATLAB, 33 linesmn_createOutputTable.m - source/
MERLIN_toolbox/ , MATLAB, 59 linesmn_createParamTable.m - source/
MERLIN_toolbox/ , MATLAB, 88 linesmn_fit.m - source/
MERLIN_toolbox/ , MATLAB, 241 linesmn_fitModel.m - source/
MERLIN_toolbox/ , MATLAB, 34 linesmn_fit_config.m - source/
MERLIN_toolbox/ , MATLAB, 8 linesmn_getGridMat.m - source/
MERLIN_toolbox/ , MATLAB, 22 linesmn_idx2mat.m - source/
MERLIN_toolbox/ , MATLAB, 51 linesmn_printProgress.m - source/
MERLIN_toolbox/ , MATLAB, 108 linesmn_reevaluate.m - source/
MERLIN_toolbox/ , MATLAB, 9 linesmn_sampleUniform.m - source/
MERLIN_toolbox/ , MATLAB, 5 linesmn_sem.m - source/
MERLIN_toolbox/ , MATLAB, 90 linesmn_sim.m - source/
MERLIN_toolbox/ , MATLAB, 6 linesmn_sim_config.m - source/
MERLIN_toolbox/ , MATLAB, 105 linesmn_sinaplot.m - source/
MERLIN_toolbox/ , MATLAB, 59 linesmn_struct2table.m - source/
MERLIN_toolbox/ , MATLAB, 140 linesmn_subjectLoop.m - source/
MERLIN_toolbox/ , MATLAB, 106 linesmn_table2struct.m - source/
binarize_nii.m , MATLAB, 28 lines - source/
comp_paymatrix.m , MATLAB, 55 lines - source/
get_matlab_colors.m , MATLAB, 17 lines - source/
stdshade.m , MATLAB, 61 lines - README.md, Text, 41 lines
Code availability
The analysis code to produce all main results and figures can be accessed at: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
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;
- 51 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 Availability Statement
All behavioral data can be accessed at: https://
The analysis code to produce all main results and figures can be accessed 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, 30 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 4 authors, 5 keywords, 10 MeSH terms, 2 funders, 44 references.
Cite
This paper
Buergi, N., Aydogan, G., Konovalov, A., & Ruff, C. C. (2026). A neural signature of adaptive mentalization. Nature neuroscience, 29(4), 934-944. https://
BibTeX
@article{buergi2026neura
author = {Buergi, Niklas and Aydogan, Gökhan and Konovalov, Arkady and Ruff, Christian C},
title = {{A neural signature of adaptive mentalization}},
journal = {Nature neuroscience},
year = {2026},
month = mar,
volume = {29},
number = {4},
pages = {934--944},
publisher = {Nature Portfolio},
issn = {1097-6256},
doi = {10.1038/
url = {https://
pmid = {41803318},
pmcid = {PMC13061600}
}
RIS
TY - JOUR
AU - Buergi, Niklas
AU - Aydogan, Gökhan
AU - Konovalov, Arkady
AU - Ruff, Christian C
TI - A neural signature of adaptive mentalization
T2 - Nature neuroscience
J2 - Nat Neurosci
PY - 2026
DA - 2026/
VL - 29
IS - 4
SP - 934
EP - 944
SN - 1097-6256
PB - Nature Portfolio
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "A neural signature of adaptive mentalization",
"container-title": "Nature neuroscience",
"author": [
{
"family": "Buergi",
"given": "Niklas"
},
{
"family": "Aydogan",
"given": "Gökhan"
},
{
"family": "Konovalov",
"given": "Arkady"
},
{
"family": "Ruff",
"given": "Christian C"
}
],
"container-title-short":
"volume": "29",
"issue": "4",
"page": "934-944",
"DOI": "10.1038/
"PMID": "41803318",
"PMCID": "PMC13061600",
"ISSN": "1097-6256",
"publisher": "Nature Portfolio",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
9
]
]
}
}
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-73945-w [code]
- Brain neuromarkers predict self- and other-related mentalizing across adult, clinical, and developmental samples.Journal: Nature communicationsIn common: SPM, Statistics and Machine Learning Toolbox, 7 references
- [2] 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: Optimization Toolbox, SPM, Image Processing Toolbox, 1 other tool, cognitive, 4 references
- [3] doi:10.1038/s41467-026-74565-0 [code]
- The functional neurobiology of dispositions towards negative emotions.Journal: Nature communicationsIn common: Optimization Toolbox, SPM, Image Processing Toolbox, 1 other tool, cognitive, 2 references
- [4] doi:10.3389/fncir.2026.1741762 [code]
- Task-dependent increases and decreases of BOLD signal in theory of mind brain regions during strategic social interaction.Journal: Frontiers in neural circuitsIn common: SPM, Statistics and Machine Learning Toolbox, fMRI, cognitive, 3 references
- [5] doi:10.1016/j.bbih.2026.101299 [code]
- Multimodal approach to identify neuropsychophysiological
subgroups in myalgic encephalomyelitis/ chronic fatigue syndrome and their relevance for rehabilitation: protocol for a mechanistic cross-sectional and longitudinal study. Journal: Brain, behavior, & immunity - healthIn common: Optimization Toolbox, SPM, Image Processing Toolbox, 1 other tool, 2 references - [6] doi:10.1038/s41597-026-07323-y [code]
- A densely sampled fMRI dataset for investigating food valuation.Journal: Scientific dataIn common: SPM, Statistics and Machine Learning Toolbox, fMRI, 4 references
- [7] doi:10.1007/s00429-026-03111-x [code]
- Direction selectivity in naturalistic action observation: distributed representations across the action observation network.Journal: Brain structure & functionIn common: SPM, Image Processing Toolbox, Statistics and Machine Learning Toolbox, 3 references
- [8] doi:10.1016/j.celrep.2026.117454 [code]
- Model-based and model-free valuation signals in the human brain vary markedly in relation to individual differences in behavioral control.Journal: Cell reportsIn common: SPM, Statistics and Machine Learning Toolbox, cognitive, 4 references
- [9] doi:10.1371/journal.pbio.3003675 [code]
- Dynamic expectation strength and precision shape human pain perception through shared and dissociable α-oscillatory mechanisms.Journal: PLoS biologyIn common: Optimization Toolbox, SPM, Statistics and Machine Learning Toolbox, 2 references
- [10] doi:10.1002/hbm.70602 [code]
- Neuroimaging Correlates of Post-Stroke Pain After Ischemic Stroke: Secondary Analysis of the INSPiRE-TMS Trial.Journal: Human brain mappingIn common: Optimization Toolbox, SPM, Image Processing Toolbox, 1 other tool, 1 reference
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, 51 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:0683e36860206224…
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.
