___________________________________________________________________________________________________________________ EXPERIENTIAL DISCOUNTING TASK (EDT) ___________________________________________________________________________________________________________________ Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC Date: 05-06-2013 last updated: 01-18-2023 by K. Borchert (katjab@millisecond.com) for Millisecond Software, LLC Script Copyright © 01-18-2023 Millisecond Software ___________________________________________________________________________________________________________________ BACKGROUND INFO ___________________________________________________________________________________________________________________ This script implements the Experiential Discounting Task, a type of Delay Discounting task that assesses the degree to which the subjective value of a commodity decreases as a function of a delay. In contrast to more traditional Delay Discounting Tasks, the Experientiel Discounting Task provides participants with actual experiences of delays as consequences of their choices. The implemented procedure is based on: Reynolds, B. & Schiffbauer, R. (2004). Measuring state changes in human delay discounting: an experiential discounting task. Behavioural Processes, 67, 343–356. and: Smits,R.R, Stein,J.S., Johnson, P.S., Odum, A.L., & Madden, G.J. (2013). Test–Retest Reliability and Construct Validity of the Experiential Discounting Task. Experimental and Clinical Psychopharmacology, 21, 155–163. Millisecond Software thanks Dr. Fillmore and Nicholas Van Dyke for collaborating on this script. Millisecond Software further thanks Dr. Madden for answering procedural questions pertaining to the EDT. ___________________________________________________________________________________________________________________ TASK DESCRIPTION ___________________________________________________________________________________________________________________ The goal of the game is to win as much money as one can. In order to win money, participants choose between 2 options: the Standard option (on the right) and the Adjust option (on the left). When choosing the Standard option participants can win a fixed amount of money (higher than with the adjust option) but it is more uncertain whether they will win it (probabilistic reward, default probability p = 0.35) and they may have to wait to find out whether or not they won (4 different delay periods). With the Adjust option, participants can immediately add the advertised amount of money to their winnings. Choosing the Standard option will increase the amount that can be won with the Adjust option for the next round (up to a point); choosing the Adjust option will decrease the amount that can be won with the Adjust option for the next round. After choosing the same option consecutively for 4 (default) times in a row, participants will be forced to choose the opposite option. Forced trials in this script do not influence the amount that can be won with the adjust options. The game is over if either an Indifference Point for the two options can be determined or a predetermined time period has passed. ___________________________________________________________________________________________________________________ DURATION ___________________________________________________________________________________________________________________ the default set-up of the script takes appr. 30 minutes to complete ___________________________________________________________________________________________________________________ DATA FILE INFORMATION ___________________________________________________________________________________________________________________ The default data stored in the data files are: (1) Raw data file: 'experientialdiscountingtask_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) delay: contains the current delay duration for finding out whether standard option wins or loses countstart: counts the number of rounds started per block count_standard: counts the number of standard options chosen (choice selections only) count_adjust: counts the number of adjust options chosen (choice selections only) countchoice: counts the choice trials (excluding force trials) in a block forced: 1 = forced option trial; 0 = choice trial responseCategory: participant's response (selection) selection_rt: response latency (in ms) of selection trial (either choice or forced: how long did it take to make selection?) lateny: latency (in ms) of the currently recorded trial NOTE: by default only trial.intertrialinterval/trial.interblockinterval record data to raw data file (therefore latency is 0) If other trials should record data, go to section TRIALS and set /recorddata = true in the trials of interest standardamount: the default standard amount (default: $0.30) current_adjustamount: contains the adjustamount that could be won for the current trial sequence percentchange_adjust: the factor with with parameters.startadjustamount gets multiplied to calculate values.change reversal: 0 = the trial is a forced reversal (no adjustments are made to values.percentchange_adjust) 1 = the selected option should reverse previous adjustments (e.g. if standard is chosen after adjust) 2 = the selected option does not need to reverse any previous adjustments win: 1 = promised amount is won; 0 = promised amount is not won totalamount: contains the total amount won per block remaininggameduration: the remaining time for the block (updated in trial.delayinterval_standard) ipeval: calculates the sum of the last 6 choices (1 = standard; 2 = adjust) the last six choices are stored in list.iplist on index positions 1 (last added) to 6. If the last 6 choices add up to 9 => an equal number of 1 (standard) and 2 (adjust) choices have been made and therefore the IP can be determined. IP_found: 0 = Indifference Point (IP) has not been established for this block; 1 = IP has been established ip: indifference point; once IPeval == 9 is found (equal number of standard and adjust choices) this expression calculates IP = the (rounded) mean of the last 6 adjustamounts. (2) Summary data file: 'experientialdiscountingtask_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) delayA- delayD: delays for block A-D ip_delayA- ip_delayD: contains the IP point for delay A-D (if established) totalamountA - totalamountD: contains the total amount won in block A, B, C, D winamount: the total amount won ___________________________________________________________________________________________________________________ EXPERIMENTAL SET-UP ___________________________________________________________________________________________________________________ * 2 choices: standard vs. adjust (NO choice is given if the same option was chosen 4 times in a row => forced choice) * 4 delay periods: 0, 7s, 14s, 28s (Smits et al, 2013; editable parameters); tested in blocked format * The 4 delay periods are run in sequence of ascending delays (Smits et al, 2013) -> more info under section EXPERIMENT * win probability: p = 0.35, fixed (can be edited under EDITABLE CODE -> Editable Lists) * Standard Option: set win amount of $0.30 (does not change) * Adjust Option: start win amount of $0.15; can increase (up to 24 cents) or decrease (down to 6cents) depending on selected option (1) 'Adjust Win Amount' Adjustment Rules: Selecting the Standard Choice will increase the Adjust Win Amount, selecting the Adjust Choice will decrease the Adjust Win Amount * The INITIAL change amount to increase or decrease is calculated as follows: change = round(0.15*original Adjust Amount) = round(0.15*0.15) = round(0.0225) = 0.02 * If the same choice is made consecutively, 0.15 is reduced consecutively by 0.02 until it reaches 0.03, after that it changes to 0.02 and stays there => Example: Participant chooses Standard Option 4 times in a row 1. change = round(0.15*0.15) = 0.02 (Adjust Amount = 0.15 + 0.02 = 0.17; after choosing Standard option, participant could now add 17 cents to winnings when choosing Adjust option next) 2. change = round(0.13*0.15) = 0.02 (Adjust Amount = 0.17 + 0.02 = 0.19) 3. change = round (0.11*0.15) = 0.02 (Adjust Amount = 0.19 + 0.02 = 0.21) 4. change = round (0.09*0.15) = 0.01 (Adjust Amount = 0.21 + 0.01 = 0.22) (forced) 5. change = round (0.07*0.15) = 0.01 (Adjust Amount = 0.22 + 0.01 = 0.23) 6. change = round (0.05*0.15) = 0.01 (Adjust Amount = 0.23 + 0.01 = 0.24) 7. change = round (0.03*0.15) = 0.00 (Adjust Amount = 0.24 + 0.00 = 0.24) 8. change = round (0.02*0.15) = 0.00 (Adjust Amount = 0.24 + 0.00 = 0.24) (forced) * Choosing the opposite option will undo the previous adjustments in the reversed order* Example: if participant were now to choose the Adjust Option for 8 times in a row the Adjust Amount would change 1. 0.24 - 0.00 = 0.24 2. 0.24 - 0.00 = 0.24 3. 0.24 - 0.01 = 0.23 4. 0.23 - 0.01 = 0.22 (forced standard) 5. 0.22 - 0.01 = 0.21 6. 0.21 - 0.02 = 0.19 7. 0.19 - 0.02 = 0.17 8. 0.17 - 0.02 = 0.15 => back to start conditions *Note: this script offers the option to set via parameters.reversaloption whether to a) reverse in the exact same order (that is if participant has reached parameters.min_adjustvalue (0.02)- and continues with same choice the reversal would take into account how many times participant was at 0.02) Example: 0.15, 0.13, 0.11, 0.09, 0.07, 0.05, 0.03, 0.02, 0.02, 0.02 Reversal: 0.02, 0.02, 0.02, 0.03, 0.05, 0.07, 0.09, 0.11, 0.13, 0.15 b) reverse in the same order but start reversing immediately after participant reaches values.minadjustvalue (0.02) (reversal starts with 0.03 regardless how many times participants had chosen a particular button with with values.adjustamount = 0.02) Example: 0.15, 0.13, 0.11, 0.09, 0.07, 0.05, 0.03, 0.02, 0.02, 0.02 Reversal: 0.03, 0.05, 0.07, 0.09, 0.11, 0.13, 0.15 (2) Indifference Point After 16 mandatory choice trials (default), the program checks whether the Indifference Point can be determined. The Indifference Point can be determined if participant chose the same number of Adjust and Standard options for the last 6 choice trials. If this condition is met, the Indifference Point = average of the last 6 adjust amounts. If this condition is not met, the block continues and the program checks after each new choice trial if the Indifference condition is met at this point (or if predetermined time for block has expired, see (3)). (3) Duration of Game/Block * at least 16 (default) choice trials per game/block * Game/block quits if a) the participant chose the same number of Standard options as Adjust options during the last 6 rounds => Indifference Point can be established (see above) b) the predetermined time for the game/block is up. Determination of Predetermined Time: * The predetermined time of a block = 20 (standard option trials) * values.delay => each block allows the selection of 20 choice standard option trials (!!!Note: for values.delay = 0; the predetermined time of a block = 20 and not 0 to allow for the selection of 20 choice standard option trials) * The game duration decreases by values.delay in trial.delayinterval_standard for choice standard option trials only * if the game ends before predetermined time is up (because IP has been found) the remaining time is added to an interblock trial (trial.interblockinterval) Note: in the unlikely even that participant chooses only Adjust option, an endless loop is created. For this particular reason, the script has a built-in time to quit after 2h (editable parameter) ___________________________________________________________________________________________________________________ STIMULI ___________________________________________________________________________________________________________________ provided by Millisecond Software - can be edited under section Editable Stimuli ___________________________________________________________________________________________________________________ INSTRUCTIONS ___________________________________________________________________________________________________________________ Instructions are not original to the task. They are provided by Millisecond Software as htm/html pages and can be edited by changing the provided htm/html files. To edit htm/html-files: open the respective documents in simple Text Editors such as TextEdit (Mac) or Notepad (Windows). Original instructions from Reynolds & Schiffbauer (2004) are provided under section Editable Instructions for comparisons. ___________________________________________________________________________________________________________________ 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: /standardamount: the default standard amount (default: $0.30) /startadjustamount: the default starting adjust amount (default: $0.15) /max_adjustvalue: maximum/start adjusting proportion (default: 0.15) /min_adjustvalue: minimum adjusting proportion (default: 0.02) /adjustvalue: the default adjust value increase/decrease (default: 0.02) /min_choicetrials: the minimum number of choice trials (default: 16) Note: needs to be >=6 /maxsameoption: the max number of consecutive trials of the same option before a forced trial is initiated (default: 4) /nr_practicerounds: number of practice rounds run, regardless of choice or forced rounds (default: 16) Delay Options: in ms /delay_practice: delay used in practice session (default: 7000ms = 7s) /delayA- /delayD: delays for block A-D (in ms) /durationadjustmentfactor: the number of standard option trials used (default: 20) to calculate the max. blockduration = values.delay * parameters.durationadjustmentfactor (-> the time allows 20 standard option trial sequences) /intertrialinterval: sets the intertrialinterval duration (default: 0) /reversaloption: 1 = reversal of parameters.adjustvalue follows exactly the previous pattern even if participant was operating at parameters.min_adjustvalue for a while (e.g. 0.15, 0.13, 0.11, 0.09, 0.07, 0.05, 0.03, 0.02, 0.02, 0.02 -> reversal: 0.02, 0.02, 0.02, 0.03, 0.05, 0.07, 0.09, 0.11, 0.13, 0.15) (default) 2 = reversal of parameters.adjustvalue follows the previous pattern unless participant was operating at parameters.min_adjustvalue for a while - in that case the reversal process picks up right away once the opposite option is chosen. (e.g. 0.15, 0.13, 0.11, 0.09, 0.07, 0.05, 0.03, 0.02, 0.02, 0.02 -> reversal: 0.03, 0.05, 0.07, 0.09, 0.11, 0.13, 0.15) (default) /maxtimeofscript: maximum time this script runs in ms if potential endless loop of procedure is hit ( default: 7200000ms, 2 hours)