___________________________________________________________________________________________________________________ CERTAINTY EQUIVALENT (CE) PROCEDURE ___________________________________________________________________________________________________________________ Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC Date: 05-16-2014 last updated: 02-10-2025 by K. Borchert (katjab@millisecond.com) for Millisecond Software, LLC Script Copyright © 02-10-2025 Millisecond Software Millisecond Software thanks Dr. Jakub Traczyk and Kamil Fulawka for collaborating on this script! ___________________________________________________________________________________________________________________ clearScreen INFO ___________________________________________________________________________________________________________________ This script runs the Certainty Equivalent (CE) Procedure to estimate CE Points described by: Paulus, M. P., & Frank, L. R. (2006). Anterior cingulate activity modulates nonlinear decision weight function of uncertain prospects. NeuroImage,30, 668-677. ___________________________________________________________________________________________________________________ TASK DESCRIPTION ___________________________________________________________________________________________________________________ Participants work on 7 (default) probability prospects similarly to "would you rather have a 1/10 chance to win $1000 or get $333 for sure?" to determine the participants' CE points. The CE point for a given prospect is the sure pay-off at which a person has no preference for either option (~ indifference point). ___________________________________________________________________________________________________________________ DURATION ___________________________________________________________________________________________________________________ the default set-up of the script takes appr. 5 minutes to complete ___________________________________________________________________________________________________________________ DATA OUTPUT DICTIONARY ___________________________________________________________________________________________________________________ The fields in the data files are: (1) Raw data file: 'certaintyequivalentprocedure_raw*.iqdat' (a separate file for each participant) build: The specific Inquisit version used (the 'build') that was run computer.platform: the platform the script was run on (win/mac/ios/android) date, time: date and time script was run subject, group: with the current subject/groupnumber session: with the current session id blockCode, blockNum: the name and number of the current block (built-in Inquisit variable) trialCode, trialNum: the name and number of the currently recorded trial (built-in Inquisit variable) Note: trialNum is a built-in Inquisit variable; it counts all trials run; even those that do not store data to the data file such as feedback trials. Thus, trialNum may not reflect the number of main trials run per block. iterationPerProspect: number of iterations (using smaller and smaller ranges of values) used to pinpoint CE for the current prospect Note: set individually for each prospect via list.iterations_perprospect selectProspect: contains the itemnumber of the current prospect (0-6) Note: the numbering refers to the list position of that prospect in list.winprobabilities/list.potentialwins. By default, the prospects are selected in sequence gamblingP: contains the current gambling probability p chanceDescription: contains the description of the gambling probability p used in the target question (example: p = 0.1 => chance description: 1 in 10) winProspect: contains the max dollar amount that could be won by gambling currentBottom: contains the current bottom value of the range tested for the current CE currentTop: contains the current upper value of the range tested for the current CE NOTE: current_top & current_bottom are updated at the end of trial.surebet_middlethird currentLowerThird: contains the values at the lower third of the tested range (offered as sure win in trial.surebet_lowerthird) currentMiddleThird: contains the values at the middle third of the tested range (offered as sure win in trial.surebet_middlethird) currentGuaranteedwin: contains the current guaranteed win (the sure amount currently offered) stimulusItem: the presented stimuli in order of trial presentation response: the participant's response (SCANCODE of response buttons) 2 => number 1 was pressed 3 => number 2 was pressed correct: accuracy of response: 1 = correct response; 0 = otherwise latency: the response latency (in ms); measured from: onset of question lowResponse: stores the response (1 or 2) that participant makes when offered values.current_lowerthird middleResponse: stores the response (1 or 2) that participant makes when offered values.current_middlethird nextBottom: contains the next determined bottom value nextTop: contains the next determined top value ce: calculates the Certainty Equivalent (CE) of the current prospect based on the last (aka next) estimated range Notes: amount makes sense only at the end of a cycle (->trial.estimate_CE) ev: calculates the expected value of the current gambling prospect (2) Summary data file: 'CertaintyEquivalentProcedure_summary*.iqdat' (a separate file for each participant) inquisit.version: Inquisit version run computer.platform: the platform the script was run on (win/mac/ios/android) startDate: date script was run startTime: time script was started subjectId: assigned subject id number groupId: assigned group id number sessionId: assigned session id number elapsedTime: time it took to run script (in ms); measured from onset to offset of script completed: 0 = script was not completed (prematurely aborted); 1 = script was completed (all conditions run) scriptAborted: 0 (false)= script is not prematurely aborted 1 (true)= script is prematurely aborted after participant needed to repeat a trial sequence too often (values.repeat > parameters.maxnr_repeats) iterationPerProspect: number of iterations (using smaller and smaller ranges of values) used to pinpoint CE for the current prospect Note: set individually for each prospect via list.iterations_perprospect for each of the prospects separately (explained for prospect1): p1: stores the winprobability of prospect1 (numbering is based on the prospect's index in list.winprobabilities and NOT whether it was the first prospect to be presented as the order can be set to be random) winProspect1: stores the pote of potential winning amount of prospect1 (numbering is based on the prospect's index in list.potentialwins and NOT whether it was the first prospectto be presented as the order can be set to be random) ev1: stores Expected Value for Prospect 1 ce1: stores the CE values for Prospect 1 => Index refers to position of prospect in list.winprobabilities/list.potentialwins (and not to its actual presentation as that could be randomized) Note: if more than 7 prospects are tested => add corresponding values (/CE7 = 0) under VALUES => add corresponding expressions (e.g. /p7 = ....) under EXPRESSIONS => update list.selectprospects => update trial.estimate_CE => update summary data file (same for remaining Prospects) ___________________________________________________________________________________________________________________ EXPERIMENTAL SET-UP ___________________________________________________________________________________________________________________ By default, 7 prospects are tested (to add/delete prospects, go to EDITABLE CODE -> Editable Lists and follow instructions) with 4 iterations (default; Editable Value) and 2 trials per iteration. => Trial1 (trial.surebet_lowerthird) uses the lower third of the current range as the sure bet => Trial2 (trial.surebet_middlethird) uses the middle third of the current range as the sure bet Depending on the response pattern, the range is narrowed down to the lower third, middle third, or upper third of the last tested range. See more info regarding the algorithm used below. After participant selects her choice, the choice is highlighted for parameters.feedbackduration (default: 1s) and a posttrialpause of parameters.iti (default: 1s) is added before the next trial is started. At the end of each prospect, trial.estimate_CE estimates the CE for the current prospect as the the midpoint of the last determined range. CE- Estimation Algorithm (Paulus & Frank, 2006): The CE estimation procedure is to iterate through several sequences of dividing a range of possible numbers (e.g. 0-1000) into thirds (0-333, 333-666, 666-1000) to find the particular third that contains the CE and then use that narrowed down range as the next possible range of numbers for the next iteration (e.g. 0-333). For each iteration, there are always two trials: 1) the first trial that uses the lower third of the range as the sure bet (here: $333) 2) the second trial that uses the middle third of the range as the sure bet (here: $666) Depending on the combination of answers to the first sure bet question ($333) and the second sure bet question ($666), the range of the CE is adjusted (aka narrowed down). 4 possible combinations of responses: 1) Participant prefers sure bet #1 ($333) AND sure bet #2 ($666) => the CE likely lies somewhere between 0-333 (new range) 2) Participant prefers gamble over sure bet #1 BUT prefers the sure bet for #2 ($666) => the CE likely lies somewhere between 333-666 (new range) 3) Participant prefers gamble over sure bet #1 AND prefers gamble over sure bet #2 => the CE likely lies somewhere between 666-1000 (new range) 4) Participant prefers sure bet #1 BUT prefers the gamble over sure bet #2: this response pattern suggests that participant may not have understood the question or didn't read the question carefully (as it doesn't make 'sense' to accept the lower sure bet but prefer the gamble for the higher one). Paulus & Frank (2006) do not explicitly describe how their algorithm handles this response pattern. As suggested by Dr. Traczyk and Kamil Fulawka, participants are provided a certain number of repetitions of this iteration (editable parameter) to allow for self-correction. However, if participants still produce this 'irrational' response pattern after a certain number of repetitions, the entire task should be aborted as the data of these participants cannot be trusted. Once a certain number of successful iterations -narrowing the range of values each time- have been run, the CE is simply calculated as the midpoint of the last determined range. NOTE: The number of iterations can vary between prospects in this script and are set for each prospect separately under EDITABLE CODE -> Editable Lists -> list.iterations_perprospect. This is a deviation from the original algorithm by Paulus & Frank (2006) (they suggest 4 iterations per prospect). This change allows experimenters to select an appropriate number of iterations for each prospect to ensure that estimated CE points can lie above or below the EV for the currently tested prospect. ___________________________________________________________________________________________________________________ STIMULI ___________________________________________________________________________________________________________________ Default prospects are taken from Paulus & Frank (2006) ___________________________________________________________________________________________________________________ INSTRUCTIONS ___________________________________________________________________________________________________________________ Instructions used are the originals from Paulus & Frank (2006) with some minor edits. Instructions can be easily edited under section EDITABLE INSTRUCTIONS ___________________________________________________________________________________________________________________ EDITABLE CODE ___________________________________________________________________________________________________________________ check below for (relatively) easily editable parameters, stimuli, instructions etc. Keep in mind that you can use this script as a template and therefore always "mess" with the entire code to further customize your experiment. The parameters you can change are: /responseKeyGamble: the gamble response key (default: '1'); left response key /responseKeySurewin: the sure win response key (default: '2'); right response key /feedbackDuration: duration of the feedback presentation (default: 2000ms) /iti: duration of the inter trial interval between trials (after trial.surebet_lowerthird/trial.surebet_middlethird) (default: 1000ms) /maxnrRepeats: max number of consecutive repetitions of a trial sequence before the entire task is aborted Repetitions of trials are run if participant gives contradictory/irrational responses to trial.surebet_lowerthird (= accepting sure amount) and trial.surebet_middlethird (= prefering gamble). In such a case participant is given 1 (default) more try. If the same irrational response pattern is given the entire task is aborted.