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] 1.91571 2.80841 2.81202 2.80412 2.80404 2.81324

Nous venons de récuperer les données. Elles sont maintenant dans data.

Nous allons traiter dans ce rapport de l’étude de données sur HPC : durée de l’exécution des différents appels à la fonction DGEMM lors d’une factorisation de Cholesky à l’aide de StarPU. Les unités de mesures sont en milisecondes.

Première visualisation du jeu de données

Avant de regarder le graphique, nous devons faire une petite analyse pour savoir ce que contient notre jeu de données.

str(data);
##  num [1:6956] 1.92 2.81 2.81 2.8 2.8 ...

Nous voyons que c’est un jeu conséquent en nombre. Ceci est bien pour observer et critiquer nos résultats. De plus ils semblent se stabiliser rapidement.

Nous enchaînons par simplement afficher le jeu de donner sans mettre de paramètres et de contraintes sur le graphique obtenu. Nous savons tout de même que c’est un jeu des données temporel.

plot.ts(data);

Il semble y avoir deux durées d’appels distincts. L’une regroupe une majeur partie de l’échantillon. L’autre est plus ponctuelle, dans le sens qu’elle se produit moins fréquemment mais aussi à des intervalles temporelles qui semblent se rapprocher dans la progression temporelle de l’expérience (si l’on considère que les mesures sont faites dans le temps de façon “continue”).

Pour les valeurs dites aberrantes nous pouvons en voir 4 au dessus des autres et 6-7 en dessous des deux tendances.

Nous allons donc essayer d’isoler ces valeurs extrêmes (celles au dessus de 9 et celles en dessous de 2), puis les deux durées qui se repètent (soit un tout petit peut en dessous de 3 et supérieur à 8). Nous pouvons aussi regarder si aucune valeurs n’est négative, car ceci sera aberrant et incorrecte (une durée ne peux être négative).

negative = data[data<=0];
seuil_max = 9.5;
seuil_min = 2;
valeur1 = 3;
valeur2 = 8;
minima = data[data<seuil_min];
maxima = data[data>seuil_max];
val2 = data[data>valeur2 & data<seuil_max];
val1 = data[data<valeur1 & data>seuil_min];

Valeurs negatives

Commençons par les valeurs impossibles dans des durées.

str(negative);
##  num(0)

Très bien, nous n’avons pas de négatifs, c’est qu’il n’y a pas eu d’erreurs lors de la capture des temps d’appels.

Valeurs extrêmes

Regardons combien de valeurs étranges nous avons :

str(minima);
##  num [1:23] 1.916 0.869 1.827 1.978 1.808 ...
str(maxima);
##  num [1:4] 9.99 13.29 12.33 9.82

Nous n’avons donc pas besoin face à la quantité de données fournie. Nous pouvons donc considérer qu’elles ne sont pas significatives dans l’évalutation de notre jeu de données.

Seuil principal

Regardons de plus près les données qui semblaient former un seuil entre 2 et 3.

plot.ts(val1);

Un certain nombre de valeurs diffèrent du reste de l’échantillon qui tourne autour de 2.8. Je vais essayer d’éliminer ces valeurs qui ne définissent aucune tendance, par leur ponctualité.

val1 = val1[val1 >= 2.7 & val1 <= 2.9];
str(val1);
##  num [1:6820] 2.81 2.81 2.8 2.8 2.81 ...

Après ce lissage de notre échantillon, il nous reste encore énormement de valeurs. Nous allons réafficher ce que nous avons pour essayer d’en déduite une tendance.

plot.ts(val1);