Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Created: January 26, 2012
Last Modified: January 14, 2025 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements a computerized version of the Modified Cardsort Test (MCST) (see Nelson, 1976); a test of cognitive flexibility upon rule changes. In contrast to the similar Wisconsin Card Sorting Task (WCST), the MCST only provides unambiguous cards. The test can either be run with announced or unannounced rule changes.
DISCLAIMER Response coding may differ from published definitions. Check the definition of the coded variables used in this script under the data glossary. If in doubt, manually score the raw responses. This script bases the coding of perserverative responses on the guidelines outlined by Heaton et al (1993) for the Wisconsin Card Sorting Task*. Coding may, however, still differ from published definitions or contain errors.
Nelson, H. (1976). A modified card sorting test sensitive to frontal lobe lesions. Cortex 12, 313–324
Cianchetti, C., Corona, S., Foscoliano, Scalas, M.F. & Sannio-Fancello, G. (2005). Modified Wisconsin Card Sorting Test: proposal of a supplementary scoring method, Archives of Clinical Neuropsychology, 20, 555-558.
Heaton, R., Chelune, G., Talley, J., Kay, G., & Curtiss, G. Wisconsin Card Sorting Test Manual—Revised and Expanded 1993. Lutz, FL: Psychological Assessment Resources Inc
2 minutes
Participants are asked to sort cards into four different "categories": - one red triangle - two green stars - three yellow crosses - four blue circles. The cards to sort into these piles have similar designs and vary in color, shape, and number.
(1) Cards:
- Participants receive the equivalent of 2 decks of cards. Each deck contains 24 different cards.
- Each of the 24 cards has max. only 1 feature in common with any of the 4 response cards. (there are no ambiguities)
- Researchers can set whether to display the deck/card info for the participants
on the screen under section EDITABLE PARAMETERS (e.g. "Deck: 1 of 2; Card: 5 of 24")
- the cards of each deck are randomized without replacement (see list.selectcard for more detail)
(2) Order of Categorization Rules: Color -> Form -> Number -> Color etc.
- the start category can be selected OR left to be decided by first correct response (see parameters.startCategory)
- Maximal 2 of each category
- Rules change after 6 consecutive correct responses for a category (default, can be changed under
section EDITABLE PARAMETERS)
=> the order of the categories can be set under section Editable Parameters (see parameters.categoryOrder)
(3) End of Task:
(a) reached the maximum number of cards:
- Maximum Number of Trials/Cards: 2 (decks) x 24 (cards) => 48 cards
(b) successfully completed 2 blocks of each category
- Minimum number of trials/Cards = 6 (correct trials per block) * 6 (max number of blocks)=> 36 cards
(4) Instructions
- By default, participants are alerted to a rule change in the MCST (as opposed to the WCST).
This "Rule Change Alert" CAN be turned OFF under section EDITABLE PARAMETERS
- Instructions can easily be changed under section EDITABLE INSTRUCTIONS
- Text Stimuli can be easily changed under EDITABLE STIMULI -> Feedback
(5) Dependent Variables/Scores:
- latency of response
- accuracy of response
- total number of correct responses/total number of errors
- Total Number/Percentage of Perseverative Errors (see below for explanation of scoring of Perserverative Responses in this script)
- total number of trials
- number of trials needed to complete first category
- categories completed (Max = 6)
- Number of "Failures to Maintain Set" across Experiment
- "Learning to Learn" measures: error difference scores (of percentages) from adjacent blocks
- Categorizing Efficiency: suggested by Cianchetti et al (2005) => completedCategories * 6 + [IF all 6 categories compled: (48 - totaltrials)]
provided by Millisecond - can be edited in script "mcst.iqjs"
Once the trial-by-responses have been collected, the raw data gets re-analyzed to determine
perseverative responding (which can only be done in retrospect).
The re-analyzed raw data columns are added by block.rawDataScoring
File Name: mcst_summary*.iqdat
| Name | Description |
|---|---|
| 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 |
| startCategory | This script allows the user to choose the first category to be tested "U" for Undecided => based on first correct response (see Nelson, 1976) => either color, form OR number "C" for color "F" for form "N" for number |
| categoryOrder | The order in which categories should be run once the startCategory has been determined "CFN" ('classic'): color precedes form, form precedes number, number precedes color "CNF": color preceds number, number precedes form, form precedes color "FLEX": the categories are decided upon first selection after rule change block1: depends on first correct selection block2: depends on first correct selection of categories that haven't run yet block3: last unselected category block4 = block1 (but block3 category3 cannot be run); block5 = block2, block6 = block3 |
| csTotalTrials | Maximum Number of trials (default = 48 => 2 decks x 24 cards) |
| csTotalBlocks | Maximum Number each category is tested (default = 2) |
| correctStreakThreshold | Number of consecutive correct responses before a rule change (default = 10) |
| setmaintainThreshold | Number of consecutive correct responses after which an incorrect response is scored as a "Failure to maintain Set" (default = 5) |
| showDeckInfo | If set to " true" information about the deck (e.g. 1 of 2) and card number (e.g. 7 of 64) are displayed on the screen for the participant to see (default: false (0)) |
| showRuleChangeAlert | If set to "true" participants are alerted when the categorization rules change (default: true (1)) |
| categoriesRun | Stores the order of the categories that were run |
| countColorBlocks | The number of color blocks started |
| countFormBlocks | The number of number blocks started |
| countNumberBlocks | The number of form blocks started |
| colortrialcount | Sum up the trials run by category 'color' |
| numbertrialcount | Sum up the trials run by category 'number' |
| formtrialcount | Sum up the trials run by category 'form' |
| totalTrials | Counts the total trials run |
| totalCorrect | Sums up all the correct responses across the task |
| numberErrors | Number of total errors (all incorrect responses) made |
| percentErrors | Percentage of incorrect responses (relative to all responses) |
| numberpResponses | Number of perseverative responses made |
| percentpResponses | Percentage of Perserverative Responses (relative to all responses) |
| numberOtherErrors | Number of 'Other' error responses |
| percentOtherErrors | Percentage of Other error responses (relative to all responses) |
| completedCategories | Number of categories (color, form, number) successfully completed (min = 0, max = 6) |
| sumFailureMaintainSet | Keeps a total of the number of times a participants selects an incorrect card |
| trialsCompleteFirstCategory | Keeps track of how many trials a participant needed to complete the first category after having maintained a correct streak of 5 or higher (default) |
| percentErrorsBlock1 | Percent ERROR responses in block1 (relative to all responses in that block) |
| percentErrorsBlock1 | Percent ERROR responses in block2 (relative to all responses in that block) |
| percentErrorsBlock1 | Percent ERROR responses in block3 (relative to all responses in that block) |
| percentErrorsBlock1 | Percent ERROR responses in block4 (relative to all responses in that block) |
| percentErrorsBlock1 | Percent ERROR responses in block5 (relative to all responses in that block) |
| percentErrorsBlock1 | Percent ERROR responses in block6 (relative to all responses in that block) |
| diffBlock1block2 | Difference scores of percent ERRORS in adjacent categories (e.g. diffBlock1block2 = percenterrors in first category - percenterrors in second category) |
| diffBlock2block3 | Difference scores of percent ERRORS in adjacent categories (block2-block3) |
| diffBlock3block4 | Difference scores of percent ERRORS in adjacent categories (block3-block4) |
| diffBlock4block5 | Difference scores of percent ERRORS in adjacent categories (block4-block5) |
| diffBlock5block6 | Difference scores of percent ERRORS in adjacent categories (block5-block6) |
| learningToLearn | The mean of the obtained difference scores |
| categorizingEfficiency | Suggested by Cianchetti et al (2005) = completedCategories * 6 + [IF all 6 categories compled: (48 - totaltrials)] |
File Name: mcst_raw*.iqdat
| Name | Description |
|---|---|
| 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 |
| startCategory | This script allows the user to choose the first category to be tested "U" for Undecided => based on first correct response (see Nelson, 1976) => either color, form OR number "C" for color "F" for form "N" for number |
| categoryOrder | The order in which categories should be run once the startCategory has been determined "CFN" ('classic', based on Wisconsin Card Sorting Task): color precedes form, form precedes number, number precedes color "CNF": color preceds number, number precedes form, form precedes color "FLEX": the categories are decided upon first selection after rule change block1: depends on first correct selection block2: depends on first correct selection of categories that haven't run yet block3: last unselected category block4 = block1 (but block3 category cannot be run); block5 = block2, block6 = block3 |
| csTotalTrials | Maximum Number of trials (default = 48 => 2 decks x 24 cards) |
| csTotalBlocks | Maximum Number each category is tested (default = 2) |
| correctStreakThreshold | Number of consecutive correct responses before a rule change (default = 10) |
| setmaintainThreshold | Number of consecutive correct responses after which an incorrect response is scored as a "Failure to maintain Set" (default = 5) |
| showDeckInfo | If set to " true" information about the deck (e.g. 1 of 2) and card number (e.g. 7 of 64) are displayed on the screen for the participant to see (default: false (0)) |
| showRuleChangeAlert | If set to "true" participants are alerted when the categorization rules change (default: true (1)) |
| categoriesRun | Stores the order of the categories that were run |
| blockCode | Name of the current block |
| blockNum | Number of the current block |
| 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. |
| countColorBlocks | The number of color blocks started |
| countFormBlocks | The number of number blocks started |
| countNumberBlocks | The number of form blocks started |
| colortrialcount | Sum up the trials run by category 'color' |
| numbertrialcount | Sum up the trials run by category 'number' |
| formtrialcount | Sum up the trials run by category 'form' |
| totalTrials | Counts the total trials run |
| countTrialsPerBlock | Counts the trials run in the current category block |
| category | 1 = color; 2 = form; 3 = number |
| stimulusItem.1 | The presented target card |
| stimulusItem.2 | Categorization card1 |
| stimulusItem.3 | Categorization card2 |
| stimulusItem.4 | Categorization card3 |
| stimulusItem.5 | Categorization card4 |
| lastCategory | Presents the last last category tested (C,N,F or N/A) |
| currentCategory | Presents the current category tested (C,N,F or still 'Undecided') |
| response | The participant's response (card selection) |
| latency | The response latency in ms; measured from onset of target card |
| responseCategory | => records features that the selected card (response) and the test card have in common C (color); F (form); N (number); O (other) |
| correct | The correctness of the response (1 = correct; 0 = otherwise) |
| correctStreak | Counts consecutive correct responses (if an error is made, it's reset back to 0) |
| errorSumBlock | Counts the errors made in the current block |
| scoringDeckCount | Tracks the number of decks run |
| scoringTrialCount | Tracks the number of total trials run |
| scoringtrialCountPerCategory | Tracks the number of trials run per category |
| scoringCategoryCount | Tracks the number of categories run |
| scoringCategory | Tracks the category run: 1 = C; 2 = F; 3 = N |
| scoringCard | Tracks the specific card presented during the trial |
| scoringResponse | Tracks the selected response card |
| scoringRespCategories | Tracks the response category; e.g. CN => the response falls into the color/number categories |
| scoringAcc | Tracks the accuracy of the response: 1 = correct (aka respCategories contained the current category); 0 = error |
| scoringCorrectStreak | Tracks the number of consecutive correct responses |
| scoringPerseverativeResponse | Tracks perseverative responses 1 = perseverative response (pResponse) 0 = not scored as a pResponse* (see below for how pResponses are scored in this script) |
| scoringpResponsePrinciple | Tracks the pResponse-principle that were (likely) currently in effect for scoring pResponses |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
| csTotalTrials | Maximum Number of trials (default = 48 => 2 decks x 24 cards) | 48 |
| csTotalBlocks | Maximum Number each category is tested (default = 2) | 2 |
| correctStreakThreshold | Number of consecutive correct responses before a rule change (default = 6) | 6 |
| setmaintainThreshold | Number of consecutive correct responses after which an incorrect response is scored as a "Failure to maintain Set" (default = 3) | 3 |
| showDeckInfo | If set to " true" information about the deck (e.g. 1 of 2) and card number (e.g. 7 of 24) are displayed on the screen for the participant to see (default: false) | false |
| showRuleChangeAlert | If set to "true" participants are alerted when the categorization rules change | true |
| picSize | Size of cards determined by canvas height percentage | 30% |
| startCategory | This script allows the user to choose the first category to be tested "U" for Undecided (default)=> based on first (correct) response (see Nelson, 1976) => either color, form OR number "C" for color "F" for form "N" for number | "U" |
| categoryOrder | The order in which categories should be run once the startCategory has been determined choose from: "CFN", "CNF", "FLEX-1", "FLEX-2" "CFN" ('classic' WCST order): color precedes form, form precedes number, number precedes color "CNF": color preceds number, number precedes form, form precedes color "FLEX-1": the categories are decided upon first selection after rule change (default) with the constraint that the category order run during the first round is maintained during subsequent rounds ROUND1: flexible block1: depends on first correct selection block2: depends on first correct selection of categories that haven't run yet block3: last unselected category ROUND2: fixed block4-block6: categories are run in the order they were run in round1 "FLEX-2": the categories are decided upon first selection after rule change ROUND1: flexible block1: depends on first correct selection block2: depends on first correct selection of categories that haven't run yet block3: last unselected category ROUND2: flexible block4 = block1 (but block3 category3 cannot be run); block5 = block2, block6 = block3 | "FLEX-1" |