Essais chronométrés : fixation, délais et temps de réaction
Présentez les items d'annotation comme des essais chronométrés avec croix de fixation, durée du stimulus, délai de réponse et touches associées aux étiquettes, avec des temps de réaction mesurés à l'image près.
Nouveau dans la v2.12.0
trial_timing présente chaque item d'annotation comme un essai chronométré : une croix de fixation facultative, le stimulus pendant une durée fixée, une fenêtre de réponse avec un délai, et des touches associées aux étiquettes. Le temps de réaction est mesuré dans le navigateur à partir de l'image à laquelle le stimulus est apparu.
Il convient aux jugements rapides sur les items propres de Potato, comme la décision lexicale, les jugements de grammaticalité ou de plausibilité sous contrainte de temps, et la catégorisation rapide d'images. La présentation critique à l'image près, les débuts de stimuli auditifs et les paradigmes qui exigent du code à chaque essai relèvent d'une page jsPsych. Pour afficher le texte d'un item un mot ou une région à la fois, comme en lecture auto-rythmée, en RSVP ou dans la tâche du labyrinthe, ajoutez un bloc presentation (Lecture auto-rythmée et labyrinthe).
Configuration
annotation_schemes:
- annotation_type: radio
name: decision
description: Is this a word?
labels: [word, nonword]
label_requirement:
required: true
trial_timing:
enabled: true
fixation_ms: 500
stimulus_duration_ms: 200 # omit: the stimulus stays up until the response
trial_duration_ms: 2000 # omit: no deadline
iti_ms: 500
response:
schema: decision
keys: {f: word, j: nonword}| Clé | Valeur par défaut | Signification |
|---|---|---|
enabled | false | Active les essais chronométrés |
fixation_ms | 0 | Croix de fixation avant chaque stimulus, 0 pour aucune |
fixation_symbol | + | Ce qu'affiche la fixation |
stimulus_duration_ms | aucune | Masque le stimulus après ce nombre de millisecondes |
trial_duration_ms | aucune | Délai à partir de l'apparition. Un essai qui arrive à expiration est un dépassement de délai, et l'item suivant commence |
iti_ms | 0 | Durée minimale d'écran vide entre une réponse et la fixation suivante. Le chargement de la page suivante est compté dedans |
response.schema | obligatoire | Un schéma radio ou likert qui enregistre la réponse |
response.keys | Touche vers étiquette : un caractère, ou space. Mettez y et n entre guillemets, sinon YAML les lit comme des booléens | |
response.allow_mouse | false | Accepte aussi un clic sur une option |
show_response_options | allow_mouse | Affiche les options du schéma pendant l'essai |
item_overrides | aucune | Chronométrage par item à partir de champs de l'item, par exemple {stimulus_duration_ms: soa_ms}. 0 dans le champ signifie aucune limite |
disable_back_navigation | true | Masque Previous, pour qu'aucun stimulus ne soit montré deux fois |
presentation | aucune | Affichage mot à mot. Avec ce bloc, response devient facultatif |
Séquence d'un essai
- Un intervalle vide, jusqu'à ce que
iti_msse soit écoulé depuis la dernière réponse. - La croix de fixation, pendant
fixation_ms. - L'item, avec en dessous une ligne qui liste les touches, par exemple
F = word J = nonword. - Une touche associée sélectionne son étiquette, enregistre et passe à l'item suivant. Les autres touches ne font rien, et une touche associée pressée avant le stimulus est comptée comme une pression anticipée et ignorée.
- À l'expiration du délai, l'item est enregistré comme un dépassement de délai et l'item suivant commence.
Les raccourcis clavier de la page d'annotation normale (touches fléchées et touches numériques) sont désactivés pendant un essai.
Enregistrement de l'essai
Chaque item reçoit un enregistrement d'essai, stocké dans user_state.json à côté des étiquettes et écrit dans trials.csv (ou .tsv) par les exports CSV et TSV :
| Champ | Signification |
|---|---|
outcome | response ou timeout |
key, label | La touche pressée et l'étiquette qu'elle a sélectionnée |
rt_ms | Temps de réaction depuis l'apparition du stimulus |
intended_* | La fixation, le stimulus, le délai et l'intervalle inter-essais configurés pour cet item |
fixation_ms_actual, stimulus_ms_actual, iti_actual_ms | Ce que le navigateur a effectivement produit |
frame_ms | L'intervalle entre images de l'écran, mesuré pendant l'essai |
timer_resolution_ms | Le plus petit pas de l'horloge du navigateur |
early_keys | Touches associées pressées avant le stimulus |
reloads | Nombre de rechargements de la page pendant cet essai |
tab_hidden | Indique si le participant a quitté l'onglet pendant l'essai |
server_elapsed_ms | Temps écoulé entre l'envoi de la page par le serveur et la réception de l'enregistrement |
flags | Les vérifications du serveur, listées ci-dessous |
Un item expiré n'a pas d'étiquette ; trials.csv est donc l'enregistrement complet d'une tâche chronométrée. L'export d'annotation principal ne liste que les items ayant reçu une réponse.
Vérifications du serveur
Le navigateur transmet l'enregistrement, et le serveur le compare à sa propre horloge et à la configuration, en utilisant le chronométrage propre à l'item là où item_overrides l'a défini :
rt_exceeds_server_elapsed: le temps de réaction est plus long que la durée pendant laquelle l'item a été servi.timeout_too_early: un dépassement de délai est arrivé avant que le délai ait pu s'écouler.timeout_without_deadline: un dépassement de délai sur un item qui n'a pas de délai.not_served: le serveur n'a aucune trace d'avoir transmis l'item, par exemple après un redémarrage ; il ne peut donc pas vérifier le chronométrage.key_not_mapped,label_mismatch,label_not_in_scheme: la touche ne figure pas dansresponse.keys, ne correspond pas à l'étiquette transmise, ou l'étiquette n'est pas l'une de celles du schéma.label_not_saved: l'étiquette de l'enregistrement n'est pas la réponse stockée par ce même enregistrement.tab_hidden: l'onglet a été masqué pendant l'essai.
Un dépassement de délai ne permet au participant de passer à la suite sans réponse que s'il ne porte aucun des indicateurs timeout_too_early, timeout_without_deadline et not_served. Sinon, l'item reste sans réponse et obligatoire.
Dépassements de délai, quotas et contrôles d'attention
Un item expiré est terminé pour le participant : il compte dans sa progression, et il ne lui est plus montré. Ce n'est pas une annotation de l'item ; il ne compte donc pas dans max_annotations_per_item, et l'item peut encore être attribué à d'autres participants. Le badge de progression l'affiche comme non étiqueté.
Un essai qui expire sur un contrôle d'attention n'est pas noté comme un échec, et il apparaît dans trials.csv comme un dépassement de délai. Une tâche rapide produit aussi des dépassements de délai chez des participants attentifs, et les bloquer pour cela écarterait des personnes attentives à cause du délai.
Précision
Le stimulus est révélé dans un callback requestAnimationFrame, et l'apparition correspond à l'horodatage de l'image suivante, la première dessinée avec le stimulus. Le temps de réaction est l'horodatage de l'événement clavier moins cette apparition, et les deux proviennent de l'horloge haute résolution du navigateur.
- L'apparition est connue à l'image près : environ 17 ms à 60 Hz et 8 ms à 120 Hz.
- Les claviers et les écrans ajoutent une latence que le navigateur ne voit pas, couramment de 5 à 30 ms et différente sur chaque machine.
- Les navigateurs qui dégradent la précision des minuteurs pour la confidentialité, comme Firefox avec
privacy.resistFingerprintinget Tor Browser, arrondissent à des dizaines de millisecondes.timer_resolution_msl'indique pour chaque participant. - Chaque item est un chargement de page ; le plein écran ne peut donc pas être maintenu d'un item à l'autre.
Comparez les temps de réaction au sein des participants, ou modélisez-les avec un terme participant. Pour un travail à la milliseconde près, ou pour l'audio, utilisez une page jsPsych.
Limites
- Les téléphones et tablettes sont envoyés vers l'interface tactile (Mode poche), qui n'exécute pas d'essais chronométrés. Le serveur journalise un avertissement quand les deux sont activés.
- Le schéma de réponse doit être
radiooulikert, et il doit être la seule question de la page d'annotation, les schémas d'affichage seul étant toutefois autorisés. Une deuxième question ne peut pas recevoir de réponse tant qu'un essai monopolise le clavier ; le validateur la signale donc comme une erreur. Posez les questions de suivi sur une page poststudy. - Le backend de stockage MySQL n'enregistre pas les enregistrements d'essais.
Exemple
Le dépôt Potato fournit une tâche de décision lexicale. Lancez-la depuis la racine du dépôt :
python potato/flask_server.py start examples/advanced/timed-trials-lexical-decision/config.yaml -p 8000Pour aller plus loin
- Lecture auto-rythmée et labyrinthe - Présentation mot à mot avec des temps de lecture par région
- Phases d'exécution - Timelines jsPsych pour les tâches critiques à l'image près
- Déroulement de l'expérience - Conditions, exclusions et contrebalancement
- Suivi comportemental - Données de chronométrage et d'interaction sur les pages d'annotation ordinaires
Pour les détails d'implémentation, consultez la documentation source.