Suavizado de Splines - Serie de Tiempo
El método de suavizamiento spline es una técnica estadística utilizada para suavizar datos o construir una función que se ajuste a los datos observados. Un spline es una función matemática que se utiliza para interpolar entre puntos de datos, creando una curva suave. Esta técnica es especialmente útil en situaciones donde se requiere un ajuste suave que pueda capturar patrones complejos en los datos, como en modelado de curvas y análisis de series temporales.
Splines: Son funciones polinómicas definidas por tramos. Cada tramo del spline es un polinomio, y estos polinomios están conectados en puntos específicos llamados nodos o puntos de control.
Continuidad y Suavidad: Los splines son diseñados para ser continuos y tener derivadas continuas en los puntos de control, asegurando una transición suave entre los segmentos polinómicos.
Tipos de Splines:
Splines Lineales: Conectan los puntos de datos con segmentos de línea recta.
Splines Cuadráticos: Utilizan polinomios de segundo grado para cada segmento.
Splines Cúbicos: El tipo más común, utilizan polinomios de tercer grado. Son especialmente populares debido a su equilibrio entre flexibilidad y suavidad.
Suavizado de Splines: En lugar de simplemente pasar por todos los puntos de datos (como en la interpolación), el suavizado spline busca un equilibrio entre el ajuste a los datos y la suavidad de la curva, controlado por un parámetro de suavizado.
Definición.-
En el caso univariante, para cada $x_0$ se ajusta un polinomio de grado $d$:
$$\beta_0+\beta_{1}\left(x - x_0\right) + \cdots + \beta_{d}\left( x-x_0\right)^{d}$$
por mínimos cuadrados ponderados, con pesos:
$$w_{i} = K_h(x - x_0) = \frac{1}{h}K\left(\frac{x-x_0}{h}\right)$$
donde $K$ es una función núcleo (normalmente una densidad simétrica en torno al cero) y $h>0$ es un parámetro de suavizado, llamado ventana, que regula el tamaño del entorno que se usa para llevar a cabo el ajuste, esta ventana también se puede suponer local, $h \equiv h(x_0)$; por ejemplo el método KNN se puede considerar un caso particular, con $d=0$ y $K$ la densidad de una $\mathcal{U}(-1, 1)$.
A partir de este ajuste:
- La estimación en $x_0$ es $\hat{m}_{h}(x_0)=\hat{\beta}_0$.
- Podemos obtener también estimaciones de las derivadas: $\widehat{m_{h}^{(r)}}(x_0) = r!\hat{\beta}_{r}$.
Por tanto, la estimación polinómica local de grado $d$, $\hat{m}_{h}(x)=\hat{\beta}_0$, se obtiene al minimizar:
$$\min_{\beta_0 ,\beta_1, \ldots, \beta_d} \sum_{i=1}^{n}\left\{ Y_{i} - \beta_0 - \beta_1(x - X_i) - \ldots -\beta_d(x - X_i)^d \right\}^{2} K_{h}(x - X_i)$$
Explícitamente:
$$\hat{m}_{h}(x) = \mathbf{e}_{1}^{t} \left(X_{x}^{t} {W}_{x} X_{x} \right)^{-1} X_{x}^{t}{W}_{x}\mathbf{Y} \equiv {s}_{x}^{t}\mathbf{Y}$$ donde $\mathbf{e}_{1} = \left( 1, \cdots, 0\right)^{t}$, $X_{x}$ es la matriz con $(1,x - X_i, \ldots, (x - X_i)^d)$ en la fila $i$, $W_{x} = \mathtt{diag} \left( K_{h}(x_{1} - x), \ldots, K_{h}(x_{n} - x) \right)$ es la matriz de pesos, e $\mathbf{Y} = \left( Y_1, \cdots, Y_n\right)^{t}$ es el vector de observaciones de la respuesta.
Se puede pensar que se obtiene aplicando un suavizado polinómico a $(X_i, Y_i)$: $$\hat{\mathbf{Y}} = S\mathbf{Y}$$ siendo $S$ la matriz de suavizado con $\mathbf{s}_{X_{i}}^{t}$ en la fila $i$ (este tipo de métodos también se denominan *suavizadores lineales*).
Habitualmente se considera $d=0$, el estimador Nadaraya-Watson, o $d=1$, estimador lineal local.
Desde el punto de vista asintótico ambos estimadores tienen un comportamiento similar \(Asintóticamente el estimador lineal local tiene un sesgo menor que el de Nadaraya-Watson (pero del mismo orden) y la misma varianza, pero en la práctica suele ser preferible el estimador lineal local, sobre todo porque se ve menos afectado por el denominado efecto frontera.
La ventana $h$ es el hiper-parámetro de mayor importancia en la predicción y para seleccionarlo se suelen emplear métodos de validación cruzada o tipo plug-in, reemplazando las funciones desconocidas que aparecen en la expresión de la ventana asintóticamente óptima por estimaciones; e.g. función `dpill()` del paquete `KernSmooth`.
Por ejemplo, usando el criterio de validación cruzada dejando uno fuera (LOOCV) se trataría de minimizar:
$$CV(h)=\frac{1}{n}\sum_{i=1}^n(y_i-\hat{m}_{-i}(x_i))^2$$ siendo $\hat{m}_{-i}(x_i)$ la predicción obtenida eliminando la observación $i$-ésima.
Al igual que en el caso de regresión lineal, este error también se puede obtener a partir del ajuste con todos los datos: $$CV(h)=\frac{1}{n}\sum_{i=1}^n\left(\frac{y_i-\hat{m}(x_i)}{1 -S_{ii}}\right)^2$$ siendo $S_{ii}$ el elemento $i$-ésimo de la diagonal de la matriz de suavizado \(esto en general es cierto para cualquier suavizador lineal\).
Alternativamente se podría emplear *validación cruzada generalizada* [@craven1978smoothing]:
$$GCV(h)=\frac{1}{n}\sum_{i=1}^n\left(\frac{y_i-\hat{m}(x_i)}{1 - \frac{1}{n}tr(S)}\right)^2$$
(sustituyendo $S_{ii}$ por su promedio).
Además, la traza de la matriz de suavizado $tr(S)$ es lo que se conoce como el número efectivo de parámetros $n - tr(S)$ sería una aproximación de los grados de libertad del error.
Ejemplo.-
Aqui se demuestra con código Python cómo aplicar el suavizado spline a un conjunto de datos simulados. En este código: Generamos Datos Simulados: Creamos una serie de puntos x distribuidos uniformemente y una serie de valores y que siguen una tendencia lineal con algo de ruido aleatorio.
Se aplica Suavizado Spline: Utilizamos la función UnivariateSpline de la biblioteca scipy para aplicar un spline suavizado a los datos. El parámetro s controla el grado de suavizado; un valor más bajo de s significa que el spline se ajustará más de cerca a los datos.
Se Visualiza los Resultados: Creamos un gráfico que muestra los datos originales y la curva suavizada. Los puntos representan los datos originales, mientras que la línea roja muestra el resultado del suavizado spline.
Este ejemplo ilustra cómo el suavizado spline puede ser utilizado para suavizar datos ruidosos y resaltar tendencias subyacentes. La elección del parámetro de suavizado (s) es importante para determinar qué tan cerca el spline se ajustará a los datos, equilibrando entre seguir de cerca los datos y suavizar las fluctuaciones aleatorias.
Conclusión
El suavizado spline es una herramienta poderosa en análisis de datos, especialmente útil cuando necesitamos suavizar datos ruidosos y extraer tendencias subyacentes. Con Python y sus bibliotecas de ciencia de datos, aplicar esta técnica es sencillo y efectivo.

Comentarios
Publicar un comentario