4 - Qualité de la décomposition sous R

Désaisonnaliser une série temporelle

Auteur

Alain Quartier-la-Tente

L’objectif de ce TP est d’apprendre à étudier la qualité de la décomposition.

Pour installer tous les packages utiles de ce TP, lancer le programme :

packages_to_install <- c(
  "rjd3toolkit", "rjd3x13", "RJDemetra"
  )

packages <- packages_to_install[! packages_to_install %in% installed.packages()[,"Package"]]
if (length(packages) > 0) {
        install.packages(
      packages, repos = c("https://aqlt.r-universe.dev", "https://cloud.r-project.org")
      )
}

Dans ce TP nous allons voir différentes façon de vérifier la qualité de la décomposition. Tout d’abord, on peut commencer par regarder les statistiques m dont les définitions sont rappelées ci-dessous

Poids Description Si problème
M1 10 Contribution de l’irrégulier à la variance totale (stationnarisation par différence d’ordre 3). Si trop élevé, difficile d’extraire la saisonnalité. Points atypiques ou taille des filtres
M2 11 Contribution de l’irrégulier à la variance totale (stationnarisation par une droite). Points atypiques ou taille des filtres
M3 10 Mesuré à partir du ratio I/C. Si trop grand on aura du mal à séparer les deux composantes. Points atypiques ou taille des filtres
M4 8 Test autocorrélation sur l’irrégulier (réduire le filtre saisonnier). Filtre saisonnier plus court
M5 11 Mesuré à partir du MCD (nombre de mois nécessaires pour que les variations absolues de la TC l’emporte sur I). Points atypiques
M6 10 Vérifie si la moyenne mobile M3x5 est appropriée (\(1.5 < I/S < 6.5\)). Prendre filtre plus long
M7 18 Permet de voir si la saisonnalité est identifiable (compare part relative de la saisonnalité stable et mobile). Schéma multiplicatif ?
M8 7 Mesure l’évolution de la S de court terme. Changer filtre saisonnier
M9 7 Mesure l’évolution de la S de long terme. Changer filtre saisonnier
M10 4 M8 sur dernières années (\(N-2\) à \(N-5\)). Changer filtre saisonnier
M11 4 M9 sur dernières années (\(N-2\) à \(N-5\)). Changer filtre saisonnier

Prenons une spécification par défaut :

Les statistiques m disponibles dans la sous-liste .$result$mstats :

sa_jd3$result$mstats
$m1
[1] 0.1267867

$m2
[1] 0.07923419

$m3
[1] 1.094359

$m4
[1] 0.5580624

$m5
[1] 1.093318

$m6
[1] 0.02176203

$m7
[1] 0.08520675

$m8
[1] 0.2423733

$m9
[1] 0.06360174

$m10
[1] 0.2606264

$m11
[1] 0.247436

$q
[1] 0.3549944

$qm2
[1] 0.3890771
Exercice

Que signifie ces valeurs des statistiques m plus grandes que 1 ? Est-ce important ? Si oui comment les corriger ?

Que pensez-vous de la tendance (plot(sa_jd3)) ? Quelle est la contribution du cycle à la variance totale (sa_jd3$result$diagnostics$vardecomposition ou rjd3toolkit::diagnostics(sa_jd3)[[1]]) ?

La tendance est plutôt plate et la contribution du cycle à la variance totale est petite, on peut donc ignorer la statistique m3. La statistique M5 suggère de prendre un filtre saisonnier plus long, par exemple en utilisant le code suivant :

sa2_jd3 <- rjd3x13::x13(
    sa_jd3$result$preadjust$a1,
    sa_jd3$estimation_spec |> 
        rjd3x13::set_x11(seasonal.filter = "S3X9"))
sa2_jd3$result$mstats
$m1
[1] 0.2865214

$m2
[1] 0.1511407

$m3
[1] 1.490081

$m4
[1] 1.227737

$m5
[1] 1.38513

$m6
[1] 0.3221387

$m7
[1] 0.08654842

$m8
[1] 0.1630884

$m9
[1] 0.06162402

$m10
[1] 0.1329491

$m11
[1] 0.1266407

$q
[1] 0.5406235

$qm2
[1] 0.5948553
rjd3toolkit::diagnostics(sa2_jd3)[["residual_tests"]]
               Statistic    P.value
seas.ftest.i   0.8077490 0.63220976
seas.ftest.sa  0.8422258 0.59838205
seas.qstest.i  2.5023511 0.28616819
seas.qstest.sa 5.4440143 0.06574267
td.ftest.i     1.1950842 0.30812329
td.ftest.sa    1.0416788 0.39782156
                                                                                                   Description
seas.ftest.i   F with 11.0 degrees of freedom in the nominator and 131.0 degrees of freedom in the denominator
seas.ftest.sa  F with 11.0 degrees of freedom in the nominator and 131.0 degrees of freedom in the denominator
seas.qstest.i                                                                Chi2 with 2.0 degrees of freedom 
seas.qstest.sa                                                               Chi2 with 2.0 degrees of freedom 
td.ftest.i      F with 6.0 degrees of freedom in the nominator and 364.0 degrees of freedom in the denominator
td.ftest.sa     F with 6.0 degrees of freedom in the nominator and 364.0 degrees of freedom in the denominator

Mais en faisant cela on crée de la saisonnalité résiduelle ! C’est donc mieux de rester sur les paramètres par défaut.

Par rapport à RJDemetra, plus d’éléments associés aux MSR sont exportables :

sa_jd3 <- rjd3x13::x13(
    ipi_fr, "rsa4", 
    userdefined = c("decomposition.d9-global-msr", 
                    "decomposition.d9-msr", 
                    "decomposition.d9-msr-table")
)
c(sa_jd3$user_defined)
$`decomposition.d9-global-msr`
[1] 4.054405

$`decomposition.d9-msr`
 [1] 6.432093 4.778968 5.061714 4.681529 4.177106 3.200465 4.651325 2.617721
 [9] 3.885137 4.256683 6.629040 2.577652

$`decomposition.d9-msr-table`
          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
[1,] 0.9410370 0.8787867 1.0086908 0.7913817 1.0132386 0.8664120 0.8931384
[2,] 0.1463034 0.1838863 0.1992785 0.1690434 0.2425695 0.2707145 0.1920181
[3,] 6.4320925 4.7789676 5.0617144 4.6815287 4.1771061 3.2004645 4.6513245
          [,8]      [,9]     [,10]     [,11]     [,12]
[1,] 0.9665417 0.8704061 1.0876705 0.8972216 0.9300347
[2,] 0.3692303 0.2240348 0.2555207 0.1353471 0.3608069
[3,] 2.6177208 3.8851372 4.2566834 6.6290403 2.5776524