diff --git a/INSA/TP anadon/TP2-StatDesc.html b/INSA/TP anadon/TP2-StatDesc.html deleted file mode 100644 index 258241c..0000000 --- a/INSA/TP anadon/TP2-StatDesc.html +++ /dev/null @@ -1,2139 +0,0 @@ - - - - -
- - - - - - - - -Ce TP a pour objectif de mener l’étude descriptive uni- et
-bi-dimensionnelle du jeu de données wine
disponible sous
-Moodle. Vous rédigerez les réponses et vos observations dans le script
-.Rmd du TP au fur et à mesure. Vous pourrez compiler votre script à la
-fin du TP pour obtenir un compte-rendu du TP.
Remarque : pensez à enlever les “eval=F” au fur et à mesure de -l’avancement dans le TP pour avoir les résultats dans votre compte-rendu -final de TP.
-On va étudier le jeu de données wine disponible sur -la page moodle du cours. Commencez par récupérer ce jeu de données et -sauvegardez le fichier dans votre dossier de travail.
-Le jeu de données wine comprend des mesures -physico-chimiques réalisées sur un échantillon de \(600\) vins (rouges et blancs) du -Portugal. Ces mesures sont complétées par une évaluation sensorielle de -la qualité par un ensemble d’experts. Chaque vin est décrit par les -variables suivantes :
-Dans un premier temps, commencez par charger le jeu de données à
-l’aide de la fonction read.table()
.
wine <- read.table("wine.txt",header=TRUE)
-Vous pouvez voir les premières lignes du jeu de données à l’aide de
-la fonction head()
head(wine)
- Qualite Type AcidVol AcidCitr SO2lbr SO2tot Densite Alcool
-1352 medium 1 0.62 0.01 8 46 0.99332 11.8
-5493 medium 0 0.34 0.10 17 63 0.99370 9.2
-5153 medium 0 0.22 0.22 39 110 0.99855 9.0
-5308 medium 0 0.35 0.46 61 183 0.99786 9.0
-3866 medium 0 0.42 0.32 20 167 0.99479 10.6
-694 medium 1 0.48 0.32 21 122 0.99840 9.4
-Question : Contrôlez la dimension du jeu de données
-(c’est-à-dire le nombre d’individus et le nombre de variables) ? Vous
-pouvez vous aider des fonctions dim()
,
-nrow()
et ncol()
.
dim(wine)
-[1] 600 8
-nrow(wine)
-[1] 600
-ncol(wine)
-[1] 8
-Question : Contrôlez que l’objet wine
-est bien de type data.frame (commande is.data.frame()
) ?
-Remarquons que l’on peut obtenir les noms des variables grâce à la
-commande names(wine)
ou colnames(wine)
. Plus
-largement, on peut utiliser la commande attributes()
.
is.data.frame(wine)
-[1] TRUE
-names(wine)
-[1] "Qualite" "Type" "AcidVol" "AcidCitr" "SO2lbr" "SO2tot" "Densite"
-[8] "Alcool"
-colnames(wine)
-[1] "Qualite" "Type" "AcidVol" "AcidCitr" "SO2lbr" "SO2tot" "Densite"
-[8] "Alcool"
-Question : Quelle est la nature de chaque variable ?
-Vous pouvez vous aider de la commande str()
.
str(wine)
-'data.frame': 600 obs. of 8 variables:
- $ Qualite : chr "medium" "medium" "medium" "medium" ...
- $ Type : int 1 0 0 0 0 1 0 0 0 0 ...
- $ AcidVol : num 0.62 0.34 0.22 0.35 0.42 0.48 0.21 0.28 0.3 0.4 ...
- $ AcidCitr: num 0.01 0.1 0.22 0.46 0.32 0.32 0.32 0.14 0.25 0.42 ...
- $ SO2lbr : num 8 17 39 61 20 21 39 64 21 41 ...
- $ SO2tot : int 46 63 110 183 167 122 113 159 124 176 ...
- $ Densite : num 0.993 0.994 0.999 0.998 0.995 ...
- $ Alcool : num 11.8 9.2 9 9 10.6 9.4 10.2 10 10.8 9.4 ...
-Attention, il faut bien préciser à R les variables qui doivent être
-considérées comme qualitatives. On utilise donc la fonction
-as.factor()
sur les variables Qualite et
-Type. On va aussi en profiter pour renommer les modalités de la
-variable Type en blanc
et rouge
.
wine$Qualite<-as.factor(wine$Qualite)
-wine$Type<-factor(wine$Type,labels=c("blanc","rouge"))
-head(wine)
- Qualite Type AcidVol AcidCitr SO2lbr SO2tot Densite Alcool
-1352 medium rouge 0.62 0.01 8 46 0.99332 11.8
-5493 medium blanc 0.34 0.10 17 63 0.99370 9.2
-5153 medium blanc 0.22 0.22 39 110 0.99855 9.0
-5308 medium blanc 0.35 0.46 61 183 0.99786 9.0
-3866 medium blanc 0.42 0.32 20 167 0.99479 10.6
-694 medium rouge 0.48 0.32 21 122 0.99840 9.4
-On peut obtenir un résumé rapide du jeu de données à l’aide de la
-fonction summary()
summary(wine)
- Qualite Type AcidVol AcidCitr SO2lbr
- bad : 19 blanc:425 Min. :0.1000 Min. :0.0000 Min. : 2.00
- good :110 rouge:175 1st Qu.:0.2400 1st Qu.:0.2400 1st Qu.: 15.75
- medium:471 Median :0.3000 Median :0.3000 Median : 27.00
- Mean :0.3512 Mean :0.3141 Mean : 29.41
- 3rd Qu.:0.4300 3rd Qu.:0.3900 3rd Qu.: 41.00
- Max. :1.0400 Max. :1.0000 Max. :112.00
- SO2tot Densite Alcool
- Min. : 7.0 Min. :0.9875 Min. : 8.00
- 1st Qu.: 68.0 1st Qu.:0.9925 1st Qu.: 9.50
- Median :114.5 Median :0.9949 Median :10.40
- Mean :111.2 Mean :0.9947 Mean :10.49
- 3rd Qu.:154.0 3rd Qu.:0.9970 3rd Qu.:11.30
- Max. :278.0 Max. :1.0030 Max. :14.00
-ggplot2
Avant de commencer l’analyse uni- et bi-dimensionnelle du jeu de
-données, on va ici donner quelques notions sur les graphiques avec
-ggplot2
pour comprendre la suite.
ggplot2 est une extension dédiée -aux graphiques. Elle est basée sur une syntaxe particulière (il faut -oublier les graphiques de base de R) mais robuste et efficace pour la -construction de graphiques complexes. Elle part du principe (comme tout -package de tidyverse) que les données relatives au graphique sont -stockées dans un tableau (data.frame ou tibble).
-Un graphique en ggplot2
s’initialise avec la fonction
-ggplot()
qui prend en argument le jeu de données étudié.
-Par exemple,
gEx <- ggplot(data=wine)
-Pour l’instant, on ne voit rien mais pourtant l’objet
-gEx
contient des informations:
summary(gEx)
-data: Qualite, Type, AcidVol, AcidCitr, SO2lbr, SO2tot, Densite, Alcool
- [600x8]
-faceting: <ggproto object: Class FacetNull, Facet, gg>
- compute_layout: function
- draw_back: function
- draw_front: function
- draw_labels: function
- draw_panels: function
- finish_data: function
- init_scales: function
- map_data: function
- params: list
- setup_data: function
- setup_params: function
- shrink: TRUE
- train_scales: function
- vars: function
- super: <ggproto object: Class FacetNull, Facet, gg>
-names(gEx)
-[1] "data" "layers" "scales" "mapping" "theme"
-[6] "coordinates" "facet" "plot_env" "labels"
-gEx$layers
-list()
-mais pour l’instant son layers
est vide.
On ajoute ensuite des éléments graphiques, appelés geom
,
-à l’objet graphique grâce à l’opérateur +
et on précise à
-l’aide de la fonction aes()
les données à utiliser en
-argument du geom
. Par exemple, si on veut tracer le nuage
-de points entre les variables Densite
et
-Alcool
:
ggplot(data=wine,aes(x=Densite,y=Alcool))+
- geom_point()
-Parmi les geom
les plus utilisés, on peut citer
geom_point()
(nuage de points)geom_line()
(trace des lignes)geom_bar()
(représentation en bâtons)geom_boxplot()
(boxplot)geom_violin()
(violin plot)geom_histogram()
(histogramme)geom_density()
(densité)geom_smooth()
On peut ajouter un mappage, c’est à dire une mise en
-relation entre un attribut graphique d’un geom
et une
-variable du tableau de données. Par exemple, on peut mettre des couleurs
-à un nuage de points en fonction d’une variable qualitative, … Il faut
-bien distinguer un mappage d’une modification d’un attribut graphique
-sans lien avec une variable. Une règle importante à retenir est donc
aes()
aes()
.Par exemple,
-ggplot(data=wine)+
- geom_point(aes(x=Densite,y=Alcool,color=Type))
-ggplot(data=wine)+
- geom_point(aes(x=Densite,y=Alcool),color="blue")
-On peut représenter plusieurs geom
sur un même graphique
-simultanément, il suffit d’utiliser l’opérateur +
pour les
-ajouter au fur et à mesure. Par exemple,
ggplot(data=wine)+
- geom_violin(aes(x=Qualite,y=Alcool))+
- geom_point(aes(x=Qualite,y=Alcool), col = "blue", alpha = 0.2,position="jitter")
-Les scales permettent de modifier la façon dont un attribut
-graphique est lié aux valeurs d’une variable. Pour les modifier, on
-ajoute un nouvel élément de la forme
-scale_<attribut>_<type>
à l’objet graphique
-ggplot2 avec +
. Les fonctions scale les plus
-connues sont :
scale_size()
(avec son argument range
)
-pour modifier les tailles minimales, maximales, …scale_x()
et scale_y()
pour modifier l’axe
-x
et l’axe y
respectivementscale_x_continuous()
(resp.
-scale_x_discrete()
) pour modifier l’axe des x
-dans le cas d’une variable quantitative (resp. une variable
-qualitative)scale_y_continuous()
(resp.
-scale_y_discrete()
) pour modifier l’axe des y
-dans le cas d’une variable quantitative (resp. une variable
-qualitative)scale_color()
pour modifier les couleurs de dessinscale_fill()
pour modifier les couleurs de
-remplissagePour les couleurs, on peut spécifier un gradient de couleur sur une
-variable quantitative avec scale_color_gradient()
, modifier
-manuellement la palette de couleur avec
-scale_color_manual()
, faire appel à une palette de couleur
-prédéfinie (par exemple en utilisant le package viridis avec scale_color_viridis
, en
-s’appuyant sur les palettes disponibles dans ColorBrewer avec scale_color_brewer()
),
-…
ggplot(data=wine)+
- geom_point(aes(x=Alcool,y=Densite,size=AcidVol,color=Type))+
- scale_size("Acide vol.", range = c(0,1.5),breaks=seq(0,1.5,0.2)) +
- scale_x_continuous("Alcool",limits=c(8,16)) +
- scale_y_continuous("Densité",limits=c(0.985,1.01))
-Remarque : on peut modifier certains éléments avec une commande -spécifique comme
-ggtitle()
pour modifier le titrexlab()
et ylab()
pour modifier l’intituler
-de l’axe des abscisses et des ordonnées respectivementEn bref, les possibles avec ggplot2
sont infinis car de
-nombreux éléments sont personnalisables. Voici quelques références pour
-les graphiques en ggplot2
parmi les nombreuses ressources
-disponibles sur le web :
Nous nous intéressons dans cette partie aux deux variables -qualitatives Type et Qualite.
-Question : A l’aide des commandes
-table()
, summary()
et levels()
,
-donnez un résumé de la variable Type
. Quels sont les
-modalités du facteur ?
# A COMPLETER
-summary(wine$Type)
-blanc rouge
- 425 175
-levels(wine$Type
- )
-[1] "blanc" "rouge"
-table(wine$Type)
-
-blanc rouge
- 425 175
-Question : A l’aide du code suivant, résumez
-graphiquement la variable Type
par une représentation par
-secteurs ou un diagramme en barres. Interprétez les résultats.
g1<-ggplot(wine, aes(x=Type))+
- geom_bar()+
- ylab("")+ggtitle("Effectifs")
-g2<-ggplot(wine, aes(x = Type)) +
- geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences")
-
-df <- data.frame(group = levels(wine$Type),
- value = as.vector(table(wine$Type))/nrow(wine))
-g3<-ggplot(df, aes(x="", y=value, fill=group))+
- geom_bar(width = 1, stat = "identity")+
- coord_polar("y", start=0)+
- theme(legend.position="bottom")
-grid.arrange(g3,g1,g2,ncol=3)
-Question : La variable Qualite est une
-variable qualitative ordinale. On peut donc utiliser les effectifs
-cumulés et les fréquences cumulées. Pour tracer les fréquences cumulées,
-il faut que l’ordre des modalités soit bien compris par R. Ici, on
-commence par réorganiser les modalités en bad
,
-medium
et good
. A l’aide des codes suivants,
-étudiez la variable Qualite.
wine$Qualite <- fct_relevel(wine$Qualite,"bad","medium","good")
-
-EffQual=as.vector(table(wine$Qualite))
-FreqQual= data.frame(Eff = EffQual, Freq = EffQual/length(wine$Qualite), FreqCumul=cumsum(EffQual)/length(wine$Qualite))
-rownames(FreqQual)=levels(wine$Qualite)
-
-knitr::kable(FreqQual, caption = 'Description de la variable Qualite',booktabs = TRUE,digits=3)
-- | Eff | -Freq | -FreqCumul | -
---|---|---|---|
bad | -19 | -0.032 | -0.032 | -
medium | -471 | -0.785 | -0.817 | -
good | -110 | -0.183 | -1.000 | -
df <- data.frame(Qualite = levels(wine$Qualite), value = table(wine$Qualite),
- valuecumul = 100 * cumsum(prop.table(table(wine$Qualite))))
-df$Qualite <- fct_relevel(df$Qualite, "bad", "medium", "good")
-
-df <- data.frame(df, freq = df$value.Freq/nrow(wine))
-g1 <- ggplot(wine) + geom_bar(aes(x = Qualite)) + ggtitle("Effectifs")+xlab("Qualite")
-g2 <- ggplot(wine) + geom_bar(aes(x = Qualite, y = ..prop.., group = 1)) + ggtitle("Frequences")+xlab("Qualite")
-g3 <- ggplot(df, aes(x = Qualite, y = valuecumul)) + geom_bar(stat = "identity") +
- ggtitle("Fréquences cumulées")
-
-g4 <- ggplot(df, aes(x = "", y = freq, fill = Qualite)) + geom_bar(width = 1, stat = "identity") +
- coord_polar("y", start = 0)
-grid.arrange(g1, g2, g3, g4, ncol = 2)
-Pour cette section, on se focalise sur la variable -Alcool.
-Question : Que calculent les commandes
-mean()
, median()
, var()
,
-sd()
, range()
? Calculez l’étendue des
-données.
mean(wine$Alcool)
-[1] 10.48592
-median(wine$Alcool)
-[1] 10.4
-var(wine$Alcool)
-[1] 1.316059
-sd(wine$Alcool)
-[1] 1.147196
-range(wine$Alcool)
-[1] 8 14
-Question : Etudiez les sorties des commandes
-summary(wine$Alcool)
et quantile(wine$Alcool)
.
-Donnez également l’écart interquartile et les valeurs adjacentes.
summary(wine$Alcool)
- Min. 1st Qu. Median Mean 3rd Qu. Max.
- 8.00 9.50 10.40 10.49 11.30 14.00
-quantile(wine$Alcool,0.75,names=FALSE)-quantile(wine$Alcool,0.25,names = FALSE)
-[1] 1.8
-quantile(wine$Alcool)
- 0% 25% 50% 75% 100%
- 8.0 9.5 10.4 11.3 14.0
-Le but de la statistique exploratoire est de synthétiser, résumer et -structurer l’information contenue dans des données. On utilise pour cela -des représentations de données sous forme de graphiques.
-Question : On peut utiliser la représentation par
-histogramme. Tapez H<-hist(wine$Alcool)
et commentez les
-différents attributs de H
.
H<-hist(wine$Alcool)
-Pour tracer un histogramme avec ggplot, vous pouvez utiliser le code -suivant. Commentez.
-g1<-ggplot(wine,aes(x=Alcool))+
- geom_histogram(bins=15,color="black",fill="white")+
- ggtitle("Histo. des effectifs")+
- ylab("Frequency")+xlab("Alcool")
-g2<-ggplot(wine,aes(x=Alcool))+
- geom_histogram(aes(y=..density..),bins=15,color="black", fill="white")+
- ggtitle("Histo. des frequences")+
- ylab("Density")+xlab("Alcool")
-grid.arrange(g1,g2,ncol=2)
-Question : A l’aide du code suivant, représentez un -boxplot de la variable “Alcool”. Que remarquez-vous ? Comparez avec les -valeurs adjacentes calculées précédemment.
-ggplot(wine,aes(y=Alcool))+geom_boxplot()
-Pour tracer les boxplots de toutes les variables quantitatives en -même temps, il faut réorganiser en amont le jeu de données.
-wineaux<-melt(wine[,-c(1,2)])
-ggplot(wineaux,aes(x=variable,y=value))+
- geom_boxplot()
-Question : En vous aidant de l’aide de R et des
-résultats de la section précédente, tapez
-B<-boxplot(wine$Alcool)
et commentez les différents
-attributs de B
.
B<-boxplot(wine$Alcool)
-Question : Calculez la matrice de corrélation des
-variables quantitatives (commande cor()
) ou la matrice de
-variance-covariance (commandes var()
ou
-cov()
). Représentez graphiquement les corrélations à l’aide
-de la fonction corrplot()
de la librairie
-corrplot
. Vous pourrez utiliser l’option
-method="ellipse"
pour une meilleure lisibilité.
print('Correlation')
-[1] "Correlation"
-cor(wine[,-c(1,2)])
- AcidVol AcidCitr SO2lbr SO2tot Densite Alcool
-AcidVol 1.00000000 -0.4107821 -0.37071293 -0.41542773 0.29814510 -0.02208799
-AcidCitr -0.41078214 1.0000000 0.14764139 0.20724080 0.12360061 -0.03949990
-SO2lbr -0.37071293 0.1476414 1.00000000 0.71394673 -0.03516798 -0.14830238
-SO2tot -0.41542773 0.2072408 0.71394673 1.00000000 -0.03003947 -0.24679350
-Densite 0.29814510 0.1236006 -0.03516798 -0.03003947 1.00000000 -0.67624598
-Alcool -0.02208799 -0.0394999 -0.14830238 -0.24679350 -0.67624598 1.00000000
-print('Covariance')
-[1] "Covariance"
-cov(wine[,-c(1,2)])
- AcidVol AcidCitr SO2lbr SO2tot Densite
-AcidVol 0.0268978296 -1.063582e-02 -1.077438119 -3.827641e+00 1.429567e-04
-AcidCitr -0.0106358172 2.492306e-02 0.413052087 1.838032e+00 5.704787e-05
-SO2lbr -1.0774381191 4.130521e-01 314.045063996 7.107860e+02 -1.822055e-03
-SO2tot -3.8276406511 1.838032e+00 710.785976628 3.156124e+03 -4.933866e-03
-Densite 0.0001429567 5.704787e-05 -0.001822055 -4.933866e-03 8.547444e-06
-Alcool -0.0041557797 -7.153760e-03 -3.014961677 -1.590554e+01 -2.268091e-03
- Alcool
-AcidVol -0.004155780
-AcidCitr -0.007153760
-SO2lbr -3.014961677
-SO2tot -15.905542015
-Densite -0.002268091
-Alcool 1.316059100
-help(corrplot)
-corrplot(cor(wine[,-c(1,2)]),method = "ellipse")
-Question : Interprétez les résultats.
-=> il y a une forte correlation negative entre l’Alcool et la -densié
-Question : Représentez graphiquement la
-Densite en fonction de l’Alcool à l’aide de la
-commande geom_point()
. Au vu de ce graphique, les variables
-sont-elles corrélées ? Vous pourrez ajouter la commande
-+geom_smooth(method="lm")
pour tracer la droite de
-régression linéaire. Est-ce cohérent avec la corrélation calculée
-ci-dessus ?
ggplot(data=wine)+
- geom_point(aes(x=Alcool,y=Densite))+
- geom_smooth(aes(x=Alcool,y=Densite),method="lm")
-Question : Représentez le boxplot de la variable
-Alcool
pour chaque modalité de la variable qualitative
-Type. Même question avec Qualite. Interprétez les
-résultats.
ggplot(wine)+
- geom_boxplot(aes(x=Type,y=Alcool))
-ggplot(wine)+
- geom_boxplot(aes(x=Qualite,y=Alcool))
-Question : Explorez les autres combinaisons de -variables quantitatives avec les variables qualitatives afin de -déterminer les variables fortement liées.
-ggplot(wine)+
- geom_boxplot(aes(x=Type,y=AcidVol))+
- geom_boxplot(aes(x=Qualite,y=AcidVol))
-ggplot(wine)+
- geom_boxplot(aes(x=Type,y=Densite))+
- geom_boxplot(aes(x=Qualite,y=Densite))
-ggplot(wine)+
- geom_boxplot(aes(x=Type,y=AcidCitr))+
- geom_boxplot(aes(x=Qualite,y=AcidCitr))
-Question : A l’aide de la fonction
-eta2()
de la librairie BioStatR
, calculez le
-rapport de corrélation \(\eta^2\) entre
-chaque variable quantitative et la variable Type. Commentez.
-Faites de même avec la variable Qualité.
eta2(x=wine$AcidVol,y=wine$Type)
-[1] 0.4481639
-eta2(x=wine$AcidCitr,y=wine$Type)
-[1] 0.03693554
-eta2(x=wine$SO2lbr,y=wine$Type)
-[1] 0.2153399
-eta2(x=wine$SO2tot,y=wine$Type)
-[1] 0.4580193
-eta2(x=wine$Alcool,y=wine$Type)
-[1] 0.003022674
-eta2(x=wine$Densite,y=wine$Type)
-[1] 0.214444
-Question : Analysez la table de contingence entre
-les deux variables qualitatives Type et Qualite avec
-la commande table()
. Ajoutez les effectifs marginaux avec
-la commande addmargins()
.
a=table(wine$Qualite,wine$Type)
-
-addmargins(a)
-
- blanc rouge Sum
- bad 17 2 19
- medium 319 152 471
- good 89 21 110
- Sum 425 175 600
-Question : Calculez et représentez les
-profils-lignes à l’aide des fonctions
-prop.table(..., margin = ...)
et mosaicplot
.
-Interprétez les résultats. Faites de même avec les profils-colonnes.
prop.table(table(wine$Qualite,wine$Type), margin = 1)
-
- blanc rouge
- bad 0.8947368 0.1052632
- medium 0.6772824 0.3227176
- good 0.8090909 0.1909091
-help("prop.table")
-