26 votos

Comprobación de la importancia de los picos en la densidad espectral

A veces utilizamos el gráfico de densidad espectral para analizar la periodicidad en las series temporales. Normalmente, analizamos el gráfico mediante una inspección visual y luego intentamos sacar una conclusión sobre la periodicidad. Pero, ¿han desarrollado los estadísticos alguna prueba para comprobar si los picos en el gráfico son estadísticamente diferentes del ruido blanco? ¿Han desarrollado los expertos en R algún paquete para el análisis de la densidad espectral y para hacer ese tipo de prueba?

2 votos

Presionado por @Wesley, he borrado mis rápidas reflexiones sobre las funciones de autocorrelación y el periodograma (puede ser que efectivamente sea un gurú del análisis en el dominio de la frecuencia, pero personalmente no creo que Bartlett, mientras trabaje con autocorrelaciones en el dominio del tiempo), pero sigo pensando que mi segunda sugerencia sobre bootspecdens puede ser útil.

0 votos

Me baso en mi suposición sobre la respuesta de la gente a "¿qué es una autocorrelación?" en las apariciones en la literatura, en la que casi todos los casos en los que se utiliza una autocorrelación son de la autocorrelación de Barlett estándar, calculada en el dominio del tiempo. Y, por desgracia, esto es malo :) Agradezco la sugerencia de bootspecdens de Dmitrij; estoy deseando comprobarlo.

11voto

Esteban Araya Puntos 12496

Debe tener en cuenta que la estimación de los espectros de potencia mediante un periodograma es no recomendado, y de hecho ha sido una mala práctica desde ~ 1896. Es un estimador inconsistente para todo lo que no sean millones de muestras de datos (e incluso entonces...), y generalmente sesgado. Lo mismo se aplica al uso de estimaciones estándar de autocorrelaciones (es decir, Bartlett), ya que son pares de transformadas de Fourier. Siempre que se utilice un estimador consistente, hay algunas opciones disponibles.

La mejor de ellas es una estimación de ventana múltiple (o cónica) del espectro de potencia. En este caso, utilizando los coeficientes de cada ventana en una frecuencia de interés, se puede calcular un Estadística F armónica contra una hipótesis nula de ruido blanco. Se trata de una herramienta excelente para la detección de componentes de línea en el ruido, y es muy recomendable. Es la opción por defecto en la comunidad de procesamiento de señales para la detección de periodicidades en el ruido bajo el supuesto de estacionariedad.

Puede acceder tanto al método de estimación del espectro multitaper como a la prueba F asociada a través del multitaper en R (disponible en CRAN). La documentación que viene con el paquete debería ser suficiente para ponerse en marcha; la prueba F es una simple opción en la llamada a la función para spec.mtm .

La referencia original que define estas dos técnicas y da los algoritmos para ellas es Estimación del espectro y análisis de armónicos D.J. Thomson, Proceedings of the IEEE, vol. 70, pg. 1055-1096, 1982.

Este es un ejemplo que utiliza el conjunto de datos incluido con el multitaper paquete.

require(multitaper);
data(willamette);
resSpec <- spec.mtm(willamette, k=10, nw=5.0, nFFT = "default",
                    centreWithSlepians = TRUE, Ftest = TRUE,
                    jackknife = FALSE, maxAdaptiveIterations = 100,
                    plot = TRUE, na.action = na.fail) 

Los parámetros que debe tener en cuenta son k y nw El número de ventanas (fijado anteriormente en 10) y el producto tiempo-ancho de banda (5,0). Puede dejar estos valores por defecto para la mayoría de las aplicaciones. La página web centroConSlepians elimina una estimación robusta de la media de la serie temporal utilizando una proyección en ventanas Slepian - esto también se recomienda, ya que dejar la media produce mucha potencia en las frecuencias bajas.

También recomendaría trazar la salida del espectro de 'spec.mtm' en una escala logarítmica, ya que limpia las cosas significativamente. Si necesitas más información, sólo tienes que enviar un mensaje y estaré encantado de proporcionártela.

0 votos

A Burr, Silva y Celov, muchas gracias por sus interesantes respuestas y sugerencias. Estoy deseando probar estos estimadores. Saludos cordiales

0 votos

(+1) esta noche he pensado detenidamente en tus sugerencias, y he decidido que el dominio del tiempo es efectivamente lo último (debido al truncamiento del retardo y a las débiles propiedades en muestras pequeñas) para intentar buscar el comportamiento cíclico. Lo que me preocupa personalmente son los supuestos de la estadística F y las propiedades de tamaño de muestra pequeño del esquema sugerido. Bueno y probablemente sea bueno iniciar una pregunta separada con respecto a la selección de la ventana óptima, porque de hecho hay muchas.

0 votos

En efecto, hay muchas opciones de ventanas, aunque las dos más comunes son las Secuencias Esferoidales Prolongadas Discretas (o Slepians ) y los sinusoides. Si lo que se busca es la máxima concentración de energía en un ancho de banda local, se ha demostrado que los Slepians son óptimos, y de hecho son la salida de la forma de ecuación integral de la densidad espectral (véase el artículo que he mencionado para obtener todos los detalles). En cuanto a la estadística F, ciertamente hay algunos problemas con los grados de libertad, pero en general funcionan bastante bien, con ~ 2k-2 dof disponibles.

4voto

Andy May Puntos 802

Ronald Fisher propuso una prueba exacta del periodograma máximo coordenadas en R.A. Fisher, Proc. R. Soc A (1929) 125:54. La prueba se basa en el estadístico g. En concreto, se rechaza la hipótesis nula del ruido blanco gaussiano si g es significativamente grande, es decir, si uno de los valores de $f(\omega_k)$ es significativamente mayor que la media de todas las señales.

Puede obtener más detalles sobre la prueba en MB Priestley, Análisis espectral y series temporales , Academic Press, Londres, 1981, página 406.

En R, el paquete GeneCycle contiene la función fisher.g.test() :

library(GeneCycle)
?fisher.g.test

Espero que esto ayude.

0 votos

esto está muy bien pero el test g del paquete se basa en su propia función de periodograma que tiene opciones muy limitadas para calcular los espectros de potencia...

3voto

Delyan Savchev Puntos 301

Hemos intentado abordar esta cuestión mediante una transformación wavelet de una prueba basada en el espectro recientemente en este papel . Esencialmente, hay que considerar la distribución de ordenadas del periodograma, de forma similar al artículo de Fisher, mencionado en las respuestas anteriores. Otro artículo de Koen es este . Recientemente hemos publicado un paquete R hwwntest .

1voto

Aaron Puntos 36

Utilice el spectrum.test en la función ts.extend paquete

Puede realizar una "prueba de espectro de permutación" en sus datos utilizando el ts.extend paquete . Se trata de una variante basada en la permutación de la prueba clásica de Fisher que examina la intensidad espectral máxima de los datos y la compara con su distribución nula bajo la hipótesis nula de intercambiabilidad. (La ventaja de esta prueba sobre la de Fisher es que no asume términos de error normales en los datos; es decir, funciona para cualquier distribución subyacente). He aquí un ejemplo en el que generamos datos con una señal periódica y luego probamos la presencia de la señal. La salida de la prueba y el gráfico resultante detectan fácilmente la señal.

#Load the package
library(ts.extend)

#Generate mock data
set.seed(1)
m      <- 100
SIGNAL <- 0.8*sin(0.3*(1:m))
NOISE  <- rnorm(m)
SERIES <- SIGNAL + NOISE

#Conduct permutation-spectrum test
TEST <- spectrum.test(SERIES)
TEST
        Permutation-Spectrum Test

data:  real time-series vector SERIES with 100 values
maximum scaled intensity = 3.6428, p-value = 0.000208
alternative hypothesis: distribution of time-series vector is not exchangeable 
(at least one periodic signal is present)

#Plot the test results
plot(TEST)

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X