Zeitgesteuerte Trials: Fixation, Deadlines und Reaktionszeiten
Annotationsitems als zeitgesteuerte Trials mit Fixationskreuz, Stimulusdauer, Antwortdeadline und auf Labels abgebildeten Tasten ausführen, mit Reaktionszeiten pro Frame.
Neu in v2.12.0
trial_timing führt jedes Annotationsitem als zeitgesteuerten Trial aus: ein optionales Fixationskreuz, der Stimulus für eine festgelegte Zeit, ein Antwortfenster mit Deadline und Tasten, die auf Labels abgebildet sind. Die Reaktionszeit wird im Browser ab dem Frame gemessen, in dem der Stimulus erschienen ist.
Das eignet sich für schnelle Urteile über Potatos eigene Items, etwa lexikalische Entscheidungen, Grammatikalitäts- oder Plausibilitätsurteile unter Zeitdruck und schnelle Bildkategorisierung. Frame-kritische Darbietung, auditive Onsets und Paradigmen, die bei jedem Trial Code benötigen, gehören auf eine jsPsych-Seite. Um den Text eines Items wort- oder regionsweise anzuzeigen, wie bei Self-Paced Reading, RSVP oder der Maze-Aufgabe, fügen Sie einen Block presentation hinzu (Self-Paced Reading und Maze).
Konfiguration
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}| Schlüssel | Standardwert | Bedeutung |
|---|---|---|
enabled | false | Schaltet zeitgesteuerte Trials ein |
fixation_ms | 0 | Fixationskreuz vor jedem Stimulus, 0 für keines |
fixation_symbol | + | Was die Fixation anzeigt |
stimulus_duration_ms | keiner | Blendet den Stimulus nach so vielen Millisekunden aus |
trial_duration_ms | keiner | Deadline ab dem Onset. Ein Trial, dessen Zeit abläuft, ist ein Timeout, und das nächste Item beginnt |
iti_ms | 0 | Minimale leere Zeit zwischen einer Antwort und der nächsten Fixation. Das Laden der nächsten Seite zählt dazu |
response.schema | erforderlich | Ein radio- oder likert-Schema, das die Antwort aufzeichnet |
response.keys | Taste zu Label: ein Zeichen oder space. Setzen Sie y und n in Anführungszeichen, die YAML sonst als Boolesche Werte liest | |
response.allow_mouse | false | Akzeptiert zusätzlich einen Klick auf eine Option |
show_response_options | allow_mouse | Zeigt die Optionen des Schemas während des Trials an |
item_overrides | keiner | Timing pro Item aus Item-Feldern, etwa {stimulus_duration_ms: soa_ms}. 0 im Feld bedeutet keine Begrenzung |
disable_back_navigation | true | Blendet Previous aus, sodass kein Stimulus zweimal gezeigt wird |
presentation | keiner | Wortweise Anzeige. Damit ist response optional |
Ablauf eines Trials
- Ein leeres Intervall, bis seit der letzten Antwort
iti_msvergangen ist. - Das Fixationskreuz für
fixation_ms. - Das Item, darunter eine Zeile mit den Tasten, etwa
F = word J = nonword. - Eine zugeordnete Taste wählt ihr Label, speichert und geht zum nächsten Item. Andere Tasten bewirken nichts, und eine zugeordnete Taste, die vor dem Stimulus gedrückt wird, gilt als vorzeitiger Tastendruck und wird ignoriert.
- Bei Erreichen der Deadline wird das Item als Timeout aufgezeichnet, und das nächste Item beginnt.
Die Tastenkürzel der normalen Annotationsseite (Pfeiltasten und Zifferntasten) sind ausgeschaltet, solange ein Trial läuft.
Trial-Datensatz
Jedes Item erhält einen Trial-Datensatz, der neben den Labels in user_state.json gespeichert und von den CSV- und TSV-Exporten in trials.csv (oder .tsv) geschrieben wird:
| Feld | Bedeutung |
|---|---|
outcome | response oder timeout |
key, label | Die gedrückte Taste und das von ihr gewählte Label |
rt_ms | Reaktionszeit ab dem Stimulus-Onset |
intended_* | Die konfigurierte Fixation, Stimulusdauer, Deadline und das Inter-Trial-Intervall für dieses Item |
fixation_ms_actual, stimulus_ms_actual, iti_actual_ms | Was der Browser tatsächlich geliefert hat |
frame_ms | Das Frame-Intervall des Bildschirms, gemessen während des Trials |
timer_resolution_ms | Der kleinste Schritt der Browseruhr |
early_keys | Zugeordnete Tasten, die vor dem Stimulus gedrückt wurden |
reloads | Wie oft die Seite während dieses Trials neu geladen wurde |
tab_hidden | Ob die teilnehmende Person während des Trials weggewechselt hat |
server_elapsed_ms | Zeit zwischen dem Senden der Seite durch den Server und dem Empfang des Datensatzes |
flags | Die Prüfungen des Servers, unten aufgeführt |
Ein Item mit Timeout hat kein Label, daher ist trials.csv der vollständige Datensatz einer zeitgesteuerten Aufgabe. Der Hauptexport der Annotationen listet nur beantwortete Items auf.
Prüfungen durch den Server
Der Browser meldet den Datensatz, und der Server vergleicht ihn mit seiner eigenen Uhr und mit der Konfiguration, wobei er das Timing des Items verwendet, wo item_overrides eines gesetzt hat:
rt_exceeds_server_elapsed: Die Reaktionszeit ist länger, als das Item ausgegeben war.timeout_too_early: Ein Timeout ist angekommen, bevor die Deadline verstrichen sein konnte.timeout_without_deadline: Ein Timeout bei einem Item ohne Deadline.not_served: Der Server hat keinen Eintrag darüber, das Item ausgegeben zu haben, etwa nach einem Neustart, und kann das Timing daher nicht prüfen.key_not_mapped,label_mismatch,label_not_in_scheme: Die Taste steht nicht inresponse.keys, ist nicht dem gemeldeten Label zugeordnet, oder das Label gehört nicht zum Schema.label_not_saved: Das Label des Datensatzes ist nicht die Antwort, die beim selben Speichern abgelegt wurde.tab_hidden: Der Tab war während des Trials ausgeblendet.
Ein Timeout lässt die teilnehmende Person nur dann ohne Antwort weitergehen, wenn er keines von timeout_too_early, timeout_without_deadline und not_served trägt. Andernfalls bleibt das Item unbeantwortet und erforderlich.
Timeouts, Kontingente und Aufmerksamkeitsprüfungen
Ein Item mit Timeout ist für die teilnehmende Person abgeschlossen: Es zählt zu ihrem Fortschritt, und es wird ihr nicht erneut gezeigt. Es ist keine Annotation des Items, zählt also nicht zu max_annotations_per_item, und das Item kann weiterhin anderen Teilnehmenden zugewiesen werden. Das Fortschrittsabzeichen zeigt es als nicht gelabelt an.
Ein Trial, dessen Zeit bei einer Aufmerksamkeitsprüfung abläuft, wird nicht als Fehlschlag gewertet und erscheint in trials.csv als Timeout. Eine Aufgabe unter Zeitdruck erzeugt auch bei aufmerksamen Teilnehmenden Timeouts, und sie dafür zu sperren würde aufmerksame Personen wegen der Deadline entfernen.
Präzision
Der Stimulus wird in einem requestAnimationFrame-Callback eingeblendet, und der Onset ist der Zeitstempel des nächsten Frames, des ersten, der mit dem Stimulus gezeichnet wird. Die Reaktionszeit ist der Zeitstempel des Tastenereignisses minus dieses Onsets, und beide stammen von der hochauflösenden Uhr des Browsers.
- Der Onset ist auf den Frame genau bekannt: etwa 17 ms bei 60 Hz und 8 ms bei 120 Hz.
- Tastaturen und Bildschirme fügen Latenz hinzu, die der Browser nicht sehen kann, häufig 5-30 ms und auf jedem Rechner anders.
- Browser, die Timer aus Datenschutzgründen vergröbern, etwa Firefox mit
privacy.resistFingerprintingund der Tor Browser, runden auf mehrere Dutzend Millisekunden.timer_resolution_mszeigt dies pro teilnehmender Person. - Jedes Item ist ein Seitenaufruf, daher lässt sich der Vollbildmodus nicht über Items hinweg halten.
Vergleichen Sie Reaktionszeiten innerhalb von Teilnehmenden, oder modellieren Sie sie mit einem Term für die teilnehmende Person. Für Arbeit im Millisekundenbereich oder für Audio verwenden Sie eine jsPsych-Seite.
Einschränkungen
- Smartphones und Tablets werden an die Touch-Oberfläche (Pocket-Modus) weitergeleitet, die keine zeitgesteuerten Trials ausführt. Der Server protokolliert eine Warnung, wenn beides eingeschaltet ist.
- Das Antwortschema muss
radiooderlikertsein und die einzige Frage auf der Annotationsseite, wobei reine Anzeigeschemata erlaubt sind. Eine zweite Frage lässt sich nicht beantworten, solange ein Trial die Tastatur belegt, daher meldet der Validator sie als Fehler. Stellen Sie Folgefragen auf einer poststudy-Seite. - Das MySQL-Speicher-Backend speichert keine Trial-Datensätze.
Beispiel
Das Potato-Repository enthält eine lexikalische Entscheidungsaufgabe. Starten Sie sie aus dem Wurzelverzeichnis des Repositorys:
python potato/flask_server.py start examples/advanced/timed-trials-lexical-decision/config.yaml -p 8000Weiterführende Informationen
- Self-Paced Reading und Maze - Wortweise Darbietung mit Lesezeiten pro Region
- Laufzeitphasen - jsPsych-Timelines für frame-kritische Aufgaben
- Experimentablauf - Bedingungen, Screen-outs und Ausbalancierung
- Verhaltens-Tracking - Timing- und Interaktionsdaten auf gewöhnlichen Annotationsseiten
Implementierungsdetails finden Sie in der Quelldokumentation.