scieee AI-readable full text Open interactive document viewer

Análisis e identificación de potenciales evocados en el electroencefalograma

Mosquera Guerrero, Elena María

Abstract

Las interfaces cerebro-computadora (BCI) sugieren un gran avance para la medicina. Entre sus diferentes usos, está la comunicación no muscular para personas discapacitadas. Uno de estas realizaciones se hace mediante la onda P300 generada mediante la matriz descrita por Farwell y Donchin en 1998, estudiando electroencefalogramas, tanto en línea como grabaciones. En este proyecto, se pretende estudiar algoritmos y métodos para la mejora de la predicción de caracteres pensados por un sujeto, de manera que se investigue la optimización de los mismos para poder obtener una interfaz adaptable a sujetos reales y no objetos de experimento.

Full text

1 Trabajo Fin de Carrera Grado en Ingeniería de las Tecnologías de Telecomunicación Análisis e identificación de potenciales evocados en el electroencefalograma Autor: Elena María Mosquera Guerrero Tutor: Rubén Martín Clemente Sergio Antonio Cruces Álvarez Dpto. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019 3 Trabajo Fin de Carrera Grado en Ingeniería de las Tecnologías de Telecomunicación Análisis e identificación de potenciales evocados en el electroencefalograma Autor: Elena María Mosquera Guerrero Tutor: Rubén Martín Clemente Profesor titular Sergio Antonio Cruces Álvarez Catedrático Dpto. de Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019 5 Proyecto Fin de Carrera: Análisis e identificación de potenciales evocados en el electroencefalograma Autor: Elena María Mosquera Guerrero Tutor: Rubén Martín Clemente Sergio Antonio Álvarez Cruces El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2019 El Secretario del Tribunal 7 Agradecimientos Aunque esté al principio de la memoria, he decidido escribir este apartado en el último momento. Estar redactando estas palabras tiene para mí muchas connotaciones y emoción: estoy a unos pocos pasos de terminar esta carrera que tanto esfuerzo ha requerido. Siquiera sé cómo comenzar a escribir lo agradecida que estoy de todo lo que me llevo conmigo a un siguiente paso en mi vida, quizás un poco incierto. Quiero hablarle al ente abstracto de la carrera, por haberme resultado un reto intelectual y personal, por haberme hecho crecer, madurar, aceptar, trabajar y otras tantas habilidades que ni sé explicar. Me dirijo también a todos los que me han acompañado durante este arduo camino, estando conmigo en las mejores, y en las peores. A mis profesores, hablando como una alumna más, porque todos ellos han contribuido a que esté donde estoy hoy, forman parte de mi corazón y mi persona. A mi grupo de compañeras y amigas, porque sin ellas… Ni siquiera sé dónde estaría sin ellas. A mis compañeros, por ayudarme a trabajar en equipo, a romper barreras, a ser mejor persona, ayudante, líder, técnica. Y, por supuesto, a mi familia. Mis padres, mi hermano. No sé cómo expresar este profundo sentimiento que tengo al pensar en cómo me habéis ayudado, apoyado, animado, en cómo hemos celebrado y cómo habéis llorado conmigo en los momentos difíciles. A todas y cada una de estas personas, por ayudarme a construir las bonitas alas que tengo para explorar todo este mundo nuevo que me espera. Elena María Mosquera Guerrero Sevilla, 2019 9 Figura 23. Predicción de las letras y comparación con la secuencia correcta Figura 24. Presentación de la predicción de la onda P300 en los canales FCz, Cz y Oz para el caso de aparición de target y no target, cada uno con su correspondiente leyenda Figura 25. Distribución en el EEG de la amplitud de generación de la onda P300, siguiendo una evolución temporal del estímulo desde 0 ms a 700 ms aproximadamente Figura 26. Representación de r2 según canales y épocas Figura 27. Mejora del Donchin Speller tradicional a un sistema audio-visual Figura 28. Nuevas matrices propuestas para nuevos estudios del Donchin Speller 53 55 57 58 65 66 17 19 INTRODUCCIÓN l cerebro es el órgano más complejo del ser humano, formando parte fundamental del Sistema Nervioso Central (SNC). Éste se encarga de todo lo que implica el funcionamiento del cuerpo y la mente, con lo que podríamos definirlo como el controlador y regulador principal de nuestro organismo. Es esencial para cualquier función vital (la respiración, el sueño…), así como otras funciones superiores (la memoria, las emociones, el razonamiento, etc). Toda esta actividad se controla mediante las células cerebrales o neuronas que se encargan de recibir, procesar y transmitir la información utilizando impulsos electro-químicos mediante conexiones de multitud de neuronas. Estos impulsos, o actividad eléctrica, no son más que los restos del intenso flujo de la actividad cerebral, es decir, de toda la información que nuestro cuerpo procesa, tanto fisiológica como sensorial (estímulos, órdenes…). Debido a que la naturaleza eléctrica de todo lo que ocurre en nuestro cuerpo radica en la carga y descarga de las células cerebrales (Chornet y Oteo 2002) se plantea la posibilidad de su detección mediante electrodos y se ejecuta en lo que se conoce como el electroencefalograma (EEG), actualmente una prueba no invasiva que se realiza sobre el cráneo. A partir de este momento, se comienzan a estudiar las ondas que se registran en el EEG. Esto marca un antes y un después en la neurología y en la psiquiatría (Saceda Corralo 2018), ya que se empiezan a distinguir los patrones de algunas de las señales, como por ejemplo las generadas por los estados de vigilia/sueño, estado de coma, etc. Como consecuencia se deducen dos aspectos, por un lado que se puede diferenciar un EEG con un funcionamiento normal del SNC de uno patológico (para lo que es comúnmente usado) y por otro que un estímulo hace que las neuronas emitan corrientes eléctricas de manera sincronizada para procesarlo. A pesar de ser fácilmente confundidos con el resto de ondas del EEG, se demuestra que es posible detectarlos. De esta manera definimos los potenciales relacionados con eventos o ERPs (Event Related Potentials). Estos se nombran según el tiempo que tardan en aparecer tras el estímulo y de si el potencial que aparece es positivo o negativo frente a un sistema de referencia o “potencial cero”, definido previamente. Cada una de estas señales se relacionan con un tipo de excitación determinada, por lo que se comienzan a utilizar estos ERPs para diversas aplicaciones. En este trabajo nos centraremos especialmente en uno de estos potenciales evocados, la onda P300, que definiremos con más extensión más adelante. Su aparición surge cuando se introducen estímulos inesperados para el sujeto que son relevantes para la tarea que debe realizar (Núñez-Peña, Corral y Escerra 2004), pudiendo provocarlo mediante el llamado “paradigma oddball”. Todo esto pone de manifiesto la infinidad de posibilidades que nos ofrece la identificación de ondas en el EEG. E Introducción 20 De esta manera, gracias a los grandes avances, se plantea el uso de la tecnología y la computación para el procesamiento de estos datos, dando lugar a una interfaz cerebro-computadora (BCI) de forma que tendremos la posibilidad de comunicarnos con un ordenador mediante las señales cerebrales y convertirlas en comandos para los mismos (Vaid, Singh y Kaur 2015). La consecuencia de ser capaces de “leer” lo que quiere decir nuestro cerebro es tener la posibilidad de ayudar a los pacientes que no pueden comunicarse o que no son capaces de interactuar por sí mismos debido a su enfermedad, mediante una técnica no invasiva como es el EEG (Machado et al. 2010). En el proceso de la aplicación de este concepto a la clínica, se estudia la posibilidad de aplicarlo para ayudar a las personas que no tienen capacidad comunicativa a hacerlo mediante una pantalla de ordenador conteniendo todas las letras y otros símbolos (Farwell y Donchin 1988). Llamaremos a esta tecnología el “Donchin Speller”, objeto de investigación durante años y en la actualidad. Así pues, nos lleva al experimento que trataremos en el trabajo, cuyo objetivo es el estudio de una BCI (interfaz cerebro-computadora) que procesa electroencefalogramas con potenciales evocados provocados mediante el paradigma anteriormente nombrado. Analizaremos el funcionamiento de una de las librerías escritas en lenguaje Python utilizando un ejemplo de su uso, describiendo el tratamiento que reciben los datos, la precisión que se consigue en experimento, los algoritmos utilizado y otros aspectos sobre el análisis de esos mismos resultados. 21 El cerebro y el EEG 22 EL CEREBRO Y EL EEG l Sistema Nervioso Central (SNC) se compone de todo el entramado de tejidos que captura y procesa estímulos para una interacción eficaz con el medio. En él, el cerebro es la parte más importante, ya que en él se procesa todo lo que ocurre en nuestro organismo, siendo el encargado de las funciones vitales, motoras, el tratamiento de la información captada desde los sentidos, las emociones, el comportamiento, entre otras muchas. Lo que permite principalmente esta función son las neuronas, que son las células especializadas, interconectadas y transmitiéndose toda la información y procesándola entre ellas. Éstas se comunican de manera electroquímica, es decir, mediante impulsos nerviosos llamados “potenciales de acción”, haciendo este intercambio exitoso mediante la sinapsis, donde las neuronas se ponen en contacto mediante descargas e impulsos eléctricos. 2.1 Fisiología cerebral División del cerebro El encéfalo se divide en tres partes principales: prosencéfalo, mesencéfalo y el romboencéfalo, subdividiéndose las mismas en otras muchas partes (Bailey 2018a). E Figura 1. Divisiones principales del cerebro 23 Todo el cerebro es partícipe del procesamiento de la información, así como lo es el resto del Sistema Nervioso Central, por lo que nos centraremos en posicionar los elementos que recogen la actividad del mismo. Primeramente, el cerebro se divide en el hemisferio derecho e izquierdo. Como vemos en la Figura 1, el prosencéfalo (forebrain), se divide a su vez en el telencéfalo y el diencéfalo. Nos centramos en el telencéfalo, que ocupa la mayor parte de la superficie del encéfalo en el que se encuentra la corteza cerebral, que es la se subdivide en los cuatro lóbulos cerebrales, cada uno con su correspondiente función, dispuestos como en la Figura 2. Las funciones de estos cuatro lóbulos cerebrales son: • Lóbulos frontales: aquí se encuentra el área motora. Son fundamentales en los movimientos musculares voluntarios, la memoria, el pensamiento, las decisiones y la planificación. El frontal derecho se ocupa de la parte izquierda del cuerpo y el frontal izquierdo de la derecha (Bailey 2018b). Es el que más diferencia al ser humano del resto de animales. • Lóbulos parietales: reciben y procesan la información sensorial (Bailey 2018d). • Lóbulos occipitales: en ellos se encuentra la corteza visual primaria, que interpreta lo que recibe la retina. Estos lóbulos lo reciben, y el resto lo procesa (Bailey 2018c) • Lóbulos temporales: se encarga de organizar la entrada sensorial, la percepción auditiva, el lenguaje, etc. También se encarga de formar y procesar mucha parte de nuestros recuerdos. Es importante destacar que en ellos se encuentra el área de Wernicke, que se encarga de la comprensión del lenguaje, así como del recuerdo de sus estructuras sintácticas, entre otras (Bailey 2017). Figura 2. Lóbulos de la corteza cerebral El cerebro y el EEG 24 Todos los lóbulos cerebrales ayudan al procesamiento y tratamiento de las señales de entradas sensoriales, así como de las salidas, fundamental para el desarrollo de nuestro estudio. Cabe decir que además de la clasificación brevemente explicada, todo ello está compuesto por las neuronas, que son las encargadas de procesar y transmitir la información inter e intracelularmente. Esto quiere decir que gracias a estas células cerebrales interconectadas, nuestro cerebro funciona como lo hace. Funcionamiento eléctrico Como hemos descrito, toda la actividad cerebral se hace mediante la interconexión de las neuronas. Estas células tienen muchas formas y tamaños, ya que como hemos visto en el apartado anterior, tienen diferentes funciones. Es decir, se especializan en almacenar la memoria o controlar los músculos, entre muchas otras tareas. Podemos ver en la Figura 3 todas las partes de una neuronas. Entre ellas se encuentran (Sanchez Seisdedos 2017): • Soma: donde reside el núcleo. • Axones: la fibra nerviosa que permite llevar las señales eléctricas, en cuyo extremo más lejano al soma tiene terminaciones nerviosas que se conectan con las neuronas. • Dentritas: las prolongaciones de las neuronas a través de las cuales se recibe información de otras neuronas. Una sola neurona distingue sus propios potenciales. Se mantiene en un potencial de reposo (o voltaje a través de la membrana) o se ejecutan los potenciales de acción, que es un corto pulso eléctrico que se propaga a través de la sinapsis cuando la neurona necesita transmitir información a otra. Se inicia en el soma y se propaga por el axón de la neurona emisora o presináptica hasta llegar a la neurona receptora o postsináptica. Figura 3. Partes de una neurona 25 Se transmite de manera que se inicia como una señal eléctrica, llega a la neurona postsináptica convirtiéndose en una señal química y se difunde por el hueco sináptico hasta llegar a otra neurona, en la que vuelve a convertirse en una señal eléctrica (Sörnmo y Laguna 2005). Al unirse un neurotransmisor a su receptor, se abren o cierran canales iónicos, produciendo un cambio en el potencial de membrana de la célula receptora. Hay dos opciones, que este cambio provoque un aumento o una disminución de la probabilidad de que la célula receptora dispare su propio potencial de acción. Los llamamos “potencial excitatorio postsináptico” (PEPS) o “potencial inhibitorio postsináptico” (PIPS), respectivamente. Para que se produzca un potencial de acción en cualquier neurona cabe decir que el cambio potencial producido debe de superar un umbral, situándose este aproximadamente en -55 mV en la membrana. El potencial de reposo de una neurona aproximadamente es -70 mV, por lo que el cambio aproximado debe de ser unos +15 mV. Esto puede ocurrir de dos formas: los potenciales recibidos son per se mayores que el umbral o se hace una suma, es decir, una misma neurona postsináptica puede recibir varios PEPS o PIPS de diferentes neuronas excitatorias. Esta suma puede ser espacial (potenciales postsinápticos ocurriendo en diferentes lugares pero en el mismo momento) o temporal (potenciales postsinápticos ocurriendo en el mismo lugar pero en momentos diferentes), o ambas a la vez. Figura 4. Transmisión de señales entre neuronas El cerebro y el EEG 32 Por último, necesitamos añadir los puntos de referencia (Talamillo García 2011). Tabla 4. Referencias de posición en el EEG REFERENCIA POSICIÓN Nasión Punto frente-nariz Inión Protuberancia occipital Punto preauricular Delante del trago1 de cada oreja Debemos añadir un par de aclaraciones. Por una parte, muchas veces es necesario añadir letras acompañantes del sistema anteriormente descrito, ya que para los EEG con más sensores es necesario describir más “lóbulos” o posiciones, como el frontopolar (Fp). Por otra parte, los electrodos “A” son los de las orejas. 1 Zona de tejido cartilaginoso delante de la parte auricular de la oreja. Figura 10. Posicionamiento 10/20 de un sistema de 64 canales 33 2.2.3.2 Montajes Además de todo lo anteriormente descrito, también tenemos que hacer una mención al montaje utilizado, ya que cada uno de los electrodos corresponde a un canal o punto de medida del EEG, y por lo tanto hacer una buena interpretación de los voltajes del mismo. Para montarlo, los pares de electrodos se combinan de diferentes maneras. Los tipos básicos de montajes son el bipolar (transversal y longitudinal) y monopolar o referencial (Ramos-Argüelles et al. 2009). El bipolar mide la diferencia de potencial entre dos electrodos de las áreas de actividad cerebral y el monopolar calcula la diferencia de potencial, bien entre un electrodo ubicado en un área de actividad cerebral y un voltaje de referencia registrado por uno de los electrodos de referencia anteriormente descritos (por ejemplo, los de las orejas), bien entre un electrodo en zona activa y el promedio de alguno del resto de electrodos activos. Esto tendrá que tenerse en cuenta a la hora de hacer el análisis de las señales electroencefalográficas, ya que tenemos que saber exactamente qué es lo que se está representando en el EEG para ser capaces de interpretarlo correspondiente. En trazos generales, tendremos que considerar el sistema de referencia utilizado para nuestro estudio. El cerebro y el EEG 34 35 ERPS os ERPs o Event Related Potential son, como su propio nombre indica, potenciales relacionados con un evento. Esto quiere decir que dentro del EEG de fondo, ocurre una alteración en el mismo. Estos representan una actividad neuronal que se propone de gran interés porque está temporalmente asociado a estímulos específicos (St. Louis et al. 2016). Se utilizan en la práctica clínica y en la investigación sobre el análisis de la actividad visual, auditiva, somatosensorial y otras funciones cognitivas de más alto nivel. Como hemos descrito antes, son ondas que se relacionan temporalmente con eventos. Esto quiere decir que, aunque muy cercano temporalmente al estímulo, puede ser anterior o posterior al mismo, ya que nuestro cerebro en ciertas ocasiones es capaz de anticipar un evento. En esto último se diferencia con los llamados Potenciales Evocados (EPs). Éstos están también relacionados con un evento, pero se producen de manera posterior al estímulo en cuestión. Es decir, primero se produce el evento y después la onda. Sin embargo, en la literatura general no se suele hacer distinción alguna entre ambos términos, por lo que en este estudio los utilizaremos indistintamente. 3.1 Características Como ya hemos visto en los apartados anteriores, las corrientes eléctricas en el EEG se presentan cuando miles de neuronas actúan sincronizadamente para tratar alguna actividad o proceso, cuanta más sincronización mejor es el procesamiento. Por lo tanto, deducimos que cuando se produce un estímulo de cualquier tipo, la actividad neuronal se pone en marcha para procesar ese evento. Sabemos que el EEG de fondo se encuentra entre 1 µV y 100 µV, bastante grande en comparación con el potencial que surge en los ERPs, que se encuentra entre 1 µV y 30 µV. Sin embargo, por una serie de procesamientos que posteriormente describiremos, podremos diferenciarlos del EEG de fondo. Se pueden dar muchos tipos de detección y tests de reconocimiento en modalidades sensoriales diferentes, pruebas de respuesta tardía para medir la memoria de trabajo, GO/NOGO tests (pruebas experimentales donde hay dos tipos de estímulos: GO es el que le sucede una respuesta y NOGO es el que no requiere ninguna respuesta), entre otros muchos (Kropotov 2009). Estos distintos experimentos dan lugar a diferentes tiempos patrones de activación o inhibición de las neuronas, así como un área distinta del cerebro. Con esto podemos definir diferentes tipos de ERPs, clasíficandolos según el tiempo que tardan en aparecer, la polarización que tengan respecto de un sistema de referencia, etc. En principio los separamos en dos categorías: • Exógenos, que aparecen en los primeros 100 ms tras el estímulo y se relacionan con el procesamiento sensorial básico. Se relacionan con las características del estímulo. • Endógenos o cognitivos, que aparecen tras los primeros 100 ms tras el estímulo. Se relacionan con el procesamiento del estímulo del individuo (las expectativas, experiencia previa…). L ERPs 36 En la Figura 11 representamos algunos de los distintos tipos de ERPs. Vemos en la imagen que las ondas van a ser clasificadas según su tiempo de aparición, pero también por la polarización que tienen según un sistema de referencia, en este caso la tensión tomada en la apófisis mastoide (detrás de la oreja). Nombraremos las ondas según su polaridad (P o N, positiva o negativa respectivamente) y después un número que corresponde al tiempo que tarda en aparecer, siendo este en ms (P100, N100…) o numerándolas (P1 es la primera onda que aparece positiva, N1 la primera onda que aparece negativa, etc). Cada una corresponde a un tipo de estímulo presentado diferente (por ejemplo, la N3 se relaciona con la incongruencia semántica en una frase), así como su mayor amplitud se obtiene en zonas determinadas del cerebro. Caracterizando estos potenciales, podemos decir que se relacionan de manera que el ERP varía la amplitud con la latencia, por lo que cuánto más inesperado sea, mayor será la amplitud, así como cada área del cerebro lo procesa y el tiempo que tarda en aparecer, que se relaciona con la complejidad de proceso del estímulo. 3.2 Referencia de potencial Es complicado elegir una referencia de potencial correcta para la óptima detección de los ERPs, debido a que en nuestro cuerpo no hay ningún punto donde no haya actividad neuronal, ya que recibe constantemente señales eléctricas que podrán ser captadas por los sensores. No existe ninguna localización donde el potencial puede ser considerado como completamente neutral (Lei y Liao 2017). Tenemos distintas opciones que han sido estudiadas para saber cuáles son mejores o peores en la actuación. Una de las opciones mayormente aceptadas es considerar que el valor promedio de todos los canales que se registran es un valor “virtual” potencial nulo. Para que esto sea válido, es necesaria una gran densidad de sensores, así como una cobertura total de la superficie de la cabeza. Siendo N el número total de electrodos del EEG y vn(t) la tensión absoluta medida correspondiente al enésimo electrodo, definimos la tensión promedio: De esta manera, el aparato calcula una tensión normalizada en cada uno de los electrodos del EEG: 𝑉"# =1 𝑁'𝑣)(𝑡) - )./ ( 1 ) Figura 11. Distintos casos de ERPs 37 Comprobamos que: Como vemos en la ecuación (3), al anularse la suma de las tensiones normalizadas, tiene que haber diferencia de signo entre las diferentes ondas. Con ello deducimos que el signo deja de ser algo identificativo de las ondas, así también de los ERPs, ya que en algunos sensores se encontrarán con signo positivo y en otros negativos. 3.3 Detección Hemos explicado previamente que los ERPs están “escondidos” bajo el ruido de fondo del EEG, por lo que tenemos que buscar una manera de eliminar esas señales de fondo para detectar el potencial evocado. En base a las características anteriormente descritas, tanto del EEG como de los propios ERPs, se deduce que hay diferentes pasos para una óptima localización del mismo. 1) Eliminación de los registros del EEG que estén defectuosos, ya que serán inservibles y entorpecerán la detección. 2) Eliminación de las componentes frecuenciales que no nos interesan. Se hará un filtrado paso de banda de las señales del EEG para quitar el ruido de fondo de alta frecuencia y nos deje unos registros más limpios. También se elimina la componente DC. 3) Eliminación de los artefactos que queden dentro de la banda de interés (ECG, EOG…). Se convierte en un problema de separación de fuentes para la distinción de las diferentes componentes dentro de un EEG. Uno de los algoritmos más utilizados es el ICA (Independent Component Analysis). Una vez nos hayamos quedado con una señal más o menos limpia, procederemos a la identificación de los ERPs. 4) Se divide el electroencefalograma en épocas. Como el EEG tiene un gran ruido de fondo, se hace un experimento donde se repita varias veces el mismo estímulo, separándolos por un intervalo de tiempo determinado. Cada uno de estos intervalos son las épocas. 5) Se hace un promediado de las señales del EEG con todas las épocas. Clásicamente, la contribución del ruido del EEG en el promediado del ERP debería tender a cero (Yeung et al. 2004) cuantas más épocas se promedien juntas. Si se presenta a una persona un mismo estímulo que provoque un ERP M veces, en {t1, t2, …, tn, …, tM}, definimos v(tn, t) como la tensión de un electrodo cualquiera en un tiempo alrededor de tn. Definimos sn(tn, t), siendo la señal del ERP, que también va a depender de la época, y en(tn, t) la correspondiente al ruido de fondo del EEG. Se puede separar la señal medida en los electrodos en las diferentes épocas como: 𝑣 0 ) ( 𝑡 ) =𝑣) ( 𝑡 ) −𝑉"# ( 2 ) '𝑣0)(𝑡)=0 - )./ ( 3 ) 𝑣 ( 𝑡),𝑡 ) =𝑣 ( 𝑡)+𝑡 ) ,𝑝𝑎𝑟𝑎8𝑡 ∈(−Δ/,Δ;)8 ( 4 ) 𝑣) ( 𝑡),𝑡 ) =𝑠) ( 𝑡),𝑡 ) +8𝑒)(𝑡),𝑡) ( 5 ) ERPs 38 Así, obtenemos: Y, con ello, la señal del ERP promediada, 𝑠 0 (𝑡) . Para obtener una optimización de detección de la señal promediada del ERP, podemos tener en cuenta la sincronía que se produce a la hora de su aparición tras el estímulo, por lo que se puede mejorar al hacer un reset de la fase del EEG (Yeung et al. 2004). 3.4 Onda P300 o P3 La onda P300 ha sido y está siendo uno de los potenciales evocados más estudiados. Se trata de una componente positiva de los ERP cuyo pico aparece unos 300 ms después del estímulo, aunque puede que se alargue hasta 900 ms, con una amplitud máxima de 10 µV que se encuentra en la parte parietocentral. Se clasifica como endógeno, ya que está estrechamente relacionado con el procesamiento del estímulo. No hay causa inequívoca de esta onda, aunque hay muchas teorías con respecto al tema. Por una parte, se relaciona con que al aparecer un estímulo, el cerebro lo “guarda” primero en la inconsciencia y lo pasa posteriormente a la consciencia, siendo esta transferencia de información la P300 en sí (Picton 1992). Por otra parte, también se relaciona con los mecanismos de cambio del modelo de actuación del sujeto receptor del estímulo, adaptando la reacción del mismo a la nueva situación. Tanto la atención como la memoria se involucran en estos procesos, ya que el cerebro compara entre estímulos y diferencia el que no es igual que el anterior, cambiando así el patrón de comportamiento (Linden 2005). A esto se le llama Context Updating Theory, ya que la onda P300 indexa las actividades del cerebro que subyacen en la actualización de la representación mental que se tienen por los estímulos entrantes. Se produce una entrada sensorial inicial, posteriormente se realiza una comparación que dirige la atención del nuevo estímulo con el evento anterior de la memoria de trabajo. Si no se detecta ningún cambio, se mantiene el esquema del estímulo y sólo se evocan los potenciales sensoriales. Si se detecta un nuevo estímulo, se produce una actualización de la representación y se produce la onda P3 (Somani y Shukla 2012). Lo mostramos de manera esquematizada en la Figura 12. 𝑣0(𝑡)=8 1 𝑀'(𝑠)(𝑡),𝑡)+8𝑒)(𝑡),𝑡)) ? )./ 𝑣0(𝑡)=8 1 𝑀'𝑠)(𝑡)= 𝑠0(𝑡) ? )./ ( 6 ) 39 Como hemos referido antes, la onda P3 se genera al distinguir un estímulo diferente dentro de un grupo de estímulos iguales. De ahí podemos derivar en dos casos (Soltani y Knight 2000): • P3a: Se propone como la onda que aparece rápida y de manera involuntaria cuando se hace un cambio de atención a un estímulo inexperado. Tiene una distribución fronto-central, se presenta unos 60-89 ms antes y se habitúa rápidamente de las primeras 5-10 presentaciones del estímulo, por lo que acaba por desaparecer. • P3b: Aparece cuando al sujeto se le presenta una tarea de reconocimiento de un estímulo diferente dentro de unos iguales (Polich y Kok 1995), de manera que éste se encuentra concentrado y atendiendo a que esto pueda ocurrir en cualquier momento. Nos centraremos en esta onda en particular, que no la distinguiremos a lo largo del trabajo como P3. Todo lo que sabemos sobre esta onda nos da lugar a pensar sobre cómo podemos provocarla, así como los diferentes usos que podemos hacer de la misma. Se proponen experimentos en los que el sujeto tenga que identificar un target que vaya apareciendo con cierta probabilidad, registrando así la onda. Estudiaremos con más detalle exactamente cómo provocarla más adelante. Esto lleva a estudiar diversas aplicaciones. Primeramente, se descubre que hay afectaciones de la onda P3 en diferentes enfermedades, viéndose en pacientes con esquizofrenia, autismo, demencia, alcholismo, diferentes lesiones, entre otras (Picton 1992), por lo que se puede hacer un experimento de generación de esta onda para el diagnóstico de las correspondientes afecciones. Por otra parte, se estudia cómo utilizar la forma de aparición de la onda para poder aplicarlo, como por ejemplo en el Donchin Speller (que explicaremos con más detalle más adelante), aplicaciones en personas discapacitadas para su ayuda, etc. ENTRADA ¿ESTÍMULO DIFERENTE? SI NO TEORÍA DE ACTUALIZACIÓN DE CONTEXTO Figura 12. Context Updating Theory ERPs 40 Paradigma oddball Se define este paradigma como una de las tareas psicológicas que general la onda P3. En este experimento se distinguen dos tipos de estímulos: target (diana) y no target. El elemento target es aquel que el individuo ha de reconocer y los no target son el resto. Con esto, se le presenta al sujeto una serie de estímulos iguales (no target), entre los que se intercala un estímulo diferente (target) que el individuo tiene que reconocer y realizar una acción respecto al mismo, de esta manera manteniendo la atención (contando las veces que aparece el target, presionando un botón…), no haciendo nada en el resto de estímulos. Se demuestra que cuanta más probabilidad de aparecer tenga el target, menos amplitud nos encontramos en la onda P3, hipotéticamente porque la memoria inmediata “decae” y se va restaurando por los eventos neuronales que se producen en la presentación del nuevo estímulo target (Polich y Margala 1997). Sin embargo, tenemos que señalar diferentes aspectos. En psicología experimental se define el “SOA” (Stimulus Onset Asynchrony), que denota la cantidad de tiempo desde que se presenta un estímulo S1 y el siguiente S2. Con esto se pretende comprobar el efecto de un estímulo sobre el otro. Se presentan dos opciones: • Si el SOA es muy bajo se produce un solapamiento de ambos estímulos. • Si el SOA es muy alto, el efecto del primer estímulo puede haber cesado y el S2 se estudia como un estímulo aislado. Podemos hacer una analogía con este experimento en el concepto Target-To-Target Interval (TTI) y cómo afecta a la presentación de la P3 (Citi, Poli y Cinel 2010). Es decir, cuánto tiempo pasa desde que aparece un target al siguiente. Es necesario que se deje un Recovery Time entre ambos, ya que si, por ejemplo, aparecen dos target seguidos, el cerebro no tiene recursos para hacer un ERP con una amplitud considerable, teniendo así efecto directo con la amplitud de la P3. Así pues, se ha de tener en cuenta a la hora de realizar el experimento, ya que además se debe mantener un equilibrio entre no hacerlo demasiado ajustado ni demasiado largo, ya que la latencia aumentará y será más complicado de identificar. Además, en muchas de las aplicaciones que utilizan este tipo de potencial evocado, es necesaria cierta rapidez, por lo que es complejo un equilibrio entre mantener una probabilidad baja y el tiempo total utilizado. También existen otros tipos de paradigmas para generar la P3, como el paradigma S1-S2, los paradigmas de detección de señal, etc, aunque son menos utilizados que el presente (Fabiani, Gratton y Karis 1987). Figura 13. SOA 41 3.5 BCI Las BCIs (Brain Computer Interface) son unos sistemas de comunicación, tanto hardware como software que permite al humano interactuar con su alrededor sin la necesidad de nervios ni músculos periféricos, sino únicamente usando señales de control que se generan mediante el EEG (Saddique y Siddiqui 2009). Es un sistema de inteligencia artificial que puede reconocer una serie de patrones en las señales cerebrales, siguiendo en general diferentes etapas: 1. Adquisición de la señal. Captura las señales cerebrales y en muchos casos reduce el ruido y procesa los artefactos. 2. Preprocesado o mejora de la señal. Prepara la señal para el resto de etapas. 3. Extración de las características. Identifica información que se ha recogido en el EEG. 4. Clasificación. Se mapea la señal en un vector que contiene características efectivas y discriminantes del resto de señales observadas. Es la etapa más complicada, ya que como sabemos las señales cerebrales están completamente mezcladas en el EEG. También el vector debe de ser de un orden bajo, ya que si no se complica la interfaz, aunque con cuidado de no perder información necesaria. 5. Interfaz de control. Traduce las señales clasificadas en comandos que controlarán cualquier dispositivo conectado. La primera BCI que se sabe que fue utilizada, la utilizaron Farwell y Donchin, siendo la misma basada en la onda P3, el Donchin Speller. También se ha estudiado el control de la BCI mediante el uso de los ritmos motoressensoriales (SMR). Otro tipo de controlador de BCI utiliza los potenciales evocados visuales en estado estacionario (SSVEPs) (McFarland y Wolpaw 2017). Esto nos da lugar a una clasificación de las BCI que se muestran en la Tabla 5. El uso de cada una de ellas será dependiente de la aplicación utilizada. Tabla 5. Tipos de BCI ENFOQUE SEÑALES CEREBRALES VENTAJAS DESVENTAJAS Exógeno SSVEP No necesita formación Fácil configuración Tasa de bit 60 b/min 1 canal del EEG requerido Atención permanente a los estímulos externos que puede causar cansancio P300 Endógeno SCPs (Slow Cortical Potentials) Independiente de estimulación Opera a voluntad Para personas con órganos sensoriales afectados Para control de cursor Mucho tiempo No todos los usuarios lo controlan Registro multicanal Baja tasa de bit (20-30 b/min) SMR Experimento 48 Explicando brevemente lo contenido en la Tabla 6: • Las variables Flashing y StimulusCode serán cero si la matriz está en blanco y serán distintas de cero cuando se produzca una intensificación. La primera nos indica simplemente si hay alguna fila o columna intensificada en ese momento con un “1” y la segunda nos indica mediante una codificación numérica que se muestra en la Figura 17 cuál es la columna o la fila concreta que está siendo intensificada en el momento. • En la variable StimulusType se encuentra un cero si la fila o columna que se está intensificando no es target y un uno si lo es. • En la variable TargetChar tenemos un vector con los caracteres correctos que están pensando los sujetos y que hay que predecir. 1 2 3 4 5 6 7 A B C D E F 8 G H I J K L 9 M N O P Q R 10 S T U V W X 11 Y Z 1 2 3 4 12 5 6 7 8 9 _ Figura 17. Codificación del Speller Para clarificar el contenido y que quede completamente explicado, hacemos un breve resumen: - Si Flashing = 0, StimulusCode = 0, StimulusType = 0. - Si Flashing = 1, StimulusCode ≠ 0 (dependiendo de que fila o columna se esté iluminando según la Figura 17), StimulusType = 0 ó 1 si es Target o no. Finalizamos la explicación con unas aclaraciones, ya que es un punto clave para analizar los datos que tenemos. Por una parte, independientemente del valor de estas últimas variables, la matriz Signal tendrá sus valores concretos que corresponderán con la digitalización de todas las señales del EEG. Por otra parte, reseñar que en el Training tenemos 85 caracteres, y por tanto 85 épocas, y en el Test 100 caracteres, y por tanto 100 épocas. 49 4.2 Librería wyrm En este trabajo utilizaremos una herramienta que nos ayudará a la detección de los ERP. Se trata de una “toolbox” basada en el lenguaje Python que ayuda a implementar una BCI, no solamente la P3 en el experimento que procederemos, sino en diversas aplicaciones como el simple análisis del EEG (Venthur et al. 2015). Primero describiremos a grandes rasgos cómo podremos tratar los datos con la librería, ya que tenemos que saber cómo podemos sacar toda la información posible de nuestra base de datos. Para ello, se define una única estructura de datos que puede envolver todo tipo de datos durante el procesado. Se define la clase “Data”, genérica y flexible, ya que sabemos que las estructuras de datos que utilizaremos en los análisis de los EEG irán cambiando y son complejas. De esta manera, se hace una convención para la identificación. - Datos continuos, en general los datos tal cual salen del EEG. - Datos en épocas, que son los datos continuos separados en épocas, cada cual correspondiéndose en general a una clase. Por ello, los ejes son [clase, tiempo, canal], clase siempre el primero. Tiene que ser consistente con los datos continuos. - Vectores característicos, tras el procesado de los datos. Los ejes son [clase, fv (feature vector)]. Módulos Esta librería nos va a ofrecer métodos a utilizar según qué aplicación queramos darle. Hacemos una breve explicación de los módulos que tendremos, para entenderlos y utilizarlos de la manera más óptima posible, así como para saber qué posibilidades tenemos para hacer el tratamiento de los datos. Toda la documentación está obtenida de la página web de la librería wyrm (Venthur et al. 2015). • wyrm.io: métodos para el tratamiento de entradas y salidas. Esto quiere decir que nos aporta diferentes funciones y métodos que utilizaremos para cargar o guardar datos en diferentes formatos que iremos utilizando a lo largo del procesamiento de nuestro EEG. En este módulo encontraremos métodos para convertir de tipos de datos diferentes al tipo de datos que utiliza la librería wyrm (es decir, la estructura “data”), para así poder utilizar cualquier tipo de datos en nuestro programa. En concreto, nosotros utilizaremos un método llamado wyrm.io.load_bcicomp3_ds2(filename), que explicaremos con más detalle más adelante. • wyrm.misc: métodos misceláneos que nos ayudarán a procesar los datos. • wyrm.plot: contiene métodos para diferentes tipos de dibujo de datos. Se dividen en dos tipos, los primitivos y los compuestos, ofreciendo representaciones únicas y básicas o varias primitivas y más complejas respectivamente. Para la representación de algunos de nuestros datos, lo utilizaremos más adelante y con ello será explicado más detalladamente. • wyrm.processing: métodos para el procesamiento de los datos. Este es uno de los módulos más importantes que vamos a utilizar en nuestro programa, ya que todo nuestro propósito es llegar a un resultado óptimo. Iremos explicándolo a medida que vamos utilizándolos. • wyrm.types: módulo que proporciona los tipos de datos básicos utilizados en la librería, como la clase “Data”, “RingBuffer”, etc, junto con sus métodos correspondientes. Experimento 50 Contenido Procedemos a la descripción del contenido de la librería. Contiene lo que podemos ver en la Figura 18 (Venthur et al. 2015). Los que vamos a utilizar en este proyecto se encuentran en las carpetas “wyrm” y “examples”, cuyo contenido mostramos en la Figura 19 y en la Figura 20. Figura 18. Contenido librería wyrm Figura 19. Contenido directorio “wyrm” Figura 20. Contenido directorio “examples” 51 Los módulos del directorio “wyrm” son los explicados previamente y se irán utilizando en el ejemplo que usaremos, contenido en la carpeta “examples”, concretamente en el archivo de ejemplo de la BCI Competition 3, Data Set 2 (P300 Speller). Este es el fichero en el que nos centraremos para describir nuestro experimento y analizaremos su funcionamiento, así como los algoritmos que se usan para obtener el ERP en nuestra base de datos. 4.3 Fichero de ejemplo Como hemos apuntado antes, utilizamos el fichero de ejemplo speller.py en el Anexo A para la extracción de ondas P300 de la base de datos. Por una parte, hemos utilizado el sistema de distribución Anaconda (Anaconda Inc 2019), que nos facilitará la tarea de gestión de paquetes de Python (además de la librería wyrm, vamos a tener que utilizar paquetes científicos para calcular y detectar ERPs), ya que al instalarlo nos provee automáticamente de la mayoría de paquetes que se van a utilizar, así como diferentes IDE para estudiar el código. En concreto, hemos utilizado Spyder (Spyder Doc Contributors 2018) en su mayoría. Mostramos gráficamente el entorno en la Figura 21. Como podemos observar, ofrece un editor, un analizador (inspector de objetos y variables) y una terminal de IPython. Además, como vemos en la barra superior, podemos ejecutar el código completamente, paso a paso, poner puntos de parada (es decir, debuggearlo), entre otras muchas opciones. Esto nos ha facilitado la tarea a la hora de comprender el código. Figura 21. IDE Spyder Experimento 52 Procesado de los datos Tras habernos descargado la base de datos completa de la BCI Competition III, los metemos en una carpeta a la que podamos acceder fácilmente desde la librería y cambiamos la ruta desde la que accede inicialmente el speller.py - ya que no es la misma que en el ejemplo. Primeramente, se convierten los datos de tipo .mat al tipo de datos descrito previamente, que realmente es una convención por parte de la librería para que resulte más accesible y fácil utilizarlos en las diferentes funciones que se describen. Para ello, se utiliza el método load_bcicomp3_ds2, perteneciente al módulo wyrm.io, que específicamente carga los datos de la Data Set II de la BCI Competition III y los convierte al formato “Continuous Data” – necesariamente la ruta donde se encuentre la BBDD debe de tener el fichero eloc64.txt. Posteriormente, este ejemplo utiliza un preprocesado mediante la función preprocessing que logra un 91% de precisión, en los que se ordenan las señales según el fichero eloc64.txt según el sistema 10-20. Como sabemos, dentro de la banda del EEG que tenemos caen muchos de las señales eléctricas producidas por nuestro cuerpo, por lo que debemos de eliminar los artefactos que nos molesten para detectar el ERP. Para ello se limpia la señal mediante dos filtros de Butterworth de orden 5, primero con un filtro Low Pass (LP) y posteriormente con un filtro High Pass (HP), con la función scipy.signal.butter, perteneciente al módulo scipy. Después se reduce la tasa de muestreo de 240 Hz a 60 Hz mediante la función proc.subsample, perteneciente al módulo processing.py, se hacen épocas de los datos y se hace el promedio de los mismos. Finalmente, se crean los vectores característicos y se da por terminada la fase de preprocesado. Mediante los vectores característicos, se entrena el algoritmo LDA (Latent Dirichlet Allocation) – que explicaremos más detalladamente en la sección 4.4 debido a su importancia. Este entrenamiento se realiza por una función del módulo processing.py, lda_train, que nos da las probabilidades de ocurrencia, para después procesar los datos del test real y aplicarle el mismo algoritmo por la otra función lda_apply. Esto nos separa los estímulos según su probabilidad para saber qué tipo estamos tratando. Tras esto, se comienza el algoritmo de predicción del estímulo en el sentido estricto. 1. Se ordenan los estímulos y los datos dados por el algoritmo LDA en matrices de 15x12, ya que como explicamos antes, el experimento hace 15 ejecuciones en bloques de 12 (6 columnas y 6 filas) que corresponden al mismo carácter. 2. Se ordenan las columnas y las filas correspondientes, de manera que la codificación de columnas y filas queden tal cual se codifica en la Figura 17. 3. Se hace la predicción del carácter según lo anterior. Por último, se define la precisión del algoritmo mediante el feedback de los sujetos y la precisión total. Siendo N_CCi el número de caracteres iguales a la secuencia de caracteres correctos y l_Ci la longitud completa de la secuencia predicha, indicando con el subíndice “i” a qué sujeto está referida. En la Ecuación 7 se calcula la precisión para cada sujeto y en la Ecuación 8 la total, haciendo un promediado de las precisiones individuales. 𝑎𝑐𝑐B=8𝑁_𝐶𝐶B 𝑙_𝐶B×1008(%) ( 7 ) 𝑎𝑐𝑐HIH"J =∑𝑎𝑐𝑐BB28 ( 8 ) 53 Dibujo de los datos En este ejemplo también hace uso de ciertas funciones que nos mostrarán gráficamente la onda P300 que se predice, así como otros datos como un mapa topográfico de los sensores. Para el cálculo de la onda P300 se promedian las señales en todos los aspectos. Es decir, tendremos una gran cantidad de señales que están divididas en clases (target y no target), así como 64 canales que representan el momento. De esta manera, mediante la función perteneciente al módulo processing.py llamada calculate_classwise_average, se hace el promediado. Posteriormente, sólo se representan las ondas calculadas en los canales “Fcz”, “cz” y “oz”, ya que son teóricamente donde mejor se ve la onda P3. Tras esto, se define la función plot_scalps, que nos dibujará los sensores y en un modelado de una cabeza. De esta manera lo hará en intervalos, clasificándolos por colores según el voltaje que se registre en el sensor en cuestión. Es decir, cómo se distribuye tanto en el tiempo como en el espacio la propagación por nuestro cerebro de la onda P300 anteriormente calculada, así como lo que pasa cuando simplemente está la actividad de fondo. Por último, también se representan en unas nuevas gráficas el valor de 𝑟; en una barra según las épocas, representando un índice que hace la diferencia entre los valores medios en todos los canales de los valores del EEG según si es target o no, con respecto a la longitud total de los datos. Esto nos permite crear una mayor diferencia entre máximos y mínimos y por tanto analizar mejor los datos. Se procesa mediante la función del módulo processing.py, calculate_signed_r_square, con cada época dividida. 4.4 Algoritmo LDA Consideramos importante hacer hincapié en el algoritmo LDA, ya que es mediante el que hemos podido predecir las letras, separando los estímulos según su origen. El método LDA trata de estimar parámetros estadísticos, surgiendo debido a la necesidad de encontrar un modelo de categorización de datos (Kolda y Bader 2009). Pretende tomar un conjunto subdivisible en tres niveles (un nivel completo que se divide en partes y a su vez éstas se dividen en elementos) para computar la estadística de los mismos dentro del conjunto principal. Es decir, teniendo los datos, estima con qué probabilidad los elementos del tercer nivel se conforman en el segundo, y el segundo en el primero. Se aplica en casos de modelos de mezcla de pertenencias (mixed membership models), en el que cada dato puede pertenecer a diferentes clases de manera simultánea. Cada mezcla de temas está distribuída según la distribución de Dirichlet, Dir(a), con a positivo. Terminología Describimos los siguientes términos, con los que nos vamos a ir refiriendo a lo largo del proyecto: • Palabra, es la unidad básica de los datos discretos. Es un ítem de un vocabulario que se indexa de manera que éste contiene todas las palabras {1,…,V}, donde una palabra se denota como un vector de dimensión V: Por lo que: 𝑤 =(0,…,0,1,0,…,0) ( 9 ) 𝑤O=08∀8𝑢 ≠ 𝑣 𝑤O=18𝑠𝑖88𝑢 =𝑣 ( 10 ) Experimento 54 • Tema, siendo una secuencia de N palabras: • Documento, como conjunto de T temas : Con esto no solamente buscamos modelar un conjunto que asigna probabilidades a los miembros en sí, sino que también se sugiere asignar la probabilidad de que otros documentos sean similares (Blei, Ng y Edu 2003). Utilizando esta terminología, podemos dar un ejemplo de lo que pretende este algoritmo. Este proyecto se puede considerar un documento donde aparecen múltiples temas, siendo las palabras del mismo las que marcan de qué tema estamos hablando. Es decir, las palabras con se combinan de manera que forman un tema con cierta probabilidad, por lo tanto podemos considerar el documento una mezcla probabilística de estos temas. Algoritmo y probabilidades Si tenemos T temas, podemos describir la probabilidad de una palabra wi en un documento como (Griffiths et al. 2004): donde zi es una variable latente que indica el tema de donde se ha obtenido la palabra wi, por lo que definimos: • 𝑃 ( 𝑤B8 | 8𝑧B=𝑗) como la probabilidad de escoger una palabra wi en el tema zi • 𝑃(𝑧B=𝑗) es la probabilidad de coger una palabra del tema j en el documento en cuestión (que, evidentemente, variará según el documento elegido. Siguiendo con el ejemplo anterior, este proyecto y otro que trate un tema parecido podrá tener temas iguales con más o menos probabilidad y por tanto, palabras que conformen esos temas, también con una probabilidad determinada). En este método consideramos los documentos como una mezcla de temas que aparecen con una probabilidad determinada. Esto nos permite descubrir el conjunto de temas utilizados en una colección de documentos. Es decir, dados D documentos conteniendo T temas expresados en W palabras, presentamos: • 𝑃 ( 𝑤8 | 8𝑧) como un conjunto de T distribuciones multinomiales f sobre las W palabras, tal que 𝑃 ( 𝑤8 | 8𝑧=𝑗) =𝜙X (Y) . • 𝑃(𝑧) con una serie de D distribuciones multinomiales q sobre los T temas, por lo que para una palabra en el documento d describimos la probabilidad de manera que 𝑃 ( 8𝑧 =𝑗 ) =8𝜃Y([) . Una vez hecha esta parametrización, el algoritmo LDA es generativo de documentos completos, en el que se especifica un procedimiento probabilístico con los que nuevos documentos se generen con ciertos temas. De esta manera, adopta el siguiente procedimiento generativo para cada tema en un documento (Blei, Ng y Edu 2003): 1. Escoge 8𝑁8~8𝑃𝑜𝑖𝑠𝑠𝑜𝑛(𝜉) . 2. Escoge 8𝜃8~8𝑃𝑜𝑖𝑠𝑠𝑜𝑛(𝜉) . 3. Para cada una de las N palabras wn: a. Se escoge un tema 8𝑧)~8𝑀𝑢𝑙𝑡𝑖𝑛𝑜𝑚𝑖𝑎𝑙(𝜃) . b. Se escoge una palabra 8𝑤) de 8𝑃(𝑤)|8𝑧),𝛽) , probabilidad multinomial condicionada al tema. 𝑤b =(𝑤/,…,𝑤-) ( 11 ) 𝐷=(𝑤b/,…,𝑤bd) ( 12 ) 𝑃(𝑤B)='𝑃(𝑤B8|8𝑧B=𝑗)×𝑃(𝑧B=𝑗) d Y./ ( 13 ) 55 Se hacen una serie de suposiciones que simplifican el modelo, como que la dimensionalidad k de la distribución de Dirichlet y por tanto de la variable del tema es conocida y fija, y que la probabilidad de la palabra está parametrizada por una matriz 𝛽 ∈ 𝑘𝑥𝑉 , donde: que simplemente tratamos como una cantidad fija que tiene que ser estimada. Este modelo probabilístico lo podemos mostrar gráficamente en la Figura 22. Como vemos, este tiene tres niveles de representación. Los parámetros a y b son del nivel del documento (sin repetición), 𝜃[ son del nivel de los temas (sin repetición) y 𝑧[)𝑦8𝑤[) son variables de nivel de palabra (sin repetición). 4.5 Presentación de resultados Una vez presentada la base de datos, la librería y el fichero de ejemplo, procedemos a presentar los resultados que hemos obtenido. Primeramente, tras el tratado de los datos, el procesamiento y el entrenamiento de los algoritmos, los resultados de la predicción de las letras los mostramos en la Figura 23a y en la Figura 23b, correspondiendo con el sujeto A y el sujeto B. 𝛽BY =𝑝h𝑤Y=18i8𝑧B= 1) ( 14 ) Figura 22. Algoritmo de generación LDA Figura 23. Predicción de las letras y comparación con la secuencia correcta - a - - b - Experimento 56 Como vemos, en ambas situaciones nos encontramos con una precisión del 91%. Deducimos que es un buen resultado para un sistema de ejemplo con un procesado relativamente simple, ya que a pesar de los algoritmos utilizados, el preprocesado es muy básico. Las secuencias siguientes difieren de las originales: Tabla 7. Comparación de resultados correctos y predichos, sujeto A CARACTER ORIGINAL CARACTER PREDICHO COORDENADAS CORRECTAS COORDENADAS PREDICHAS REPETICIONES W 9 (10, 5) (12, 5) 1 2 V (11, 4) (10, 4) 1 K Q (8, 5) (9, 5) 2 J V (8, 4) (10, 4) 2 C O (7, 3) (9, 3) 1 K H (8, 5) (8, 2) 1 W T (10, 5) (10, 2) 1 4 X (11, 6) (10, 6) 1 3 4 (11, 6) (11, 5) 1 Tabla 8. Comparación de resultados correctos y predichos, sujeto B CARACTER ORIGINAL CARACTER PREDICHO COORDENADAS CORRECTAS COORDENADAS PREDICHAS REPETICIONES Z H (11, 2) (8, 2) 1 F L (7, 6) (8, 6) 1 B E (7, 2) (7, 5) 1 1 O (11, 3) (9, 3) 1 1 T (11, 3) (10, 2) 1 1 4 (11, 3) (11, 6) 1 A Y (7, 1) (11, 1) 1 J D (8, 4) (7, 4) 1 T N (10, 2) (9, 2) 1 57 Observamos un cierto patrón: - En 14 ocasiones de 20 (un 70 %) encontramos que el algoritmo está fallando en la predicción de las filas. Es decir, la columna que ofrece es la correcta, pero se mueve entre 1 y 4 filas. - En 5 ocasiones de 20 (un 25 %) encontramos que el algoritmo está fallando en la predicción de las columnas. Es decir, la fila ofrecida es correcta pero se mueve entre 1 y 3 columnas. - En 1 ocasión de 20 (un 5 %) encontramos que el algoritmo falla completamente. Es decir, no acierta ni fila ni columna. Como vemos en la Figura 23, en ambos casos tenemos una precisión del 91 %, lo que nos hace generalizar sobre ello a una precisión del algoritmo de predicción en general del 91 %. Lo siguiente que mostramos es la detección de la onda P3 en el electroencefalograma de ambos sujetos, en la Figura 24 a y b respectivamente. - a - - b - Figura 24. Presentación de la predicción de la onda P300 en los canales FCz, Cz y Oz, para el caso de aparición de target y no target, cada uno con su correspondiente leyenda Conclusiones 64 5.3 Gráficas cerebrales Al observar los resultados obtenidos en el experimento con respecto a la distribución de las ondas, podemos sacar conclusiones parecidas a las vistas en el apartado anterior. Se ha deseado hacer un estudio sobre la corteza cerebral del voltaje tanto del EEG de fondo como de lo que ocurre según las épocas y el espacio. Hemos remarcado previamente las diferencias entre los sujetos A y B, aunque deseamos hacer una apreciación más exhaustiva sobre el tema. Por una parte, volvemos a poner en el punto de mira las condiciones únicas de los sujetos en cuestión. Vemos que siquiera el EEG de fondo en ambos casos es igual, ya que se observa que en el sujeto B hay mucha más actividad neuronal de fondo que en el sujeto A. Por otra parte, en la aparición del estímulo, se distribuye de diferente manera no solamente en los sensores en sí si no en el tiempo que tarda en producirse. Esto ya lo hemos comentado antes, haciéndose evidente de forma experimental que cada persona requiere un tiempo de asimilación y procesamiento del estímulo. De hecho, ya sabíamos previamente que la onda P3 se clasifica como la tercera onda positiva que aparece por diversas razones y que su aparición puede alargarse o adelantarse en el tiempo entre los 250 y 700 ms tras el estímulo. De esta manera, tendremos que tener en cuenta la dependencia del experimento con el sujeto. En la siguiente gráfica que se muestra de r2 nos ofrece los mismos resultados, por lo que no queda por hacer más reseña sobre la distribución espacio-temporal de la onda P300. Con respecto a esto, proponemos como solución un software más efectivo, en el que se haga un aprendizaje intensivo previo a la instalación de un sistema como este. Es decir, que la propia BCI sea capaz de aprender cuáles son las distribuciones y los tiempos que aparecen en ese sujeto, así haciendo un modelo estadístico en base a este aprendizaje, y siendo capaz de reafirmarse y optimizarlo en el caso de ser necesario. De la misma forma, también se hace necesario tener unos límites de error sobre la predicción de caracteres, por lo que es importante un feedback inicial por parte del sujeto. 5.4 Generalidades Como conclusiones a trazas más generales podemos resumir este estudio de diferentes maneras: - Asegurarse de un porcentaje de precisión en la predicción de los algoritmos, haciendo un sistema retroalimentativo software-sujeto para una implantación óptima. - Una actualización de los sistemas, no únicamente físicos como nuevos equipos de captación del EEG, si no informáticos, así como un estudio exhaustivo de nuevas plataformas que proporcionan una mejoría en la detección de ERPs. 65 Líneas futuras 66 LÍNEAS FUTURAS e hace evidente la importancia de estos estudios. El cerebro es el gran desconocido de nuestro cuerpo. Pese a todos los años que han pasado y la cantidad de estudios realizados sobre el tema, sigue siendo fruto de curiosidad por parte de toda la unidad neurocientífica, bioingeniera, psiquiátrica, entre otras muchas. Sabemos que en nuestro cerebro se produce absolutamente todo lo que ocurre en nuestro cuerpo, pero no sabemos identificar mas que una serie de ondas eléctricas que están ahí. El tema de investigación que se ha tratado en este proyecto aún siguen siendo simples pruebas que necesitan un gran avance. De esta manera, trataremos en este punto la situación actual del análisis de señales electroencefalográficas, así como las últimas investigaciones sobre el tema. 6.1 Investigación actual Durante todo este proyecto, se ha tratado de dar unas bases teóricas para llegar a experimentar y documentar un experimento de gran utilidad que empezó en el 1998. El Donchin Speller basado en la onda P300 no se ha quedado ni mucho menos obsoleto, si no que es un motivo de investigación muy potente actualmente debido a su gran potencial. Se plantea como factible la implantación de este modelo y de diferentes BCI sobretodo en pacientes con discapacidad, ya que esta herramienta puede proporcionar una comunicación que no requiera actividad muscular. Aquí surge un problema, ya que la mayoría de estudios realizados tienen una tasa muy baja de predicción de letras, lo que limita una comunicación fluida. Hablamos de únicamente unos pocos caracteres por minuto, cuando en una conversación normal se forman palabras completas en cuestión de segundos. Speller mediante un ECoG Como hemos dicho, es muy importante la rapidez de traducción cerebro-computadora. Uno de los motivos por los que esto carece de velocidad puede ser las limitaciones de un electroencefalograma superficial, por lo que se plantea como una posible solución una BCI que actúe directamente con ondas captadas mediante sensores colocados quirúrgicamente sobre el cerebro expuesto. Se propone de esta manera un speller que utilice diferentes ERPs, entre ellos la P300, en el que el sujeto piense en un carácter en una matriz mientras ésta va intensificado sus columnas y filas muy rápidamente y de manera pseudo-aleatoria. Esto, con todo lo estudiado previamente, sabemos que producirá una respuesta en nuestro cerebro cuando coincida la intensificación con el carácter en el que el sujeto piensa. Con este experimento (Brunner et al. 2011) se llega a la conclusión de que las señales que provee el ECoG puede predecir caracteres en una BCI basada en el Donchin Speller con una tasa media de 17 caracteres por minuto (69 bits/min) y una tasa pico de 22 caracteres por minuto (113 bits/min). Con respecto a estudios anteriores, se deduce que es una tasa aproximadamente 3 o 4 veces mayor que las previamente estudiadas. S 67 Nuevos conceptos del Speller Como hemos descrito antes, una de las aplicaciones más importantes de este experimento es la adaptación de estos sistemas en personas con discapacidad que no sean capaces de comunicarse normalmente. Aquí surge un nuevo problema, ya que el Donchin Speller tradicional descrito limita su aplicación a personas con una visión correcta. Se estudian nuevas soluciones, como sistemas de deletreo que no necesiten estimulación visual, pero la mayoría tienen unos resultados bastante pobres. Sin embargo, se pone en línea de investigación una extensión de la matriz original, en la que no solamente se utiliza la interfaz para estímulos visuales, si no que se pueda compaginar con únicamente estímulos auditivos o ambos a la vez. De esta manera, el sistema en cuestión será capaz de adaptarse a las necesidades del sujeto, pudiendo elegir cuál de las opciones es mejor para el mismo (Belitski, Farquhar y Desain 2011). La actuación de este experimento más baja que los que utilizan el estímulo visual, pero con resultados bastante mejores que otras BCI basados en estímulos auditivos. A trazos generales, la propuesta es, por una parte, un aprendizaje sobre cómo hacer un “paradigma oddball” mediante estímulos auditivos y cuál ofrecía mejores resultados y por otra parte el estudio de estímulos propiamente auditivos, visuales y audio-visuales. Resulta interesante la metodología utilizada, ya que para mejorar la actuación de los estímulos auditivos, se propone asignar un sonido a cada letra de la matriz. Se muestra en la Figura 27 lo hecho: Primeramente se muestra la matriz tradicional, a las que se le entrena con un sonido, y posteriormente se rota la matriz 90º y se vuelven a reproducir los sonidos, para que el sujeto interiorice con más facilidad la asignación carácter-sonido. Nos resulta interesante recalcar no solamente la adaptación a una comunicación normal a un sector de pacientes, si no intentar generalizar lo máximo posible para que esto sea efectivo para absolutamente todas las personas. También se propone un nuevo método de aprendizaje para la mejora de los algoritmos de la propia BCI, de manera que se le añade al experimento cuatro opciones para responder preguntas de sí/no (Sellers, Kübler y Donchin 2006). Se le presenta al usuario una secuencia de cuatro eventos, que son las palabras “sí”, “no”, “pasar” y “terminar”, utilizando también estímulos audio-visuales. Figura 27. Mejora del Donchin Speller tradicional a un sistema audio-visual Líneas futuras 68 Estudio de diferentes algoritmos de diferenciación Otra de las investigaciones respecto a este tema se basa en la mejora del propio algoritmo de detección y el sistema de captación de la BCI. Se proponen y se comparan muchas técnicas de clasificación de la onda P300 (Krusienski et al. 2006), como los métodos PCM (Pearson’s Correlation Method), FLD (Fisher’s Linear Discriminant), SWLDA (Stepwise Linear Discriminant Analysus), LSVM (Linear Support Vector Machine) o GSVM (Gaussian Support Vector Machine). Esto da lugar a diferentes métodos de detección de la presencia o no presencia de la onda P300 en un EEG, que son actualmente objetos de estudio para la mejora de la tasa de predicción o la tasa de errores entre otras. Por otro lado se propone cómo afecta el tamaño de la matriz de caracteres a la hora de la aparición de la onda P300, así como el intervalo de tiempo entre intensificaciones (ISI) (Sellers, Kübler y Donchin 2006). Se reducen las dimensiones a matrices de 3 x 3, además de la original de 6 x 6. Para el experimento online, la precisión es mucho mayor para las matrices de 3x3 con un ISI = 175 ms, aunque la tasa de bit se propone mayor para las matriz de 6 x 6 con el mismo ISI. Se muestra en la Figura 28 las matrices utilizadas en el ejemplo. Figura 28. Nuevas matrices propuestas para nuvos estudios del Donchin Speller 69 6.2 Líneas futuras en base a las conclusiones obtenidas Podemos proponer una serie de líneas de investigación con respecto a las conclusiones y resultados propuestos en este Trabajo de Fin de Grado: - Respecto a la precisión a la hora de adivinar la letra en cuestión tras el experimento, sabemos que los diferentes procesados de señal y algoritmos utilizados nos darán unos resultados bastante diferentes, por lo que resultaría interesante un estudio intensivo de nuevos algoritmos de predicción, así como de clasificación de datos. También es importante tener en cuenta que el procesado de la señal del EEG es muy relevante a la hora de predecir la onda P300 en ellas, por lo que resulta evidente que un tratamiento previo exhaustivo de la señal probablemente mejore el funcionamiento de la predicción. Cuanto más limpia tengamos nuestras señales, mejores resultados podremos obtener. - Se presenta muy interesante la proposición de un estudio intensivo de todas los canales del electroencefalograma, ya que la distribución de la onda en cada sujeto es diferente. A pesar de saber que hay ciertos sensores en los que esta onda se produce con mayor intensidad, se puede optimizar la predicción si se caracterizan todos los canales utilizados, y se propone una comparación mediante el análisis de esos datos para un estudio estadístico de cuál es la letra original con unos márgenes de precisión. - Creemos también importante que un aprendizaje sobre el propio sujeto previo a los experimentos puede ser muy productivo, ya que al tener tanta diferencia entre los sujetos, podemos retroalimentar nuestra BCI con esa información para optimizar su actuación. - Proponemos también que sería muy productivo estudiar los factores que puedan afectar a la aparición de la onda P300, por lo que optimizar lo que es el experimento en sí variando estos factores también parece algo factible y de gran utilidad. 70 71 BIBLIOGRAFÍA ANACONDA INC, 2019. Anaconda Python/R Distribution - Anaconda [en línea]. 2019. S.l.: s.n. Disponible en: https://www.anaconda.com/distribution/. ARBOLEDA GÓMEZ, J.E., 2011. Implementación Técnica De La Ubicación De Focos Epileptogénicos Mediante El Uso De Imágenes Multimodales (Siscom). , pp. 67. BAILEY, R., 2017. Learn About Temporal Lobes in the Cerebral Cortex. [en línea]. Disponible en: https://www.thoughtco.com/temporal-lobes-anatomy-373228. BAILEY, R., 2018a. Divisions of the Brain. [en línea]. Disponible en: https://www.thoughtco.com/divisions- of-the-brain-4032899. BAILEY, R., 2018b. Frontal Lobes: Motor Cortex, Cognition, and Speech. [en línea]. Disponible en: https://www.thoughtco.com/frontal-lobes-anatomy-373213. BAILEY, R., 2018c. Occipital Lobes in the Cerebral Cortex. [en línea]. Disponible en: https://www.thoughtco.com/occipital-lobes-anatomy-373224. BAILEY, R., 2018d. Parietal Lobes Function and Brain Anatomy. [en línea]. Disponible en: https://www.thoughtco.com/parietal-lobes-of-the-brain-3865903. BAREA NAVARRO, R., [sin fecha]. Electroencefalografía. Instrumentación Biomédica. S.l.: Departamento Electrónica, Universidad Alcalá, pp. 26. BELITSKI, A., FARQUHAR, J. y DESAIN, P., 2011. P300 audio-visual speller. Journal of Neural Engineering. S.l.: s.n., ISBN 1741-2560. DOI 10.1088/1741-2560/8/2/025022. BLANKERTZ, B. y SCHALK, G., 2004. Documentation Wadsworth BCI Dataset (P300 Evoked Potentials) Data Acquired Using BCI2000’s P3 Speller Paradigm BCI Competition III Challenge 2004. [en línea]. S.l.: Disponible en: http://www.bci2000.org. BLEI, D.M., NG, A.Y. y EDU, J.B., 2003. Latent Dirichlet Allocation Michael I. Jordan. Journal of Machine Learning Research. S.l.: Bibliografía 72 BRUNNER, P., RITACCIO, A.L., EMRICH, J.F., BISCHOF, H. y SCHALK, G., 2011. Rapid communication with a «P300» matrix speller using electrocorticographic signals (ecog). Frontiers in Neuroscience, ISSN 16624548. DOI 10.3389/fnins.2011.00005. CAMPOS DOMÍNGUEZ, G., [sin fecha]. ERPs. S.l.: s.n. CHORNET, A. y OTEO, J.Á., 2002. Actividad eléctrica cerebral - Revista Mètode. [en línea]. Disponible en: https://metode.es/revistas-metode/monograficos/actividad-electrica-cerebral-un-lenguaje-por- descifrar.html. CITI, L., POLI, R. y CINEL, C., 2010. Documenting, modelling and exploiting P300 amplitude changes due to variable target delays in Donchin’s speller. Journal of Neural Engineering, ISSN 17412560. DOI 10.1088/1741-2560/7/5/056006. FABIANI, M., GRATTON, G. y KARIS, D., 1987. Reliability of Measurement of the P300 Component of the Event-Related Brain Potential. S.l.: s.n. ISBN 0-89232-644-1. FARWELL, L.A. y DONCHIN, E., 1988. Talking off the top of your head: toward a mental prosthesis utilizing event-related brain potentials. Electroencephalography and Clinical Neurophysiology, ISSN 00134694. DOI 10.1016/0013-4694(88)90149-6. GRIFFITHS, T.L., STEYVERS, M., BLEI, by y BLEI, J., 2004. Finding scientific topics A first step in identifying the content of a document is determining which topics that document addresses. We describe a generative model for documents, introduced. [en línea]. S.l.: Disponible en: www.pnas.orgcgidoi10.1073pnas.0307752101. KHAN ACADEMY, [sin fecha]. La sinapsis. [en línea]. Disponible en: https://es.khanacademy.org/science/biology/human-biology/neuron-nervous-system/a/the-synapse. KOLDA, T.G. y BADER, B.W., 2009. Tensor Decompositions and Applications. SIAM Review, ISSN 0036- 1445. DOI 10.1137/07070111X. KROPOTOV, J.D., 2009. Quantitative EEG, Event-Related Potentials and Neurotherapy. Quantitative EEG, Event-Related Potentials and Neurotherapy. S.l.: s.n., ISBN 9780123745125. KRUSIENSKI, D.J., SELLERS, E.W., CABESTAING, F., BAYOUDH, S., MCFARLAND, D.J., VAUGHAN, T.M. y WOLPAW, J.R., 2006. A comparison of classification techniques for the P300 Speller. Journal of Neural Engineering, ISSN 17412560. DOI 10.1088/1741-2560/3/4/007. LDT, T.C.T., 2012. 10 / 20 System Positioning. Gloucester Road, no. 2410, pp. 77-79. LEI, X. y LIAO, K., 2017. Understanding the influences of EEG reference: A large-scale brain network perspective. Frontiers in Neuroscience, vol. 11, no. APR, pp. 1-11. ISSN 1662453X. DOI 10.3389/fnins.2017.00205. 73 LINDEN, D.E.J., 2005. The P300: Where in the brain is it produced and what does it tell us? 2005. S.l.: s.n. ISBN 1073858405. MACHADO, S., ARAÚJO, F., PAES, F., VELASQUES, B., CUNHA, M., BUDDE, H., BASILE, L.F., ANGHINAH, R., ARIAS-CARRIÓN, O., CAGY, M., PIEDADE, R., DE GRAAF, T.A., SACK, A.T. y RIBEIRO, P., 2010. EEG-based brain-computer interfaces: An overview of basic concepts and clinical applications in neurorehabilitation. 2010. S.l.: s.n. ISBN 0334-1763 (Print)r0334-1763 (Linking). MCFARLAND, D.J. y WOLPAW, J.R., 2017. EEG-based brain–computer interfaces. Current Opinion in Biomedical Engineering [en línea], vol. 4, pp. 194-200. ISSN 01681176. DOI 10.1016/0168- 1176(84)80033-6. Disponible en: http://linkinghub.elsevier.com/retrieve/pii/S246845111730082X. NCAN, [sin fecha]. BCI2000 | Schalk Lab. [en línea]. Disponible en: http://www.schalklab.org/research/bci2000. NICOLAS-ALONSO, L.F. y GOMEZ-GIL, J., 2012. Brain computer interfaces, a review. 2012. S.l.: s.n. ISBN 0308018032250. NÚÑEZ-PEÑA, M.I., CORRAL, M.J. y ESCERRA, C., 2004. Potenciales evocados cerebrales en el contexto de la investigación psicológica: una actualización. Anuario de Psicología, vol. 35, pp. 3-21. OPENSTAX, 2013. Communication Between Neurons - Anatomy & Physiology - OpenStax CNX. 6 March [en línea]. Disponible en: https://cnx.org/contents/F[email protected]:p74vr6PZ@3/Communication-Between-Neurons. ORTEGA, M., 2014. Electroencefalograma: Interpretación para mortales. [en línea]. Disponible en: https://sapiensmedicus.org/electroencefalograma-interpretacion/. PICTON, T.W., 1992. The P300 wave of the human event-related potential. Journal of Clinical Neurophysiology, ISSN 15371603. DOI 10.1097/00004691-199210000-00002. POLICH, J. y KOK, A., 1995. Cognitive and biological determinants of P300: an integrative review. Biological Psychology, ISSN 03010511. DOI 10.1016/0301-0511(95)05130-9. POLICH, J. y MARGALA, C., 1997. P300 and probability: Comparison of oddball and single-stimulus paradigms. International Journal of Psychophysiology, ISSN 01678760. DOI 10.1016/S0167- 8760(96)00742-8. RAMOS-ARGÜELLES, F., MORALES, G., EGOZCUE, S., PABÓN, R.M. y ALONSO, M.T., 2009. Técnicas básicas de electroencefalografía: principios y aplicaciones clínicas. Anales del sistema sanitario de Navarra, vol. 32 Suppl 3, pp. 69-82. ISSN 11376627. DOI 10.4321/S1137-66272009000600006. SACEDA CORRALO, D., 2018. Electroencefalograma (EEG), qué es - Pruebas Médicas. [en línea]. Disponible en: https://www.webconsultas.com/pruebas-medicas/electroencefalograma-eeg-12529. Anexo a: códigos utilizados 80 jumping_means_ivals = JUMPING_MEANS_IVALS_B # Intervalos de media B # COMIENZA A TRATAR LOS DATOS SEGÚN LO CARGADO PREVIAMENTE # load the training set. Convierte el training_set (variable que # contiene la ruta de los datos del training) en el formato "data" # de la librería para poder tratarlo posteriormente. dat = load_bcicomp3_ds2(training_set) # Función "preprocessing" descrita más arriba fv_train, epo[subject] = preprocessing(dat, MARKER_DEF_TRAIN, jumping_means_ivals) # train the lda (Algoritmo de discriminacion LDA). Recibe un vector # bidimensional, que hemos sacado previamente en el preprocesado # de las señales cfy = proc.lda_train(fv_train) # Carga el testing_set y preprocesado del mismo dat = load_bcicomp3_ds2(testing_set) fv_test, _ = preprocessing(dat, MARKER_DEF_TEST, jumping_means_ivals) # Prediccion segun el algoritmo LDA de los vectores caracteristicos # desde los datos de testeo, previamente habiendolo entrenado # (training) lda_out_prob = proc.lda_apply(fv_test, cfy) # Orden del del estimulo. # Con el fv_test.stimulus_code, lo ordena en 100 matrices de 15x12, # (sabemos que se hacen 15 intensificaciones en bloques de 12) # haciendo con el argsort() que se ordenen los indices de mayor a # menor segun los valores del stimulus_code unscramble_idx = fv_test.stimulus_code.reshape(100, 15, 12).argsort() # Crea los array de (100,15,12) de los indices para poder acceder # a ellos static_idx = np.indices(unscramble_idx.shape) # Crea el mismo array con igual orden despues de haber pasado el # algoritmo LDA lda_out_prob = lda_out_prob.reshape(100, 15, 12) # Una vez lo ha ordenado, toma los datos que le interesa lda_out_prob = lda_out_prob[static_idx[0], static_idx[1], unscramble_idx] # lda_out_prob = lda_out_prob[:, :5, :] # destil the result of the 15 runs lda_out_prob = lda_out_prob.sum(axis=1) # Ordena las matrices de lda_out_prob, dejando en ella LOS INDICES # en orden lda_out_prob = lda_out_prob.argsort() 81 # Ordenamos las columnas y las filas que vamos a corresponder en # la matriz según si lda_out_prob sea mayor o menor que 5. Obtenemos # matrices de 100filas constantes, y con columnas (indicado por el # parametro "-1") que se adaptaran a la dimensión que nos deje que # sea mayor o menor que 5 cols = lda_out_prob[lda_out_prob <= 5].reshape(100, -1) rows = lda_out_prob[lda_out_prob > 5].reshape(100, -1) text = '' for i in range(100): # El índice -1 implica que contamos desde el final row = rows[i][-1]-6 col = cols[i][-1] letter = MATRIX[row][col] text += letter print print 'Result for subject %d' % (subject+1) print 'Constructed labels: %s' % text.upper() print 'True labels : %s' % labels # Lo pone en mayuscula a = np.array(list(text.upper())) b = np.array(list(labels)) # Compara lo sacado desde el algoritmo con el feedback de los # sujetos al hacer el experimento (el carácter que ellos realmente # estaban pensando) accuracy = np.count_nonzero(a == b) / len(a) print 'Accuracy: %.1f%%' % (accuracy * 100) acc += accuracy print print 'Overal accuracy: %.1f%%' % (100 * acc / 2) ### Analysis of the data # The following part shows how to visualize interesting information of # the data. avgs = [None, None] fig, axes = plt.subplots(2, 3, sharex=True, sharey=True, figsize=(9, 6)) # Itera para los datos de los dos sujetos (A y B), para hacer el # análisis por separado y mostrarlos juntos posteriormente for idx, file in enumerate([TRAIN_A, TRAIN_B]): # Primero, calcula los promedios de los datos según la clase de # los mismos correspondientemente con las épocas (epo) de ambos # sujetos. Recordamos que la variable epo tiene dos dimensiones, # siendo los datos segmentados para [sujeto A, sujeto B] avgs[idx] = proc.calculate_classwise_average(epo[idx]) #avgs[idx] = proc.correct_for_baseline(avgs[idx], [0, 50]) # Tras hacerle los promedios según las épocas, selecciona # unicamente tres canales centrales para su representación (después # de haberles hecho el promedio a cada uno) Anexo a: códigos utilizados 82 datetes = proc.select_channels(avgs[idx], ["fcz", "cz", "oz"]) for i in range(3): # Los puntos supensivos en el array implica tomar de todas las # dimensiones # (...).T => traspuesta de la matriz axes[idx, i].plot(datetes.axes[-2], datetes.data[..., i].T) axes[idx, i].grid() # Pone los titulos para cada subplot (el titulo de cada grafica) for i in range(3): axes[0, i].set_title(datetes.axes[-1][i]) # Pone el eje x (ms) axes[1, 1].set_xlabel('time [ms]') for i in range(2): axes[i, 0].set_ylabel(u'voltage [a.u.]') for i in range(2): axes[i, 2].yaxis.set_label_position("right") axes[i, 2].set_ylabel('Subject %s' % 'AB'[i]) axes[0, -1].legend(datetes.class_names) plt.tight_layout() # Dibujo de los sensores def plot_scalps(epo, ivals): # ratio scalp to colorbar width scale = 10 # Hace las epocas de los datos segun los intervalos pasados dat = proc.jumping_means(epo, ivals) n_classes = epo.data.shape[0] n_ivals = len(ivals) for class_idx in range(n_classes): vmax = np.abs(dat.data).max() vmax = round(vmax) vmin = -vmax for ival_idx in range(n_ivals): ax = plt.subplot2grid((n_classes, scale*n_ivals+1), (class_idx, scale*ival_idx), colspan=scale) plot.ax_scalp(dat.data[class_idx, ival_idx, :], epo.axes[-1], vmin=vmin, vmax=vmax) if class_idx == 1: ax.text(0, -1.5, ivals[ival_idx], horizontalalignment='center') if ival_idx == 0: ax.text(-1.5, 0, ['nontarget', 'target'][class_idx], color='bm'[class_idx], rotation='vertical', verticalalignment='center') # colorbar (la de los voltajes) ax = plt.subplot2grid((n_classes, scale*n_ivals+1), (0, 83 scale*n_ivals), rowspan=n_classes) plot.ax_colorbar(vmin, vmax, label='voltage [a.u.]', ticks=[vmin, 0, vmax]) for subj_idx in range(2): # Dibujo de la figura fig = plt.figure(figsize=(11, 6)) # Los intervalos para hacer los saltos de A y B ivals = [JUMPING_MEANS_IVALS_A, JUMPING_MEANS_IVALS_B][subj_idx] # Dibujo de las cabezas plot_scalps(avgs[subj_idx], ivals) plt.tight_layout() fig.subplots_adjust(left=.06, bottom=.10, right=None, top=None, wspace=0, hspace=0) # Representacion de r2 en una barra según las epocas, para hacer una # diferencia mayor entre maximos y minimos, representando todos los # canales centrales correspondiendose los valores con los registrados # en los dibujos previos fig, axes = plt.subplots(2, 1, sharex=True, sharey=True) for i in range(2): r2 = proc.calculate_signed_r_square(epo[i]) # switch the sign to make the plot more consistent with the # timecourse. This is equivalent to reordering the classidices and # calculating r2 r2 *= -1 max = np.max(np.abs(r2)) im = axes[i].imshow(r2.T, aspect='auto', interpolation='None', vmin=-max, vmax=max) axes[i].set_ylabel('%s' % (epo[i].names[-1])) axes[i].grid() axes[i].set_title("Subject %s" % "AB"[i]) cb = plt.colorbar(im, ax=axes[i]) cb.set_label('[a.u.]') axes[1].yaxis.set_major_formatter(ticker.IndexFormatter(epo[i].axes[- 1])) mask = map(lambda x: True if x.lower().endswith('z') else False, epo[i].axes[-1]) axes[1].yaxis.set_major_locator(ticker.FixedLocator(np.nonzero(mask)[ 0])) axes[1].xaxis.set_major_formatter(ticker.IndexFormatter(['%d' % j for j in epo[i].axes[-2]])) axes[1].xaxis.set_major_locator(ticker.MultipleLocator(6)) axes[1].set_xlabel('%s [%s]' % (epo[i].names[-2], epo[i].units[-2])) plt.tight_layout() plt.show()