Introduction
The Balloon Analogue Risk Task (BART) helps psychologists study how people take risks. In the task, you see a virtual balloon on the screen. With each button press, you can inflate the balloon to earn more points. But if you pump it too far, it might explode, and you lose the points for that round. The trick is deciding when to stop and collect your winnings before the balloon bursts.
The task was first developed by Lejuez and colleagues (2002) as a simple and engaging way to measure risk-taking in a controlled environment. What makes the BART so useful is that it mimics real-life situations where we have to balance potential rewards against the risk of loss—like deciding how fast to drive, how much money to invest, or when to speak up in a group. Because of this, researchers use BART to understand decision-making in both healthy individuals and those with psychological or behavioural conditions.
The score on the BART task correlates well with Barratt’s impulsivity scale (available here on PsyToolkit) and some other scores. Here is a short quote from the 2002 paper: "Correlations among Adj BART and the risk-related constructs are shown in Table 2. With the exception of Eysenck Venturesome subscale score, Adj BART score was significantly correlated with each of the relevant measures of risk-related constructs, including Barratt Impulsiveness total score, Eysenck Impulsivity subscale score, MPQ Behavioral Constraint superfactor score, and Sensa- tion Seeking total score." (page 79 of Lejuez et al., 2002).
There are many examples of its use and the 2002 paper a highly cited study in psychology. For example, it has been useful for testing real-world risk taking in adolescents and it has been used to compare smokers and non-smokers (see references at bottom of page). |
Detail of how the task works
Participants need to collect money. In total there are 90 trials.
There are 3 types of baloons (30 blue, 30 yellow, and 30 orange ones):
Colour |
When explode likely |
Blue |
64 pumps is average explosion point |
Yellow |
16 pumps is average explosion point |
Orange |
4 pumps is average explosion point |
Obviously, orange balloons cannot be pumped much, while blue ones can be pumped up a long time.
On each trial, they are shown a ballon and they can inflate it with clicking a "pump" button or "collect $$$" button to collect the money.
With each additional pump, the trial counter adds up 5 cents. There are two counters on the screen, one for the current trial and one for the total earned.
About this implementation
Here we follow the original 2002 paper except for the following:
First, we added three training trials. The added training trials do not interfere with the training as the training balloons are green and all explode only if people would have pressed the pump up button 10 times. You can remove this from the task easily. You simply remove the line task bart 3 and you remove the block feedback1.
Second, we provide after the training block and at the end of the experiment a feedback report about how much money was earned and more. The idea here is that this is of interest. If you do not like this, you can take this out of the experiment by removing blocks feedback1 and feedback2.
Block order
The block order is as in the paper except for the first training block which PsyToolkit added.
-
Training block (3 green baloons)
-
30 trials of randomly colored balloons (10 yellow, 10 green, 10 blue)
-
20 blue balloons
-
20 yellow balloons
-
20 orange balloons
Scoring
The BART score is calculated as in the 2002 study. It is the average number of pumps for trials in which the balloon did not explode. In the paper they call this the adjusted score.
Each participant gets exactly the same explosion points offered, so you can compare participants really well. We did not have the exact explosion points of the original paper, but we followed the same logic of a mean of 64 for blue balloons, 16 for yellow balloons, and 4 for orange balloons. Further we ensured these numbers held over blocks of 10 trials to ensure a good distribution.
Run the demo
Data output file
In PsyToolkit, the data output file is simply a textfile. The save line of the PsyToolkit experiment script determines what is being saved in the data output file. Typically, for each experimental trial, you would have exactly one line in your text file, and each number/word on that line gives you the information you need for your data analysis, such as the condition, response speed, and whether an error was made. |
Meaning of the columns in the output datafile. You need this information for your data analysis.
Colum |
Meaning save BLOCKNAME %balloonColor &balloonCount $timesPumped $explosion $earningsThisBalloon &earnings &bartScoreSoFar &averageRT |
1 |
Name of block |
2 |
Balloon color |
3 |
Balloon count (in training block from 1 to 3, and then in rest 1 to 90 |
4 |
Number of times pumped for current balloon |
5 |
Whether an explosion occured (1) or not (0) |
6 |
Earnings for this balloon |
7 |
Total earnings so far |
8 |
Total adjusted BART score so far |
9 |
Average response time for pumpbutton |
PsyToolkit code
Click to expand the PsyToolkit script code (part of zip file below)
options
fullscreen
scale
resolution 1920 1080
background color white
set &balloonX -350 # for positioning balloon
set &balloonY -65
var out &bartScoreSoFar &earnings # this makes data analysis easier
set &&blueExplosionPoints 49 101 65 25 74 100 18 31 49 128 71 100 89 37 110 20 26 114 70 3 89 27 36 101 95 109 5 52 34 92
set &&yellowExplosionPoints 3 26 1 10 24 30 11 7 22 26 18 1 24 23 17 21 26 18 6 6 20 3 22 21 21 23 6 26 10 8
set &&orangeExplosionPoints 5 4 1 4 7 4 2 3 5 5 1 7 8 2 3 2 2 8 4 3 4 6 5 2 1 1 5 3 6 7
set &&mixedBlockTypes 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 ## 10 of each 3 types
set &pointsPerBalloon 5 # in the original paper, it is 5 cents per balloon
bitmaps
instructions1
instructions2
instructions3
pumpButton
collectButton
collectButtonGrey
screenoutline
explode1
explode2
arrows
startButton # for instructions
nextPage # for instructions
previousPage # for instructions
reportLayout # for report after block with stats
greenContinueButton # for report after block with stats
fonts
arial 50
task bart
##--first choose the correct explosion point for trial-----------------------------------------
if &blockType = 0 ## green training trials
set %balloonColor "green"
set $explosionPoint 10
set $currentRed 0
set $currentGreen 128
set $currentBlue 0
fi
if &blockType = 1 ## mixed color balloons, it can be randomly of any color. We know there are 30 trials, so we use blocktype 2, 3 , 4, but then randomly interleaved
set &blockType &&mixedBlockTypes remove random
set $inMixedBlock = 1 # actually, &blockType should not really be changed, but it is convenient for choosing one of following
fi
## now if it was blockType 1, not the blocktype will actually have been chosen to be 2,3,4
if &blockType = 2 ## blue balloons (mean explosion point at 64)
set %balloonColor "blue"
set $explosionPoint &&blueExplosionPoints remove first
set $currentRed 100
set $currentGreen 100
set $currentBlue 255
fi
if &blockType = 3 ## yellow balloons (mean explosion point at 16)
set %balloonColor "yellow"
set $explosionPoint &&yellowExplosionPoints remove first
set $currentRed 255
set $currentGreen 255
set $currentBlue 0
fi
if &blockType = 4 ## orange balloons (mean explosion point at 4)
set %balloonColor "orange"
set $explosionPoint &&orangeExplosionPoints remove first
set $currentRed 255
set $currentGreen 128
set $currentBlue 0
fi
##-- potential earnings calculation -----------------------------------------------------------
set $potentialEarningsThisBalloon expression ( $explosionPoint - 1 ) * &pointsPerBalloon
set &potentialEarnings increase $potentialEarningsThisBalloon
##---------------------------------------------------------------------------------------------
if $inMixedBlock = 1 # this is only for next trial, so that we select correct color
set &blockType 1
fi
##---------------------------------------------------------------------------------------------
set &&averageRTarray clear # for calculating average time it took to press pump up button
set &balloonCount increase
##--setup screen
show bitmap screenoutline # 1
show bitmap pumpButton -595 450 # 2
show bitmap collectButtonGrey -80 450 # 3
set $balloonSize 10
show text &earnings 550 -50 black # 4
show text $earningsThisBalloon 550 -350 black # 5
show text &balloonCount 550 250 black # 6
show circle &balloonX &balloonY $balloonSize $currentRed $currentGreen $currentBlue # 7 , in training we show green balloon
if &blockType = 0
show text "TRAINING BLOCK" 570 450 black
fi
while $timesPumped < $explosionPoint && $collected != 1
## now check what decision participant makes
if $timesPumped = 0
readmouse l 2 999999 range 2 2 # if $timesPumped is 0, you cannot click collect, you are forced to pump at least once
else
readmouse l 2 999999 range 2 3
fi
set &&averageRTarray append RT
if UNDER_MOUSE = 2 ## people pump up
if $timesPumped = 0
update bitmap 3 collectButton # make collectButton yellow instead of unclickable grey
fi
set $timesPumped increase
if $timesPumped != $explosionPoint
set $earningsThisBalloon increase &pointsPerBalloon
set $balloonSize increase 3
update circle 7 &balloonX &balloonY $balloonSize $currentRed $currentGreen $currentBlue
update text 5 $earningsThisBalloon
else
set $explosion 1 # code that explosion happened
fi
scale 2 105
delay 50
scale 2 110
delay 50
scale 2 100
fi
if UNDER_MOUSE = 3
set $collected 1 # this way you end
set &earnings increase $earningsThisBalloon
set &&bartScoreArray append $timesPumped # this is the adjusted score for calculating average later
set &bartScoreSoFar &&bartScoreArray roundmean
fi
while-end
if $explosion = 1
clear 7 # remove balloon
show animation &balloonX &balloonY 200 explode1 explode2
delay 100
clear -1
show text "balloon exploded..." &balloonX &balloonY black
update text 6 "earnings lost"
delay 500
clear -1
fi
if $collected = 1
# now show arrows moving from current to earned amount
for $y in -270 to -220 by 10
show bitmap arrows 550 $y
delay 50
clear -1
for-end
fi
## -- we keep a count for exploded and unexploded balloons
if $explosion = 1
set &balloonCountExploded increase
else
set &balloonCountUnexploded increase
fi
## -- we need to calculate the average response time for this balloon
set &averageRT &&averageRTarray roundmean
save BLOCKNAME %balloonColor &balloonCount $timesPumped $explosion $earningsThisBalloon &earnings &bartScoreSoFar &averageRT $potentialEarningsThisBalloon &potentialEarnings
task showReport
set $xpos 360
set &missedPotential expression &potentialEarnings - &earnings
text color black
text align left
show bitmap reportLayout -140 0
show text &potentialEarnings $xpos -390
show text &earnings $xpos -260
show text &missedPotential $xpos -130
show text &balloonCount $xpos 0
show text &balloonCountUnexploded $xpos 130
show text &balloonCountExploded $xpos 260
show text &bartScoreSoFar $xpos 385
delay 2000
show bitmap greenContinueButton 780 392
readmouse l SHOW_COUNTER 999999 range SHOW_COUNTER SHOW_COUNTER
####################################################################################
## blocks
####################################################################################
block training
set &blockType 0 # training, green balloons
pager option mouse previousPage 0 490 nextPage 300 490 startButton 650 490
pager instructions1 instructions2
task bart 3
block feedback1
task showReport 1
block realdataMixed
# first reset various variables
set &potentialEarnings 0
set &earnings 0 # reset training
set &balloonCount 0 # reset count
set &balloonCountUnexploded 0 # reset count
set &balloonCountExploded 0 # reset count
set &bartScoreSoFar 0
set &&bartScoreArray clear
#
set &blockType 1 # mixed, there are 30 trials
message instructions3 mouse
delay 1000
message greenContinueButton mouse
task bart 30
block realdataBlockedBlue
set &blockType 2 # blue only
task bart 20
block realdataBlockedYellow
set &blockType 3 # yellow only
task bart 20
block realdataBlockedOrange
set &blockType 4 # orange only
task bart 20
block feedback2
task showReport 1
Download
If you have a PsyToolkit account, you can upload the zipfile directly to your PsyToolkit account. Watch a video on how to do that. If you want to upload the zipfile into your PsyToolkit account, make sure the file is not automatically uncompressed (some browsers, especially Mac Safari, by default uncompress zip files). Read here how to easily deal with this. |
Further reading
-
Lejuez, C. W., Read, J. P., Kahler, C. W., Richards, J. B., Ramsey, S. E., Stuart, G. L., … & Brown, R. A. (2002). Evaluation of a behavioral measure of risk taking: the Balloon Analogue Risk Task (BART). Journal of Experimental Psychology: Applied, 8(2), 75. You can find free versions like this one on academia.edu.
-
Lejuez, C. W., Aklin, W. M., Zvolensky, M. J., & Pedulla, C. M. (2003). Evaluation of the Balloon Analogue Risk Task (BART) as a predictor of adolescent real-world risk-taking behaviours. Journal of adolescence, 26(4), 475-479.
-
Lejuez, C. W., Aklin, W. M., Jones, H. A., Richards, J. B., Strong, D. R., Kahler, C. W., & Read, J. P. (2003). The balloon analogue risk task (BART) differentiates smokers and nonsmokers. Experimental and clinical psychopharmacology, 11(1), 26.