Puedes también encontrar esta librería en CRAN y descargarla directamente desde R y RStudio.
ESCUCHA ESTE POST COMO PODCAST
Del ruido a la estructura: cómo SignalY busca la señal oculta en datos complejos
Un paquete de R que reúne selección bayesiana de variables, descubrimiento de factores, wavelets, descomposición empírica, filtrado bayesiano y pruebas de persistencia en un mismo flujo para paneles y series temporales multivariadas.
Imaginemos una matriz con cincuenta columnas y apenas unos cientos de observaciones. Cada columna representa un indicador macroeconómico, financiero o político. Sabemos que, en alguna parte de esa matriz, existe una señal que merece nuestra atención. El problema es que también hay ruido, redundancia, tendencias comunes y variables que parecen importantes únicamente porque se mueven junto con otras.
Entonces aparecen tres preguntas distintas, pero estrechamente conectadas: ¿qué variables importan realmente?, ¿qué estructura latente existe detrás de ellas? y ¿qué tan persistentes son las señales que terminamos extrayendo?
Normalmente responderlas obliga a saltar entre varios paquetes: uno para selección de variables, otro para PCA, otro para filtros, otro para pruebas de raíz unitaria y otro para visualizar resultados.
SignalY nace precisamente para reducir esa fragmentación. Su idea no es inventar de nuevo cada uno de esos métodos, sino organizarlos dentro de un marco coherente donde las diferentes etapas del análisis puedan comunicarse entre sí.
SignalY intenta convertir una tarea fragmentada — seleccionar, descomponer y caracterizar una señal— en un único flujo reproducible de análisis estadístico.
Tres preguntas, tres pilares
Selección: ¿cuáles de todas las variables disponibles contienen información estructural y cuáles pueden considerarse principalmente ruido?
Descomposición: una vez identificada o construida la señal, ¿qué parte corresponde a tendencia, ciclos de distintas frecuencias y fluctuaciones residuales?
Persistencia: ¿los componentes extraídos son estacionarios, poseen raíz unitaria o se encuentran en una zona fronteriza cercana a la no estacionariedad?
Primer pilar: ¿qué variables importan?
En un problema de alta dimensión podemos tener decenas de predictores, aunque sólo unos pocos contengan la señal que realmente interesa. Una regresión convencional puede intentar asignar un coeficiente a todos, pero con muestras moderadas eso abre rápidamente la puerta al sobreajuste.
SignalY aborda el problema mediante regresión bayesiana dispersa con prior Horseshoe.
La intuición detrás de la Horseshoe
La prior Horseshoe pertenece a la familia de priors global-local shrinkage. Su objetivo es ejercer mucha presión sobre los coeficientes pequeños —probablemente asociados a ruido— y, simultáneamente, permitir que las señales fuertes escapen de esa contracción.
Podemos representar la idea esquemáticamente como:
donde $\tau$ controla la contracción global y $\lambda_j$ permite una adaptación local para cada coeficiente.
Si la evidencia a favor de una variable es débil, la fuerza global puede empujar su coeficiente hacia cero. Si existe una señal suficientemente fuerte, su parámetro local puede permitir que sobreviva.
En lugar de preguntar “¿incluyo o elimino esta variable?” antes de estimar, la Horseshoe plantea algo más gradual: ¿cuánto debe contraerse cada coeficiente dada la información disponible?
Una posterior no selecciona variables por sí sola
Ajustar una prior de contracción es apenas la primera parte del problema. Todavía necesitamos convertir las distribuciones posteriores en alguna regla práctica para determinar qué variables conservar.
SignalY incluye cuatro estrategias distintas.
Proyecta la distribución posterior del modelo completo sobre modelos más pequeños y busca el subconjunto mínimo cuyo desempeño predictivo permanezca suficientemente próximo al modelo de referencia.
Conserva variables cuyos intervalos posteriores no incluyen cero. Es una estrategia sencilla de interpretar, aunque puede resultar conservadora cuando la dimensión es alta.
Utiliza la intensidad de shrinkage —representada mediante cantidades como $\kappa$— para detectar qué variables consiguieron escapar sustancialmente de la contracción.
Aplica un filtro basado directamente en el tamaño del efecto, útil como cribado inicial o como complemento a las decisiones bayesianas.
La ventaja de ofrecer las cuatro dentro del mismo sistema es que el investigador puede comprobar hasta qué punto una selección depende de una única definición de “variable importante”.
Otra pregunta: quizá las cincuenta variables sean la manifestación de tres factores
No todo problema de alta dimensión exige seleccionar columnas individualmente. A veces muchas variables son expresiones diferentes de unos pocos procesos latentes.
SignalY incorpora dos estrategias para explorar esta posibilidad.
PCA + block bootstrap
La componente principal resume variación común, mientras que el bootstrap por bloques intenta respetar la dependencia temporal al construir medidas de incertidumbre.
Dynamic Factor Model
Utiliza criterios de información de Bai y Ng para determinar el número de factores estáticos y posteriormente modela su evolución mediante un VAR.
Topología informacional
El módulo de PCA incorpora además análisis basados en entropía para caracterizar el contenido informativo de los componentes extraídos.
La diferencia es importante. PCA ayuda a encontrar direcciones de máxima variación común. Un modelo factorial dinámico intenta además describir cómo evolucionan temporalmente esos factores.
Segundo pilar: una serie no es una sola cosa
Después de seleccionar variables o construir una señal compuesta aparece una nueva pregunta: ¿qué estructura interna tiene esa serie?
Una observación temporal puede mezclar tendencia secular, oscilaciones de mediano plazo, ciclos rápidos y ruido. SignalY ofrece tres maneras metodológicamente diferentes de intentar separarlos.
Wavelets: mirar el tiempo y la escala simultáneamente
Una transformada de Fourier representa una señal mediante ondas sinusoidales que se extienden indefinidamente. Eso es extremadamente útil para identificar frecuencias, pero sacrifica localización temporal: sabemos qué frecuencia existe, pero no necesariamente cuándo aparece.
Las wavelets utilizan oscilaciones localizadas. SignalY implementa la Maximal Overlap Discrete Wavelet Transform (MODWT) con wavelets de Daubechies.
La descomposición produce componentes de detalle:
y una aproximación suave:
Los primeros niveles recogen variaciones relativamente rápidas; al avanzar hacia escalas mayores aparecen oscilaciones progresivamente más lentas. El componente suave representa la estructura de baja frecuencia.
Una ventaja de MODWT es que no realiza downsampling: cada escala conserva la longitud temporal de la serie original.
SignalY calcula además una descomposición de la varianza por escala. Esto permite preguntar si la dinámica de una serie está dominada por fluctuaciones rápidas, ciclos intermedios o movimiento de largo plazo.
EMD: dejar que la propia serie decida cómo descomponerse
La Empirical Mode Decomposition adopta una filosofía casi opuesta. En lugar de imponer una familia matemática de funciones base, construye los componentes directamente a partir de la geometría local de los datos.
El algoritmo identifica máximos y mínimos locales, construye envolventes y aplica sucesivamente un procedimiento de sifting para extraer Intrinsic Mode Functions o IMFs.
De forma esquemática:
donde $r(t)$ es el residuo o tendencia restante.
Esto vuelve a EMD especialmente interesante cuando la serie es no estacionaria, no lineal o posee frecuencias que cambian con el tiempo.
La flexibilidad tiene un costo. EMD puede ser sensible a efectos de borde y al llamado mode mixing, por lo que los componentes extraídos no deberían interpretarse mecánicamente.
HP-GC: un Hodrick-Prescott donde $\lambda$ deja de ser una elección arbitraria
El filtro Hodrick-Prescott tradicional es familiar para muchos macroeconomistas. También lo es una de sus críticas más recurrentes: el usuario tiene que escoger un parámetro de suavizado $\lambda$.
La regla $\lambda=1600$ para datos trimestrales es famosa, pero sigue siendo una regla fijada externamente.
SignalY incorpora el enfoque de componentes no observados de Grant y Chan, estimado mediante MCMC.
La señal puede conceptualizarse como:
donde $\tau_t$ representa la tendencia y $c_t$ el ciclo. La tendencia se regula mediante sus segundas diferencias, mientras que el ciclo se modela como un proceso AR(2).
La diferencia decisiva es que $\lambda$ se estima a partir de los datos mediante MCMC en lugar de fijarse manualmente.
El resultado incluye distribuciones posteriores para tendencia, ciclo y residuo, de modo que la descomposición incorpora también incertidumbre.
Tres filtros, una misma serie: ¿por qué no escoger simplemente el mejor?
SignalY incluye filter_all(), que aplica wavelets, EMD y
HP-GC a la misma serie y devuelve los resultados en un formato comparable.
Esto es más que una comodidad de programación.
Si un componente aparece bajo varias descomposiciones con supuestos diferentes, tenemos más razones para considerarlo una propiedad robusta de la señal. Si aparece únicamente bajo un filtro, puede ser una característica dependiente del método.
Wavelets parten de una base predeterminada. EMD deja que la descomposición sea guiada por los propios datos. HP-GC utiliza un modelo probabilístico de componentes no observados. No responden exactamente la misma pregunta y por eso compararlos puede resultar más informativo que declarar a uno universalmente superior.
Tercer pilar: ¿la señal vuelve a su centro o se aleja indefinidamente?
Extraer una tendencia o un ciclo no termina el análisis. Para modelar correctamente un componente necesitamos conocer su régimen de persistencia.
Un proceso estacionario y un random walk pueden parecer similares en una muestra corta y, sin embargo, tienen propiedades estadísticas muy diferentes.
Por eso SignalY ejecuta una batería de cuatro pruebas de raíz unitaria.
| Prueba | Hipótesis nula | Qué aporta |
|---|---|---|
| ADF | Existe raíz unitaria | Es la prueba clásica de Dickey-Fuller aumentada y depende de la especificación de rezagos. |
| Phillips-Perron | Existe raíz unitaria | Introduce una corrección no paramétrica frente a correlación serial y heterocedasticidad. |
| KPSS | La serie es estacionaria | Invierte la hipótesis nula, lo que la hace especialmente útil como contraste de las pruebas anteriores. |
| ERS | Existe raíz unitaria | La prueba Elliott-Rothenberg-Stock busca mayor potencia en alternativas cercanas a la unidad. |
Por qué cuatro pruebas pueden ser mejores que una
El problema es que ninguna prueba individual es definitiva. ADF y Phillips-Perron pueden tener poca potencia cuando el proceso se encuentra muy cerca de una raíz unitaria.
KPSS parte, en cambio, de la hipótesis nula opuesta. Esa asimetría permite utilizar los resultados conjuntamente.
SignalY resume la evidencia con una lógica del tipo:
ADF, PP o ERS ofrecen evidencia contra la raíz unitaria y KPSS no rechaza estacionariedad.
Las pruebas con raíz unitaria como nula no logran rechazarla y KPSS sí rechaza la hipótesis de estacionariedad.
Los resultados son mixtos o inconsistentes entre pruebas, sugiriendo un proceso potencialmente cercano a la unidad.
La clasificación automática no oculta las pruebas originales: estadísticas y valores p permanecen disponibles para inspección.
El punto de unión: signal_analysis()
Todos estos módulos pueden utilizarse de manera independiente, pero el diseño de SignalY cobra sentido cuando se encadenan.
La función signal_analysis() funciona como orquestador:
result <- signal_analysis(
data = data,
y_formula = Y ~ X1 + X2 + X3,
methods = c(
"wavelet",
"emd",
"pca",
"dfm",
"unitroot"
),
verbose = TRUE
)
Una llamada puede combinar:
- selección o reducción de columnas;
- descubrimiento de factores;
- descomposición temporal;
- análisis de persistencia;
- resúmenes y visualizaciones dentro de una estructura común.
Los objetos resultantes incluyen métodos como print(),
summary() y plot(), y las visualizaciones pueden
mostrar perfiles de coeficientes, cargas de PCA, factores dinámicos y
componentes de los filtros.
¿Cómo sabemos que los procedimientos recuperan lo que deberían?
La documentación incluye experimentos sobre datos sintéticos con estructura verdadera conocida. Esto es importante: si sabemos de antemano qué variables, factores o ciclos generaron los datos, podemos medir qué tan bien los recupera cada método.
| Tarea sintética | Método | Resultado documentado |
|---|---|---|
| Recuperar 3 factores latentes | PCA / DFM | Correlación $$r>0.95$$ y recuperación exacta del número de factores. |
| Seleccionar 5 variables entre 50 | Horseshoe | $F1>0.85$ y precisión superior a $0.90$. |
| Recuperar una tendencia logarítmica | EMD | Correlación $r>0.95$ con la tendencia verdadera. |
| Extraer un ciclo multiescala | Wavelet $D_3+D_4$ | Correlación $r>0.70$ con el ciclo verdadero. |
| Tendencia estocástica + ciclo AR(2) | HP-GC bayesiano | Tendencia $r>0.90$; ciclo $r>0.50$. |
| Clasificación de estacionariedad | Batería de raíz unitaria | 4 de 4 casos sintéticos clasificados correctamente. |
Son pruebas de recuperación sobre simulaciones. Demuestran que, bajo los escenarios sintéticos evaluados, los métodos pueden recuperar estructuras conocidas. No implican que la misma precisión esté garantizada en cualquier conjunto de datos del mundo real.
¿Quién puede sacar provecho de SignalY?
Economistas
Para paneles y sistemas multivariados donde interesa separar predictores relevantes, factores comunes, ciclos y tendencias antes de especificar modelos posteriores.
Investigación cuantitativa
Para finanzas, macroeconomía o economía política cuando existen conjuntos de predictores amplios y la selección ad hoc resulta difícil de justificar.
Ciencia de datos
Para señales no estacionarias, no lineales o multiescala donde se necesita algo más que una rutina puramente descriptiva de procesamiento digital.
Un flujo mínimo
La instalación y una primera ejecución pueden ser muy compactas:
# Instalar desde GitHub
remotes::install_github("IsadoreNabi/SignalY")
library(SignalY)
# Preparar un data frame
data <- data.frame(
Y = as.vector(Y),
X
)
# Flujo mínimo
result <- signal_analysis(
data = data,
y_formula = "Y",
methods = c(
"pca",
"wavelet",
"unitroot"
)
)
plot(result)
SignalY está distribuido bajo licencia MIT y está diseñado para trabajar con estructuras de datos habituales de R.
La cuestión metodológica de fondo
Ninguno de los elementos centrales de SignalY existe exclusivamente dentro del paquete. La Horseshoe tiene una literatura propia. PCA y los modelos factoriales dinámicos poseen décadas de desarrollo. MODWT, EMD, el filtro HP y las pruebas de raíz unitaria son herramientas establecidas.
La propuesta está en cómo se conectan.
Podemos comenzar con cincuenta variables, utilizar shrinkage para identificar aquellas que contienen mayor señal, descubrir después factores latentes comunes, descomponer la serie resultante en escalas temporales y, finalmente, preguntarnos si cada componente es estacionario o persistente.
También podemos someter la misma serie a wavelets, EMD y HP-GC y observar qué estructuras aparecen bajo los tres enfoques.
O podemos obtener factores dinámicos y estudiar después el régimen de persistencia de cada uno antes de utilizarlos en una etapa econométrica posterior.
SignalY es desarrollado por José Mauricio Gómez Julián y se distribuye bajo licencia MIT. El código fuente, la documentación y la wiki están disponibles en GitHub.


Leave a Comment/Deja un Comentario