Certainty Equivalent Procedure

Technical Manual

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

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

Created: January 16, 2014

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

Script Copyright © Millisecond Software, LLC

Background

This script runs the Certainty Equivalent (CE) Procedure to estimate CE Points described by Paulus & Frank (2006).

References

Paulus, M. P., & Frank, L. R. (2006). Anterior cingulate activity modulates nonlinear decision weight function of uncertain prospects. NeuroImage,30, 668-677.

Duration

5 minutes

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).

Procedure

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.

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

Summary Data

File Name: certaintyequivalentprocedure_summary*.iqdat

Data Fields

NameDescription
inquisit.version Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities
computer.hasKeyboard 0 = no external keyboard detected; 1 = external keyboard detected
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
scriptAborted 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)
iterationPerProspect Number of iterations (using smaller and smaller ranges of values) used to pinpoint CE for the current prospect
set individually for each prospect via list.iterations_perprospect
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 prospect1
ce1 Stores the CE values for prospect1
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized
Prospect2
p2 Stores the winprobability of prospect2
(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)
winProspect2 Stores the pote of potential winning amount of prospect2
(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)
ev2 Stores Expected Value for prospect2
ce2 Stores the CE values for prospect2
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized
Prospect3
p3 Stores the winprobability of prospect3
(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)
winProspect3 Stores the pote of potential winning amount of prospect3
(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)
ev3 Stores Expected Value for prospect3
ce3 Stores the CE values for prospect3
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized
Prospect4
p4 Stores the winprobability of prospect4
(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)
winProspect4 Stores the pote of potential winning amount of prospect4
(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)
ev4 Stores Expected Value for prospect4
ce4 Stores the CE values for prospect4
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized
Prospect5
p5 Stores the winprobability of prospect5
(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)
winProspect5 Stores the pote of potential winning amount of prospect5
(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)
ev5 Stores Expected Value for prospect5
ce5 Stores the CE values for prospect5
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized
Prospect6
p6 Stores the winprobability of prospect6
(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)
winProspect6 Stores the pote of potential winning amount of prospect6
(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)
ev6 Stores Expected Value for prospect6
ce6 Stores the CE values for prospect6
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized
Prospect7
p7 Stores the winprobability of prospect7
(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)
winProspect7 Stores the pote of potential winning amount of prospect7
(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)
ev7 Stores Expected Value for prospect7
ce7 Stores the CE values for prospect7
=> Index refers to position of prospect in list.winprobabilities/list.potentialwins
and not to its actual presentation as that could be randomized

Raw Data

File Name: certaintyequivalentprocedure_raw*.iqdat

Data Fields

NameDescription
build Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities
computer.hasKeyboard 0 = no external keyboard detected; 1 = external keyboard detected
date Date the session was run
time Time the session was run
subject Participant ID
group Group number
session Session number
blockcode The name the current block (built-in Inquisit variable)
blocknum The number of the current block (built-in Inquisit variable)
trialcode The name of the currently recorded trial (built-in Inquisit variable)
trialnum The number of the currently recorded trial (built-in Inquisit variable)
trialnum is a built-in Inquisit variable; it counts all trials run
even those that do not store data to the data file.
iterationPerProspect Number of iterations (using smaller and smaller ranges of values) used to pinpoint CE for the current prospect
set individually for each prospect via list.iterations_perprospect
selectProspect Contains the itemnumber of the current prospect (0-6)
the numbering refers to the list position of that prospect in
list.winprobabilities/list.potentialwins. By default, the prospects are selected in sequence
gamblingP 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
currentBottom Contains the current bottom value of the range tested for the current CE
currentTop Contains the current upper value of the range tested for the current CE
current_top & current_bottom are updated at the end of trial.surebet_middlethird
currentLowerThird Contains the values at the lower third of the tested range (offered as sure win in trial.surebet_lowerthird)
currentMiddleThird Contains the values at the middle third of the tested range (offered as sure win in trial.surebet_middlethird)
currentGuaranteedwin 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
lowResponse Stores the response (1 or 2) that participant makes when offered values.current_lowerthird
middleResponse Stores the response (1 or 2) that participant makes when offered values.current_middlethird
nextBottom Contains the next determined bottom value
nextTop Contains the next determined top value
ce Calculates the Certainty Equivalent (CE) of the current prospect based on the last (aka next) estimated range
amount makes sense only at the end of a cycle (->trial.estimate_CE)
ev Calculates the expected value of the current gambling prospect

Parameters

The procedure can be adjusted by setting the following parameters.

NameDescriptionDefault
Design Parameters
responseKeyGamble The gamble response key; left response key on QWERTY keyboard"1"
responseKeySurewin The sure win response key; right response key on QWERTY keyboard"2"
maxnrRepeats 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 more try. If the same irrational response pattern is given
the entire task is aborted.
1
Timing Parameters
feedbackDuration Duration (in ms)of the feedback presentation1000
iti Duration (in ms) of the inter trial interval between trials (after trial.surebet_lowerthird/trial.surebet_middlethird)1000