Return to the Delay Discounting Task - ABCD Consortium page
						
							ABCD Adjusting Amount Discounting Procedure
SCRIPT INFO

Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC
Date: 04-28-2017
last updated: 07-27-2017 by K.Borchert (katjab@millisecond.com) for Millisecond Software LLC

This script has been made available to the Millisecond Software Library by the ABCD Research Consortium.
The script was designed to be run on ipads.

Script Copyright © 07-27-2017 Millisecond Software


BACKGROUND INFO 

											*Purpose*
This script implements a Adjusting Amount Discounting Procedure for the ABCD Consortium
The script is based on an Python script written by: Dr. Mikhail Koffarnus

Koffarnus, M.N. & and Warren K. Bickel, W.K. (2014). A 5-Trial Adjusting Delay Discounting Task:
Accurate Discount Rates in Less Than One Minute. 
Experimental and Clinical Psychopharmacology, 22, No. 3, 222–228


Rule Violations described in:
Johnson and Bickel (2008, Experimental and Clinical Psychopharmacology, 16, 264-274). 


											  *Task*
Participants have to make a choice between 2 amounts of moneys with different delays:
a delayed amount (here: $100) for delay1 (e.g. "in a year") compared to an immediate amount (e.g. %50)
right now. Seven delays ("6hours", "1 day", "1 week", "1 month", "3 months", "1 year", "5 years")
are tested in this script to determine 7 indifference points. Each delay is tested with 6 trials. 
Depending on the participant's choice the immediate amount is adjusted up (when delayed amount is selected) 
or down (when immediate amount is chosen.)



DATA FILE INFORMATION: 
The default data stored in the data files are:

(1) Raw data file: 'abcdadjustingamountdiscounting_raw*.iqdat' (a separate file for each participant)*

build:							Inquisit build
computer.platform:				the platform the script was run on
date, time, subject, group:		date and time script was run with the current subject/groupnumber 
blockcode, blocknum:			the name and number of the current block
trialcode, trialnum: 			the name and number of the currently recorded trial
									(Note: not all trials that are run might record data; by default data is collected unless /recorddata = false is set for a particular trial/block) 
/countDelays:					counts the number of delays tested
/delayIndex:					index of delay (in ascending order)
/delay:							stores the current delay tested: ("6 hours from now", "1 day", "1 week", "1 month", "3 months", "1 year", "5 years")
/delay_indays:					stores the current delays in unit 'day' (numbers from original Phython program)
/countTrials:					counts the number of adjustment trials run per block
/delayedReward:					the delayed amount in $ (here: 100)
/immediate:						stores the currently tested 'immediate' amount
/delayedLocation:				1 = delayed amount is presented on the left; 2 = delayed amount is presented on the right
stimulusitem:					the presented stimuli in order of trial presentation
text.delayed.timestamp:			the elapsed script time when delayed text was presented
latency: 						the response latency (in ms)
response:						the participant's response (for test trials: immediate vs. delayed)
/adjust:						stores the adjust amount of the next immediate amount
/nextimmediate:					stores the next 'immediate' amount
/lastImmediateChosen:			stores the last immediate amount chosen
/lastImmediateRejected:			stores the last immediate amount rejected
/IndiffPoint: 					calculates the current indifference point as the midpoint of values.last ImmediateChosen and values.lastImmediateRejected
								in proportion to parameters.delayedRewardAmount; indifference point is stored as a %
								and its value directly translate to the corresponding $ value (as the standard amount is $100)


(2) Summary data file: 'abcdadjustingamountdiscounting_summary*.iqdat' (a separate file for each participant)*

script.startdate:				date script was run
script.starttime:				time script was started
script.subjectid:				subject id number
script.groupid:					group id number
script.elapsedtime:				time it took to run script (in ms)
computer.platform:				the platform the script was run on
/completed:						0 = script was not completed (prematurely aborted); 1 = script was completed (all conditions run)
/delayed:						the delayed amount in $ (here: 100)
/testedDelays:					a string variable that stores all tested delays in the order tested
/Indif_Point_6h-
/Indif_Point_5years:			store the Indifference Points (IP) for the 7 specific delays tested in this script
								(the values are stored as % in relation to standard value and the values directly translates to
								the corresponding $ value - as the standard amount is $100)

Johnson & Bickel (2008)-test for rule violations:
/Consistent_per_JBcriterion1: 	no: if a later indifference point (set relative to delayed amount) islarger than the preceding one by 20% => rule violation
								yes: otherwise
/Consistent_per_JBcriterion2: 	no: if the last indifference point (set relative to delayed amount) is less than 10% smaller than the very first => rule violation
								yes: otherwise

/meanRT_allChoices:				mean latency (in ms) of all choices
/medianRT_allChoices:			median latency (in ms) of all choices
/meanRT_immedChoices:			mean latency (in ms) of	'immediate' choices			
/medianRT_immedChoices:			median latency (in ms) of 'immediate' choices	
/meanRT_delayedChoices:			mean latency (in ms) of	'delayed' choices	
/medianRT_delayedChoices:		median latency (in ms) of 'delayed' choices	

* separate data files: to change to one data file for all participants (on Inquisit Lab only), go to section
"DATA" and follow further instructions


EXPERIMENTAL SET-UP
* 7 delays ("6hours", "1 day", "1 week", "1 month", "3 months", "1 year", "5 years") are tested within-participants in a blocked design
Note: the delays can be adjusted under section Editable Lists (names of IP values will then have to be adjusted under section VALUES)
* the order of the delays is determined randomly
* 6 trials per delays
* the delayed amount can be set under Editable parameters. By default, it's $100
* the starting immediate amount is set as half of the delayed amount

Trials:
* left or right screen location of the delayed and immediate amount are randomly determined for each trial
* participants makes a choice via a button press: the left key refers to selecting the choice on the left,
the right key refers to selecting the choice on the right
* participants have an unlimited time to make a choice
* depending on choice

Adjustment Algorithm of the Immediate Amount:
First Trial: half of the difference of delayed and immediate amount
Example: delayed amount = 100; immediate amount = 50; adjustment = (100-50)/2 = 25

if participants chooses delayed amount (100) -> the next immediate amount tested is = 50 + 25 = 75
if participant chooses immediate amount (50) -> the next immediate amount tested is = 50 - 25 = 25

Subsequent Trials: half of the previous used adjustment 
Example: previous adjustment = 25 => the next adjustment will be 12.5


Algorithm to calculate Indifference Points (P):
at the end of each delay, the computer calculates the indifference point for the tested delays 
as the midpoint of last 'immediate' amount chosen and last 'immediate' amount rejected.
Notes: 
a) if participant always rejects the immediate amount, the IP will be the midpoint between the
delayed amount and the last immediate amount rejected.
b) if participant always rejects the delayed amount, the IP will be the midpoint between
0 and the last immediate amount chosen

Rule Violation Algorithms (Johnson & Bickel, 2008):
Johnson and Bickel (2008, Experimental and Clinical Psychopharmacology, 16, 264-274). 

JB Rule1: if a later indifference point (set relative to delayed amount) is larger than the preceding one by 20% => rule violation
JB Rule2: if the last indifference point (set relative to delayed amount) is less than 10% smaller than the very first => rule violation


INSTRUCTIONS
provided by ABCD Research Consortium - can be 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:

/delayedRewardAmount:	the delayed amount in $ (here: 100)

/starttrialDuration:	the duration (in ms) of the start trial in each block (the announcement of the particular delay) (default: 2000ms)

/leftx:					the proportional screen position of the left amount (here: 25% of the width of the canvas) note: 0% is the very left of canvas
/rightx:				the proportional screen position of the right amount (here: 75% of the width of the canvas): 100% is the very right of canvas

Copyright © Millisecond Software. All rights reserved.
Contact | Terms of Service | Security Statement | Employment