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 à 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 superposé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

Ces données correspondent à la 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 millisecondes.

On commence par une vérification du jeu de données

##  num [1:6956] 1.92 2.81 2.81 2.8 2.8 ...

Il y a quasiment 7000 données dans ce jeu de test, parmi les premiers nombres, on peut voir une stabilisation de la durée d’exécution à 2.80.

Première étude avec un graphe

plot.ts(data)

Sur celui-ci, on peut remarquer une moyenne vers les 3 ms d’exécution, on peut facilement préciser ce nombre à une exécution de 2.80 ms grâce à la première exécution. On peut observer deux phase es sur ce jeu. La première phase, l’augmentation de la durée d’exécution est régulière, alors que dans la deuxième phase, l’augmentation se fait de plus en plus souvent. De plus, il y a six valeurs ayant une durée anormale, deux avec une durée plus longue et quatre avec une durée particulièrement courte. On peut donc avancer que quand la durée est plus longue, le calcul doit être plus complexe, et inversement, quand la durée est plus courte le calcul est simple, voire trivial.

On va voir avec une représentation en histogramme, si on peut tirer d’autres conclusions.

Etude de l’histogramme

hist(data)

On peut voir que plus de 90% des valeurs sont comprises entre 2 et 3 ms d’exécution. On remarque aussi qu’il y a quelques valeurs entre 1 et 2 ms d’exécution et entre 8 et 10 ms d’exécution. On va donc se rapprocher de ses valeurs pour voir si on en tirer d’autres conclusions.

Un zoom sur les données entre 2 et 3 ms

On fait un premier résumer sur l’échantillon complet, avec l’histogramme on peut faire se dire que la moyenne et la médiane seront assez proche et entre 2 et 3 ms d’exécution, et plus précisément vers 2.80 ms, comme vu avec le graphe.

summary(data)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##  0.05265  2.77900  2.81600  2.83300  2.83100 13.29000

Grace à cela, on peut effectivement voir que la médiane et la moyenne sont très proche, vers les 2.80 ms, et que plus de 50% des valeurs sont à +/- 0.05 ms de différence. On veut voir plus que 50% des valeurs, mais tout en restant près de 2.80, donc on va retracer le jeu mais en bornant à +/- 0.2 ms de la médiane.

data_extreme = data[data>=3];
data_mini = data[data<=2.6];
 
data_2 = data[data<=3];
data_2 = data_2[data_2>=2.6];
plot.ts(data_2)

Avec ce graphe, on peut voir qu’il y a deux phases. La première possède sûrement une médiane et une moyenne un peu plus faible que la deuxième, et de plus, la première oscille plus que la seconde.

break1=3700
X1=data_2[1:break1];
X2=data_2[(break1+1):length(data_2)]

Les graphes de la première phase et second phase de 90% des valeurs. J’ai analysé au maximum cette partie, je n’ai rien à dire de plus sur ces graphes.

Et pour conclure sur cette partie, un résumé sur les deux phases

summary(X1);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.619   2.768   2.781   2.783   2.795   2.980
summary(X2)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.612   2.826   2.831   2.831   2.836   2.996

On peut remarquer qu’effectivement la durée moyenne de la phase 1 est légèrement à celle de la phase 2.

Maintenant revenons sur les valeurs que nous n’avons pas étudié, les calculs demandant plus de temps ou très peu de temps.

Les valeurs qui ne sont pas dans cet intervalle

hist(data_extreme);

hist(data_mini)

Sur ces histogrammes, on peut déjà remarquer le faible nombre de données qui ne sont pas dans la moyenne, une soixantaine sur les 7000. On a pu remarquer que le les valeurs entre 8 et 10 ms sont régulières, peut-être un calcul plus long, avec des valeurs plus complexe dans la fonction. Les valeurs supérieures à 12 ms sont sûrement des valeurs aberrantes du fait du petit nombre, et de leur apparition. Sur l’histogramme des valeurs inférieur à 2.5 ms, on remarque que la valeur entre 2 et 2.5 ms apparaît plus régulièrement, on peut extrapoler et se dire que c’est sure ment du fait d’un calcul plutôt simple dans la fonction. De même, les valeurs se rapprochant le plus du zéro peuvent sûrement être aberrantes, et obtenu car le programme n’est pas le seul à agir dans le système.

Pour finir

Pour finir, et résumer, on va tracer un boxplot des valeurs les plus intéressantes, pour cela, j’enlève les valeurs les plus haute (supérieur à 10 ms) et les valeurs les plus basse (inférieur à 1 ms).

data_3=data[data<=1];
data_=data_3[data_3>=10]
boxplot(data_3)