Sunday, July 18, 2010

Corsi Block-Tapping Test

The  Corsi Block-Tapping test, sometimes referred to as "Corsi Blocks", is a classic test used as a visuo-spatial version of digit span.  Instead of hearing digits, you see blocks attached to a board, and the experimenter points at a sequence of blocks which must be reproduced by the subject.  Blocks are used because it allows them to be numbered on their back, hidden from the subject but visible to the experimenter who sits across the table.

Here is a 3D rendering of the block test that Derek from University of Iowa put on the internet:






The fact that the stimuli are 3D blocks in the original is sort of irrelevant.  It is convenient because the experimenter can see the codes written on the back sides of the blocks, but the blocks are never moved around, stacked, or anything, and the 3rd dimension remains pretty much unused.

Probably one of the best recent descriptions of the test was in a paper by  Kessels et al. (2000).  They made an attempt to come up with a standardized version of the test, including instructions, apparatus configuration, specific trials,  scoring  measures, and some initial norms.  Kessels intent was to describe a standard version of the test so that others could implement it in the future, improving consistency and replicability.  And thanks to them, implementing the test in PEBL was a breeze.
 
First, I needed to create the stimulus screen. Kessels described the coordinates in mm, based on 30 mm blocks.  I created a function that returned these coordinates, but scaled and shifted according to a preset amount.  This way, if you need to adjust to fit a particular screen, or you want to match 30 mm block sizes with a touch screen monitor, it can all be done by adjusting a single value.  By default, the scaling factor is 3, meaning 3 pixels per mm, or that the blocks will have 90 pixel sides. It is controlled by the gScale parameter near the top of the script:

  gScale <- 3                 ##scale between mm and pixels.

Now, we need to display stimuli at the locations.  I used the Square() function to create squares of the proper size in Navy Blue, and place them in the proper locations:  Here is the standard configuration:


I'd like to allow for 'random' target locations. Luckily, I can reuse a layout routine from the PEBL Trailmaking Test to find locations for 9 blocks that don't overlap.  This way, if you want to, you can choose to use the 'standard' Corsi configuration or create new block locations on each trial. If you want to use the test repeatedly, you might want to use different arrangements.



 Kessels also described a set of stimulus sequences to use. The argument for using these is that they tend to avoid things like smooth spatial tracks that could make a trial much easier.  But having non-randomized trials could create confounds: what if the longer trials are unintentionally easier or harder than shorter ones? Or what if you want to use the task repeatedly on the same subjects?  It is easy to create random trials, which I will give the option for in case one wants to use the test repeatedly and prevent subjects from learning the sequences.  An easy way to sample n numbers between 1 and 9 in a random order is:

sequence <- SampleN(Sequence(1,9,1),n)


To present the stimuli, I created a tenth square in a light color and move that to the locations in the stimulus sequence, 1 second per stimulus.

When the list is done, we need to collect the responses. Recall is performed by by clicking or tapping (with a touch-screen) the blocks in the order of presentation.  This is simple using the WaitForClickOnTarget() function--we just feed it the target objects and a sequence of IDs, along with an additional label with the word 'done' on it.   Then loop until the done button is clicked.







Overall, the test attempts to be a faithful implementation of Kessel's description, but with some parameters that allow greater flexibility.  These parameters are all at the top of the corsi.pbl file, which are repeated here:

 
  gUseCorsiPoints <- 1        ## Use standard locations or regenerate
                              ## on each trial?
  ##By default, this uses Kessel's recommendations. 
  ##Basically, start at length 2, use 2 trials per length, and
  ##continue to the next length whenever at least one was recalled
  ##correctly.
 
  gUseKessel      <- 1        ## Use Kessel trials? (Should be used
                                        ## with corsi points)
 
  ##alternately, you can generate the trials at random.

  gStartLength    <- 2        ## If gUseKessel <- 0, it creates a
                                         ## random stimulus sequence

                              ## with these parameters
  gEndLength      <- 9
  gTimesPerLength <- 2        ##


  gISI <- 1000                ## Inter-stimulus interval in ms
  gITI <- 1000                ## inter-trial interval.
  gWait <- 500                ## How long to 'go to each room'


  gStimColor <- MakeColor("navy")
  gHighlightColor <- MakeColor("khaki")


  gScale <- 3                 ##scale between mm and pixels.
 





References:

Kessels, R. P. C., van Zandvoort, M. J. E., Postma, A., Kappelle, L. J., & de Haan, E. H. F. (2000). The Corsi Block-Tapping Task: Standardization and Normative Data. Applied Neuropsychology, 7(4), 252-258.

Corsi, P. M. (1972). Human memory and the medial temporal region of the brain. Dissertation Abstracts International, 34, 819B.

10 comments:

yayan said...

is it possible to make reversed sequence (just like backward digit span test)?
I was trying to modify the source and ended up with error :D
your answer will be helpful.
thank you

Shane Mueller said...

A few people have implemented the backward corsi test, and I'll release a version supporting it in the next version of the test battery. Contact the pebl-list or me for a copy.

Anonymous said...

I am running this task on OSX and I found what I think may be a bug and I'm having trouble with data being written to a data file (though it creates them fine).

First, in the Round() command on line 175 it complains that it's getting two arguments when it only wants one.

Round((2+totalcorrect)/2, 2)

I don't know what round is exactly supposed to do (I assume round to a whole number), but when I removed the final ", 2" the script ran correctly.

Second, I get to a stage where the program tells me the total number correct and span, but when I look at the data file for the subject in the data folder, it's blank. Is there any reason why this is the case and what can I do to fix it?

Shane Mueller said...

Anonymous....

The Round() function has been modified at one point to allow either one or two arguments. Probably the OSX version of 0.11 accidentally didn't include that update, but the corsi test used it anyway. The newest version of pebl, 0.12, should support this, as well as an improved version of the corsi test, but so far I've only been able to make the OSX version run on my development computer, and I don't have another mac to use as a testing computer to help me debug the problem. Send me email via the pebl-list or my personal account and I'll give you instructions on testing the newest pebl 0.12 on OSX.

Shane

Hiroyuki said...

Teach me how to modify the source in order to get backward Corsi Block-Taping Test.

Shane Mueller said...

Hiroyuki,
The version you can download here:

http://pebl.svn.sourceforge.net/viewvc/pebl/trunk/battery/corsi/corsi.pbl?revision=628

Incorporates backward recall. Just change the gDirection variable from 1 to -1 to make it work.

Hiroyuki said...

Thank you! but that program can't work. are there some bugs?

Error log------
Error in function 'REMOVESUBSET'. Function already exists.
Error in function 'DIST'. Function already exists.
Analyzing code for functions.
Loading Library functions.

Shane Mueller said...

Those are only warnings--there might be another error later in the file. Probably it is trying to create a data directory but cannot--you might try creating a data/ subdirectory in your folder. Also, try running the PEBL 0.12 beta found on the PEBL download site if that does not work.

Shane

Hiroyuki said...

I tried running the PEBL 0.12 beta. The program can work.Thank You for your replying.

Anonymous said...

Hi Shane
I'm trying to access the Corsi Block task, forwards and backwards. Can you advise the link, please.

Many thanks
An MSc student