--- title: "Une introduction au langage `R`, `RStudio` et `R Markdown`" author: "ECRIVEZ VOTRE NOM ICI" date: "Le `r Sys.Date()`" output: pdf_document: toc: yes word_document: toc: yes html_document: keep_md: true toc: yes toc_float: yes --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` # Introduction Ceci est un document écrit en [R Markdown](http://rmarkdown.rstudio.com). Lorsque vous insérez du code `R` à l'intérieur de ce document, les résultats sont ajoutés automatiquement au document produit. Essayez d'éxécuter le bloc de code ci-dessous en cliquant le bouton *Run* (il est représenté par une flèche verte pointant vers la droite) ou alors en plaçant votre curseur dans le bloc et en tapant *Ctrl+Shift+Enter*. ```{r} plot(cars) ``` Les documents en `R Markdown` se veulent être une solution pour faire de la [programmation lettrée](https://fr.wikipedia.org/wiki/Programmation_lettr%C3%A9e) et de la [recherche reproductible](https://en.wikipedia.org/wiki/Reproducibility#Reproducible_research). Pour ajouter un nouveau bloc de code, vous appuyez sur le bouton *Insert* ou alors vous appuyez sur *Ctrl+Alt+I*. ```{r} list.of.packages <- c("ggplot2", "broom", "MASS", "rmarkdown","questionr") new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])] if(length(new.packages)) install.packages(new.packages) ``` ```{r} library(ggplot2) library(broom) library(MASS) library(rmarkdown) library(questionr) ``` Le bloc précédent ne sert qu'à initialiser des librairies que nous pourrons utiliser plus tard. # Utilisation des données Lorsque des données sont intialisées dans `R`, vous pouvez les visualiser avec la commande `View`. ```{r} View(mtcars) ``` De plus, si les données sont des `tibbles` (un type précis de base de données), vous obtenez un résumé des données en tapant le nom. Nous allons observer la base de données `diamonds`. ```{r} diamonds ``` Vous pouvez accéder à une variable en particulier en utilisant l'opérateur `$`. Pour ne pas encombrer l'écran, nous allons observer les 10 premières valeurs de la variable `cut`. ```{r} diamonds$cut[1:10] ``` # Statistiques descriptives ## Mesures de tendance centrale ### Le mode, la moyenne et la médiane Calculez le mode de la variable `cut`, la moyenne (`mean`) et la médiane (`median`) de la variable `price`. ```{r} table(diamonds$cut) mean(diamonds$price) median(diamonds$price) ``` > **Défi** : > > Trouvez le mode de la variable `color`, la moyenne de la variable `carat` et la médiane de la variable `carat`. ## Mesures de dispersion ### L'étendue, la variance et l'écart type Calculez l'étendue (`range`) de la variable `carat`, la variance (`var`) de la variable `price` et l'écart-type (`sd`) de la variable `carat`. ```{r} max(diamonds$carat)-min(diamonds$carat) var(diamonds$price) sd(diamonds$carat) ``` > **Défi** : > > Trouvez l'étendue de la variable `price`, la variance de la variable `carat` et l'écart-type de la variable `price`. ### Le coefficient de variation > **Défi** : > > Calculez le coefficient de variation de la variable `price`. ## Mesures de position ### Les quantiles Calculez certains quantiles (`quantile`) de la variable `carat`. ```{r} quantile(diamonds$carat, 0.1) quantile(diamonds$carat, 0.75) quantile(diamonds$carat, 0.91) ``` Utilisez la commande `summary` sur la variable `price`. ```{r} summary(diamonds$price) ``` > **Défi** : > > Trouvez le sommaire de la variable `carat` et le centile 63 de la variable `price`. ### Le rang centile Calculez le rang centile d'un diamant valant 850$. ```{r} mean(diamonds$price<=850) ``` ### La cote z > **Défi** : > > Calculez la cote z d'un diamant de prix 650$. # Tableaux ## Tableaux à une variable Nous pouvons créer un tableau à une variable à l'aide de la commande `table`. Créez une table de la variable `cut` de la base de données `diamonds`. ```{r} table(diamonds$cut) ``` Nous pouvons également utiliser la commande `freq` de la librairie `questionr`. ```{r} freq(diamonds$cut, valid = FALSE, digits = 2, cum = TRUE, total = TRUE) ``` > **Défi** : > > Faites un tableau de la variable `color` ## Tableaux à deux variables Nous pouvons aussi créer des tableaux à deux variables avec la commande `table`. Créez un tableau avec les variables `cut` et `color` de la base de données `diamonds`. ```{r} table(diamonds$cut,diamonds$color) ``` Vous pouvez également représentez votre tableau en utilisant des proportions avec la commande `prop` de la librairie `questionr`. ```{r} prop(table(diamonds$cut,diamonds$color), digits = 2) ``` Vous pouvez obtenir les pourcentage en ligne avec la commande `rprop` de la librairie `questionr`. ```{r} rprop(table(diamonds$cut,diamonds$color), digits = 2) ``` Vous pouvez obtenir les pourcentage en colonne avec la commande `cprop` de la librairie `questionr`. ```{r} cprop(table(diamonds$cut,diamonds$color), digits = 2) ``` # Graphiques En langage `R`, il existe plusieurs façons de faire des graphiques. - Les graphiques de `base` ou `traditionnels`. - La librairie `lattice` qui est incluse dans `R` mais que nous devons charger. - La librairie `ggplot2` qui doit être installé **et** chargée. Pour cet atelier, nous utiliserons la librairie [`ggplot2`](http://ggplot2.org/) qui est la plus utilisée pour produire des graphiques en `R`. Dans la librairie `ggplot2`, il y a deux façons de produire des graphiques: - La commande `qplot`, qui correspond à __quick plot__. Cette commande produit des graphiques rapidement en tentant de choisir le bon graphique en fonction des variables utilisées. - La commande `ggplot`, qui permet d'avoir beaucoup plus de précision sur la sortie graphique. ## Les variables qualitatives ### Le diagramme à bandes Tracez le diagramme à bandes de la variable `clarity`. ```{r} qplot(diamonds$clarity, xlab="Clarté", ylab="Fréquence", main="Un beau titre...") ``` En utilisant `ggplot`. ```{r} ggplot(diamonds, aes(clarity)) + geom_bar() + labs( x = "Clarté", y = "Fréquence", title = "Un beau titre...") ``` ## Les variables quantitatives ### Le diagramme à bâtons Tracez le diagramme à bâtons de la variable `cyl` de la base de données `mtcars` (Cette base de données est toujours disponible dans `R`). ```{r} qplot(mtcars$cyl, xlab="Nombre de cylindres", ylab="Fréquence", main="Un beau titre...") ``` En utilisant `ggplot`. ```{r} ggplot(mtcars, aes(cyl)) + geom_bar(width = 0.1) + labs( x = "Nombre de cylindres", y = "Fréquence", title = "Un beau titre...") ``` ### L'histogramme Tracez l'histogramme de la variable `price`. ```{r} qplot(diamonds$price, xlab="Prix", ylab="Fréquence", main="Un beau titre...") ``` En utilisant `ggplot`. ```{r} ggplot(diamonds, aes(price)) + geom_histogram(color = "white", binwidth = 1000, center = 500) + labs( x = "Prix", y = "Fréquence", title = "Un beau titre...") ``` ### Le polygone de fréquences Tracez le polygone de fréquences de la variable `price`. ```{r} ggplot(diamonds, aes(price)) + geom_freqpoly(size = 1, binwidth = 1000, center = 500) + labs( x = "Prix", y = "Fréquence", title = "Un beau titre...") ``` Tracez l'histogramme et le polygone de fréquences superposés. ```{r} ggplot(diamonds, aes(price)) + geom_histogram(color = "white", binwidth = 1000, center = 500) + geom_freqpoly(size = 1, binwidth = 1000, center = 500) + labs( x = "Prix", y = "Fréquence", title = "Un beau titre...") ``` ### L'ogive des pourcentages cumulés Tracez le polygone de fréquences de la variable `price`. ```{r} ggplot(diamonds, aes(price)) + stat_ecdf() + labs( x = "Prix", y = "Fréquence relative cumulée", title = "Un beau titre...") ``` ## Représenter deux variables ### Deux variables qualitatives Tracez un diagramme à bandes comprenant la variable `cut` et la variable `color`. On utilise `aes` avec l'option `fill`. ```{r} ggplot(diamonds, aes(x=cut, fill=color))+ geom_bar()+ labs( x = "Coupe", y = "Fréquence", title = "Un beau titre...") ``` Tracez un diagramme à bandes comprenant la variable `cut` et la variable `color` avec les variables côtes à côtes. On utilise l'option `position="dodge"`. ```{r} ggplot(diamonds, aes(x=cut, fill=color))+ geom_bar(position ="dodge")+ labs( x = "Coupe", y = "Fréquence", title = "Un beau titre...") ``` Tracez un diagramme à bandes comprenant la variable `cut` et la variable `color` avec des fréquences relatives. On utilise l'option `position="fill"`. ```{r} ggplot(diamonds, aes(x=cut, fill=color))+ geom_bar(position ="fill")+ labs( x = "Coupe", y = "Fréquence relative", title = "Un beau titre...") ``` ### Une variable qualitative et une variable quantitative Faites une boîte à moustaches de la variable `price` en fonction de la variable `cut`. ```{r} ggplot(diamonds, aes(x = cut, y = price)) + geom_boxplot()+ labs( x = "Coupe", y = "Prix", title = "Un beau titre...") ``` ### Deux variables quantitatives Tracez le nuage de points de la variable `price` en fonction de la variable `carat`. ```{r} ggplot(diamonds, aes(x=carat, y=price))+ geom_point()+ labs( x = "Carat", y = "Prix", title = "Un beau titre...") ``` # Régression linéaire Nous allons tracer la droite de régression sur le graphique représentant la variable `price` en fonction de la variable `carat` de la base de données `diamonds`. ```{r} ggplot(diamonds, aes(x=carat, y=price))+ geom_point()+ geom_smooth(method="lm")+ labs( x = "Carat", y = "Prix", title = "Un beau titre...") ``` Nous pouvons trouver les coefficients $a$ et $b$ de la droite $y=ax+b$ en utilisant la commande `lm`. ```{r} lmfit <- lm(formula = price ~ carat, data = diamonds) ``` Pour visualiser les coefficients de votre régression linéaire, vous utilisez la commande `tidy`. ```{r} tidy(lmfit) ``` Pour obtenir les statistiques obtenues de la régression linéaire, nous utilisons la commande `glance`. ```{r} glance(lmfit) ``` Pour obtenir les valeurs de la régression linéaire obtenues à partir des points originaux, vous utilisez la commande `augment`. La commande `head` n'est présente que pour visualiser les premières lignes de la sortie. ```{r} head(augment(lmfit)) ``` # Intervalle de confiance ## Les intervalles de confiance sur une moyenne Nous allons trouver un intervalle de confiance au niveau de 95% de la moyenne du prix des diamants. ```{r} tidy(t.test(diamonds$price, conf.level = 0.95)) ``` Nous allons trouver un intervalle de confiance au niveau de 99% de la moyenne du prix des diamants. ```{r} tidy(t.test(diamonds$price, conf.level = 0.99)) ``` ## Les intervalles de confiance sur une proportion Trouvons la proportion de diamants de type `Ideal`. ```{r} prop.table(table(diamonds$cut)) ``` La proportion est donc de $`r prop.table(table(diamonds$cut))[5]`$. Nous allons faire trouver un intervalle de confiance au niveau de 95% de la proportion dans la population des diamants de type `Ideal`. ```{r} tidy(prop.test(with(diamonds,table(cut!="Ideal")))) ``` Pour trouver un intervalle de confiance à 99%. ```{r} tidy(prop.test(with(diamonds,table(cut!="Ideal")), conf.level = 0.99)) ``` # Les tests d'hypothèses ## Les tests d'hypothèses à une variable ### Le test d'hypothèses sur une moyenne Nous pouvons faire un test d'hypothèses bilatéral de niveau de confiance 95% sur la moyenne du prix des diamants. Par exemple, nous allons tenter de vérifier si le prix des diamants est **différent** de 3 900$. ```{r} PrixDiff <- t.test(diamonds$price, mu = 3900, alternative = "two.sided", paired = FALSE, var.equal = FALSE, conf.level = 0.95) tidy(PrixDiff) ``` Au niveau de confiance de 95%, nous ne pouvons pas conclure que le prix des diamants est différent de 3 900$ car nous obtenons une __p-value__ de $`r PrixDiff$p.value*100`$%. Nous pouvons vérifier si le prix des diamants est **plus grand** que 3 900$ au niveau de confiance de 90%. ```{r} PrixPlusGrand <- t.test(diamonds$price, mu = 3900, alternative = "greater", paired = FALSE, var.equal = FALSE, conf.level = 0.90) tidy(PrixPlusGrand) ``` Au niveau de confiance de 90%, nous pouvons conclure que le prix des diamants est plus grand que 3 900$ car nous obtenons une __p-value__ de $`r PrixPlusGrand$p.value*100`$%. ### Le test d'hypothèses sur une proportion Nous pouvons faire un test d'hypothèses unilatéral de niveau de confiance 95% sur la proportion de diamants de type `Ideal`. Par exemple, nous allons tenter de vérifier si la proportion des diamants de type `Ideal` est **plus petite** que 0,405. ```{r} IdealPlusPetit <- prop.test(with(diamonds,table(cut!="Ideal")), p = 0.405, alternative = "less", conf.level = 0.95) tidy(IdealPlusPetit) ``` Au niveau de confiance de 95%, nous pouvons conclure que la proportion de diamants de type `Ideal` est plus petite que 0,405 car nous obtenons une __p-value__ de $`r IdealPlusPetit$p.value*100`$%. ## Les tests d'hypothèses à deux variables ### Les tests d'hypothèses sur une différence de deux moyennes Nous pouvons faire un test d'hypothèses sur la différence entre le prix moyen des diamants de coupe `Ideal` et de coupe `Premium` au niveau de confiance de 99%. ```{r} IdealPremiumDiff <- t.test(formula = price ~ cut, data = diamonds, subset = cut %in% c("Ideal", "Premium"), alternative = "two.sided", paired = FALSE, var.equal = FALSE, conf.level = 0.99) tidy(IdealPremiumDiff) ``` Au niveau de confiance de 99%, nous pouvons conclure que la moyenne de prix des diamants `Ideal` est différente de la moyenne de prix des diamants `Premium` car nous obtenons une __p-value__ de $`r IdealPremiumDiff$p.value*100`$%. Pour faire un test d'hypothèses sur une différence de moyennes lorsque les échantillons sont pairés, nous allons utiliser une base de données disponible dans `R`, la base de données `immer`. Celle-ci donne la production d'orge pour les années 1931 et 1932. On peut la visualiser en utilisant la commande `head`. ```{r} head(immer) ``` Nous allons faire un test d'hypothèses bilatéral sur la différence de production d'orge entre les années 1931 et 1932 au niveau de confiance de 95%. ```{r} BarleyPaired <- t.test(immer$Y1, immer$Y2, paired=TRUE) tidy(BarleyPaired) ``` Au niveau de confiance de 95%, nous pouvons conclure que la moyenne de production d'orge est différente entre 1931 et 1932 car nous obtenons une __p-value__ de $`r BarleyPaired$p.value*100`$%. ### Les tests d'hypothèses sur une différence de deux proportions Nous pouvons faire un test sur la différence de poportions entre les diamants de coupe `Ideal` et les diamants de couleur `E`. ```{r} PropPremiumE <- prop.test(with(diamonds,table(cut == "Premium",color == "E"))) tidy(PropPremiumE) ``` Au niveau de confiance de 95%, nous pouvons conclure que la proportion de diamants `Ideal` et de diamants de couleur `E` est différente car nous obtenons une __p-value__ de $`r PropPremiumE$p.value*100`$%. # Le test du $\chi^2$ ## Le test du $\chi^2$ pour une variable Voici le tableau représentant la variable `cut`. ```{r} table(diamonds$cut) ``` Nous voulons faire un test du $\chi^2$ pour savoir si toutes les modalités de la variable `cut` sont présentes de façon égales. ```{r} ChiCut <- chisq.test(x = table(diamonds$cut)) tidy(ChiCut) ``` ## Le test du $\chi^2$ pour deux variables Voici le tableau représentant la variable `cut` et la variable `color`. ```{r} table(diamonds$cut,diamonds$color) ``` Nous voulons faire un test du $\chi^2$ pour savoir si la variable `cut` dépend de la variable `color`. ```{r} ChiCutColor <- chisq.test(x = table(diamonds$cut, diamonds$color)) tidy(ChiCutColor) ``` # Informations sur la version de `R` utilisée ```{r} sessionInfo() ```