Estadística en el círculo unitario

Por: Ludger O. Suarez-Burgoa (Universidad Nacional de Colombia).

En geología y mecánica de rocas el análisis de variables que representan una dirección de \(0\,^\circ\) a \(360\,^\circ\) (este último valor no incluyente en el intervalo, por tanto en el intervalo \([0\,^\circ, 360\,^\circ)\)) en el plano horizontal respecto al norte magnético y en sentido horario es un tema común. A este tipo de variables en un intervalo \([a, b)\) donde \(b\) es el valor más cercano a \(a\) la llamaremos variables en el círculo unitario porque actúan en el perímetro del círculo unitario.

La dirección de las trazas de las discontinuidades que se observan en planos horizontales o en proyección vertical son tratadas como variables de acimut en el círculo unitario de intervalo \([0\,^\circ, 360\,^\circ)\).

Otro tipo de variables direccionales comunes en geología y geotecnia son aquellas que varían en el intervalo \([0\,^\circ, 180\,^\circ)\); sin embargo, estas variables siguen siendo cíclicas donde \(180\,^\circ\) es el punto más cercano a \(0\,^\circ\).

Por ejemplo el rumbo de los lineamientos que se muestran en un plano horizontal pueden ser tratados como variables de rumbo en el círculo unitario de intervalo \([0\,^\circ, 180\,^\circ)\); si es que no se desea tomar en cuenta la orientación del buzamiento, vergencia o inclinación del plano cuya traza y rumbo se han medido en el plano horizontal. También la orientación del eje mayor de elipses que se han ajustado a las formas alargadas de bloques de roca en matrices en un afloramiento y en un análisis de planos verticales pueden ser representados como variables de rumbo en el círculo unitario de intervalo \([0\,^\circ, 180\,^\circ)\). Otro ejemplo es la medida de las estriaciones de los glaciares.

Estas variables que actúan en el perímetro del círculo unitario no pueden ser tratadas como variables escalares corrientes que varían de \(-\infty\) a \(\infty\) en \(\mathbb{R}\) o como variables en un intervalo \([a, b)\) donde \(b\) es el valor más alejado de \(a\), porque son variables cíclicas en un determinado intervalo en \(\mathbb{R}\) donde el último valor del intervalo es el valor más cercano al primer valor.

Para ver en qué intervalo las variables circulares van a variar (si será en \([0\,^\circ, 180\,^\circ)\) o en \([0\,^\circ, 360\,^\circ)\)) se tiene que reconocer entre orientación y dirección de esa variable en \(\mathbb{R}\). Para diferenciar entre orientación y dirección podemos recurrir a las pistas de aterrizaje de los aeródromos. Una pista sin importar su extremo puede tener una orientación Oeste hacia el Este que es equivalente a decir que tiene una orientación Este o Oeste; sin embargo, el avión solo debe tomar una dirección para aterrizar, la pista 9 o la pista 27 que representan respectivamente la dirección N090 y la dirección N270. De este modo, la orientación de la pista se la puede analizar como una variable en el intervalo \([0\,^\circ, 180\,^\circ)\) mientras que la dirección como variable en el intervalo \([0\,^\circ, 360\,^\circ)\).

La estadística circular es una disciplina nueva, no solo se tienen variables circulares en geología sino en meteorología, en astronomía, en oceanografía y biología, por ejemplo.

El círculo unitario

El círculo unitario es el conjunto de puntos \[ C_1 = \{(x\in \mathbb{R}, y \in \mathbb{R}) : x^2 + y^2 = 1\}. \] La definición indica que cualquier punto fuera de la igualdad a la unidad no es parte del conjunto; lo que no estamos trabajando ni en el disco con contorno \(x^2 + y^2 \leq 1\) ni en el disco sin contorno \(x^2 + y^2 < 1\).

Asimismo, un número complejo \(\boldsymbol{z}\) de norma \(|\boldsymbol{z}|=1\) por si solo representa un círculo unitario. Por tanto, es más aconsejable usar el marco matemático de los números complejos para la manipulación de los datos en el círculo unitario que la opción de la definición de pares ordenados en \(\mathbb{R}^2\).

La definición del círculo unitario en el espacio complejo es la siguiente \[ C_1 = \{\boldsymbol{z}\in \mathbb{C} : |\boldsymbol{z}| = 1\}. \]

Representación de datos

Los datos direccionales se representan en una circunferencia de radio unitario. Si más de un dato cae en la misma dirección entonces se coloca un punto encima del otro sobre el mismo radio.

El anterior gráfico se puede simplificar dividiendo el perímetro de la circunferencia unitaria en subintervalos, que la llamaremos clases. Por ejemplo, el intervalo cíclico de \([0\,^\circ, 360\,^\circ)\) podemos dividir en ocho clases cuyos centros se los puede poner en las direcciones principales (direcciones cardinales) y las direcciones ordinales (direcciones intercardinales) de la rosa de los vientos. Por tanto, el conjunto de clases \(C\) es \[ C = \{ [337.5, 22.5), [22.5, 67.5), [67.5, 112.5), [112.5, 157.5), [157.5, 202.5), [202.5, 247.5), [247.5, 292.5), [292.5, 337.5)\}. \]

Se puede usar la función circintervals del módulo circinterval en Python 3 para dividir la circunferencia unitaria en \(c=8\) intervalos entre \([0\,^\circ, 360\,^\circ)\) del siguiente modo.


import circinterval as cint
limsInt, nInrvls = cint.circintervals(8)

El módulo circinterval lo puede descargar de aquí.

Por ejemplo, si deseamos dividir el círculo unitario de intervalo \([0\,^\circ, 360\,^\circ)\) en \(16\) partes, el código sería cint.circintervals(16, disp=True), o si deseamos dividir el círculo unitario de intervalo \([0\,^\circ, 180\,^\circ)\) en \(4\) partes, el código sería cint.circintervals(4, 0, 180, True); dándonos los conjuntos de intervalos de forma respectiva como sigue.


C = {[348.8, 11.2), [11.2, 33.8), [33.8, 56.2), [56.2, 78.8), [78.8, 101.2), \
     [101.2, 123.8), [123.8, 146.2), [146.2, 168.8), [168.8, 191.2), \
     [191.2, 213.8), [213.8, 236.2), [236.2, 258.8), [258.8, 281.2), \
     [281.2, 303.8), [303.8, 326.2), [326.2, 348.8), }
C = {[157.5, 22.5), [22.5, 67.5), [67.5, 112.5), [112.5, 157.5), }

Luego de esta división de clases, los \(n\) datos circulares se agrupan en las clases (definidas en el conjunto \(C\)). La cantidad de datos direccionales dentro de cada clase representa la frecuencia absoluta de la clase. Se puede convertir esta frecuencia absoluta en frecuencia relativa dividiendo cada frecuencia absoluta por e número total de datos. Estos datos son más útiles que los absolutos.

La forma de emplear el modulo circinterval para hallar las frecuencias absolutas y relativas se muestra en el siguiente archivo de lotes.


import numpy as np
import math as m
import circinterval as cint

cycle = 360

# Finidnig the classes limits.
limsInt, nInrvls = cint.circintervals(8)
print('Limits of classes.')
t = ['%g' % k for k in limsInt[0]]
print('\t upper = [%s]' % ', '.join(t))
t = ['%g' % k for k in limsInt[1]]
print('\t lower = [%s]' % ', '.join(t))

# Generating random data in the unit circle with the VonMises distribution,
nRndD = 44
d = [k % cycle for k in list(np.random.vonmises(0, 0, nRndD) * 180/m.pi)]
print('Generation of %d data that are uniform distributed in the unit circumference.' \
      % nRndD)
t = ['%.1f' % k for k in d]
print('\t d = [%s]' % ', '.join(t))
# in order to find the absolute and relative frequencies.
absFreqLst = cint.absfreq(d, limsInt)
relFreqLst = cint.relfreq(d, limsInt)

# Displaying the lists of frequencies.
n = len(d) # number of data
c = nInrvls # number of classes
print('Absolute frequencies of %d intervals for %d data.' % (c, n))
t = ['%d' % k for k in absFreqLst]
print('f_abs = [%s]' % ', '.join(t))
print('Relative frequencies of %d intervals for %d data.' % (c, n))
t = ['%.4f' % k for k in relFreqLst]
print('f_rel = [%s]' % ', '.join(t))
print('Are sum of relative frequenciees equal to 1? --%r.' % \
      (1 - sum(relFreqLst) < 1e-6))

Diagramas de rosas