Experiential Discounting Task

Technical Manual

Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond

Created: January 06, 2013

Last Modified: January 26, 2025 by K. Borchert (katjab@millisecond.com), Millisecond

Script Copyright © Millisecond Software, LLC

Background

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 thanks Dr. Fillmore and Nicholas Van Dyke for collaborating on this script. Millisecond further thanks Dr. Madden for answering procedural questions pertaining to the EDT.

Duration

30 minutes

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.

Procedure

• 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

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
(!!! 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) can be turned off via Editable parameter

in the unlikely even that participant chooses only Adjust option, an endless loop is created.
For this particular reason, the script has
- an emergency block termination duration which is 15 minutes long (editable parameter) does require some block responding to kick in
- a built-in time to abort the script after 2h (editable parameter) will abort after 2h whether any responses are made or not

Stimuli

provided by Millisecond - can be edited under section Editable Stimuli

Instructions

Instructions are not original to the task. They are provided by Millisecond
and can be edited under section Editable Instructions

Original instructions from Reynolds & Schiffbauer (2004) are provided under section Editable Instructions
for comparisons.

Summary Data

File Name: experientialdiscountingtask_summary*.iqdat

Data Fields

NameDescription
inquisit.version Inquisit version number
computer.platform Device platform: win | mac |ios | android
startDate Date the session was run
startTime Time the session was run
subjectId Participant ID
groupId Group number
sessionId Session number
elapsedTime Session duration in ms
completed 0 = Test was not completed
1 = Test was completed
delayD Delays for block A-D
ipDelayA-
ipDelayD 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

Raw Data

File Name: experientialdiscountingtask_raw*.iqdat

Data Fields

NameDescription
build Inquisit version number
computer.platform Device platform: win | mac |ios | android
date Date the session was run
time Time the session was run
subject Participant ID
group Group number
session Session number
blockCode Name of the current block
blockNum Number of the current block
trialCode Name of the current trial
trialNum Number of the current trial
gameDuration The regularly determined duration of the current block (based on 20 choice trial durations) unless IP can be determined earlier
blockEmergencyAbortDuration The max duration of a block when the 'emergency break' needs to be pulled (in case of endless loop)
emergencyBlockStop 0 = the emergency block break was not necessary to pull
1 = the emergency block break was pulled, block took too long
delay Contains the current delay duration for finding out whether standard option wins or loses
countStart Counts the number of rounds started per block
countStandard Counts the number of standard options chosen (choice selections only)
countAdjust 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)
selectionRT 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
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)
currentAdjustAmount Contains the adjustamount that could be won for the current trial sequence
percentChangeAdjust 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.
ipFound 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.

Parameters

The procedure can be adjusted by setting the following parameters.

NameDescriptionDefault
standardAmount The default standard amount $0.30
startAdjustAmount The default starting adjust amount $0.15
maxAdjustValue Maximum/start adjusting proportion 0.15
minAdjustValue Minimum adjusting proportion 0.02
adjustValue The default adjust value increase/decrease 0.02
minChoiceTrials The minimum number of choice trials
needs to be >=6
16
maxsameOption The max number of consecutive trials of the same option
before a forced trial is initiated (default: 4)
nrPracticeRounds Number of practice rounds run, regardless of choice or forced rounds
Delay Options: in ms
16
delayPractice Delay used in practice session 7000ms = 7s
delayA:-
delayD Delays for block A-D (in ms)
durationAdjustmentFactor The number of standard option trials used to calculate the
max. blockduration = values.delay * parameters.durationadjustmentfactor
(-> the time allows 20 standard option trial sequences)
20
interTrialInterval Sets the intertrialinterval duration 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)
addInterBlockPause True: an interblock pause will be added that adds the remaining time of the
regularly predetermined block duration
"The inter-block interval was included to ensure that a block of choices could not be
ended more quickly by making more responses to the adjusting option"
(Reynolds & Schiffbauer, 2004, p.349)
false: no interblock pause is added
emergencyBlockAbortDurationMin The max duration (in minutes) of a block ( time is checked after clicking START)
-> in case endless loop conditions have been met
maxTimeofScript Maximum time this script runs in ms if potential endless loop of procedure is hit
( default: 7200000ms, 2 hours)