Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Created: January 21, 2013
Last Modified: January 19, 2025 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements Millisecond's computerized version of the Apples test (Bickerton et al, 2011), a test for visual neglect and search strategy.
Mancuso et al (2015) discuss four measures (ExecutionTime in seconds, Accuracy Score, left-right Asymmetry Score for targets, and Commission Asymmetry Score for left-open vs. right-open apples) that depend on age and level of schooling to varying degrees.
This script provides the functionality to present the 'apples page' in roughly the same absolute size as the original paper&pencil version of the Apples Test. Default settings default back to proportional sizing. Go to 'defaults' setting for more info.
Data Files will contain the suggested measures by Bickerton et al (2011)/Mancuso et al (2015) as well as additional information about the 'response path' (search path) taken to find the Apple targets. Screenshots of the taken path/numbered targets can be taken (optional setting) for further analyses.
DISCLAIMER Millisecond advises caution in comparing results obtained with this computerized version of the Apples Test to results obtained with the original paper&pencil version.
Bickerton WL, Samson D et al (2011) Separating forms of neglect using the Apples test: validation and functional prediction in chronic and acute stroke. Neuropsychology 25(5):567 https://doi.org/10.1037/a0023501
Mancuso, M., Rosadoni, S., Capitani, D., Bickerton, W. L., Humphreys, G. W., De Tanti, A., Zampolini, M., Galardi, G., Caputo, M., De Pellegrin, S., Angelini, A., Bartalini, B., Bartolo, M., Carboncini, M. C., Gemignani, P., Spaccavento, S., Cantagallo, A., Zoccolotti, P., & Antonucci, G. (2015). Italian standardization of the Apples Cancellation Test. Neurological Sciences, 36(7), 1233+1240. https://doi.org/10.1007/s10072-015-2088-2
7 minutes
Participants are asked to select as many full apples as they can find on a page of 150 items that displays 50 full apples, 50 apples that have a piece missing on the left side, and 50 apples that have a piece missing on the right side. By default, participants have 5 minutes to complete the task.
(1) Demographic Information (Optional, see section Editable Parameters)
- script collects age and education information about the participant
( Since Mancuso et al (2015) reported that age and education can have an impact on participants' execution time,
this information can be collected when running the script)
(2) Practice:
Participants practice to cross out the full apples while leaving the open apples alone.
7 example apples are provided on the vertical center line.
Practice can be repeated once.
If practice is failed twice in a row, the script terminates prematurely.
(3) Test: Max allotted time = 5minutes (editable parameter)
- participants are presented the 'stimuli page' and a submit button
(the 'stimuli page' is presented with 95% of the width of the active canvas to allow for some
room to provide the submit button)
- participants use the mouse/finger to select the apples scattered around the page
- When they are done, they click the submit button
- The test is over if the allotted time is up, or if participants submit their responses
- the apples page contains 150 apple images total and is divided into 5 columns
with 2 rows each. Each column contains the same number of foils and targets.
(4) Path Feedback with screencapture (optional)
Once done with the test, the script can show participants the 'stimuli page' with all apples
circled in blue and with all responses made numbered in sequence (starting with '1').
Numbers in Green show correctly selected apples, numbers in red show responses that were
made outside of the apples response circles. The taken path is marked by a turquoise dotted line.
A screenshot of this feedback page (with subject ID) can be taken for further analyses
(optional)
The original paper Apples Test (sized on DinA4) was re-created by Millisecond for this script
as a W:H=4:3 image to reduce pixelation of the apples.
Placement and size of the apples as well as apple appearance was attempted to be kept as similar as possible
to the original. The resulting image is stored under 'stimulipage.png'. This image could be replaced with
an image of the original apples test.
To check if the coded responsecircles that lie under the stimuli, still align with the stimuli,
set parameters.showResponseCirclePlacements to true.
The 'stimuli page' run by the script is sized to be 95% of the width of the active canvas
to allow for response buttons to be placed on the screen.
The script can be run with an absolutely sized stimuli page that approaches the actual size of the paper version
of the task (provided the screen is large enough). See section 'defaults' for more information.
provided by Millisecond - can be edited in script applesttest_instructions_inc.iqjs
Practice instructions modelled after Mancuso et al (2015)
File Name: applestest_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 |
| age | The age (in years) of the participant (if empty, no demographic information was collected) |
| education | Number of years in formal schooling (max: 16) (if empty, no demographic information was collected) |
| stimuliPageWidthMM | The width of the stimuli page in mm |
| stimuliPageHeightMM | The height of the stimuli page in mm |
| executionTimeSec | Apple search time in seconds |
| expectedExecutionTimeSec | The execution time (in sec) that can be expected given the participant's age and education ( Inquisit uses 16 years of education as the maximum) calculated using the formula suggested by Mancuso et al (2015) NA: no demographic information available (values could not be generated) |
| maximumExecutionTimeSec | The cut-off execution time (in sec) if participant takes longer than this, the performance can be coded as 'pathological' according to Mancuso et al (2015) NA: no demographic information available (values could not be generated) |
| executionTimeFlag | 1 = the ExecutionTimeSec surpassed the cutoff (maximumExecutationTimeSec) 0 = the ExecutionTimeSec did NOT surpass the cutoff NA: no demographic information available (values could not be generated) |
| accuracyScore | Number of correctly identified apples ('Measure of Selective Attention') Range: 0-50 Mancuso et al (2015): a performance showing 6 or more (left and right) omission errors should be considered pathological. => Accuracy score <= 44 should be considered pathological |
| asymmetryScoreHits | Score for egocentric neglect calculated as the differences in number of apples (targets) found on the right (c5r2,c5r2,c4r1,c4r2) and the number of apples found on the left (c1r1,c1r2,c2r1,c2r2) range: -20 to +20 Positive Value: more values were found on the right (left-sided neglect) Negative Value: more values were found on the left (right-sided neglect) Mancuso et al (2015): if the difference between left and right total omissions is equal or above 3, the performance should be considered pathological. |
| leftOmissions | Number of apples NOT selected on the left side (c1r1,c1r2,c2r1,c2r2); Range: 0-20 |
| rightOmissions | Number of apples NOT selected on the left side (c5r1,c5r2,c4r1,c4r2); Range: 0-20 |
| asymmetryScoreCommissions | Score for allocentric neglect calculated as the number of commission errors on left-open apples - number of commission errors on right-open apples Range: 0-50 Positive values indicate left neglect (more left-open than right-open commission errors) => if more left-open apples were 'confused' with targets than right-open ones, participant had a harder time distinguishing left-open apples from targers ('neglected' to see the left missing piece) Negative values indicate right neglect (more right-open than left-open commission errors) => if more right-open apples were 'confused' with targets than left-open ones, participant had a harder time distinguishing right-open apples from targers ('neglected' to see the right missing piece) Mancuso et al (2015): the difference btw. apples crossed out with a left opening minus the number of apples crossed out with a right opening >= 2 should be considered as pathological. |
| targetCounter | Counts the number of times a response was registered on a new target (Max: 50) (repeatedly selecting the same target does not increase the count) |
| targetCounterC1r1 | Counts the number of times a response was registered on a new target in column1,row1 (Max: 5) |
| targetCounterC1r2 | Counts the number of times a response was registered on a new target in column1,row2 (Max: 5) |
| targetCounterC2r1 | Counts the number of times a response was registered on a new target in column2,row1 (Max: 5) |
| targetCounterC2r2 | Counts the number of times a response was registered on a new target in column2,row2 (Max: 5) |
| targetCounterC3r1 | Counts the number of times a response was registered on a new target in column3,row1 (Max: 5) |
| targetCounterC3r2 | Counts the number of times a response was registered on a new target in column3,row2 (Max: 5) |
| targetCounterC4r1 | Counts the number of times a response was registered on a new target in column4,row1 (Max: 5) |
| targetCounterC4r2 | Counts the number of times a response was registered on a new target in column4,row2 (Max: 5) |
| targetCounterC5r1 | Counts the number of times a response was registered on a new target in column5,row1 (Max: 5) |
| targetCounterC5r2 | Counts the number of times a response was registered on a new target in column5,row2 (Max: 5) |
| foilCounter | Counts the number of times a response was registered on a new foil (Max: 100) (repeatedly selecting the same foil does not increase the count) |
| foilCounterC1L | Counts the number of times a response was registered on a new LEFT-open foil in column1 (10) |
| foilCounterC1R | Counts the number of times a response was registered on a new RIGHT-open foil in column1 (10) |
| foilCounterC2L | Counts the number of times a response was registered on a new LEFT-open foil in column2 (10) |
| foilCounterC2R | Counts the number of times a response was registered on a new RIGHT-open foil in column2 (10) |
| foilCounterC3L | Counts the number of times a response was registered on a new LEFT-open foil in column3 (10) |
| foilCounterC3R | Counts the number of times a response was registered on a new RIGHT-open foil in column3 (10) |
| foilCounterC4L | Counts the number of times a response was registered on a new LEFT-open foil in column4 (10) |
| foilCounterC4R | Counts the number of times a response was registered on a new RIGHT-open foil in column4 (10) |
| foilCounterC5L | Counts the number of times a response was registered on a new LEFT-open foil in column5 (10) |
| foilCounterC5R | Counts the number of times a response was registered on a new RIGHT-open foil in column5 (10) |
| otherRespCounter | Counts the number of times a response was registered that was not made on one of the target NOR foil response circles Notes - some other responses might simply be a missed target response circle - under each target (apple) as well as foil lies a response circle with a parameters.responseCircleSize_Pct, if response is registered outside of these responsecircles, the script counts it as an 'other' response. In some cases, these 'other' responses may simply be inaccurate screen responding. Check screenshots of response path if in doubt. |
| pathX | A variable that stores the horizontal coordinates of the response in canvas percentages in sequential order |
| pathY | A variable that stores the vertical coordinates of the response in canvas percentages in sequential order |
| targets | A variable that stores whether the responses were on a target (1) or elsewhere (0) in sequential order these values can be used in script applestest_path.iqjs to visualize the path taken |
File Name: applestest_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 |
| age | The age (in years) of the participant (if empty, no demographic information was collected) |
| education | Number of years in formal schooling (max: 16) (if empty, no demographic information was collected) |
| stimuliPageWidthMM | The width of the stimuli page in mm |
| stimuliPageHeightMM | The height of the stimuli page in mm |
| 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. |
| response | The response of participant (the name of the response area) |
| latency | Response latency (in ms); measured from: onset of trial |
| practiceBlockCounter | Number of times the practice was run |
| practiceFeedback | The practice feedback at the end of the practice block 0 = all correct 1 = try again 2 = thank you (premature termination of script; practice was unsuccessful twice in a row) |
| responseCounter | Counts the number of responses (excluding 'submit' response) |
| target | 1 = the current response was a target (full apple) 0 = the current response was not on a target response circle |
| foil | 1 = the current response was a foil (apple with missing piece) 0 = the current response was not on a foil response circle |
| targetCounter | Counts the number of times a response was registered on a new target (Max: 50) (repeatedly selecting the same target does not increase the count, but it does increase the responseCounter) |
| targetCounterC1r1 | Counts the number of times a response was registered on a new target in column1,row1 (Max: 5) |
| targetCounterC1r2 | Counts the number of times a response was registered on a new target in column1,row2 (Max: 5) |
| targetCounterC2r1 | Counts the number of times a response was registered on a new target in column2,row1 (Max: 5) |
| targetCounterC2r2 | Counts the number of times a response was registered on a new target in column2,row2 (Max: 5) |
| targetCounterC3r1 | Counts the number of times a response was registered on a new target in column3,row1 (Max: 5) |
| targetCounterC3r2 | Counts the number of times a response was registered on a new target in column3,row2 (Max: 5) |
| targetCounterC4r1 | Counts the number of times a response was registered on a new target in column4,row1 (Max: 5) |
| targetCounterC4r2 | Counts the number of times a response was registered on a new target in column4,row2 (Max: 5) |
| targetCounterC5r1 | Counts the number of times a response was registered on a new target in column5,row1 (Max: 5) |
| targetCounterC5r2 | Counts the number of times a response was registered on a new target in column5,row2 (Max: 5) |
| foilCounter | Counts the number of times a response was registered on a new foil (Max: 100) (repeatedly selecting the same foil does not increase the count) |
| foilCounterC1L | Counts the number of times a response was registered on a new LEFT-open foil in column1 (10) |
| foilCounterC1R | Counts the number of times a response was registered on a new RIGHT-open foil in column1 (10) |
| foilCounterC2L | Counts the number of times a response was registered on a new LEFT-open foil in column2 (10) |
| foilCounterC2R | Counts the number of times a response was registered on a new RIGHT-open foil in column2 (10) |
| foilCounterC3L | Counts the number of times a response was registered on a new LEFT-open foil in column3 (10) |
| foilCounterC3R | Counts the number of times a response was registered on a new RIGHT-open foil in column3 (10) |
| foilCounterC4L | Counts the number of times a response was registered on a new LEFT-open foil in column4 (10) |
| foilCounterC4R | Counts the number of times a response was registered on a new RIGHT-open foil in column4 (10) |
| foilCounterC5L | Counts the number of times a response was registered on a new LEFT-open foil in column5 (10) |
| foilCounterC5R | Counts the number of times a response was registered on a new RIGHT-open foil in column5 (10) |
| otherRespCounter | Counts the number of times a response was registered that was not made on one of the target NOR foil response circles Notes - some other responses might simply be a missed target response circle - under each target (apple) as well as foil lies a response circle with a parameters.responseCircleSize_Pct, if response is registered outside of these responsecircles, the script counts it as an 'other' response. In some cases, these 'other' responses may simply be inaccurate screen responding. Check screenshots of response path if in doubt. |
| pathX | A variable that stores the horizontal coordinates of the response in canvas percentages in sequential order |
| pathY | A variable that stores the vertical coordinates of the response in canvas percentages in sequential order |
| targets | A variable that stores whether the responses were on a target (1) or elsewhere (0)in sequential order these values can be used in script applestest_path.iqjs to visualize the path taken |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
Color Parameter |
||
| canvasColor | Display color of the actively used portion of the screen (the 'canvas') if set to a color other than the screenColor, you can distinguish the active canvas from the inactive portion of the screen | lightGray |
| screenColor | Color of the screen not used by the canvas ('inactive screen') | lightGray |
| defaultTextColor | Default color of text items | black |
Sizing Parameters |
||
| responseCircleSizePct | under each target/foil (apple) lies a response circle with a parameters.responseCircleSize_Pct (5.5%) - proportional to canvas height This response circle CANNOT reasonably be much bigger as otherwise some response circle overlap will occur that could make distinguishing which apple was selected impossible | 5.5% |
Timing Arameters |
||
| testDurationInmin | The max. duration of the test (in minutes) | 5 |
Feedback |
||
| showPathFeedback |
•true*: at the end of the task, the script presents the stimulipage with all target locations circled and draws the response path. Participants' reponse locations are marked with numbers that refer to the order in which those locations were selected. Selected target locations are marked by green numbers, other locations by red numbers. *false*: no response feedback is provided | true |
| takePathScreenshot | this parameter is only relevant if parameters.showPathFeedback = true *true*: script takes a screenshot of the feedback/response path page as additional data *false*: no screenshot is taken of the response path ( this project folder provides a stand-alone 'post-hoc' location drawing script. This additional script draws the response path but requires some copy-paste manual labor) | true |
| runDemographicInformation |
•true*: script collects age and education information *false*: no demographic information is collected Mancuso et al (2015) report that -Execution Time is affected by age & education | true |
| maxPracticeAttempts | The number of times practice can be repeated if participants still make mistakes after the second time, abort the script | 2 |
Debug Variable |
||
| showResponseCirclePlacements | True = the script runs a procedure to show test administrators the response circles under the individual apple stimuli (Debug Mode) false = the regular testing procedure is run this setting is useful if you use a different applestest image than the one that comes with this script but still need to see if the response circles still align with the stimuli | false |