Skip to content

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

yaml
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}
ClaveValor predeterminadoSignificado
enabledfalseActiva los ensayos cronometrados
fixation_ms0Cruz de fijación antes de cada estímulo, 0 para ninguna
fixation_symbol+Lo que muestra la fijación
stimulus_duration_msningunoOculta el estímulo pasados estos milisegundos
trial_duration_msningunoPlazo desde el inicio. Un ensayo que se queda sin tiempo es un tiempo agotado, y empieza el ítem siguiente
iti_ms0Tiempo mínimo en blanco entre una respuesta y la siguiente fijación. La carga de la página siguiente cuenta para ese tiempo
response.schemaobligatorioUn esquema radio o likert que registra la respuesta
response.keysTecla asociada a etiqueta: un carácter, o space. Pon entre comillas y y n, que YAML de otro modo lee como booleanos
response.allow_mousefalseAcepta también un clic en una opción
show_response_optionsallow_mouseMuestra las opciones del esquema durante el ensayo
item_overridesningunoTemporizació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_navigationtrueOculta Previous, para que ningún estímulo se muestre dos veces
presentationningunoVisualización palabra a palabra. Con ella, response es opcional

Secuencia del ensayo

  1. Un intervalo en blanco, hasta que ha pasado iti_ms desde la última respuesta.
  2. La cruz de fijación, durante fixation_ms.
  3. El ítem, con una línea debajo que enumera las teclas, como F = word J = nonword.
  4. 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.
  5. 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):

CampoSignificado
outcomeresponse o timeout
key, labelLa tecla pulsada y la etiqueta que seleccionó
rt_msTiempo 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_msLo que entregó realmente el navegador
frame_msEl intervalo entre fotogramas de la pantalla, medido durante el ensayo
timer_resolution_msEl paso más pequeño del reloj del navegador
early_keysTeclas asociadas pulsadas antes del estímulo
reloadsVeces que se recargó la página durante este ensayo
tab_hiddenSi el participante cambió a otra pestaña o ventana durante el ensayo
server_elapsed_msTiempo entre el envío de la página por el servidor y la recepción del registro
flagsLas 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á en response.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.resistFingerprinting y Tor Browser, redondean a decenas de milisegundos. timer_resolution_ms lo 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 radio o likert, 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:

bash
python potato/flask_server.py start examples/advanced/timed-trials-lexical-decision/config.yaml -p 8000

Lecturas adicionales

Para detalles de implementación, consulta la documentación fuente.