---
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()
```
