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
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.
30 minutes
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.
• 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
provided by Millisecond - can be edited under section Editable Stimuli
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.
File Name: experientialdiscountingtask_summary*.iqdat
| Name | Description |
|---|---|
| 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 |
File Name: experientialdiscountingtask_raw*.iqdat
| Name | Description |
|---|---|
| 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. |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
| 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) |