Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Created: January 10, 2024
Last Modified: January 20, 2024 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements a Non-X Continuous Performance Task (NonX-CPT). A Continuous Performance Task (CPT) uses a go/nogo testing paradigm with a stream of stimuli that either require a go response ("press the spacebar") or a nogo response ("don't do anything"). The NonX-CPT procedure presents a high frequency of go-responses (NonX trials) and low frequency of nogo-responses (X trials). This contrasts with the CPT-Rosvold procedure ('X-CPT'). The Conners CPT-3 (Conners, 1995) is one example of a nonX-CPT procedure. CPTs are generally used as a measure of sustained and selective attention.
Ballard, J. C. (2001). Assessing Attention: Comparison of Response-Inhibition and Traditional Continuous Performance Tests. Journal of Clinical and Experimental Neuropsychology, 23(3), 331–350. https://doi.org/10.1076/jcen.23.3.331.1188
Conners, C.K. (1995). Conners' Continuous Performance Test computer program 3.0: User's manual. Toronto, Ontario, Canada: Multi-Health Systems Inc.
Gregg, A. & Sedikides, C. (2010). Narcissistic Fragility: Rethinking Its Links to Explicit and Implicit Self-esteem, Self and Identity, 9:2, 142-161 (p.148)
18 minutes
Participants view a continuous stream of letters and are asked to press the Spacebar whenever the letter is 'NOT an X' (go trials) but refrain from responding when the letter is an X (nogo trials).
(1) Optional Practice Session (see editable parameter section to fine-tune the practice phase)
By default, the practice session runs 20 trials with 12 go-trials (nonX) and 8 nogo-trials (X).
The frequencies were chosen to run more go than nogo trials but to run more nogo trials for
practice purposes than during the test procedure. Participants receive error feedback
(by type of error).
The practice block is repeated 3 times if performance is lower than 80% correct (check editable parameters).
(2) Test Session (see editable parameter section to fine-tune the test phase)
By default, the script runs 6 main blocks that each run 3 (sub)blocks of
3 different ISIs (1000ms,2000ms,4000ms).
The order of the Isis can be counterbalanced across the 6 blocks or are selected randomly.
By default, they are counterbalanced.
There are no breaks between ISIs and/or main blocks. The task seems to be continuous from the
participant's perspective.
For each isi-(sub)block, the scripts runs 10% nogo trials (for 20 trials => 2 nogo trials, editable parameters).
The order of go and nogo trials is randomly determined.
provided by Millisecond - can be edited under section 'Editable Stimuli'
provided by Millisecond - can be edited under section 'Editable Instructions'
File Name: nonx_cpt_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 |
Parameters |
|
| numberOfMainBlocks | The number of main blocks to run |
| numberOfIsiPerBlock | The number of Isis to run |
| numberOfTrialsPerIsi | The number of Trials per Isi |
| propNoGoTrialsPerIsi | Proportion of Nogo Trials per Isi |
Practice |
|
| practiceCounter | Number of practice rounds run |
| practiceAcc | Proportion correct in the final practice round |
Test |
|
| trialCounterPerIsiTotal | Number of test trials run |
| trialCounterPerIsiGoTotal | Number of Go test trials run |
| trialCounterPerIsiNoGoTotal | Number of Nogo test trials run |
Accuracy Measures |
|
| propCorrectTotal | Overall proportion correct across all test trials (regardless of trialType) |
| hitRateTotal | Proportion of responses to targets (nonX stims) relative to all go-trials (= correct response for go trials) |
| missRateTotal | Proportion of missed responses to targets (nonX stims) relative to all go-trials => possible indicator of inattentiveness |
| falseAlarmRateTotal | Proportion of responses to non-targets (X stims) relative to all nogo-trials (= error response for nogo trials) => coupled with fast hitRT: a possible indicator for impulsive responding => coupled with slow hitRT: a possible indicator for inattentiveness |
| corrRejectRateIsi1 | Proportion of non-responses to non-targets relative to all nogo-trials (= correct response for nogo trials) |
| pRespCounterTotal | Number of Perseverations across all test trials (Perseverations = random responses + anticipatory responses) => Perseverations indicate impulsivity or a very liberal response style. |
| zHitRateTotal | The calculate z-score of the overall hitRate |
| zFalseAlarmRateTotal | The calculated z-score of the overall falseAlarm/falseAlarm rate Adjustments to z-scores as recommended by Gregg & Sedikides (2010) Adjustments are made if the FArate (hitRate) = 0 (increased to 0.005) or 1 (decreased to 0.995)* |
| dPrime | Computes d' (parametric measure of discriminability btw. signals and noise) => Range (in this script) -5.1516586840152740479 <= dprime <= 5.1516586840152740479 (=perfect performance) => The higher the value, the better signals (go stims) were overall distinguished from noise (nogo stims) (d' = 0: chance performance; negative d-primes: participant treated nontargets as targets and targets as nontargets) |
| c | C-criterion in signal detection: The absolute value of c provides an indication of the strength of the response bias/response style negative: participant more likely to report that signal is present (liberal response style) may favor faster responding in speed-accuracy trade-off response paradigms positive: favoring caution (conservative response style) |
Response Time Measures |
|
| hitRTTotal | The mean response latency (in ms) of hit responses -> a fast hitRT coupled with high falseAlarmRate may indicate impulsive responding -> a slow hitRT (coupled with high error rate) may indicate inattentiveness while responding -> a slow hitRT in general could also indicate a conservative response style |
| sdHitRTTotal | The standard deviation (in ms) of hit responses (consistency of response speed to targets) -> possible indicator of variable attentiveness across the entire task |
Performance Statistics By Isi: An Increase In Hit Response Time As Well As An Increase In Error Rates From Fast (E.G. 1S) To Slower Isis (E.G 4S) May Indicate Loss Of Vigilance. |
|
| isi1 | Stores the value (in ms) run as ISI1 |
| trialCounterPerIsiIsi1 | Number of test trials run in Isi1 |
| trialCounterPerIsiGoIsi1 | Number of Go test trials run in Isi1 |
| trialCounterPerIsiNoGoIsi1 | Number of Nogo test trials run in Isi1 |
| hitRateIsi1 | Proportion of responses to targets (nonX stims) relative to all Isi1 go-trials (= correct response for go trials) |
| missRateIsi1 | Proportion of missed responses to targets (nonX stims) relative to all Isi1 go-trials |
| falseAlarmRateIsi1 | Proportion of responses to non-targets (X stims) relative to all Isi1 nogo-trials (= error response for nogo trials) |
| corrRejectRateIsi1 | Proportion of non-responses to non-targets relative to all Isi1 nogo-trials (= correct response for nogo trials) |
| pRespCounterIsi1 | Number of Perseverations across all Isi1 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTIsi1 | The mean response latency (in ms) of hit responses in Isi1 |
| sdHitRTIsi1 | The standard deviation (in ms) of hit responses in Isi1 |
| isi2 | Stores the value (in ms) run as Isi2 |
| trialCounterPerIsiIsi2 | Number of test trials run in Isi2 |
| trialCounterPerIsiGoIsi2 | Number of Go test trials run in Isi2 |
| trialCounterPerIsiNoGoIsi2 | Number of Nogo test trials run in Isi2 |
| hitRateIsi2 | Proportion of responses to targets (nonX stims) relative to all Isi2 go-trials (= correct response for go trials) |
| missRateIsi2 | Proportion of missed responses to targets (nonX stims) relative to all Isi2 go-trials |
| falseAlarmRateIsi2 | Proportion of responses to non-targets (X stims) relative to all Isi2 nogo-trials (= error response for nogo trials) |
| corrRejectRateIsi2 | Proportion of non-responses to non-targets relative to all Isi2 nogo-trials (= correct response for nogo trials) |
| pRespCounterIsi2 | Number of Perseverations across all Isi2 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTIsi2 | The mean response latency (in ms) of hit responses in Isi2 |
| sdHitRTIsi2 | The standard deviation (in ms) of hit responses in Isi2 |
| isi3 | Stores the value (in ms) run as Isi3 |
| trialCounterPerIsiIsi3 | Number of test trials run in Isi3 |
| trialCounterPerIsiGoIsi3 | Number of Go test trials run in Isi3 |
| trialCounterPerIsiNoGoIsi3 | Number of Nogo test trials run in Isi3 |
| hitRateIsi3 | Proportion of responses to targets (nonX stims) relative to all Isi3 go-trials (= correct response for go trials) |
| missRateIsi3 | Proportion of missed responses to targets (nonX stims) relative to all Isi3 go-trials |
| falseAlarmRateIsi3 | Proportion of responses to non-targets (X stims) relative to all Isi3 nogo-trials (= error response for nogo trials) |
| corrRejectRateIsi3 | Proportion of non-responses to non-targets relative to all Isi3 nogo-trials (= correct response for nogo trials) |
| pRespCounterIsi3 | Number of Perseverations across all Isi3 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTIsi3 | The mean response latency (in ms) of hit responses in Isi3 |
| sdHitRTIsi3 | The standard deviation (in ms) of hit responses in Isi3 |
Block By Block Performance Statistics: A Increase In Hit Response Time (Get Slower) As Well As An Increase In Error Rates Over Time Could Be A Sign Of Waning Sustained Attention. |
|
| trialCounterPerIsiBlock1 | Number of test trials run in Block1 |
| trialCounterPerIsiGoBlock1 | Number of Go test trials run in Block1 |
| trialCounterPerIsiNoGoBlock1 | Number of Nogo test trials run in Block1 |
| hitRateBlock1 | Proportion of responses to targets (nonX stims) relative to all Block1 go-trials (= correct response for go trials) |
| missRateBlock1 | Proportion of missed responses to targets (nonX stims) relative to all Block1 go-trials |
| falseAlarmRateBlock1 | Proportion of responses to non-targets (X stims) relative to all Block1 nogo-trials (= error response for nogo trials) |
| pRespCounterBlock1 | Number of Perseverations across all Block1 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTBlock1 | The mean response latency (in ms) of hit responses in Block1 |
| sdHitRTBlock1 | The standard deviation (in ms) of hit responses in Block1 |
| trialCounterPerIsiBlock2 | Number of test trials run in Block2 |
| trialCounterPerIsiGoBlock2 | Number of Go test trials run in Block2 |
| trialCounterPerIsiNoGoBlock2 | Number of Nogo test trials run in Block2 |
| hitRateBlock2 | Proportion of responses to targets (nonX stims) relative to all Block2 go-trials (= correct response for go trials) |
| missRateBlock2 | Proportion of missed responses to targets (nonX stims) relative to all Block2 go-trials |
| falseAlarmRateBlock2 | Proportion of responses to non-targets (X stims) relative to all Block2 nogo-trials (= error response for nogo trials) |
| pRespCounterBlock2 | Number of Perseverations across all Block2 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTBlock2 | The mean response latency (in ms) of hit responses in Block2 |
| sdHitRTBlock2 | The standard deviation (in ms) of hit responses in Block2 |
| trialCounterPerIsiBlock3 | Number of test trials run in Block3 |
| trialCounterPerIsiGoBlock3 | Number of Go test trials run in Block3 |
| trialCounterPerIsiNoGoBlock3 | Number of Nogo test trials run in Block3 |
| hitRateBlock3 | Proportion of responses to targets (nonX stims) relative to all Block3 go-trials (= correct response for go trials) |
| missRateBlock3 | Proportion of missed responses to targets (nonX stims) relative to all Block3 go-trials |
| falseAlarmRateBlock3 | Proportion of responses to non-targets (X stims) relative to all Block3 nogo-trials (= error response for nogo trials) |
| pRespCounterBlock3 | Number of Perseverations across all Block3 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTBlock3 | The mean response latency (in ms) of hit responses in Block3 |
| sdHitRTBlock3 | The standard deviation (in ms) of hit responses in Block3 |
| trialCounterPerIsiBlock4 | Number of test trials run in Block4 |
| trialCounterPerIsiGoBlock4 | Number of Go test trials run in Block4 |
| trialCounterPerIsiNoGoBlock4 | Number of Nogo test trials run in Block4 |
| hitRateBlock4 | Proportion of responses to targets (nonX stims) relative to all Block4 go-trials (= correct response for go trials) |
| missRateBlock4 | Proportion of missed responses to targets (nonX stims) relative to all Block4 go-trials |
| falseAlarmRateBlock4 | Proportion of responses to non-targets (X stims) relative to all Block4 nogo-trials (= error response for nogo trials) |
| pRespCounterBlock4 | Number of Perseverations across all Block4 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTBlock4 | The mean response latency (in ms) of hit responses in Block4 |
| sdHitRTBlock4 | The standard deviation (in ms) of hit responses in Block4 |
| trialCounterPerIsiBlock5 | Number of test trials run in Block5 |
| trialCounterPerIsiGoBlock5 | Number of Go test trials run in Block5 |
| trialCounterPerIsiNoGoBlock5 | Number of Nogo test trials run in Block5 |
| hitRateBlock5 | Proportion of responses to targets (nonX stims) relative to all Block5 go-trials (= correct response for go trials) |
| missRateBlock5 | Proportion of missed responses to targets (nonX stims) relative to all Block5 go-trials |
| falseAlarmRateBlock5 | Proportion of responses to non-targets (X stims) relative to all Block5 nogo-trials (= error response for nogo trials) |
| pRespCounterBlock5 | Number of Perseverations across all Block5 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTBlock5 | The mean response latency (in ms) of hit responses in Block5 |
| sdHitRTBlock5 | The standard deviation (in ms) of hit responses in Block5 |
| trialCounterPerIsiBlock6 | Number of test trials run in Block6 |
| trialCounterPerIsiGoBlock6 | Number of Go test trials run in Block6 |
| trialCounterPerIsiNoGoBlock6 | Number of Nogo test trials run in Block6 |
| hitRateBlock6 | Proportion of responses to targets (nonX stims) relative to all Block6 go-trials (= correct response for go trials) |
| missRateBlock6 | Proportion of missed responses to targets (nonX stims) relative to all Block6 go-trials |
| falseAlarmRateBlock6 | Proportion of responses to non-targets (X stims) relative to all Block6 nogo-trials (= error response for nogo trials) |
| pRespCounterBlock6 | Number of Perseverations across all Block6 test trials (Perseverations = random responses + anticipatory responses) |
| hitRTBlock6 | The mean response latency (in ms) of hit responses in Block6 |
| sdHitRTBlock6 | The standard deviation (in ms) of hit responses in Block6 |
File Name: nonx_cpt_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 |
Parameters |
|
| numberOfMainBlocks | The number of main blocks to run |
| numberOfIsiPerBlock | The number of Isis to run |
| numberOfTrialsPerIsi | The number of Trials per Isi |
| propNoGoTrialsPerIsi | Proportion of Nogo Trials per Isi |
| blockcode | The name the current block (built-in Inquisit variable) |
| blocknum | The number of the current block (built-in Inquisit variable) |
| 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. |
| practice | 1 = practice session; 0 = test session |
| blockCounter | Counts the number of blocks run; resets after practice |
| trialCounterPerBlock | Tracks the number of trials run per main block |
| currentIsiOrder | Stores the current IsiOrder for the current test block (if counterbalanced) |
| isiCounter | Counts the number of Isis run in the current (main) test block |
| currentIsi | Stores the current ISI (in ms) |
| trialCounterPerIsi | Tracks the number of trials run per current Isi |
| trialType | 0 = nogo trial (X), 1 = go trial (non-X) |
| letter | The letter presented |
| corrResp | Stores the correct response ("RESPONSE" vs. "NO RESPONSE") |
Custom Dvs For Trial.Nonxcpt |
|
| resp | Whether a response was made ("RESPONSE" vs. "NO RESPONSE") |
| respRT | The response time of the response; measured from onset of letter (empty for no responses) |
| valid | 0 = anticipatory response (response time < 100ms); 1 = valid response (response time >= 100) |
| respCategory | Anticipatory: a response was made within the first 100ms after onset of letter hit: a valid response was made in a go trial miss: no response was made in a go trial correct rejection: no response was made a in a nogo trial falseAlarm: a valid response was made in a nogo trial |
| acc | 1 = the response was correct and valid for the current trial 0 = the current response was incorrect for the current trial ( anticipatory responses are always incorrect) |
| pResponse | 0 = no Perseveration (= anticipatory and/or additional (random) responses) was made during this trial 1 = at least one Perseveration was detected |
| pRespCounter | Number of Perseverations (= anticipatory and/or additional (random) responses) counted during the current trial |
Built-In: Note These Variables Are Not Useful For Trial.Nonxcpt Due To The Current Trial Setup |
|
| response | The response of participant (scancode of response button) |
| correct | Correctness of response (1 = correct, 0 = error) |
| latency | Response latency (in ms); measured from: onset of trial |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
Design Parameters |
||
| numberOfMainBlocks | Number of main blocks to run number should work with numbers of Isis run and potentially parameters.counterbalanceOrderIsisACrossMainBlocks the script only provides summary variables up to 6 main blocks | 6 |
| numberOfIsiPerBlock | Refers to 'subblocks' (needs to correspond to number of items in list.isis below, here: 3) Notes a) isis are run in blocked format (hence the subblock reference) b) the script only provides summary variables up to 3 isis | 3 |
| numberOfTrialsPerIsi | Number of trials run per isi subblock | 20 |
| propNoGoTrialsPerIsi | Proportion of nogo trials per isi subblock (should result in an integer number) | 0.1 |
| counterbalanceOrderIsisAcrossMainBlocks | Controls the order of the isis per main block true = the order of the isis is counterbalanced across all blocks Example: for 3 isis, there need to be 6 main blocks to run each combination of isis at least once IMPORTANT: if number of isis <> 3 and counterbalancing is needed, change list.isiOrders/number of Main Blocks accordingly false = isis are selected randomly without replacement per main block | true |
| runPractice | True: a practice session is run before the main test session false: no practice session is run; the script starts with the test session | true |
Only Relevant If Practice Should Be Run |
||
| numberOfPracticeTrials | Number of practice trials per practice block | 20 |
| propNoGoTrialsPractice | Proportion of Nogo trials in a practice block | 0.4 |
| practiceIsiMS | The isi (in ms) used for practice blocks | 2000 |
| minAccPractice | The minimum proportion correct that stops practice (after 20 trials) | 0.8 |
| maxPracticeBlocks | The maximum number of practice blocks run before the test is started | 3 |
Timing Parameters (Isis Can Be Set Under List.Isis) |
||
| stimDurationMS | The duration of the letters in MS | 250 |
| anticipatoryRespMS | Response times lower than this are considered 'anticipatory' | 100 |
| feedbackDurationMS | The error feedback duration (in ms) during practice session | 1500 |
Stimuli Sizing |
||
| letterHeightPct | Proportional height (to canvas) of the letters | 15% |
Responsekeys |
||
| responseKey | The response key (here: space) | " " |
| responseKeyLabel | The label used to describe the response key for instruction purposes | "[space]" |