Tarea experimental para estudiar el comportamiento prosocial mediante decisiones de esfuerzo. Los participantes eligen entre trabajar (presionar la barra espaciadora repetidamente) o descansar para ganar créditos para sí mismos o para otros participantes (in-group/out-group).
En cada trial, el participante debe decidir entre:
- Trabajar: Rellenar una barra de esfuerzo presionando la barra espaciadora para ganar más créditos (2-5 créditos)
- Descansar: No hacer nada y ganar 1 crédito
Los créditos pueden ser asignados a:
- TI: El propio participante
- In-group: Una persona que "vota igual" al participante
- Out-group: Una persona que "vota distinto" al participante
- Calibración: 3 fases para determinar la capacidad máxima de presiones del participante
- Práctica de esfuerzo: 2 rondas de práctica con los 4 niveles de esfuerzo
- Práctica de decisión: 6 trials de práctica (2 por condición)
- Tarea experimental: 3 bloques × 48 trials = 144 trials totales
- Tiempo de decisión: 4 segundos
- Tiempo de trabajo/descanso: 5 segundos
- Tiempo de feedback: 1 segundo
- Duración total estimada: 30-40 minutos
Python 3.10 o superior
pip install pygame pylsl opencv-python| Librería | Versión | Descripción |
|---|---|---|
| pygame | ≥2.0 | Interfaz gráfica y manejo de eventos |
| pylsl | ≥1.16 | Comunicación con EEG via Lab Streaming Layer |
| opencv-python | ≥4.0 | Procesamiento de imágenes (cv2) |
pip install pygame pylsl opencv-pythonproyecto/
├── Prosocial_Effort_Task.py # Script principal
├── README.md
├── media/
│ ├── images/
│ │ ├── TI_schema.jpg # Esquema para instrucciones
│ │ └── testing_schema.jpg # Esquema de calibración
│ ├── Arial_Rounded_MT_Bold.ttf
│ ├── Rest.png # Imagen de descanso
│ ├── 50_self.png # Círculos de esfuerzo por condición
│ ├── 50_other.png
│ ├── 50_group.png
│ ├── 65_self.png
│ ├── 65_other.png
│ ├── 65_group.png
│ ├── 80_self.png
│ ├── 80_other.png
│ ├── 80_group.png
│ ├── 95_self.png
│ ├── 95_other.png
│ └── 95_group.png
└── data/ # Carpeta donde se guardan los resultados (se crea automáticamente)
python prosocial_effort_task.pypyinstaller --onefile --windowed --add-data "media;media" --add-data "data;data" --hidden-import=pylsl --hidden-import=pygame --collect-all pylsl --name "Prosocial_Effort_Task" prosocial_effort_task.pyNota para Mac: Cambiar ; por : en --add-data:
pyinstaller --onefile --windowed --add-data "media:media" --add-data "data:data" --hidden-import=pylsl --hidden-import=pygame --collect-all pylsl --name "Prosocial_Effort_Task" prosocial_effort_task.pyEl ejecutable se generará en la carpeta dist/.
La tarea envía marcadores al sistema EEG mediante el protocolo LSL (Lab Streaming Layer).
- Nombre del stream:
ProsocialTaskMarkers - Tipo:
Markers - Canales: 1
- Formato:
int32 - Source ID:
ProsocialTask
| Código | Evento | Descripción |
|---|---|---|
| Decisión | ||
| 100 | DECISION_START_SELF | Inicio decisión para TI |
| 101 | DECISION_START_OTHER | Inicio decisión para IN-GROUP |
| 102 | DECISION_START_GROUP | Inicio decisión para OUT-GROUP |
| 110 | RESPONSE_WORK | Respuesta: trabajar |
| 111 | RESPONSE_REST | Respuesta: descansar |
| 112 | RESPONSE_OMISSION | Sin respuesta (timeout) |
| Esfuerzo | ||
| 120 | EFFORT_BAR_START | Inicio de la barra de esfuerzo |
| 121 | EFFORT_BAR_SUCCESS | Completó la barra exitosamente |
| 122 | EFFORT_BAR_FAIL | No completó la barra |
| Feedback | ||
| 130 | FEEDBACK_SELF_START | Inicio feedback TI |
| 131 | FEEDBACK_OTHER_START | Inicio feedback IN-GROUP |
| 132 | FEEDBACK_GROUP_START | Inicio feedback OUT-GROUP |
| 140+ | FEEDBACK_CREDITS | Créditos ganados (140 + n créditos) |
| Bloques | ||
| 200 | BLOCK_START | Inicio de bloque |
| 201 | BLOCK_END | Fin de bloque |
| 250 | EXPERIMENT_START | Inicio del experimento |
| 251 | EXPERIMENT_END | Fin del experimento |
| 252 | CALIBRATION_START | Inicio calibración |
| 253 | CALIBRATION_END | Fin calibración |
| 254 | PRACTICE_START | Inicio práctica |
| 255 | PRACTICE_END | Fin práctica |
- Inicia la tarea y espera a que aparezca el mensaje de conexión LSL
- En tu software de EEG (ej: BrainVision Recorder, OpenBCI, LabRecorder), busca el stream
ProsocialTaskMarkers - Conecta al stream
- Presiona ENTER en la tarea para continuar
Ejemplo con LabRecorder:
1. Abrir LabRecorder
2. Click en "Update" para buscar streams
3. Seleccionar "ProsocialTaskMarkers"
4. Click en "Start" para comenzar la grabación
5. Presionar ENTER en la tarea
En el archivo principal, modifica estas variables:
# Nombres que se muestran en pantalla al participante
DISPLAY_NAME_SELF = "TI"
DISPLAY_NAME_INGROUP = "Votará igual a ti"
DISPLAY_NAME_OUTGROUP = "Votará distinto a ti"# Niveles de esfuerzo (% de la capacidad máxima calibrada)
effort_levels = [50, 65, 80, 95]
# Niveles de créditos
credits_levels = [2, 3, 4, 5]
# Número de bloques
blocks_number = 3
# Tiempos (en segundos)
max_decision_time = 4 # Tiempo para decidir
max_answer_time = 5 # Tiempo para trabajar
max_resting_time = 5 # Tiempo de descansoFullScreenShow = False # Cambiar a False para modo ventanaLos datos se guardan en data/PET_[fecha]_[hora].csv con las siguientes columnas:
| Columna | Descripción |
|---|---|
| effort_level | Nivel de esfuerzo (50, 65, 80, 95) |
| credits | Créditos ofrecidos |
| condition | Self, Other, o Group |
| selection | task, resting, o no decision |
| presses | Número de presiones realizadas |
| target_reached | Si completó el objetivo |
| earned_credits | Créditos ganados |
| decision_rt | Tiempo de reacción (ms) |
| first_press_time | Tiempo de la primera presión |
| last_press_time | Tiempo de la última presión |
| Tecla | Función |
|---|---|
| → (Flecha derecha) | Avanzar en instrucciones |
| N | Seleccionar opción izquierda |
| M | Seleccionar opción derecha |
| Espacio | Presionar durante fase de esfuerzo |
| ESC | Salir de la tarea |
En algunos equipos Windows, la ventana de pygame puede no capturar correctamente el foco del teclado al inicio. Soluciones:
- Presiona
Alt + Tabpara cambiar de ventana y vuelve a la tarea - Haz clic en la ventana de la tarea antes de presionar teclas
Correo electrónico: diegogarridocerpa@gmail.com Correo institucional: digarrido@alumnos.uai.cl