Nous utilisons parfois le tracé de densité spectrale pour analyser la périodicité des séries chronologiques. Normalement, nous analysons l'intrigue par inspection visuelle, puis essayons de tirer une conclusion sur la périodicité. Mais les statisticiens ont-ils développé un test pour vérifier si des pointes dans l'intrigue sont statistiquement différentes du bruit blanc? Les experts R ont-ils développé un package pour l'analyse de la densité spectrale et pour faire ce genre de test? Génial si quelqu'un pouvait aider.
Cordialement,
P.
r
time-series
hypothesis-testing
Pantera
la source
la source
bootspecdens
peut être utile.bootspecdens
Dmitrij; hâte de le vérifier.Réponses:
Vous devez savoir que l'estimation des spectres de puissance à l'aide d'un périodogramme n'est pas recommandée, et en fait, c'est une mauvaise pratique depuis ~ 1896. C'est un estimateur incohérent pour rien de moins que des millions d'échantillons de données (et même alors ...), et généralement biaisé. La même chose s'applique exactement à l'utilisation d'estimations standard d'autocorrélations (c'est-à-dire Bartlett), car ce sont des paires de transformées de Fourier. Si vous utilisez un estimateur cohérent, certaines options s'offrent à vous.
La meilleure d'entre elles est une estimation sur plusieurs fenêtres (ou effilement) des spectres de puissance. Dans ce cas, en utilisant les coefficients de chaque fenêtre à une fréquence d'intérêt, vous pouvez calculer une statistique F harmonique par rapport à une hypothèse nulle de bruit blanc. Il s'agit d'un excellent outil pour la détection des composants de ligne dans le bruit, et il est fortement recommandé. C'est le choix par défaut dans la communauté du traitement du signal pour la détection des périodicités du bruit sous l'hypothèse de stationnarité.
Vous pouvez accéder à la fois à la méthode multicouche d'estimation du spectre et au test F associé via le
multitaper
package en R (disponible via CRAN). La documentation fournie avec le package devrait être suffisante pour vous permettre de continuer; le test F est une option simple dans l'appel de fonction pourspec.mtm
.La référence originale qui définit ces deux techniques et en donne les algorithmes est Spectrum Estimation and Harmonic Analysis , DJ Thomson, Proceedings of the IEEE, vol. 70, p. 1055-1096, 1982.
Voici un exemple d'utilisation de l'ensemble de données inclus avec le
multitaper
package.Les paramètres que vous devez connaître sont k et nw : ce sont le nombre de fenêtres (défini sur 10 ci-dessus) et le produit de bande passante (5,0 ci-dessus). Vous pouvez facilement les laisser à ces valeurs quasi-par défaut pour la plupart des applications. La commande centreWithSlepians supprime une estimation robuste de la moyenne des séries chronologiques à l'aide d'une projection sur les fenêtres de Slepian - cela est également recommandé, car laisser la moyenne dans produit beaucoup d'énergie aux basses fréquences.
Je recommanderais également de tracer le spectre de sortie de 'spec.mtm' sur une échelle logarithmique, car cela nettoie considérablement les choses. Si vous avez besoin de plus d'informations, postez-le et je serai heureux de vous le fournir.
la source
multitaper
package semble avoir utilisé des techniques plus avancées pour réduire et calculer l'intervalle de confiance. Mais je pense que l'idée était la même, selon David Stoffer. C'est la seule chose à laquelle je pouvais penser que l'enseignement du péridogoram de vanille a toujours un sens aujourd'hui.Nous avons tenté de résoudre ce problème par une transformation en ondelettes d'un test spectral récemment dans cet article . Essentiellement, vous devez considérer la distribution des ordonnées du périodogramme, de manière similaire à l'article de Fisher, mentionné dans les réponses précédentes. Un autre document de Koen est ce . Nous avons récemment publié un package R hwwntest .
la source
Vous pouvez obtenir plus de détails sur le test dans MB Priestley, Spectral Analysis and Time Series , Academic Press, Londres, 1981, page 406.
Dans R, le package GeneCycle contient la fonction
fisher.g.test()
:J'espère que cela t'aides.
la source