Le but de ce TD est d’arriver à résumer un jeu de données en choisissant les indicateurs appropriés. Pour cela, on appliquera la démarche de statistiques descriptives vue en cours aux divers jeux de données proposés: * Faire une première visualisation des données, sous forme de série temporelle, à différentes échelles. * Vérifier l’existance de tendance ou de structure. * Si le jeu de donnée (ou une partie de ce jeu de donnée) semble stationnaire: - tracer un histogramme en prenant bien soin de choisir l’échelle qui semble la plus appropriée - choisir des indicateurs (ex: mode/variance/médiane) * Produire un résumé graphique (ex: boxplot) et écrire une ou deux phrase de commentaire.
À chaque étape, vous justifierez que ce que vous calculez ou affichez a bien du sens. Le cas échéant, si le jeu de données ne satisfait pas les hypothèses attendues, vous pourrez essayer de vous restreindre à un sous-ensemble du jeu de données en justifiant vos choix.
On rappelle les différentes fonctions de base de R qui pourront vous êtres utiles: str, summary, mean, diff, sort, var, sd, plot, plot.ts, hist, boxplot.
Vous disposez maintenant des jeux de données suivants: cache1, cache2, consumption_UK, google_ping, stackoverflow_ping, apache_date, T_price_trend1, …, T_price_trend4. Amusez-vous bien!
Évidemment, pour faire cette analyse, je ne regarde pas au dessus la façon dont sont générées les données mais je les visualise juste. Et pour ça, je commence par regarder/vérifier le type des données.
str(T_price_trend4);
## num [1:100] 4.24 4.26 3.53 4.02 3.99 ...
Ce sont donc bien des nombres. Il y en a 100 (c’est un petit jeu de données) et les premières valeurs semblent relativement proches les unes des autres.
Regardons si ces données sont structurées “dans le temps” (à dire vrai, on n’a pas d’information sur la date à laquelle la mesure a été prise mais dans le doute on considèrera que les données correspondent à une séries de mesures successives).
plot.ts(T_price_trend4);
On distingue clairement deux à trois phases. L’une concernant les mesures de 1 à environ 43 où le régime est stationnaire autour de 4, la seconde d’environ 50 à 100 où le régime est stationnaire autour de 5, et la troisième qui est la transition entre ces deux régimes. L’une des valeurs semble pendant la première phase sort clairement du lôt et pourrait être une “aberration”. N’ayant pas vraiment d’information sur la nature du phénomène mesuré ni sr le protocole expérimental, il est difficile de savoir vraiment si c’est le cas, mais je décide dans la suite de traiter cette valeur à part.
Je vais donc décomposer mon ensemble de données en quatre, la valeur “aberrante”, la première phase (sans cette valeur aberrante), la transition, et la dernière phase.
break1=42;
break2=50
X1 = T_price_trend4[1:break1];
X2 = X1[X1>=6];
X1 = X1[X1<6];
X3=T_price_trend4[(break1+1):break2]
X4=T_price_trend4[(break2+1):length(T_price_trend4)]
Je vais commencer par ma valeur bizarre:
X2
## [1] 12
J’ai bien réussi à l’isoler, c’est une valeur qui “tombe juste”. Elle est vraiment bizarre, ça me conforte dans mon idée de la traiter à part. Comme elle est toute seule par contre, je ne vais pas pouvoir en dire grand chose…
Regardons nos données une fois encore pour être sûr qu’on a bien découpé:
plot.ts(X1)
Ça a l’air plus instable, mais c’est juste parceque ça a zoomé. Je ne vois pas de structure particulière, je peux donc regarder l’histogramme correspondant pour mieux voir les valeurs typiques. Il y a peu de valeurs donc je laisserai le choix par défaut sur les nombres de bins.
hist(X1)
Il y a un léger pic pour les valeurs entre 4.2 et 4.4 mais il y finalement peu de différences et peu d’échantillons. C’est assez symétrique (ou plutôt on ne distingue pas d’asymétrie forte). On pourrait probablement considérer que c’est uniforme entre 3.4 et 4.6 (ces bornes étant bien sûr très discutables mais on y verra plus clair avec un summary)…
Je peux donc résumer l’échantillon ainsi:
summary(X1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.501 3.749 4.021 4.022 4.270 4.587
Comme on pouvait s’y attendre, la moyenne et la médiane sont très très proches. On a une première phase stationnaire où les valeurs sont très proches de 4 et assez uniformément réparties entre 3.5 et 4.6.
boxplot(X1)
Et voici le boxplot qui permet de résumer graphiquement l’échantillon. Pas d’outlier ici, puisque je l’ai enlevé et traité à part.
Regardons nos données une fois encore pour être sûr qu’on a bien découpé:
plot.ts(X4)
Encore une fois, ça a l’air plus instable, mais c’est juste parceque ça a zoomé. Je ne vois pas de structure particulière, je peux donc regarder l’histogramme correspondant pour mieux voir les valeurs typiques. Encore une fois, comme il y a peu de valeurs, je laisse le choix par défaut sur les nombres de bins.
hist(X4)
Pas de pic clair et on ne distingue pas d’asymétrie forte. On pourrait probablement une fois de plus considérer que c’est uniforme, mais cette fois ci entre environ 6.4 et 7.6.
Je peux donc résumer l’échantillon ainsi:
summary(X4)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.530 6.759 6.956 7.029 7.333 7.538
En résumé, on a donc une seconde phase stationnaire où les valeurs sont très proches de 7 et assez uniformément réparties entre 6.53 et 7.53.
boxplot(X4)
Et voici le boxplot qui résumé l’échantillon. Cette seconde phase ressemble donc furieusement à la première à ceci près que l’ensemble des valeurs est augmenté de 3.
Regardons nos données une fois encore pour être sûr qu’on a bien découpé:
plot.ts(X3)
La dernière valeur aurait peut⁻être pu être rattachée à la seconde phase mais c’est sans importance. On a une augmentation régulière et rapide (seulement 8 valeurs) de 4.5 à un peu plus de 7.0. Mon analyse s’arrête là, pas question de résumer ça par un boxplot, ça n’aurait aucun sens. Si ça avait continué comme ça, ça aurait continué à monter et les indicateurs de tendence centrale (moyenne, médiane) auraient continué à monter…
À vous de jouer pour les autres jeux de données!