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] 3.87162 2.93444 2.86022 3.11609 2.57139 2.83167

Première visualisation des données comme série temporelle

En général, les mesures de performance d’une fonction sont effectuées successivement; Il est donc logique de supposer que ces données sont structurées dans le temps.

On distingue un régime stationnaire centré autour d’une valeur entre 2 et 4 millisecondes, mais qui est “perturbé” par des valeurs extrèmes. Ces valeurs se produisent assez fréquemment, et donc n’ont pas l’air d’être aberrantes; Elles seront traitées à part.

Etude du premier régime stationnaire

Essayons d’isoler les valeurs du premier régime stationnaire.

X1 = data[data < 3.2 & data > 2.6]
plot.ts(X1)

head(X1)
## [1] 2.93444 2.86022 3.11609 2.83167 2.82609 2.88085

Un regard vite fait sur les premières valeurs de l’échantillon permet de constater qu’effectivement, les valeurs dans ce régime sont très proches l’une de l’autre. Ce régime étant bien stationnaire, je vais tracer l’histogramme en modifiant le nombre de bins pour mieux cerner la structure des données.

hist(X1, breaks = 100)

On constate que les données sont fortement symétriques. Faisons enfin un resumé de cet échantillon:

summary(X1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.616   2.828   2.834   2.834   2.840   3.154
var(X1)
## [1] 0.0002737459

Les valeurs de la moyenne et de la médiane étant très proches (ainsi que la variance presque nulle), cela confirme nos remarques sur la symétrie des données.

Et voici le boxplot qui résume l’échantillon:

boxplot(X1)

Etude des valeurs extrêmes

Regardons le reste des données.

X2 = data[data > 3.2 | data < 2.6]
plot.ts(X2)

Les valeurs extrêmes comportent les pics et les chutes du temps d’exécution. Tout d’abord, isolons les valeurs hautes (par rapport au régime stationnaire).

Les valeurs hautes

Isolons les valeurs bien en dessus du régime stationnaire.

peaks = X2[X2 > 4]
plot.ts(peaks)

Cet échantillon représente un régime stationnaire superposé au premier. Les valeurs sont bornées entre 8 et 9 (à l’exception d’une seule). En voici un resumé:

summary(peaks)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.267   8.902   8.950   8.825   9.041   9.189

En comparant la valeur moyenne de cet échantillon à celle du régime stationnaire, on constate un écart considérable.

Les valeurs basses

Les valeurs basses ont l’air moins distancées du régime stationnaire que les pics. Cet échantillon est d’ailleurs plus dynamique (plus de fluctuation) que celui où on a consideré les valeurs hautes. Dans un premier lieu, on les traite à part.

drops = X2[X2 < 2.5]
plot.ts(drops)

Effectivement les valeurs basses sont plus proches à la valeur moyenne du premier régime que les pics. Regardons la structure de cet échantillon à l’aide d’un histogramme; Il y’a peu de valeurs donc je laisse le nombre de bins par défaut.

hist(drops)

Les valeurs les plus fréquentes sont entre 2.0 et 2.5; C’est aussi les valeurs les plus proches au premier régime. Et voici un resumé de l’échantillon:

summary(drops)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.017   2.074   2.203   2.164   2.402   2.489