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:
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
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.
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?
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
Teach me how to modify the source in order to get backward Corsi Block-Taping Test.
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.
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.
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
I tried running the PEBL 0.12 beta. The program can work.Thank You for your replying.
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
Post a Comment