La entropía de muestra (SampEn; más apropiadamente entropía K_2 o entropía de correlación de Takens–Grassberger–Procaccia ) es una modificación de la entropía aproximada (ApEn; más apropiadamente "entropía de Procaccia–Cohen"), utilizada para evaluar la complejidad de señales fisiológicas y otras señales de series temporales , diagnosticando, por ejemplo, estados patológicos. [ 1 ] SampEn tiene dos ventajas sobre ApEn: independencia de la longitud de los datos y una implementación relativamente sencilla. Además, existe una pequeña diferencia computacional: en ApEn, la comparación entre el vector plantilla (ver más abajo) y el resto de los vectores también incluye una comparación consigo mismo. Esto garantiza que las probabilidadesNunca son cero. Por consiguiente, siempre es posible tomar el logaritmo de las probabilidades. Debido a que las comparaciones de plantillas consigo mismas reducen los valores de ApEn, las señales se interpretan como más regulares de lo que realmente son. Estas autocoincidencias no se incluyen en SampEn. Sin embargo, dado que SampEn utiliza directamente las integrales de correlación, no es una medida real de información, sino una aproximación. Los fundamentos y las diferencias con ApEn, así como un tutorial paso a paso para su aplicación, están disponibles en [ 2 ] .
SampEn es, en efecto, idéntico a la "entropía de correlación" K_2 de Grassberger y Procaccia, [ 3 ] salvo que en esta última se sugiere que se deben tomar ciertos límites para obtener un resultado invariante ante cambios de variables. En SampEn no se consideran tales límites ni propiedades de invariancia.
También existe una versión multiescala de SampEn, sugerida por Costa y otros. [ 4 ] SampEn puede utilizarse en investigación biomédica y biomecánica, por ejemplo, para evaluar el control postural. [ 5 ] [ 6 ]
Definición
Al igual que la entropía aproximada (ApEn), la entropía de muestra ( SampEn ) es una medida de complejidad . [ 1 ] Pero no incluye patrones autosimilares como lo hace ApEn. Para una dimensión de incrustación dada, tolerancia y número de puntos de datos, SampEn es el logaritmo natural negativo de la probabilidad de que si dos conjuntos de puntos de datos simultáneos de longitud tener distancialuego dos conjuntos de puntos de datos simultáneos de longitud también tienen distanciaY lo representamos mediante(o porincluido el tiempo de muestreo).
Ahora supongamos que tenemos un conjunto de datos de series temporales de longitudcon un intervalo de tiempo constante. Definimos un vector plantilla de longitud, de tal manera quey la función de distancia(i≠j) será la distancia de Chebyshev (pero podría ser cualquier función de distancia, incluida la distancia euclidiana ). Definimos la entropía de la muestra como
Dónde
= número de pares de vectores plantilla que tienen
= número de pares de vectores plantilla que tienen
De la definición se desprende claramente quesiempre tendrá un valor menor o igual a. Por lo tanto,siempre será un valor cero o positivo. Un valor menor deTambién indica una mayor autosimilitud en el conjunto de datos o menos ruido.
Generalmente tomamos el valor desery el valor deser. Donde std significa desviación estándar que debe tomarse sobre un conjunto de datos muy grande. Por ejemplo, el valor r de 6 ms es apropiado para los cálculos de entropía de muestra de intervalos de frecuencia cardíaca, ya que esto corresponde apara una población muy grande.
Muestra multiescala
La definición mencionada anteriormente es un caso especial de sampEn multiescala con, dóndese denomina parámetro de salto. En los vectores de plantilla multiescala SampEn se definen con un cierto intervalo entre sus elementos, especificado por el valor de. Y el vector de plantilla modificado se define como y sampEn se puede escribir como Y calculamosycomo antes.
Implementación
La entropía de muestra se puede implementar fácilmente en muchos lenguajes de programación diferentes. A continuación se muestra un ejemplo escrito en Python.
from itertools import combinations from math import logdef construct_templates ( timeseries_data : list , m : int = 2 ): num_windows = len ( timeseries_data ) - m + 1 return [ timeseries_data [ x : x + m ] for x in range ( 0 , num_windows )]def get_matches ( plantillas : lista , r : float ) -> int : return len ( lista ( filtro ( lambda x : is_match ( x [ 0 ], x [ 1 ], r ), combinaciones ( plantillas , 2 ))) )def is_match ( plantilla_1 : lista , plantilla_2 : lista , r : flotante ) -> bool : return all ([ abs ( x - y ) < r for ( x , y ) in zip ( plantilla_1 , plantilla_2 )])def sample_entropy ( timeseries_data : list , window_size : int , r : float ): B = get_matches ( construct_templates ( timeseries_data , window_size ), r ) A = get_matches ( construct_templates ( timeseries_data , window_size + 1 ), r ) return - log ( A / B )Un ejemplo equivalente en Python numérico.
importar numpydef construct_templates ( timeseries_data , m ): num_windows = len ( timeseries_data ) - m + 1 return numpy . array ([ timeseries_data [ x : x + m ] for x in range ( 0 , num_windows )])def get_matches ( plantillas , r ) -> int : return len ( lista ( filtro ( lambda x : is_match ( x [ 0 ], x [ 1 ], r ), combinaciones ( plantillas ))) )def combinaciones ( x ): idx = numpy . stack ( numpy . triu_indices ( len ( x ), k = 1 ), axis =- 1 ) return x [ idx ]def is_match ( plantilla_1 , plantilla_2 , r ) -> bool : return numpy . all ([ abs ( x - y ) < r for ( x , y ) in zip ( plantilla_1 , plantilla_2 )])def sample_entropy ( timeseries_data , window_size , r ): B = get_matches ( construct_templates ( timeseries_data , window_size ), r ) A = get_matches ( construct_templates ( timeseries_data , window_size + 1 ), r ) return - numpy . log ( A / B )Se puede encontrar un ejemplo escrito en otros idiomas:
- Matlab
- R.
- Óxido
Véase también
Referencias
- 1 2 Richman, JS; Moorman, JR (2000). "Análisis de series temporales fisiológicas mediante entropía aproximada y entropía de muestra" . American Journal of Physiology. Heart and Circulatory Physiology . 278 (6): H2039–49. doi : 10.1152/ajpheart.2000.278.6.H2039 . PMID 10843903 .
- ↑ Delgado-Bonal, Alfonso; Marshak, Alexander (junio de 2019). "Entropía aproximada y entropía de muestra: un tutorial completo" . Entropy . 21 ( 6): 541. Bibcode : 2019Entrp..21..541D . doi : 10.3390/e21060541 . PMC 7515030. PMID 33267255 .
- ↑ Grassberger, Peter; Procaccia, Itamar (1983). "Estimación de la entropía de Kolmogorov a partir de una señal caótica". Physical Review A. 28 ( 4): 2591(R). Bibcode : 1983PhRvA..28.2591G . doi : 10.1103/PhysRevA.28.2591 .
- ↑ Costa, Madalena; Goldberger, Ary; Peng, C.-K. (2005). "Análisis de entropía multiescala de señales biológicas". Physical Review E . 71 (2) 021906. Bibcode : 2005PhRvE..71b1906C . doi : 10.1103/PhysRevE.71.021906 . PMID 15783351 .
- ↑ Błażkiewicz, Michalina; Kędziorek, Justyna; Hadamus, Anna (marzo de 2021). "El impacto de la entrada visual y la manipulación del área de apoyo en el control postural en sujetos después de una fractura vertebral osteoporótica" . Entropy . 23 ( 3): 375. Bibcode : 2021Entrp..23..375B . doi : 10.3390/e23030375 . PMC 8004071. PMID 33804770 .
- ^ Hadamus, Anna; Białoszewski, Dariusz; Błażkiewicz, Michalina; Kowalska, Aleksandra J.; Urbaniak, Edyta; Wydra, Kamil T.; Wiaderna, Karolina; Boratyński, Rafał; Kobza, Agnieszka; Marczyński, Wojciech (febrero de 2021). "Evaluación de la eficacia de la rehabilitación después de una cirugía de reemplazo total de rodilla mediante entropía de muestra y medidas clásicas del equilibrio corporal" . Entropía . 23 (2): 164. Bibcode : 2021Entrp..23..164H . doi : 10.3390/e23020164 . PMC 7911395 . PMID 33573057 .
- Procesamiento estadístico de señales
- Entropía