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

Je dispose du jeu de données HPC suivant :

## [1] 3.87162 2.93444 2.86022 3.11609 2.57139 2.83167

Analyse préliminaire

Vérifions que les données sont bien des données numériques à l’aide de la fonction str :

str(data)
##  num [1:6936] 3.87 2.93 2.86 3.12 2.57 ...

Les données étant des durées, vérifions également que nous n’avons que des valeurs positives :

sum(data<0)
## [1] 0

Nous disposons donc de 6936 données positives que nous pouvons commencer par visualiser dans le temps en créant une série temporelle grâce à la fonction plot.ts :

Nous pouvons distinguer 3 phases.

La première phase (X1) concerne les 150 à 200 premières valeurs qui évoluent entre 2,5 et 4.

La deuxième phase (X2) concerne les valeurs où le régime est stationnaire autour de 2,75 ou 3 (on enlève alors les pics).

La troisième phase (X3) concerne les “pics” qui paraîssent être des valeurs extrêmes et que je décide donc de traiter à part.

On observe clairement que la phase X3 est répétée tout au long de la série temporelle, avec un intervalle de temps qui diminue au fur et à mesure.

pattern = data[1150:1900]
plot.ts(pattern);

Quant à X1, il semblerait qu’elle corresponde au début de la factorisation Cholesky pendant laquelle le régime est transitoire. Nous ne nous intéresserons donc pas à cette partie du jeu de données.

Nous avons alors le découpage suivant :

break1 = 150;
dataBis = data[break1:length(data)];
X2 = dataBis[dataBis<2.90 & dataBis>2.75];
X3 = dataBis[dataBis<2.0 | dataBis>3.0];
X3Low = dataBis[dataBis<2.5];
X3High = dataBis[dataBis>8.0];
plot.ts(dataBis)

Étude des valeurs extrêmes X3High et X3Low

X3High

plot.ts(X3High)

On remarque que la plupart des valeurs tournent autour de 9 mises à part 3 que je décide de retirer.

X3High_bis = X3High[X3High>8.6 & X3High<9.1]
plot.ts(X3High_bis);

Il n’y a pas de structure particulière, nous pouvons donc tracer l’histogramme pour analyser les valeurs plus en détail :

hist(X3High_bis)

Il n’y a pas d’asymétrie forte. Il y a un léger pic de valeurs entre 8.90 et 8.95 mais on ne dispose pas de beaucoup de valeurs et elles sont au final peu différentes entre elles. La moyenne et la médiane devraient alors être très proches. On peut le vérifier avec un summary et un boxplot :

summary(X3High_bis)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.803   8.904   8.950   8.960   9.023   9.075
boxplot(X3High_bis)

X3Low

plot.ts(X3Low)

On remarque ici que les valeurs ont tendance à augmenter au fur et à mesure et on peut imaginer qu’elle continueront encore d’augmenter. Il serait donc peu utile d’en faire un histogramme et un boxplot.

Étude de la phase stationnaire X2

Zoomons sur X2 :

plot.ts(X2)

On remarque bien que sans les valeurs extrêmes, les mesures se concentrent entre 2,80 et 2,85 ce qui correspond au régime stationnaire.

Étant donné qu’il n’y a pas de structure particulière, nous pouvons tracer un premier histogramme de X2 :

hist(X2)

Puisque nous disposons de beaucoup de valeurs, nous pouvons jouer avec les bins pour obtenir un meilleur histogramme et mieux observer la répartition des valeurs :

hist(X2, breaks=35)

On observe une certaine symétrie autour de la valeur 2.83 environ. Nous pouvons résumer l’échantillon :

summary(X2);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.765   2.828   2.834   2.834   2.839   2.899

Les valeurs sont très proches les unes des autres puisqu’elles s’étalent entre 2.765 et 2.899. On retrouve bien que la moyenne et la médiane sont confondues. Les 1er et 3ème quartiles quant à eux sont très proches de la moyenne.

boxplot(X2);

On observe sur ce boxplot que les valeurs sont en effet très concentrées autour de la moyenne : la boîte est très étroite.

Conclusion

Après cette analyse, nous pouvons conclure que la durée de l’exécution des différents appels à la fonction DGEMM lors d’une factorisation de Cholesky est principalement d’environ 2,83 ms. Il y a cependant des pics “réguliers” où cette durée est beaucoup plus longue et qui pourraient correspondre au début, à la fin ou à un stade particulier de l’exécution de la fonction DGEMM qui demande plus de ressources.