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.

Screenshot of the experiment as implemented on PsyToolkit (demo below)

bart

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.

  1. Training block (3 green baloons)

  2. 30 trials of randomly colored balloons (10 yellow, 10 green, 10 blue)

  3. 20 blue balloons

  4. 20 yellow balloons

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