4.2 Qu’est-ce qu’une série chronologique ?

Lorsque nous mesurons de manière répétée le même individu à des moments différents, nous parlons de série chronologique, de séries temporelles, ou de série spatio-temporelle (space-time series en anglais). Ce dernier terme “spatio-temporel” se réfère, en réalité, à un axe unidimensionnel que nous représentons toujours par convention sur l’axe des abscisses sur un graphique et le long duquel nos observations s’étalent. Il peut s’agir du temps, ou d’une dimension spatiale linéaire (mesures le long d’un transect, comme nous l’avons vu pour le plancton méditerranéen), ou d’un mélange des deux c’est-à-dire que le temps se déroule alors que nous progressons dans nos mesures le long du transect. Quoi qu’il en soit, le fait de mesurer toujours le même individu ou la même entité mène à une interdépendance des observations les unes par rapport aux autres.

Cette propriété de corrélation au sein de la série entre les observations est dite autocorrélation. C’est la caractéristique principale d’une série temporelle que de contenir une autocorrélation qui est très souvent non nulle (dans le cas contraire, on parle de bruit blanc, white noise en anglais). C’est cette autocorrélation qui fait que l’hypothèse d’indépendance des observations entre elles n’est pas respectée, et comme corollaire, que nous ne pouvons pas utiliser les outils de statistique classique ici.

Donc, nous devons utiliser des outils statistiques spécialisés qui tiennent compte de cette autocorrélation. Il faut aussi noter que si l’autocorrélation est très forte, nous pourrons aussi l’utiliser à notre avantage. En effet, nous pouvons imaginer prédire la valeur que prendra la variable mesurée dans la série au temps \(t + \Delta t\), connaissant uniquement la valeur qu’elle prend au temps \(t\) (et peut-être aussi, au temps \(t - \Delta t\), \(t - 2 \Delta t\), \(t - 3 \Delta t\), …). Nous appellerons \(\Delta t\), l’intervalle temporel entre deux mesures successives, le pas de temps de notre série.

Une autre caractéristique importante des séries temporelles est l’existence de cycles. En effet, de nombreux phénomènes sont périodiques dans le temps (cycles circadiens, lunaires, annuels, etc.) et ils influent sur la biologie et l’écologie des êtres vivants. Il n’est donc pas étonnant de retrouver des cycles similaires dans les séries temporelles en biologie. Plusieurs méthodes existent pour étudier et séparer des cycles ou des tendances à plus long terme du bruit de fond contenu dans les séries temporelles. Nous aborderons ici quelques-uns de ces outils.

Au cours de notre exploration des séries temporelles, nous utiliserons les fonctions standard de R pour la manipulation et l’analyse des séries temporelles. Nous aborderons aussi des outils plus spécialisés contenus dans les packages {pastecs} (“Package for the Analysis of Space-Time Ecological Series”) et {xts} (“eXtensible Time Series”). Nous allons successivement étudier comment créer et manipuler des séries temporelles dans R et comment les décrire. Dans le module suivant, nous poursuivrons en apprenant à les décomposer, et enfin, nous verrons comment régulariser des séries irrégulières.

4.2.1 Séries régulières

Une série régulière est un ensemble de données mesurées sur la même entité (même individu, même unité statistique) avec un espacement constant dans le temps (ou le long d’un transect). La série n’a pas de valeurs manquantes. Ce type de série a des avantages énormes, car nous pouvons décaler la série d’un ou plusieurs pas de temps, et les observations après décalage correspondent aux mêmes dates que les observations originales, à part aux extrémités bien entendu.

Le décalage d’une série régulière d’un pas de temps résulte en des observations aux mêmes dates, mais décalées d’une unité : x1 est maintenant à la même date que x2 avant le décalage, x2 à la même date que x3 avant, et ainsi de suite…
Le décalage d’une série régulière d’un pas de temps résulte en des observations aux mêmes dates, mais décalées d’une unité : x1 est maintenant à la même date que x2 avant le décalage, x2 à la même date que x3 avant, et ainsi de suite…

Après avoir effectué un décalage (lag en anglais) d’un pas de temps, et moyennant l’élimination de la première observation x1 de la série d’origine et la dernière observation xn de la série décalée, nous obtenons un tableau de 2 lignes et n - 1 colonnes. Nous noterons l’opérateur de décalage ou opérateur retard L, un opérateur qui effectue exactement ce traitement, c’est-à-dire qu’il associe à tout élément de la série régulière, l’observation précédente.

\[L X_t = X_{t-1}\]

Nous pouvons calculer la corrélation \(r\), par exemple à l’aide du coefficient de corrélation de Pearson (ou de Spearman) entre les deux lignes du tableau obtenu en accolant la série de départ \(X_t\) et la même série décalée \(LX_t\), amputé des extrémités ne comportant pas de paires d’observations (la version de Spearman se calculera sur les rangs des observations, voir module 12 du cous SDD I) :

\[r_{X_t,LX_t} = \frac{cov_{X_t,LX_t}}{\sqrt{S^2_{X_t} + S^2_{LX_t}}}\]

Avec \(cov\) la covariance et \(S^2\) la variance. Cette corrélation étant calculée entre la série et elle-même, elle est appelée autocorrélation. Par simplicité, nous pouvons aussi noter le décalage choisi “tau” (\(\tau\)), et nous aurons alors l’autocorrélation correspondante à ce décalage qui sera notée \(r(\tau)\) avec \(\tau = 1\). Naturellement, nous pouvons décaler de plus d’un pas de temps. Par exemple, si nous décalons de deux pas de temps, l’opérateur correspondant s’appelle alors L2 :

\[L^2 X_t = X_{t-2}\]

Ce calcul correspond au schéma suivant :

Décalage de deux pas de temps (L2) : x1 est maintenant à la même date que x3 avant le décalage, x2 à la même date que x4, etc.
Décalage de deux pas de temps (L2) : x1 est maintenant à la même date que x3 avant le décalage, x2 à la même date que x4, etc.

Si nous voulons rassembler la série de départ X et la série décalée L2 X, nous sommes maintenant obligés de laisser tomber les deux premières observations de X et les deux dernières de L2 X. Nous pouvons naturellement aussi calculer l’autocorrélation \(r_{X_t,L^2X_t}\), ou encore, \(r(\tau)\) pour \(\tau = 2\).

De manière générale, nous définissons Lk, avec k pouvant prendre des valeurs entières positives ou négatives (la série est décalée dans l’autre sens).

\[L^k X_t = X_{t-k}\]

L0 est un cas particulier où la série est simplement recopiée aux mêmes dates. Comme la corrélation entre une série et elle-même est toujours parfaite, \(r(\tau) = 1\) toujours pour \(\tau = 0\). L’autocorrélation pour un décalage nul vaut toujours un. Notez que \(r(\tau)\) est en fait une fonction dépendant de variations discrètes de \(\tau\). On l’appelle donc la fonction d’autocorrélation (autocorrelation function en anglais). Cette fonction d’autocorrélation est un merveilleux outil pour analyser les caractéristiques de notre série… nous y reviendrons donc dans la partie analyse plus loin.

R propose un type d’objet particulier pour représenter des séries régulières univariées (une seule variable mesurée à chaque fois) : les objets ts. Certaines de nos séries d’exemples de la section précédent sont des objets de ce type dès le départ. Prenons co2 et examinons comment cet objet est représenté.

co2 <- read("co2", package = "datasets")
co2
#         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
# 1959 315.42 316.31 316.50 317.56 318.13 318.00 316.39 314.65 313.68 313.18
# 1960 316.27 316.81 317.42 318.87 319.87 319.43 318.01 315.74 314.00 313.68
# 1961 316.73 317.54 318.38 319.31 320.42 319.61 318.42 316.63 314.83 315.16
# 1962 317.78 318.40 319.53 320.42 320.85 320.45 319.45 317.25 316.11 315.27
# 1963 318.58 318.92 319.70 321.22 322.08 321.31 319.58 317.61 316.05 315.83
# 1964 319.41 320.07 320.74 321.40 322.06 321.73 320.27 318.54 316.54 316.71
# 1965 319.27 320.28 320.73 321.97 322.00 321.71 321.05 318.71 317.66 317.14
# 1966 320.46 321.43 322.23 323.54 323.91 323.59 322.24 320.20 318.48 317.94
# 1967 322.17 322.34 322.88 324.25 324.83 323.93 322.38 320.76 319.10 319.24
# 1968 322.40 322.99 323.73 324.86 325.40 325.20 323.98 321.95 320.18 320.09
# 1969 323.83 324.26 325.47 326.50 327.21 326.54 325.72 323.50 322.22 321.62
# 1970 324.89 325.82 326.77 327.97 327.91 327.50 326.18 324.53 322.93 322.90
# 1971 326.01 326.51 327.01 327.62 328.76 328.40 327.20 325.27 323.20 323.40
# 1972 326.60 327.47 327.58 329.56 329.90 328.92 327.88 326.16 324.68 325.04
# 1973 328.37 329.40 330.14 331.33 332.31 331.90 330.70 329.15 327.35 327.02
# 1974 329.18 330.55 331.32 332.48 332.92 332.08 331.01 329.23 327.27 327.21
# 1975 330.23 331.25 331.87 333.14 333.80 333.43 331.73 329.90 328.40 328.17
# 1976 331.58 332.39 333.33 334.41 334.71 334.17 332.89 330.77 329.14 328.78
# 1977 332.75 333.24 334.53 335.90 336.57 336.10 334.76 332.59 331.42 330.98
# 1978 334.80 335.22 336.47 337.59 337.84 337.72 336.37 334.51 332.60 332.38
# 1979 336.05 336.59 337.79 338.71 339.30 339.12 337.56 335.92 333.75 333.70
# 1980 337.84 338.19 339.91 340.60 341.29 341.00 339.39 337.43 335.72 335.84
# 1981 339.06 340.30 341.21 342.33 342.74 342.08 340.32 338.26 336.52 336.68
# 1982 340.57 341.44 342.53 343.39 343.96 343.18 341.88 339.65 337.81 337.69
# 1983 341.20 342.35 342.93 344.77 345.58 345.14 343.81 342.21 339.69 339.82
# 1984 343.52 344.33 345.11 346.88 347.25 346.62 345.22 343.11 340.90 341.18
# 1985 344.79 345.82 347.25 348.17 348.74 348.07 346.38 344.51 342.92 342.62
# 1986 346.11 346.78 347.68 349.37 350.03 349.37 347.76 345.73 344.68 343.99
# 1987 347.84 348.29 349.23 350.80 351.66 351.07 349.33 347.92 346.27 346.18
# 1988 350.25 351.54 352.05 353.41 354.04 353.62 352.22 350.27 348.55 348.72
# 1989 352.60 352.92 353.53 355.26 355.52 354.97 353.75 351.52 349.64 349.83
# 1990 353.50 354.55 355.23 356.04 357.00 356.07 354.67 352.76 350.82 351.04
# 1991 354.59 355.63 357.03 358.48 359.22 358.12 356.06 353.92 352.05 352.11
# 1992 355.88 356.63 357.72 359.07 359.58 359.17 356.94 354.92 352.94 353.23
# 1993 356.63 357.10 358.32 359.41 360.23 359.55 357.53 355.48 353.67 353.95
# 1994 358.34 358.89 359.95 361.25 361.67 360.94 359.55 357.49 355.84 356.00
# 1995 359.98 361.03 361.66 363.48 363.82 363.30 361.94 359.50 358.11 357.80
# 1996 362.09 363.29 364.06 364.76 365.45 365.01 363.70 361.54 359.51 359.65
# 1997 363.23 364.06 364.61 366.40 366.84 365.68 364.52 362.57 360.24 360.83
#         Nov    Dec
# 1959 314.66 315.43
# 1960 314.84 316.03
# 1961 315.94 316.85
# 1962 316.53 317.53
# 1963 316.91 318.20
# 1964 317.53 318.55
# 1965 318.70 319.25
# 1966 319.63 320.87
# 1967 320.56 321.80
# 1968 321.16 322.74
# 1969 322.69 323.95
# 1970 323.85 324.96
# 1971 324.63 325.85
# 1972 326.34 327.39
# 1973 327.99 328.48
# 1974 328.29 329.41
# 1975 329.32 330.59
# 1976 330.14 331.52
# 1977 332.24 333.68
# 1978 333.75 334.78
# 1979 335.12 336.56
# 1980 336.93 338.04
# 1981 338.19 339.44
# 1982 339.09 340.32
# 1983 340.98 342.82
# 1984 342.80 344.04
# 1985 344.06 345.38
# 1986 345.48 346.72
# 1987 347.64 348.78
# 1988 349.91 351.18
# 1989 351.14 352.37
# 1990 352.69 354.07
# 1991 353.64 354.89
# 1992 354.09 355.33
# 1993 355.30 356.78
# 1994 357.59 359.05
# 1995 359.61 360.74
# 1996 360.80 362.38
# 1997 362.49 364.34

Visiblement, à l’impression de co2, on voit que c’est un objet particulier.

class(co2) # Objet ts
# [1] "ts"

De même, la fonction de {pastecs} is.tseries() renvoi TRUE si l’objet est une des formes de séries temporelles de R :

is.tseries(co2)
# [1] TRUE

Pour inspecter (aux rayons X) un objet dans R, on peut le “déclasser” avec unclass(), ce qui a pour effet d’imprimer son contenu “brut de décoffrage”.

unclass(co2)
#   [1] 315.42 316.31 316.50 317.56 318.13 318.00 316.39 314.65 313.68 313.18
#  [11] 314.66 315.43 316.27 316.81 317.42 318.87 319.87 319.43 318.01 315.74
#  [21] 314.00 313.68 314.84 316.03 316.73 317.54 318.38 319.31 320.42 319.61
#  [31] 318.42 316.63 314.83 315.16 315.94 316.85 317.78 318.40 319.53 320.42
#  [41] 320.85 320.45 319.45 317.25 316.11 315.27 316.53 317.53 318.58 318.92
#  [51] 319.70 321.22 322.08 321.31 319.58 317.61 316.05 315.83 316.91 318.20
#  [61] 319.41 320.07 320.74 321.40 322.06 321.73 320.27 318.54 316.54 316.71
#  [71] 317.53 318.55 319.27 320.28 320.73 321.97 322.00 321.71 321.05 318.71
#  [81] 317.66 317.14 318.70 319.25 320.46 321.43 322.23 323.54 323.91 323.59
#  [91] 322.24 320.20 318.48 317.94 319.63 320.87 322.17 322.34 322.88 324.25
# [101] 324.83 323.93 322.38 320.76 319.10 319.24 320.56 321.80 322.40 322.99
# [111] 323.73 324.86 325.40 325.20 323.98 321.95 320.18 320.09 321.16 322.74
# [121] 323.83 324.26 325.47 326.50 327.21 326.54 325.72 323.50 322.22 321.62
# [131] 322.69 323.95 324.89 325.82 326.77 327.97 327.91 327.50 326.18 324.53
# [141] 322.93 322.90 323.85 324.96 326.01 326.51 327.01 327.62 328.76 328.40
# [151] 327.20 325.27 323.20 323.40 324.63 325.85 326.60 327.47 327.58 329.56
# [161] 329.90 328.92 327.88 326.16 324.68 325.04 326.34 327.39 328.37 329.40
# [171] 330.14 331.33 332.31 331.90 330.70 329.15 327.35 327.02 327.99 328.48
# [181] 329.18 330.55 331.32 332.48 332.92 332.08 331.01 329.23 327.27 327.21
# [191] 328.29 329.41 330.23 331.25 331.87 333.14 333.80 333.43 331.73 329.90
# [201] 328.40 328.17 329.32 330.59 331.58 332.39 333.33 334.41 334.71 334.17
# [211] 332.89 330.77 329.14 328.78 330.14 331.52 332.75 333.24 334.53 335.90
# [221] 336.57 336.10 334.76 332.59 331.42 330.98 332.24 333.68 334.80 335.22
# [231] 336.47 337.59 337.84 337.72 336.37 334.51 332.60 332.38 333.75 334.78
# [241] 336.05 336.59 337.79 338.71 339.30 339.12 337.56 335.92 333.75 333.70
# [251] 335.12 336.56 337.84 338.19 339.91 340.60 341.29 341.00 339.39 337.43
# [261] 335.72 335.84 336.93 338.04 339.06 340.30 341.21 342.33 342.74 342.08
# [271] 340.32 338.26 336.52 336.68 338.19 339.44 340.57 341.44 342.53 343.39
# [281] 343.96 343.18 341.88 339.65 337.81 337.69 339.09 340.32 341.20 342.35
# [291] 342.93 344.77 345.58 345.14 343.81 342.21 339.69 339.82 340.98 342.82
# [301] 343.52 344.33 345.11 346.88 347.25 346.62 345.22 343.11 340.90 341.18
# [311] 342.80 344.04 344.79 345.82 347.25 348.17 348.74 348.07 346.38 344.51
# [321] 342.92 342.62 344.06 345.38 346.11 346.78 347.68 349.37 350.03 349.37
# [331] 347.76 345.73 344.68 343.99 345.48 346.72 347.84 348.29 349.23 350.80
# [341] 351.66 351.07 349.33 347.92 346.27 346.18 347.64 348.78 350.25 351.54
# [351] 352.05 353.41 354.04 353.62 352.22 350.27 348.55 348.72 349.91 351.18
# [361] 352.60 352.92 353.53 355.26 355.52 354.97 353.75 351.52 349.64 349.83
# [371] 351.14 352.37 353.50 354.55 355.23 356.04 357.00 356.07 354.67 352.76
# [381] 350.82 351.04 352.69 354.07 354.59 355.63 357.03 358.48 359.22 358.12
# [391] 356.06 353.92 352.05 352.11 353.64 354.89 355.88 356.63 357.72 359.07
# [401] 359.58 359.17 356.94 354.92 352.94 353.23 354.09 355.33 356.63 357.10
# [411] 358.32 359.41 360.23 359.55 357.53 355.48 353.67 353.95 355.30 356.78
# [421] 358.34 358.89 359.95 361.25 361.67 360.94 359.55 357.49 355.84 356.00
# [431] 357.59 359.05 359.98 361.03 361.66 363.48 363.82 363.30 361.94 359.50
# [441] 358.11 357.80 359.61 360.74 362.09 363.29 364.06 364.76 365.45 365.01
# [451] 363.70 361.54 359.51 359.65 360.80 362.38 363.23 364.06 364.61 366.40
# [461] 366.84 365.68 364.52 362.57 360.24 360.83 362.49 364.34
# attr(,"tsp")
# [1] 1959.000 1997.917   12.000

Ici, nous voyons qu’il s’agit d’un vecteur de données numériques auquel est ajouté un attribut (attr) nommé tsp pour “time series parameters” et qui contient trois valeurs : 1959.000, 1997.917 et 12.000. Où sont les données de temps ? Et que veulent dire ces valeurs de tsp ? En fait, pour économiser de la place en mémoire, R n’enregistre pas toutes les dates, mais seulement la première, la dernière et le pas de temps de la série dans tsp. À l’aide de ces trois valeurs, il est en fait possible de reconstituer toutes les dates. La fonction time() s’en charge :

time(co2)
#           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
# 1959 1959.000 1959.083 1959.167 1959.250 1959.333 1959.417 1959.500 1959.583
# 1960 1960.000 1960.083 1960.167 1960.250 1960.333 1960.417 1960.500 1960.583
# 1961 1961.000 1961.083 1961.167 1961.250 1961.333 1961.417 1961.500 1961.583
# 1962 1962.000 1962.083 1962.167 1962.250 1962.333 1962.417 1962.500 1962.583
# 1963 1963.000 1963.083 1963.167 1963.250 1963.333 1963.417 1963.500 1963.583
# 1964 1964.000 1964.083 1964.167 1964.250 1964.333 1964.417 1964.500 1964.583
# 1965 1965.000 1965.083 1965.167 1965.250 1965.333 1965.417 1965.500 1965.583
# 1966 1966.000 1966.083 1966.167 1966.250 1966.333 1966.417 1966.500 1966.583
# 1967 1967.000 1967.083 1967.167 1967.250 1967.333 1967.417 1967.500 1967.583
# 1968 1968.000 1968.083 1968.167 1968.250 1968.333 1968.417 1968.500 1968.583
# 1969 1969.000 1969.083 1969.167 1969.250 1969.333 1969.417 1969.500 1969.583
# 1970 1970.000 1970.083 1970.167 1970.250 1970.333 1970.417 1970.500 1970.583
# 1971 1971.000 1971.083 1971.167 1971.250 1971.333 1971.417 1971.500 1971.583
# 1972 1972.000 1972.083 1972.167 1972.250 1972.333 1972.417 1972.500 1972.583
# 1973 1973.000 1973.083 1973.167 1973.250 1973.333 1973.417 1973.500 1973.583
# 1974 1974.000 1974.083 1974.167 1974.250 1974.333 1974.417 1974.500 1974.583
# 1975 1975.000 1975.083 1975.167 1975.250 1975.333 1975.417 1975.500 1975.583
# 1976 1976.000 1976.083 1976.167 1976.250 1976.333 1976.417 1976.500 1976.583
# 1977 1977.000 1977.083 1977.167 1977.250 1977.333 1977.417 1977.500 1977.583
# 1978 1978.000 1978.083 1978.167 1978.250 1978.333 1978.417 1978.500 1978.583
# 1979 1979.000 1979.083 1979.167 1979.250 1979.333 1979.417 1979.500 1979.583
# 1980 1980.000 1980.083 1980.167 1980.250 1980.333 1980.417 1980.500 1980.583
# 1981 1981.000 1981.083 1981.167 1981.250 1981.333 1981.417 1981.500 1981.583
# 1982 1982.000 1982.083 1982.167 1982.250 1982.333 1982.417 1982.500 1982.583
# 1983 1983.000 1983.083 1983.167 1983.250 1983.333 1983.417 1983.500 1983.583
# 1984 1984.000 1984.083 1984.167 1984.250 1984.333 1984.417 1984.500 1984.583
# 1985 1985.000 1985.083 1985.167 1985.250 1985.333 1985.417 1985.500 1985.583
# 1986 1986.000 1986.083 1986.167 1986.250 1986.333 1986.417 1986.500 1986.583
# 1987 1987.000 1987.083 1987.167 1987.250 1987.333 1987.417 1987.500 1987.583
# 1988 1988.000 1988.083 1988.167 1988.250 1988.333 1988.417 1988.500 1988.583
# 1989 1989.000 1989.083 1989.167 1989.250 1989.333 1989.417 1989.500 1989.583
# 1990 1990.000 1990.083 1990.167 1990.250 1990.333 1990.417 1990.500 1990.583
# 1991 1991.000 1991.083 1991.167 1991.250 1991.333 1991.417 1991.500 1991.583
# 1992 1992.000 1992.083 1992.167 1992.250 1992.333 1992.417 1992.500 1992.583
# 1993 1993.000 1993.083 1993.167 1993.250 1993.333 1993.417 1993.500 1993.583
# 1994 1994.000 1994.083 1994.167 1994.250 1994.333 1994.417 1994.500 1994.583
# 1995 1995.000 1995.083 1995.167 1995.250 1995.333 1995.417 1995.500 1995.583
# 1996 1996.000 1996.083 1996.167 1996.250 1996.333 1996.417 1996.500 1996.583
# 1997 1997.000 1997.083 1997.167 1997.250 1997.333 1997.417 1997.500 1997.583
#           Sep      Oct      Nov      Dec
# 1959 1959.667 1959.750 1959.833 1959.917
# 1960 1960.667 1960.750 1960.833 1960.917
# 1961 1961.667 1961.750 1961.833 1961.917
# 1962 1962.667 1962.750 1962.833 1962.917
# 1963 1963.667 1963.750 1963.833 1963.917
# 1964 1964.667 1964.750 1964.833 1964.917
# 1965 1965.667 1965.750 1965.833 1965.917
# 1966 1966.667 1966.750 1966.833 1966.917
# 1967 1967.667 1967.750 1967.833 1967.917
# 1968 1968.667 1968.750 1968.833 1968.917
# 1969 1969.667 1969.750 1969.833 1969.917
# 1970 1970.667 1970.750 1970.833 1970.917
# 1971 1971.667 1971.750 1971.833 1971.917
# 1972 1972.667 1972.750 1972.833 1972.917
# 1973 1973.667 1973.750 1973.833 1973.917
# 1974 1974.667 1974.750 1974.833 1974.917
# 1975 1975.667 1975.750 1975.833 1975.917
# 1976 1976.667 1976.750 1976.833 1976.917
# 1977 1977.667 1977.750 1977.833 1977.917
# 1978 1978.667 1978.750 1978.833 1978.917
# 1979 1979.667 1979.750 1979.833 1979.917
# 1980 1980.667 1980.750 1980.833 1980.917
# 1981 1981.667 1981.750 1981.833 1981.917
# 1982 1982.667 1982.750 1982.833 1982.917
# 1983 1983.667 1983.750 1983.833 1983.917
# 1984 1984.667 1984.750 1984.833 1984.917
# 1985 1985.667 1985.750 1985.833 1985.917
# 1986 1986.667 1986.750 1986.833 1986.917
# 1987 1987.667 1987.750 1987.833 1987.917
# 1988 1988.667 1988.750 1988.833 1988.917
# 1989 1989.667 1989.750 1989.833 1989.917
# 1990 1990.667 1990.750 1990.833 1990.917
# 1991 1991.667 1991.750 1991.833 1991.917
# 1992 1992.667 1992.750 1992.833 1992.917
# 1993 1993.667 1993.750 1993.833 1993.917
# 1994 1994.667 1994.750 1994.833 1994.917
# 1995 1995.667 1995.750 1995.833 1995.917
# 1996 1996.667 1996.750 1996.833 1996.917
# 1997 1997.667 1997.750 1997.833 1997.917

Nous obtenons un autre objet ts qui contient, cette fois-ci, les dates de chaque observation. Le troisième nombre de tsp est la fréquence des observations (ici, 12) par rapport à l’unité de temps choisie (ici l’année). Cela signifie 12 observations par an, soit une par mois. À partir de ces trois nombres, nous pouvons donc reconstituer la séquence des années depuis janvier 1957 jusqu’à décembre 1997 auxquelles les observations ont été réalisées.

Comment connaître l’unité de temps utilisée dans la série ? En fait, cette unité n’est pas stockée dans l’objet ts. Vous la choisissez librement, vous définissez la date de départ, la date de fin exprimées dans cette unité choisie, ainsi que la fréquence des observations, et votre attribut tsp est complètement défini. La fonction ts() permet de générer une série temporelle, ou de transformer un vecteur d’observations en une série temporelle. Par exemple, si nous générons des données artificielles à partir d’une distribution Normale avec rnorm(), et que nous considérons ces données comme une série chronologique mesurée mensuellement entre janvier 2010 et décembre 2014, nous ferions ceci :

fake_ser <- ts(rnorm(5 * 12), start = 2010, frequency = 12)
fake_ser
#               Jan          Feb          Mar          Apr          May
# 2010 -0.417487861  2.420145999  0.030845459 -0.141514967 -0.160169458
# 2011  1.108753080 -0.734130297 -0.970376569  0.417162157  0.440248165
# 2012  0.414614066  0.610654889 -0.403276228 -0.007848944 -1.481650926
# 2013  1.744889171  0.039597521  0.971087581  0.171238847 -0.328503743
# 2014  0.409107708 -1.705289457 -0.275818835 -1.749782323  1.536855911
#               Jun          Jul          Aug          Sep          Oct
# 2010  1.028845549  0.012415688  0.522887370 -1.428020674  0.999633118
# 2011 -0.894157305  1.534496085 -0.803797927  0.185814102 -1.318739921
# 2012 -1.475053526  0.284640188  2.696799441  0.519141113  1.541264471
# 2013  0.108113118 -1.693940029  0.925197045  0.048243910 -0.789633215
# 2014  0.688801149 -1.259685143  0.685787794 -1.098296090  1.009690195
#               Nov          Dec
# 2010 -0.945256330 -0.674389304
# 2011 -0.340770959 -1.429304013
# 2012  0.045236613  0.363261585
# 2013 -0.919708575  0.307996407
# 2014  0.359635466 -1.029858833

Notez comment R formate notre sortie (il assume qu’une série à fréquence de 12 correspond à des données mensuelles). Nous ne devons indiquer que deux des trois paramètres de tsp, car le nombre d’observations dans le vecteur fournit l’information manquante pour calculer le paramètre manquant. Quelles sont les dates de ces observations ?

time(fake_ser)
#           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
# 2010 2010.000 2010.083 2010.167 2010.250 2010.333 2010.417 2010.500 2010.583
# 2011 2011.000 2011.083 2011.167 2011.250 2011.333 2011.417 2011.500 2011.583
# 2012 2012.000 2012.083 2012.167 2012.250 2012.333 2012.417 2012.500 2012.583
# 2013 2013.000 2013.083 2013.167 2013.250 2013.333 2013.417 2013.500 2013.583
# 2014 2014.000 2014.083 2014.167 2014.250 2014.333 2014.417 2014.500 2014.583
#           Sep      Oct      Nov      Dec
# 2010 2010.667 2010.750 2010.833 2010.917
# 2011 2011.667 2011.750 2011.833 2011.917
# 2012 2012.667 2012.750 2012.833 2012.917
# 2013 2013.667 2013.750 2013.833 2013.917
# 2014 2014.667 2014.750 2014.833 2014.917

R mesure ici le temps sous forme décimale. C’est pratique, mais nous n’y sommes pas habitués. Ainsi, il divise l’année en 12 douzièmes, peu importe que certains mois contiennent 31, 30 ou même 28/29 jours. Ainsi, le 1er janvier 2010 est 2010.000. Le 1er février 2010 est 2010 + 1/12 = 2010.083. Et le 1er décembre 2014 est 2014 + 11/12 = 2014.917. La petite erreur de décalage du début de chaque mois est minime et sans impacts pratiques pour nos séries chronologiques biologiques, car le vivant se soucie peu de notre calendrier grégorien. Par contre, pour des données comme le cours de la bourse, par exemple, ce genre d’approximation n’est pas utilisable et il faut alors employer des objets qui manipulent les dates de manière plus précise (mais aussi plus fastidieuse), que ceux du package {xts} (voir plus loin, les séries irrégulières).

Dans notre série fake_ser de fréquence 12, le pas de temps est donc d’un mois, soit 1/12 d’année. Notez que le pas de temps est en fait l’inverse de la fréquence des observations. Si vous êtes plus à l’aise avec ce pas de temps, vous pouvez le substituer à la fréquence dans la fonction ts() via l’argument deltat =. Ainsi, indiquer ts(...., frequency = 12) ou ts(...., deltat = 1/12) est strictement équivalent.

Nous rencontrons également des objets mts pour multivariate time series. Ces objets contiennent plusieurs variables mesurées sur la même entité au cours du temps. Le vecteur est alors remplacé par une matrice à n lignes (le nombre d’observations dans le temps) et m colonnes (le nombre de variables mesurées à chaque fois). L’attribut tsp est le même que pour ts. La sélection des séries au sein de la matrice se fait à l’aide de l’opérateur “crochet” [,] où la ou les séries d’intérêt sont reprises en second argument après la virgule soit sous forme d’un vecteur d’entiers qui représentent les positions des colonnes à conserver, soit sous forme d’un vecteur de chaînes de caractères qui reprennent les noms des séries à conserver. Les séries multivariées marbio_ts et marphy_ts en sont des bons exemples. Les objets mts sont également des objets ts et des objets matrix (on dit qu’elles héritent de ces classes2) :

class(marphy_ts)
# [1] "mts"    "ts"     "matrix"

Comme la température et la densité sont les première et quatrième colonnes de marphy_ts, nous pouvons les extraire par position (et colnames() est utilisé pour renvoyer les noms des colonnes dans une matrice et donc par héritage, dans un objet mts) :

# Nom de toutes les séries dans marphy_ts
colnames(marphy_ts)
# [1] "Temperature"  "Salinity"     "Fluorescence" "Density"
# Nom après sélection de deux séries
colnames(marphy_ts[, c(1, 4)])
# [1] "Temperature" "Density"

La sélection à l’aide des identifiants est souvent préférable, car plus explicite. Le même résultat est obtenu avec :

colnames(marphy_ts[, c("Temperature", "Density")])
# [1] "Temperature" "Density"
N’essayez pas d’utiliser la sélection à l’aide de [,] sur un objet ts contenant une série univariée. Vous génèreriez une erreur car cet objet contient un vecteur et non pas une matrice. De plus, cela n’a aucun sens de faire une sélection parmi… une seule série dans cet objet !
À vous de jouer !
h5p

4.2.2 Séries à trous

Une série à trous est une série régulière, mais avec des valeurs manquantes. Comme R représente des valeurs manquantes dans un vecteur par NA, il est possible de créer et manipuler des séries à trous à l’aide des objets ts et mts. Par contre, certaines méthodes statistiques ne géreront pas ces valeurs manquantes et refuseront de produire un résultat.

En profitant des propriétés d’autocorrélation de la série, il est possible d’estimer des valeurs raisonnables pour remplacer les données manquantes si elles sont peu nombreuses. Par exemple, il est possible de faire une interpolation linéaire entre les deux observations qui encadrent la valeur manquante. Cette technique, et d’autres seront abordées dans le module suivant dans la section relative à la régularisation. Retenez juste, à ce stade, que notre objectif sera de régulariser autant que possible une série à trous avant de l’analyser.

4.2.3 Séries irrégulières

Dès que le pas de temps entre les observations n’est pas constant, nous parlons de série irrégulière. Les séries irrégulières ne peuvent pas être représentées par des objets ts ou mts de R qui imposent un pas de temps régulier. Par contre, les packages {zoo} et {xts} permettent de manipuler ce genre de données.

De manière générale, nous avons toujours intérêt à réaliser une série régulière, ou la plus régulière possible. Ensuite, il faut penser aux techniques de régularisation si c’est faisable pour obtenir une série régulière qui approxime suffisamment bien les données de départ. En effet, la plupart des techniques d’analyse des séries temporelles se basent sur des séries régulières, et en tous cas celles du package {pastecs}.

À vous de jouer !
h5p
À retenir
  • Nous devons nous arranger pour obtenir autant que possible des séries régulières. Sinon, les séries à trous, voire légèrement irrégulières, pourront être régularisées avant analyses (voir module suivant).

  • R représente des séries régulières à l’aide d’objets ts (univariées) ou mts (multivariées).

  • Dans ces objets, le temps est encodé grâce à l’attribut tsp qui contient trois valeurs : la date de départ, celle de fin et la fréquence des observations.

  • L’unité de temps n’est pas définie par R : vous la choisissez librement. Si la fréquence est 12, R considérera toutefois à l’impression du contenu de l’objet que c’est des mesures mensuelles et que l’unité est l’année. De même si la fréquence est de 4, il considérera des mesures trimestrielles sur une année. Sinon, le temps est manipulé et imprimé par R de manière décimale.

  • Nous pouvons créer un objet ts ou mts à l’aide de la fonction ts(). Nous devons donner le vecteur ou la matrice des observations, ainsi que deux des trois paramètres de tsp. Nous pouvons substituer le pas de temps à la fréquence des observations via l’argument deltat =. En fait, deltat == 1/frequence, le pas de temps est l’inverse de la fréquence.

  • Les séries irrégulières doivent être représentées, par exemple, par des objets xts et le package {xts} propose une large palette de fonction pour manipuler de tels objets.

Pour en savoir plus

  1. D’un point de vue purement technique, l’“héritage” est un peu particulier dans ces objets dits “S3”, mais cela a peu d’importance ici et va bien au-delà de ce que vous devez comprendre pour manipuler les séries spatio-temporelles dans R.↩︎