Ensayos cronometrados: fijación, plazos y tiempos de reacción
Ejecuta los ítems de anotación como ensayos cronometrados con cruz de fijación, duración del estímulo, plazo de respuesta y teclas asociadas a etiquetas, con tiempos de reacción medidos por fotograma.
Nuevo en v2.12.0
trial_timing ejecuta cada ítem de anotación como un ensayo cronometrado: una cruz de fijación opcional, el estímulo durante un tiempo fijado, una ventana de respuesta con un plazo y teclas asociadas a etiquetas. El tiempo de reacción se mide en el navegador a partir del fotograma en el que apareció el estímulo.
Encaja con juicios rápidos sobre los propios ítems de Potato, como la decisión léxica, los juicios de gramaticalidad o de plausibilidad bajo presión de tiempo y la categorización rápida de imágenes. La presentación crítica a nivel de fotograma, los inicios auditivos y los paradigmas que necesitan código en cada ensayo corresponden a una página de jsPsych. Para mostrar el texto de un ítem palabra a palabra o región a región, como en la lectura autoadministrada, la RSVP o la tarea maze, añade un bloque presentation (Lectura autoadministrada y maze).
Configuración
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}| Clave | Valor predeterminado | Significado |
|---|---|---|
enabled | false | Activa los ensayos cronometrados |
fixation_ms | 0 | Cruz de fijación antes de cada estímulo, 0 para ninguna |
fixation_symbol | + | Lo que muestra la fijación |
stimulus_duration_ms | ninguno | Oculta el estímulo pasados estos milisegundos |
trial_duration_ms | ninguno | Plazo desde el inicio. Un ensayo que se queda sin tiempo es un tiempo agotado, y empieza el ítem siguiente |
iti_ms | 0 | Tiempo mínimo en blanco entre una respuesta y la siguiente fijación. La carga de la página siguiente cuenta para ese tiempo |
response.schema | obligatorio | Un esquema radio o likert que registra la respuesta |
response.keys | Tecla asociada a etiqueta: un carácter, o space. Pon entre comillas y y n, que YAML de otro modo lee como booleanos | |
response.allow_mouse | false | Acepta también un clic en una opción |
show_response_options | allow_mouse | Muestra las opciones del esquema durante el ensayo |
item_overrides | ninguno | Temporización por ítem a partir de campos del ítem, como {stimulus_duration_ms: soa_ms}. Un 0 en el campo significa sin límite |
disable_back_navigation | true | Oculta Previous, para que ningún estímulo se muestre dos veces |
presentation | ninguno | Visualización palabra a palabra. Con ella, response es opcional |
Secuencia del ensayo
- Un intervalo en blanco, hasta que ha pasado
iti_msdesde la última respuesta. - La cruz de fijación, durante
fixation_ms. - El ítem, con una línea debajo que enumera las teclas, como
F = word J = nonword. - Una tecla asociada selecciona su etiqueta, guarda y pasa al ítem siguiente. Las demás teclas no hacen nada, y una tecla asociada pulsada antes del estímulo se cuenta como pulsación anticipada y se ignora.
- Al llegar el plazo, el ítem se registra como tiempo agotado y empieza el ítem siguiente.
Los atajos de teclado de la página de anotación normal (teclas de flecha y teclas numéricas) están desactivados mientras se ejecuta un ensayo.
Registro del ensayo
Cada ítem recibe un registro de ensayo, que se guarda en user_state.json junto a las etiquetas y que las exportaciones CSV y TSV escriben en trials.csv (o .tsv):
| Campo | Significado |
|---|---|
outcome | response o timeout |
key, label | La tecla pulsada y la etiqueta que seleccionó |
rt_ms | Tiempo de reacción desde el inicio del estímulo |
intended_* | La fijación, el estímulo, el plazo y el intervalo entre ensayos configurados para este ítem |
fixation_ms_actual, stimulus_ms_actual, iti_actual_ms | Lo que entregó realmente el navegador |
frame_ms | El intervalo entre fotogramas de la pantalla, medido durante el ensayo |
timer_resolution_ms | El paso más pequeño del reloj del navegador |
early_keys | Teclas asociadas pulsadas antes del estímulo |
reloads | Veces que se recargó la página durante este ensayo |
tab_hidden | Si el participante cambió a otra pestaña o ventana durante el ensayo |
server_elapsed_ms | Tiempo entre el envío de la página por el servidor y la recepción del registro |
flags | Las comprobaciones del servidor, enumeradas abajo |
Un ítem con tiempo agotado no tiene etiqueta, así que trials.csv es el registro completo de una tarea cronometrada. La exportación principal de anotaciones enumera solo los ítems respondidos.
Comprobaciones del servidor
El navegador informa del registro, y el servidor lo compara con su propio reloj y con la configuración, usando la temporización propia del ítem cuando item_overrides la ha fijado:
rt_exceeds_server_elapsed: el tiempo de reacción es más largo que el tiempo que el ítem estuvo fuera.timeout_too_early: llegó un tiempo agotado antes de que pudiera haber pasado el plazo.timeout_without_deadline: un tiempo agotado en un ítem que no tiene plazo.not_served: el servidor no tiene constancia de haber entregado el ítem, por ejemplo tras un reinicio, así que no puede comprobar la temporización.key_not_mapped,label_mismatch,label_not_in_scheme: la tecla no está enresponse.keys, no corresponde a la etiqueta indicada, o la etiqueta no es una de las del esquema.label_not_saved: la etiqueta del registro no es la respuesta que guardó ese mismo guardado.tab_hidden: la pestaña estuvo oculta durante el ensayo.
Un tiempo agotado deja que el participante avance sin respuesta solo cuando no lleva ninguna de las marcas timeout_too_early, timeout_without_deadline y not_served. En caso contrario, el ítem queda sin responder y sigue siendo obligatorio.
Tiempos agotados, cuotas y verificaciones de atención
Un ítem con tiempo agotado queda terminado para el participante: cuenta para su progreso y no se le vuelve a mostrar. No es una anotación del ítem, así que no cuenta para max_annotations_per_item, y el ítem se puede seguir asignando a otros participantes. El indicador de progreso lo muestra como no etiquetado.
Un ensayo que se queda sin tiempo en una verificación de atención no se califica como fallo, y aparece en trials.csv como tiempo agotado. Una tarea rápida produce tiempos agotados también en participantes atentos, y bloquearlos por ello eliminaría a personas atentas por culpa del plazo.
Precisión
El estímulo se revela dentro de una llamada de requestAnimationFrame, y el inicio es la marca de tiempo del fotograma siguiente, el primero que se dibuja con el estímulo. El tiempo de reacción es la marca de tiempo del evento de tecla menos ese inicio, y ambos proceden del reloj de alta resolución del navegador.
- El inicio se conoce con precisión de un fotograma: unos 17 ms a 60 Hz y 8 ms a 120 Hz.
- Los teclados y las pantallas añaden una latencia que el navegador no puede ver, por lo general de 5 a 30 ms y distinta en cada equipo.
- Los navegadores que reducen la precisión de los temporizadores por privacidad, como Firefox con
privacy.resistFingerprintingy Tor Browser, redondean a decenas de milisegundos.timer_resolution_mslo muestra para cada participante. - Cada ítem es una carga de página, así que la pantalla completa no se puede mantener de un ítem a otro.
Compara los tiempos de reacción dentro de cada participante, o modélalos con un término de participante. Para trabajo al nivel del milisegundo, o para audio, usa una página de jsPsych.
Limitaciones
- Los teléfonos y las tabletas se envían a la interfaz táctil (Modo bolsillo), que no ejecuta ensayos cronometrados. El servidor registra una advertencia cuando ambos están activados.
- El esquema de respuesta debe ser
radioolikert, y debe ser la única pregunta de la página de anotación, aunque se admiten esquemas que solo muestran contenido. Una segunda pregunta no se puede responder mientras un ensayo tiene el control del teclado, así que el validador la señala como error. Haz las preguntas de seguimiento en una página poststudy. - El backend de almacenamiento MySQL no guarda los registros de los ensayos.
Ejemplo
El repositorio de Potato incluye una tarea de decisión léxica. Arráncala desde la raíz del repositorio:
python potato/flask_server.py start examples/advanced/timed-trials-lexical-decision/config.yaml -p 8000Lecturas adicionales
- Lectura autoadministrada y maze - Presentación palabra a palabra con tiempos de lectura por región
- Fases de ejecución - Líneas de tiempo de jsPsych para tareas críticas a nivel de fotograma
- Flujo del experimento - Condiciones, exclusiones y contrabalanceo
- Seguimiento de comportamiento - Datos de temporización e interacción en páginas de anotación ordinarias
Para detalles de implementación, consulta la documentación fuente.