Este sitio utiliza cookies de Google para prestar sus servicios y analizar su tráfico. Tu dirección IP y user-agent se comparten con Google, junto con las métricas de rendimiento y de seguridad, para garantizar la calidad del servicio, generar estadísticas de uso y detectar y solucionar abusos.Más información

View site in english Ir a la página de inicio Contacta conmigo
martes, 11 de junio de 2019

Series temporales, RQA y redes neuronales I

En otros artículos de este mismo blog ya he hablado de series temporales complejas, análisis de cuantificación de recurrencia (RQA) y redes neuronales. En esta serie de artículos voy a comentar algunas cuestiones a tener en cuenta al combinar el uso de estas dos herramientas para identificar patrones en series complejas, como por ejemplo detectar anomalías en electrocardiogramas o electroencefalogramas.

Si buscas en google los términos rqa y dnn podrás encontrar bastantes artículos y trabajos sobre estudios que combinan estas dos herramientas. Con el análisis de cuantificación de recurrencia podemos traducir cualquier serie temporal de cualquier longitud en un conjunto de alrededor de 10 números que cuantifican diferentes propiedades de dicha serie. Con las redes neuronales podemos encontrar patrones dentro de este conjunto de valores para identificar diferentes casuísticas, como un funcionamiento anormal del organismo o simplemente diferenciar a una persona de otra o determinar si se está realizando una determinada actividad de entre un conjunto de ellas.

Análisis de cuantificación de recurrencia (RQA)

La idea que subyace detrás del RQA es la siguiente: primero conjeturamos que una serie temporal compleja solamente muestra una parte de un determinado sistema; por ejemplo, si tenemos una población de lobos en un determinado territorio y tomamos datos sobre la variación de la población a lo largo del tiempo, obtendremos una serie temporal, pero los lobos son depredadores y se alimentan de otros animales, como los conejos. Las variaciones en la población de lobos seguramente estarán correlacionadas con variaciones en la población de sus presas, y a su vez, si sus presas son herbívoros, por ejemplo, la de estas con la población de plantas comestibles. Si en lugar de tener solamente la serie de la población de los lobos tuviésemos además la de conejos y la de zanahorias, podríamos entender mucho mejor la dinámica del sistema completo.

Estas poblaciones no solo están relacionadas, sino que se influyen entre sí, con un cierto retardo en el tiempo: si aumenta el número de conejos, poco después aumenta el de lobos, y se reduce la disponibilidad de zanahorias. A cada una de estas series las vamos a llamar dimensiones del sistema completo. En este caso el sistema tendría tres dimensiones, pero podemos tener sistemas con cualquier número de ellas. Algunos resultados de la topología algebraica, como el teorema de Whitney, permiten afirmar que podemos reconstruir el sistema completo de forma aproximada, conservando en buena medida sus propiedades principales, aunque solamente dispongamos de una de las series o dimensiones que lo componen. El procedimiento es sencillo: calculamos un determinado retardo de tiempo t, que dependerá de nuestro sistema en cuestión, y sustituimos las n - 1 dimensiones que suponemos que nos faltan por una copia de la serie de la dimensión anterior, pero que comience t elementos más adelante. En nuestro ejemplo, si consideramos que el retardo t es de 30 días, la población de lobos será la serie que ya tenemos, sin cambios, para la población de conejos tomaremos la serie de la de lobos, pero empezando por el elemento correspondiente a 30 días desde el inicio de la serie, y para la de zanahorias empezaremos 60 días después del inicio.

Con este procedimiento los elementos de la serie ahora tienen tres componentes: una que representa los lobos, otra los conejos y otra las zanahorias. Podemos pasar a hablar en términos abstractos diciendo que la serie que caracteriza el sistema consiste en puntos de tres coordenadas x, y, z. Si ahora representamos esta serie como una trayectoria en un espacio de tres dimensiones, obtendríamos lo que se conoce como el atractor del sistema. Como no disponemos de esta serie de poblaciones de lobos que estamos usando como ejemplo, podemos hacernos una idea reconstruyendo el atractor de Lorenz, que es el atractor de un sistema de tres dimensiones cuya serie se puede obtener fácilmente. Lo reconstruiremos usando solo la serie correspondiente a la componente x:

Atractor de Lorenz reconstruído
Atractor de Lorenz reconstruído

A la izquierda se encuentra el atractor original, y a la derecha, el reconstruido. No es perfecto, pero su topología es similar a la del original.

El análisis de cuantificación de recurrencia parte de una serie de una dimensión y realiza esta extensión a una o más dimensiones, parámetro que se conoce como dimensión embebida. El retardo con el que construimos las dimensiones adicionales es otro de los parámetros principales. Lo que se pretende con esta herramienta es estudiar los puntos del atractor por los que la porción de la serie en estudio pasa más de una vez o, más estrictamente, pasa por su vecindad. El tercer parámetro que debemos proporcionar para este análisis es, por tanto, la distancia que consideramos que separa a dos puntos para considerarlos recurrentes, que también se conoce como radio. Una vez decididos los valores de estos parámetros, se procede a construir una matriz rectangular en la que las filas y las columnas corresponden a los diferentes puntos en orden de la serie. Si denotamos con i a las columnas y con j a las filas, el elemento i,j de la matriz se pone a 1 si la distancia entre el punto i y el punto j de la serie es menor que el radio (punto de recurrencia), o a 0 en caso contrario. Si representamos esta matriz usando el color negro para los puntos de recurrencia y el blanco para el resto, obtenemos un mapa de recurrencia, que puede tener un aspecto similar a este:

Mapa de recurrencia
Mapa de recurrencia

Los puntos de la diagonal siempre son recurrentes, porque representan la recurrencia de un punto consigo mismo. De este mapa, nos interesan medidas como la proporción de puntos de recurrencia sobre el total de puntos (RR), la proporción de puntos recurrentes que forman líneas diagonales continuas (DET), la proporción que forma líneas verticales (LAM), la longitud media de las líneas diagonales (L), la longitud media de las líneas verticales (TT), la longitud máxima de línea diagonal y vertical (LMAX, VMAX), la inversa de LMAX (DIV) y otras medidas algo más complicadas de calcular (RATIO, ENTR, TREND). La teoría sobre todo esto la podéis encontrar mucho más desarrollada y de manera más rigurosa en este sitio web dedicado por entero a los mapas de recurrencia.

El caso es que, de esta manera, disponemos de un criterio para caracterizar cualquier tramo de una serie temporal, y por lo tanto su dinámica, utilizando esta serie de medidas, que también nos pueden servir para detectar cambios importantes en dicha dinámica.

Esto equivale a identificar y clasificar patrones, y para esto disponemos de una herramienta ampliamente documentada e implementada en muchos entornos y librerías disponibles para multitud de lenguajes, además de ser relativamente fáciles de implementar por uno mismo: las redes neuronales.

Pero hay que tener cuidado al utilizar estas dos herramientas combinadas, porque las cosas no son tan fáciles como podría parecer en un principio, y es fácil obtener resultados que parecen concluyentes a primera vista, pero que nos pueden llevar a conclusiones totalmente equivocadas o a creer que vemos cosas en los datos que realmente no están allí.

Para ilustrar un poco esta problemática, voy a utilizar el entorno R para trabajar con series temporales que proceden de un sistema dinámico con un régimen turbulento y, por lo tanto, con un cierto grado de caoticidad, como es el corazón humano. En concreto, utilizaremos electrocardiogramas (ECG), procedentes de la base de datos de PhysioNet. Todo el código y los archivos de datos necesario para reproducir los ejemplos de esta serie de artículos los podéis descargar con este enlace. Aunque proporciono los datos ya procesados, podéis encontrar los originales en PhysioNet, en este enlace. En este artículo sobre el trabajo con archivos en formato EDF podéis encontrar información sobre cómo descargar y tratar los datos originales desde PhysioNet.

Será necesario cargar las siguientes librerías en el entorno R para poder ejecutar los ejemplos:

library(edfReader)
library(crqa)
library(RSNNS)

La primera permite leer archivos EDF, la segunda obtener las medidas RQA, y la tercera permite la implementación de redes neuronales.

El electrocardiograma (ECG)

Un ECG es una señal continua que representa la actividad eléctrica del corazón a lo largo del tiempo. Cada latido presenta un aspecto similar a este:

Señal ECG
Señal ECG

Los puntos P y T representan los máximos de las llamadas ondas P y T, mientras que los puntos Q, R y S forman el llamado complejo QRS, que corresponde con la contracción de los ventrículos. Estos puntos y sus relaciones se utilizan en la interpretación habitual de un ECG. En este caso, solo vamos a estar interesados en el punto R, ya que vamos a transformar la onda completa en sus medidas RQA correspondientes y este punto es el más sencillo de detectar. Servirá para seleccionar tramos del ECG que representen latidos completos.

A la hora de trabajar con señales fisiológicas en general, hay que tener en cuenta algunas cuestiones:

  • La frecuencia de muestreo: si comparamos dos ECG, debemos asegurarnos que la escala temporal de los dos sea la misma.
  • Las derivaciones que comparamos: el ECG se obtiene a partir de varios electrodos situados en diferentes posiciones del pecho, brazos y piernas. Una derivación es la medida del voltaje entre dos electrodos, por lo que pueden existir diferentes derivaciones, o señales, en un mismo registro, que pueden ser bastante diferentes entre sí, aunque los latidos se producen en todas ellas en la misma posición. Comparar derivaciones diferentes de dos ECG posiblemente no sea una buena idea.
  • El voltaje de la señal: no todos los ECG presentan los mismos niveles de voltaje. Puede resultar necesario escalar las señales para uniformizar las medidas.
  • El ruido: algunos ECG presentan una componente de ruido bastante alta, incluso la señal presenta ondulaciones en lugar de tener como base una línea recta. El análisis de recurrencia es bastante sensible al ruido, lo que puede falsear por completo los resultados.
  • Inversión de las señales: algunos registros de ECG presentan la señal con la polaridad invertida, por lo que hay que asegurarse de invertirla de nuevo para compararla con el resto.

Con todo esto en mente, en el próximo artículo empezaremos a trabajar con las señales.

Comparte este artículo: Compartir en Twitter Compártelo en Facebook Compartir en Google Plus Compartir en LinkedIn
Comentarios (1):
* (Su comentario será publicado después de la revisión)

E-Mail


Nombre


Web


Mensaje


CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code