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] 0.953 0.678 0.845 0.677 0.708 0.811

Regardons le type de données

str(data);
##  num [1:8384] 0.953 0.678 0.845 0.677 0.708 0.811 0.659 0.717 0.689 0.769 ...
summary(data);
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##   0.5680   0.6960   0.7250   0.7959   0.7740 104.0000

OK, il s’agit de nombres, on a un grand jeux de données. Il s’agit d’un vecteur de 9384 nombres. On a une précision de 3 chiffres après la virgule.

Visualisation des données en fonction du temps

plot.ts(data);

On remarque que le plot ne nous montre pas en détail les variations parce qu’on a un grand set de données. Cependant on peut voir à peu près l’allure avec 3 pics qui sortent carrément du lot. Il serait intéressant de diviser le graphe en 4 temps (5 min et quuleques) vu que la fréquence du ping n’a pa changé durant les 25 minutes et que ce sont des expériences indépendantes.

Decoupage des données

break1=2000;
break2=4000;
break3=6000;

X1 = data[1:break1];
X2=data[(break1+1):break2];
X3=data[(break2+1):break3];
X4=data[(break3+1):length(data)];

Analyse du premier intervalle

Regardons l’allure générale

plot.ts(X1);

On voit des pics assez bizarres, on va donc étudier les valeurs extrêmes, d’abord on calcule le lower inner fence et le upper inner fence et comparer avec le max et le min. Le calcul de se fait comme suit:

IQR(X1);
## [1] 0.099
#On a donc l'IQR qui vaut 0.099 (qui est la difference entre le premier quartile et le 3ieme)
quantile(X1);
##     0%    25%    50%    75%   100% 
##  0.568  0.680  0.720  0.779 39.800
#le premier quartile vaut 0.68 et le 3ème 0.779
#lower_in= 0.68-1.5*0.099=0.5315
#upper_in=0.779+1.5*0.099= 0.63
max(X1);
## [1] 39.8
min(X1);
## [1] 0.568
#on voit que le max est très supérieur à 0.8375 et le min > 0.53. On devrait s'attendre à des outliers

Filtrons les données abbérantes

X1_BIS = X1[X1<2];

Boxplot correspondant

boxplot(X1_BIS);

Effectivement on remarque beaucoup d’outlier

Maintenant regardons la distribution des données avec un histogramme:

hist(X1_BIS);

On voit aussi que la distribution est unimodale et elle n’est pas symétrique mais a une queue vers la droite.

#si on fait le calcul suivant de la moyenne +ou- la standard deviation 
mean(X1_BIS) - sd(X1_BIS);
## [1] 0.6255737
mean(X1_BIS) + sd(X1_BIS);
## [1] 0.8720662

on voit que si l’on rapporte l’intervalle donné par les 2 calculs sur l’histogramme, on peut remarquer qu’il s’agit des parties où sont regroupées les durées de ping les plus fréquentes. Avec l’histogramme, on peut voir en effett qu’il est beaucoup plus fréquent d’avoir des points entre 0.62 et 0.87 ms.

on peut essayer de donner un peu plus de sens aux données et avoir une confirmation de l’analyse avec les informations du résumé

summary(X1_BIS);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5680  0.6800  0.7200  0.7488  0.7770  1.9800

n se rend compte que la mediane et la moyenne sont très proches. Ce qui veut dire que les données sont uniformément réparties autour de la médiane

Analyse du deuxième intervalle

X2=data[(break1+1):break2];
plot.ts(X2);

On voit des valeurs très différentes des autres valeurs en général, on va donc étudier les valeurs extrêmes, on fait les mêmes calculs que précedemment

IQR(X2);
## [1] 0.08925
#l'IQR vaut 0.08925
quantile(X2);
##        0%       25%       50%       75%      100% 
##   0.61200   0.69800   0.72600   0.78725 104.00000
#le premier quartile vaut 0.69800 et le 3ème 0.78725

#lower_in= 0.698 -1.5*0.08925=0.5641
#upper_in=0.78725+1.5*0.0825= 0.911
max(X2);
## [1] 104
min(X2);
## [1] 0.612

On voit que le max est > 0.8375 et le min > 0.5695. Or on voudrait que le max soit < à 0.911 ce qui veut dire qu’on a des valeurs extremes. On va fixer donc la limite à 0.911. Voyons avec le boxplot.

boxplot(X2);

Effectivement on voit des valeurs en dehors et très éloignées de la clotûre du haut (Ce qui est normal vu la différence énorme entre le max et le upper inner fence).

Appliquons un filtre, il s’agit surement cette fois de valeurs abbérantes qui n’ont rien à voir.

X2_filtre = X2[X2<=0.911];
boxplot(X2_filtre);

Là on voit que les valeurs très éloignées ont disparu

Maintenant regardons la distribution des données avec un histogramme:

hist(X2_filtre);

On voit que la distribution est unimodale et avec une queue vers la droite. Les pings qui durent plus longtemps deviennenet de moins en moins fréquents.

résumé de X2

summary(X2_filtre);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6120  0.6950  0.7180  0.7312  0.7588  0.9090

On se rend compte que la mediane et la moyenne sont très légèrement différentes.Les données sont aussi uniformément réparties.

Analyse du troisième intervalle

X3=data[(break2+1):break3];
plot.ts(X3);

#ON voit de légers pics, on fait les mêmes calculs que précedemment
IQR(X3);
## [1] 0.06725
#l'IQR qui vaut 0.06725
quantile(X3);
##      0%     25%     50%     75%    100% 
## 0.62300 0.70000 0.72500 0.76725 1.47000
#le premier quartile vaut 0.700 et le 3ème 0.76725

#lower_in= 0.7 -1.5*0.06725=0.599125
#upper_in=0.76725+1.5*0.06725= 0.868125
max(X3);
## [1] 1.47
min(X3);
## [1] 0.623
#on voit que le max est < 0.868 et le min > 0.599. On a donc une distribution très uniforme. Verifions avec le boxplot 
boxplot(X3);

On voit une répartition de plusieurs points en dehors du box (outliers) , regardons la valeur de l’IQR

IQR(X3);
## [1] 0.06725

On remarque qu’on a un IQR assez petit donc les données sont très réparties autour la médiane.

Voyons tout ca avec l’histogramme

hist(X3);

L’histogramme a aussi un seul mode et on voit que les outliers de tout à l’heure ont une très petite fréquence.

Calculons la médiane

median(X3);
## [1] 0.725

Les points les plus fréquents des données tournent bien autour de la médiane.

En résumé

summary(X3);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6230  0.7000  0.7250  0.7455  0.7672  1.4700

On voit que la moyenne et la médiane sont aussi très rapprochées, de même que le premier et le 3ième quartile. C’est assez uniforme entre 0.62 et 0.76

Analyse du quatrième intervalle

X4=data[(break3+1):length(data)];

plot.ts(X4);

On voit des pics assez fréquents. Voyons de plus près, on fait les mêmes calculs que précedemment

IQR(X4);
## [1] 0.066
#l'IQR qui vaut 0.066
quantile(X4);
##     0%    25%    50%    75%   100% 
## 0.6260 0.7020 0.7265 0.7680 6.1000
#le premier quartile vaut 0.7020 et le 3ème 0.7680

#lower_in= 0.7020 -1.5*0.066=0.603
#upper_in=0.7680+1.5*0.066= 0.867
#ca ressemble beaucoup aux valeurs de X3

max(X4);
## [1] 6.1
min(X4);
## [1] 0.626

Remarquons que le max est très > 0.867 et le min > 0.603 , on va essayer de filtrer ces valeurs.

X4_BIS=X4[X4<=0.867];

X4_eliminé=X4[X4>0.867];

plot.ts(X4_eliminé);

mean(X4_eliminé);
## [1] 1.215581

On note que la moyenne des points éliminés =1.21 , on va donc refaire notre filtre sur 1.21 plutôt pour ne pas perdre de données

X4_TER= X4[X4<=1.21];
plot.ts(X4_TER);

boxplot(X4_TER);

Regardons l’histogramme

hist(X4_TER);

On fait les mêmes remarques que X3: unimodal, right-skewed

résumé de X4

summary(X4_TER);
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6260  0.7010  0.7260  0.7449  0.7660  1.2100

On remarque aussi que la médiane et la moyenne sont très proches, les données sont très uniformément réparties entr 0.7 et 0.8.

Conclusion générale sur le set de données:

On remarque qu’on a une distribution assez uniforme des données autour de 0.65 et 0.8 et qu’on a les mêmes conclusions presque pour tous les intervalles de temps qu’on a fait.