Métodos potenciales de prospección, FCAG, 2024.
Macros de $\LaTeX$ $\newcommand{\B}[1]{\mathbf{#1}}$
Generamos un dato sintético simple. Una señal sinusoidal con $\lambda=10$ km y amplitud arbitraria. Tomamos una serie de muestras no equiespaciadas para digitalizar la señal. Estas muestras las consideramos como las observaciones. Además, para ilustrar la señal original consideramos un intervalo $\Delta x$ constante y adecuado según el criterio de Nyquist.
Podemos agrupar las observaciones en el vector columna $\mathbf{d}=\begin{bmatrix} d_1 \\ \vdots \\ d_N \end{bmatrix} \: .$ Simulamos error en las observaciones sumando ruido aleatorio en cada entrada del vector $\B{d}$.
Ajustamos polinomio de grado $M$ a las observaciones. Por ejemplo, para un modelo lineal ($M=1$), cada muestra $d_j$ observada en $x_j$ es modelada por
$$ax_j+b = d_j.$$Expresando esta relación en notación vectorial, tenemos
$$ a\B{x}+b\B{1} = \B{d}, $$donde $\B{x}$ es el vector columna $N\times 1$ con las coordenadas de los puntos de observación en $\B{x}$ y $\B{1}$ es un vector columna $N\times 1$ con el valor $1$ en cada una de sus componentes.
Otra manera de expresar el problema es reuniendo los parámetros del modelo en $\B{m}=\begin{bmatrix} a \\ b\end{bmatrix}$ y escribiendo la expresión anterior como
$$ \B{A}\B{m} = \B{d}, $$donde $\B{A}=[\B{x}\: \B{1}]=\begin{bmatrix} x_1 & 1 \\ \vdots & \vdots \\ x_N & 1\end{bmatrix}$ es una matriz $N\times 2$.
Podemos utilizar numpy.polyfit() para realizar el ajuste de un polinomio de grado deg = M y obtener el vector de coeficientes $\mathbf{m}$ en m:
x = ... # vector con las coordenadas de las observaciones
d = ... # vector con las observaciones
M = 1 # grado del polinomio a ajustar
m = numpy.polyfit(x, d, deg = M) # vector de parámetros ajustados
...
Una vez obtenido el ajuste, podemos evaluar el polinomio en una cudrícula más densa que la original. Con ello podemos interpolar el dato observado y visualizar el ajuste:
Visualizamos los ajustes para $M=1,2,3,9$.
Analizamos el error de ajuste según el grado del polinomio. El error se calcula como la norma Euclidea del vector diferencia entre el dato observado y valor arrojado por el ajuste polinomial:
$$e = ||\B{d}-\B{A}\B{m}||_2 .$$Como muestra el gráfico, el error para $M=9$ es cero. ¿Implica ello un buen ajuste de tendencia?
Por último, veamos el carácter predictivo del modelo obtenido. Para ello, generamos nuevas observaciones $\hat{\B{d}}$ y analizamos el error en la predicción con el valor arrojado por el modelo que fue ajustado para las observaciones originales $\B{d}$. El error en la predicción es aquí la norma Euclídea del vector de residuos:
$$e_P = ||\hat{\B{d}}-\B{A}\B{m}||_2 .$$Analicemos el resultado. ¿Obtener un buen ajuste implica que tendremos luego una buena predicción?
Eso es todo por hoy.