Le but de ce DM est de vérifier que vous avez compris les principales étapes à suivre lorsque l’on analyse un jeu de données.

Pour cela, vous appliquerez la démarche de statistiques descriptives vue en cours aux divers jeux de données proposés:

À 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 essayerez de vous restreindre à un sous-ensemble du jeu de données en justifiant vos choix. Si vous avez l’impression qu’il y a plusieurs régimes (successifs ou supperposés), vous séparerez les deux régimes et les analyserez séparément.

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.

Récupération des jeux de données

## [1] 8.05 7.83 7.91 8.19 7.88 7.91

Vérification du type des données

Les données à analyser sont des ping réguliers vers une machine non spécifiée sur une durée d’environ 25 minutes à une fréquence d’un ping toutes les 0.2 secondes. Les unités des mesures sont en milisecondes. La première chose à faire est de vérifier le type des données que l’on vient de récupérer.

str(data);
##  num [1:8345] 8.05 7.83 7.91 8.19 7.88 7.91 7.87 7.89 7.94 7.98 ...

Nous avons un grand jeu de données numériques, avec 8 345 valeurs de ping. Les premières valeurs semblent relativement proches les unes des autres, mais nous ne pouvons pas en conclure grand chose.

Etude des données

Pour vérifier si ces valeurs suivent une structure dans le temps, nous devons tracer le graphe de l’ensemble de ces valeurs.

plot.ts(data);

Nous remarquons que le régime se rapproche d’un régime stationnaire autour de 7 millisecondes avec deux courtes phases stationnaires plus hautes, autour de 8 millisecondes (vers 1000 et 3000). Nous observons également des pics de pings. Ces pics sont fréquents et ne sont donc pas des valeurs abhérantes. Toutefois nous avons une valeur extrême, dépassant toute les autres, qui est potentiellement abhérante. Nous ne somme pas sûre que ce soit réellement le cas, mais il est plus pertinant de traiter cette valeur à part pour obtenir un histogramme plus précis.

data_extreme = data[data>=30];
data_2 = data[data<=30];
plot.ts(data_2);

Nous ne pouvons pas dire grand chose de la valeur extrême, mise à part qu’elle vaut 50.8 milliseconde et qu’elle est potentiellement abhérante (mais ce n’est pas forcement le cas, donc nous ne devons pas l’oublier pour autant). Nous allons nous concentrer sur l’analyse du régime stationnaire, sans cette valeur extrême. Pour cela, nous allons observer l’histogramme de ces données.

hist(data_2);

Etant donné que nous avons beaucoup de données et que les pics de ping montent beaucoup plus haut que la phase stationnaire, l’histogramme est peu précis. Pour remédier à cela, nous allons augmenter le nombres de bins.

Une autre méthode consiste à observer seulement les données inférieurs à 10 millisecondes pour visualiser avec plus de précision la phase stationnaire (“suppression” ponctuel des valeurs hautes pour plus de clairté). Nous combinons cette méthode avec une augmentation du nombre de bins pour plus de précision.

hist(data_2,breaks=200);

data_stat = data_2[data_2<=9];
data_stat2 = data_stat[data_stat>=5];
hist(data_stat2,breaks=50);

sum (data_2<=7.7);
## [1] 0
sum (data_2>=8.1);
## [1] 448
sum (data_2>=10);
## [1] 23

On observe un pic de ping significatif entre 7.7 et 8.1 millisecondes. On distingue également une asymétrie du diagramme qui est étiré vers les plus long temps de ping (448 valeurs supérieurs à 8.1 millisecondes contre 0 inférieurs à 7.7 millisecondes).

De plus, on remarque que dans notre second diagramme, ne prenant en compte que les valeurs de ping comprises entre 5 et 9 millisecondes, nous ne tenons pas compte des 23 valeurs supérieurs à 10. Comparé aux 8345 valeurs initiales, ce nombre de valeurs est ridicule, mais nous ne pouvons pas les considérer pour autant comme abhérantes. Nous en tiendrons donc compte pour résumer l’échantillon :

summary(data_2);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    7.78    7.85    7.87    7.92    7.92   24.40
sum (data_2>=7.92);
## [1] 2259

La moyenne et la médiane sont relativement proches (la moyenne plus sensible aux valeurs extrême est naturellement plus grande), et plus généralement notre interval inter-quartile est petit. La distribution est donc ramassée entre 7.85 et 7.92, mais les valeurs maximum vont tout de même jusqu’à 24.40 millisecondes (2259 valeurs sont comprises entre le troisième quartile et la valeur maximum). Le minimum, lui est proche du premier quartile.

Cet échantillon peut être résumé graphiquement par un boxplot (il ne faut pas oublié que nous avons traité à part une valeur extrême, qui était potentiellement abhérante. Celle ci n’apparait donc pas dans le boxplot).

boxplot(data_2);