El algoritmo
El siguiente algoritmo está basado en un artículo de T. Higuchi[1] para medir la dimensión fractal de una serie de puntos
Sea la serie
Los métodos para determinar la dimensión fractal de un objeto consisten, a grandes rasgos, en tomar una medida del objeto en cuestión a distintas escalas y encontrar la pendiente de la recta que se obtiene en escala doble logarítmica cuando se grafica en un eje el tamaño de la unidad de medida y por el otro la longitud del objeto. Para esto lo que se hace es cambiar el tamaño del patrón de medida. En la serie anterior podríamos tomar un parámetro como el tamaño de la escala a la que mediremos la serie. Con encontraremos la distancia de la serie cuando consideramos sus elementos separados por 3 pasos, con la distancia cuando consideramos sus elementos separados por 4 pasos, etcétera.
Más aún, dependiendo del punto de inicio, para cada valor de podemos tener un conjunto de m subseries de la forma:
Por ejemplo, si tenemos originalmente
con y se tienen las tres subseries siguientes:
Para los valores y Higuchi define la longitud de la curva como sigue:
El término representa el factor de normalización para la longitud de la curva de la subserie.
Y se define como la suma de las distancias dividida entre .
.
Si , entonces la curva es fractal con dimensión D. Para probar esta dependencia se repite el proceso para distintos valores de . Esto aparece automatizado en el siguiente programa en python.
#!/usr/bin/python ################################################################################ # # # Este programa utiliza el metodo de Higuchi para encontrar la dimension # # fractal de una serie # # # # Ultima modificacion: 29 de junio de 2022 # # # ################################################################################ ################################################################################ # 1) Recibir los datos de la serie de tiempo desde un archivo externo # ################################################################################ import math X = [0] #El elemento 0 no sera tomado en cuenta N = 0 Archivo = open('archivo.dat', 'r') #El nombre del archivo con los datos linea = Archivo.readline() #print(linea) while "" != linea: X.append(float (linea)) N += 1 linea = Archivo.readline() Archivo.close() ################################################################################ # 2) Formula de Higuchi # ################################################################################ kmaxima = int(math.floor(N/10)) Lm = 0 Lk = 0 for k in range (1, kmaxima + 1): Lk = 0 for m in range (1, k + 1): Lm = 0 for i in range (1, int((N-m)/k) + 1): Lm += abs( X[m + i*k] - X[m + (i-1)*k]) a = (N-1)/(((N-m)/k)*k) Lk += (1.0/k)*Lm*a print( math.log(k), math.log(Lk)) #FIN DEL SCRIPT
Ejemplos
En el siguiente cuadro se muestran respectivamente una serie de 1000 puntos de ruido browniano, ruido rosa y ruido blanco.
Y en este aparecen los ajustes (en color rojo) a los valores de y en escala doble logarítmica.
Los valores obtenidos para el exponente D son se muestra en la siguiente tabla:
Ruido | Exponente teórico | Exponente obtenido |
---|---|---|
Browniano | 1.5 | 1.5789 |
Rosa | 1.9 | 1.9023 |
Blanco | 2 | 2.0155 |
Consideraciones finales
El de Higuchi es quizá el método más utilizado para calcular la dimensión de Hausdorff-Besicovitch cuando los datos consisten en una serie de tiempo. Ha sido utilizado, entre otras, en el estudio de señales sísmicas, encefalogramas y electrocardiogramas. Cualquiera que haya intentado utilizar el método de conteo de cajas para calcular la dimensión fractal de una serie sabe lo complicado y poco práctico que resulta.
Wikipedia presenta la variante en la que en lugar de graficar en el eje horizontal el logaritmo de , se grafica el logaritmo de , esto no afecta el valor de la pendiente, salvo en un signo.
Referencias
[1] Higuchi, T. (1988). Approach to an irregular time series on the basis of the fractal theory. Physica D: Nonlinear Phenomena, 31(2), 277-283.
Higuchi1988PhysicaD