Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Created: January 31, 2017
Last Modified: January 03, 2025 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements a computerized version of the Nine Hole Peg Test, a test of fine motor behavior.
Mathiowetz V, Weber K, Kashman N, Volland G. Adult Norms for the Nine Hole Peg Test of Finger Dexterity. The Occupational Therapy Journal of Research. 1985;5:24-33.
Earhart, G.M., Cavanaugh, J.T., Ellis, T., Ford, M.P., Foreman, K.B., & Dibble, L. (2011). The 9-Hole Peg Test of Upper Extremity Function: Average Values, Test-Retest Reliability, and Factors Contributing to Performance in People With Parkinson Disease. JNPT, 35, 157-163.
Tobler-Ammann, B.C.,de Bruin, E.D., Fluet, M.C., Lambercy, O., Rob A. de Bie, R.A. & Knols, R.H. (2016). Concurrent validity and test-retest reliability of the Virtual Peg Insertion Test to quantify upper limb function in patients with chronic stroke. Journal of NeuroEngineering and Rehabilitation, 13:8.
7 minutes
Phase1: Participants are asked to move 9 'pegs' (=blue discs) with the mouse from one area of the screen into the 9 empty holes (=white discs) of a pegboard. Phase2: Once all pegs are placed, participants need to move them back to the starting positions.
1. Mouse Training:
Participants get to try out to drag and drop a blue disc on the screen. They are asked to:
- move the disc around with the left or right hand
- place the disc on a target stimuli and see how it changes color when it's successfully placed
- once they understand how to use the mouse, they can continue
Block 1: Dominant Hand (always tested first)
1. Practice:
Participants are asked to complete the test once with their dominant hand for practice
2. Test:
Participants are asked to complete the test a second time with their dominant hand (for the test)
Block 2: Non-Dominant Hand (always tested second)
1. Practice:
Participants are asked to complete the test once with their non-dominant hand for practice
2. Test:
Participants are asked to complete the test a second time with their dominant hand(for the test)
- a peg is successfully placed if all parts of the peg are placed onto an empty hole
The stimuli are created by the script. The size of the holes (on pegboard) can be edited via an editable parameter
provided by Millisecond - can be edited in script nineholepegtest_instructions_inc.iqjs
File Name: nineholepegtest_summary*.iqdat
| Name | Description |
|---|---|
| inquisit.version | Inquisit version number |
| computer.platform | Device platform: win | mac |ios | android |
| 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 |
| movingDuration1DH | Phase1 (DOMINANT hand): stores the complete duration (in ms) of moving the pegs to the pegboard until all holes are filled measured from selecting the first peg |
| timeUntilFirstPegSelection1DH | Phase1 (DOMINANT hand): stores the time (in ms) it took participant to start moving the first peg to the pegboard |
| transportDrops1DH | Phase1 (DOMINANT hand): number of transport drops across pegs (transfer drop: picking up and dropping a peg before it is successfully placed) |
| movingDuration2DH | Phase2 (DOMINANT hand): stores the complete duration (in ms) of moving the pegs back to the startline until all pegs are back measured from selecting the first peg from the pegboard |
| timeUntilFirstPegSelection2DH | Phase2 (DOMINANT hand): stores the time (in ms) it took participant to start moving the first peg back to the startline |
| transportDrops2DH | Phase2 (DOMINANT hand): number of transport drops across pegs (transfer drop: picking up and dropping a peg before it is successfully placed) |
| movingDuration1NDH | Phase1 (NON-DOMINANT hand): stores the complete duration (in ms) of moving the pegs to the pegboard until all holes are filled measured from selecting the first peg |
| timeUntilFirstPegSelection1NDH | Phase1 (NON-DOMINANT hand): stores the time (in ms) it took participant to start moving the first peg to the pegboard |
| transportDrops1NDH | Phase1 (NON-DOMINANT hand): number of transport drops across pegs (transfer drop: picking up and dropping a peg before it is successfully placed) |
| movingDuration2ndH | Phase2 (NON-DOMINANT hand): stores the complete duration (in ms) of moving the pegs back to the startline until all pegs are back measured from selecting the first peg from the pegboard |
| timeUntilFirstPegSelection2ndH | Phase2 (NON-DOMINANT hand): stores the time (in ms) it took participant to start moving the first peg back to the startline |
| transportDrops2ndH | Phase2 (NON-DOMINANT hand): number of transport drops across pegs (transfer drop: picking up and dropping a peg before it is successfully placed) |
File Name: nineholepegtest_raw*.iqdat
| Name | Description |
|---|---|
| build | Inquisit version number |
| computer.platform | Device platform: win | mac |ios | android |
| date | Date the session was run |
| time | Time the session was run |
| subject, group, | With the current subject/groupnumber |
| session | Session number |
| blockCode | Name of the current block |
| blockNum | Number of the current block |
| trialCode | Name of the current trial |
| trialNum | Number of the current trial |
| condition | "DragDropTraining" (drag/drop training), "practice2" (dry run of task), "test" |
| phase | 1 = move pegs to board; 2 = move pegs from board back to start |
| hand | DH = dominant hand; NDH = non-dominant hand |
| targetPeg | Stores the currently moved peg |
| latency | The response latency (in ms); measured from: onset of trial until measured response |
| countSuccesses | Stores the number of pegs successfully placed |
| transportDrops | The sum of all 'transport Drops' during the current phase (resets for each phase and hand) transportdrop = number of time participants released ('dropped') a stimulus prematurely before it's successfully placed transportDropsPeg1 |
| transportDropsPeg9 | Calculates the number of times peg1-9 was picked up and released ('dropped') before it was successfully placed into a hole |
| movingDuration | Calculates the complete duration (in ms) of moving the pegs until all holes are filled (phase 1) or pegs are moved back beyond startwall (phase 2); measured from selecting the first peg until last peg is placed |
| startMoveTime | Stores the script.elapsedTime (in ms) of the start of a movement trial (either phase 1 or phase 2) |
| startMoveFirstPeg | Stores the script.elpasedtime (in ms) of moving the first peg measured from clicking on the first peg (either phase 1 or phase 2) |
| timeUntilFirstPegSelection | Stores the time (in ms) it took participant to start moving the first peg to the pegboard (phase 1) or from the pegboard back beyond the startwall (phase 2) |
| endTime | Stores the script.elapsedTime (in ms) at the end of successfully moving all 9 pegs into the holes (phase 1) or pegs are moved back beyond startwall (phase 2) |
| peg1Set | 1 = peg1 is successfully placed; 0 = otherwise (same for all 9 pegs) |
| hole1Occupied | 1 = hole1 (from left to right, top to bottom) is occupied by a peg; 0 = otherwise (same for all 9 holes) |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
| sizingFactor | Sets the size of the holes on the backboard in relation to the size of the pegs. Default: 1.1 => the radius of the holes are 1.1 times the radius of the pegs (10% larger) the script enforces a range of 1.025 - 1.5. |