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
.
## [1] 0.953 0.678 0.845 0.677 0.708 0.811
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.
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.
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)];
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
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.
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
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.
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.