User Manual: Inquisit Certainty Equivalent Procedure


___________________________________________________________________________________________________________________	

									CERTAINTY EQUIVALENT (CE) PROCEDURE 
___________________________________________________________________________________________________________________

Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC
Date: 05-16-2014
last updated:  02-17-2022 by K. Borchert (katjab@millisecond.com) for Millisecond Software, LLC

Script Copyright © 02-17-2022 Millisecond Software

Millisecond Software thanks Dr. Jakub Traczyk and Kamil Fulawka for collaborating on this script!

___________________________________________________________________________________________________________________
BACKGROUND 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 FILE INFORMATION 
___________________________________________________________________________________________________________________
The default data stored 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. 
										
iteration_perprospect:				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
										
select_prospect:					contains the itemnumber of the current prospect (1-7)
										Note: the numbering refers to the list position of that prospect in 
										list.winprobabilities/list.potentialwins. By default, the prospects are selected in sequence
										
gambling_p:							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
current_bottom:						contains the current bottom value of the range tested for the current CE

current_top:						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
										
current_lowerthird:					contains the values at the lower third of the tested range (offered as sure win in trial.surebet_lowerthird)

current_middlethird:				contains the values at the middle third of the tested range (offered as sure win in trial.surebet_middlethird)
current_guaranteedwin:				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

low_response:						stores the response (1 or 2) that participant makes when offered values.current_lowerthird
middle_response:					stores the response (1 or 2) that participant makes when offered values.current_middlethird
next_bottom:						contains the next determined bottom value
next_top:							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)	

script_aborted:				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)

iteration_perprospect:		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:
											
/responsekey_gamble:				the gamble response key (default: '1'); left response key
/responsekey_surewin:				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)
									
/maxnr_repeats:						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.