Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Credits:
Millisecond thanks Brian Roche for sharing his FAST5.3 Inquisit script with us!
Created: January 13, 2025
Last Modified: January 11, 2026 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements the Function Acquisition Speed Test (FAST), an implicit measure of stimulus relatedness (based on prior learning).
The FAST assesses how quickly a person can learn to arbitrarily sort items based on their existing associations, with the speed of acquisition reflecting the strength of these previously learned relationships. Items that are more strongly connected are thought to be easier to be sorted into the same categories, resulting in higher performance and faster sorting times. The FAST is suggested to be an alternative to the IAT and IRAP (e.g. Watters et al, 2023).
This default FAST template uses the attribute categories POSITIVE vs. NEGATIVE and the target categories FLOWERS vs. INSECTS with the hypothesized strength FLOWERS-POSITIVE (INSECTS-NEGATIVE) being more strongly related than the opposite pairings.
O'Reilly, A., Roche, B., Ruiz, Maria R., Tyndall, I., & Gavin, A. (2012). The Function Acquisition Speed Test (FAST): a Behavior Analytic Implicit Test for Assessing Stimulus Relations. The Psychological Record, 62(3), 507-528.
Watters, A. (2023). Assessing the Function Acquisition Speed Test (FAST) as a Novel Implicit Measure of Salient Emotional Experiences. ProQuest Dissertations & Theses.
Watters, A., Cummins, J., & Roche, B. (2023). How to Build and How not to Build an Implicit Measure in Behavior Analysis: A case Study Using the Function Acquisition Speed Test. Perspectives on Behavior Science, 46(3–4), 459–492. https://doi.org/10.1007/s40614-023-00387-w
Javascript implementation accessible here: https://github.com/JamieCummins/fast-js
Wall, M., Passarelli, D & Roche, B. (2025). Assessing the Function Acquisition Speed Test (FAST) as a measure of implicit gender and racial bias. The Psychological Record, 75, 607–620.
5 minutes
Participants are asked to sort attributes (e.g. positive and negative adjectives) and target items (e.g flowers vs. insects) via 2 keystroke presses (e.g. Z vs M). Feedback is given after each sorting trial to inform the participant whether the correct key was pressed.
Participants work through two blocks: one 'CONSISTENT' and one 'INCONSISTENT' block.
CONSISTENT BLOCK: attribute and target items that are hypothesized to be more strongly connected (based on prior learning/experiences) are sorted via the same keys (Example: positive adjectives, e.g. "beautiful", flowers, e.g. "daisy", are both correctly sorted via the Z-key). -> 'stereotype conforming' matchings
INCONSISTENT BLOCK: attribute and target items that are hypothesized to be more strongly connected (based on prior learning/experiences) are sorted via opposite keys (Example: positive adjectives are correctly sorted via the M-key but flowers are correctly sorted via the Z-key). -> 'stereotype NONconforming' matchings
The order of the consistent and inconsistent block is determined randomly.
(1) General instructions
(2) Optional Practice (see section Editable Parameters), by default the practice block is skipped
(3) Test: 2 test blocks (CONSISTENT vs. INCONSISTENT)
-> order of blocks is randomly determined
-> 52 (learning) trials per block (see section Editable Parameters)
-> selection of the two attribute trials (here: positive vs. negative words) and the two target trials
(here: flowers vs. insects) is done randomly without replacement (repeat after all 4 trial types have been selected)
-> each attribute/target trial randomly (without replacement) selects one of their assigned stimuli
provided by Millisecond - can be edited in script 'fast_stimuli_inc.iqjs'
this script acts as a template. By changing the stimuli, you can test your own
hypotheses.
provided by Millisecond - can be edited in script 'fast_instructions_inc.iqjs'
File Name: fast_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 |
| skipPractice | 0 = false -> practice block is run 1 = true -> practice block is skipped |
| nTestTrials | Number of test trials (parameter) |
| blockOrder | The order in which the c(onsistent) and i(nconsistent) blocks were run (order is randomly determined) |
Accuracy |
|
| propCorrectOverall | Overall proportion correct (across consistent and inconsistent block) |
| propCorrectC | Proportion correct across consistent block |
| propCorrectI | Proportion correct across inconsistent block |
Latencies |
|
| meanCorrRTC | Mean correct response time in consistent block |
| meanCorrRTI | Mean correct response time in inconsistent block |
Fluency Score Calculations |
|
| durationCMS | The block duration (in ms) of the consistent block (block duration includes intertrial interval and feedback durations) |
| durationIMS | The block duration (in ms) of the inconsistent block (block duration includes intertrial interval and feedback durations) |
| correctCountC | Total number of correct responses in the consistent block |
| incorrectCountC | Total number of incorrect responses in the consistent block (including timeout errors) |
| wrongKeyCountC | Total number of wrong key responses in the consistent block (excluding timeout errors) |
| timeoutCountC | Total number of timeout errors in the consistent block |
| correctCountI | Total number of correct responses in the inconsistent block |
| incorrectCountI | Total number of incorrect responses in the inconsistent block (including timeout errors) |
| wrongKeyCountI | Total number of wrong key responses in the inconsistent block (excluding timeout errors) |
| timeoutCountI | Total number of timeout errors in the inconsistent block |
Response Fluency Measures |
|
| fdC | Per-minute response fluency in the consistent block [((correctCountC-incorrectCountC)/durationCMS)*60000] |
| fdI | Per-minute response fluency in the inconsistent block [((correctCountI-incorrectCountI)/durationIMS)*60000] |
| fastRFD | A per-minute Response Fluency Differential (RFD) score that is suggested to reflect the degree to which the response fluency on the consistent block is greater than that observed on the inconsistent block (Watters,2023,p.56-57). calculated as (((correctCountC-incorrectCountC)/durationCMS) - ((correctCountI-incorrectCountI)/durationIMS))*60000 => positive scores indicate greater response fluency in consistent condition (expected) => negative scores indicate greater response fluency in inconsistent condition (unexpected result) Watters (2023, p.56) writes that the blockDuration time was measured in seconds. Millisecond believes this to be a typo because 1) to translate minutes into ms you need to multiply the minute time by t_ms = t_min * 60*1000 = t_min * 60000 (the number stated in the equation) with seconds you would only need to multiply the minute time by 60. 2) the RFD numbers provided by Watters (2023) would be much higher if the blockDuration was measured in seconds => Millisecond uses the blockDuration in ms for the RFD calculations |
Learning Slope Measures (Based On Original Fast Script Code (Fast5.3) From Dr. Roche, March 2026) |
|
| slopeC | The learning slope in the Consistent Condition The slope is calculated as the slope of the regression line of the cumulative learning rate (accuracy plus time) |
| slopeI | The learning slope in the Inconsistent Condition |
| slopeDifference | The difference in slopes (slopeC-slopeI) => Positive scores (steeper learning in consistent condition) are expected results => Negative scores (steeper learning in inconsistent condition) are unexpected results |
Signal Detection Measures (See 'Scoring' Comments Above) |
|
| hitRate | Proportion of correct responses in Consistent condition |
| missRate | Proportion of incorrect responses (including no responses) in Consistent condition |
| missRateTrue | Proportion of incorrect key responses in Consistent condition |
| crRate | Proportion of correct responses in Inconsistent condition |
| faRate | Proportion of incorrect responses (including no responses) in Inconsistent condition |
| faRateTrue | Proportion of incorrect key responses in Inconsistent condition |
| zHitRate | The z-transformed hitRate |
| zFaRate | The z-transformed faRate |
| zFaRateTrue | The z-transformed faRateTrue |
| dPrime | Measure of sensitivity, ability to distinguish between signals (required stereotypical responses) and noise (here: required 'non-stereotypical' responses) => The higher the value, the better signals (required stereotypical responses) were overall distinguished from noise (here: required 'non-stereotypical' responses) => NON-Typical (inconsistent) pairings presented less of a distraction (d' = 0: chance performance; negative d-primes: opposite interpretations) |
| c | Criterium measure c-criterion in signal detection:The absolute value of c provides an indication of the strength of the response bias/response style (conservative vs. liberal) negative: more liberal, in this case suggesting that a stimulus would be consistent with the CONSISTENT pairing ('bias confirming') positive: more conservative |
| dPrimeTrue | DPrime measure, using 'faRateTrue' |
| cTrue | DPrime measure, using 'faRateTrue' |
File Name: fast_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 |
| 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. |
| condition | "c" = consistent; "i" = inconsistent |
| blockOrder | The order in which the consistent and inconsistent blocks are run |
| stimulusitem | Presented stimuli |
| response | The response of participant (scancode of response button) |
| responseText | The label of the response button |
| correct | Correctness of response (1 = correct, 0 = error) |
| latency | Response latency (in ms); measured from: onset of stims |
| rspTimestamp | Response timestamp of the current response (measured from onset of script) |
| respCategory | 0 = timeout 1 = incorrect response key was pressed 2 = correct response |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
Ui Parameters |
||
| canvasColor | The color of the portion of the screen used for the current task ("active") | white |
| screenColor | The color of the portion of the screen that is not used for the current task | white |
| defaultTextColor | The default text color | black |
Design Parameters |
||
| skipPractice | True = practice session is skipped (Waters et al, 2023, p.478, "[...] contemporary FAST studies generally omit practice blocks.") false = a practice session is run | true |
| nPracticeTrials | Number of practice trials (if practice block is run) | 10 |
| nTestTrials | Number of test trials run per consistent and inconsistent test block this number will generate a balanced number of all four trialtypes in a block | 52 |
Sizing Parameters |
||
| wordStimHeightPct | The default height of the word stimuli (in canvas height%) | 5% |
| imageStimHeightPct | The default height of picture stimuli (in canvas height%) | 20% |
Timing Parameters |
||
| getReadyDurationMS | Duration (in ms) of the getReady trial | 2000 |
| stimDurationMS | The duration (in ms) that the stims are presented (also the response time) | 3000 |
| itiMS | Interttrial interval (in ms): presents black screen before each new trial | 500 |
| feedbackMS | Feedback duration (in ms) | 500 |
Responsekeys |
||
| leftResponseKey | The left response key (on a QWERTY keyboard) | "Z" |
| rightResponseKey | The right response key (on a QWERTY keyboard) | "M" |