forked from MTES-MCT/parcours_r_socle_introduction
-
Notifications
You must be signed in to change notification settings - Fork 0
/
07-stats.Rmd
164 lines (118 loc) · 5.48 KB
/
07-stats.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# Premiers traitements statistiques
## Obtenir des informations
La fonction `summary()` peut s'appliquer à une table entière ou un vecteur. Appliquée sur un tableau, elle donne les statistiques principales sur chacune des variables, en s'adaptant au type de celles-ci (numerique ou texte).
```{r stat_1}
base_extrait <- base %>%
select(1, 3, 5, 7:12)
summary(base_extrait)
```
- Les variables quantitatives
```{r stat_2}
summary(pull(base_extrait, NAIS0914))
```
- Les variables qualitatives
```{r stat_3}
summary(pull(base_extrait, ZAU))
```
## Calculer des statistiques spécifiques
Les fonctions `sum()`, `mean()`, `median()`, `min()`, `max()`, `var()`, `sd()`... résument l'information pour en donner une statistique.
La fonction `quantile()` renvoie les quartiles de la variables (ou bien tout autre découpage qu'on lui renseigne).
```{r stat_4}
sum(pull(base_extrait, P14_POP), na.rm = T)
mean(pull(base_extrait, P14_POP), na.rm = T)
median(pull(base_extrait, P14_POP), na.rm = T)
quantile(pull(base_extrait, P14_POP), probs = c(0.25, 0.5, 0.75), na.rm = T)
```
Ces fonctions retournent une valeur, ou bien un ensemble de valeur (pour `quantile()`). Le résultat est donc un vecteur de un ou plusieurs nombres.
## Agréger des données
### Globalement
<center>![](images/summarise.png)</center>
La fonction `summarise()` permet d'aggréger des données, en appliquant une fonction sur les variables pour construire une statistique sur les observations de la table. C'est une fonction dite de “résumé”.
```{r stat_5, eval=FALSE}
summarise (TableEnEntree, NomVariableAgregee = Fonction(NomVariableEtude))
```
```{r stat_6}
base_med <- base_extrait %>%
summarise(population_med = median(P14_POP, na.rm = T))
```
La fonction `summarise()` retourne un data.frame.
### Selon un facteur
<center>![](images/groupby.png)</center>
La fonction `summarise()` couplée à `group_by()` permet de calculer des statistiques pour chaque modalité d'une variable qualitative. Avec `group_by()`, on précise les variables qui formeront des groupes, sur lesquels on appliquera une fonction :
```{r, eval=FALSE}
TableauGroupes <- group_by (TableEnEntree, Variable1, ..., VariableN)
summarise (TableauGroupes, NomVariableAgregee = Fonction (NomVariableEtude))
```
Par exemple, si on veut avoir la médiane de la variable P14_POP, pour chaque ZAU et chaque région :
```{r stat_7}
base_reg_ann <- base_extrait %>%
group_by (ZAU, REG) %>%
summarise (population_med = median (P14_POP, na.rm = T))
```
## Tableau de contingence
La fonction `table()` calcule les effectifs d'un tableau croisé :
```{r stat_8}
t <- base_extrait %>%
select(ZAU, REG) %>% table
print(t)
```
## Tableau de proportions
La fonction `prop.table()` prend en entrée un objet `table` (tableau de contingence avec les effectifs) et calcule les pourcentages (total, ligne, colonne) associés $\rightarrow$ `?prop.table`
```{r stat_9}
(prop.table(t) * 100) %>% round(digits = 1)
```
## Exercice : calcul de statistiques
- Utilisez la fonction `summary()` pour obtenir un résumé de l'ensemble des variables de la table df
- Calculez maintenant les moyenne, médiane, écart-type et variance de la variable de densité de population. Que constatez-vous ?
- Utilisez le paramètre `na.rm = T` pour gérer les valeurs manquantes
- Calulez à présent les quartiles puis déciles de cette variables
- Calculez la version centrée réduite de la variable de densité. Rappel : on calcule la version centrée réduite d'une variable X en lui appliquant la transformation suivante : $$ STD_X =\dfrac{X-\bar{X}}{\sigma_X}$$ où $\bar{X}$ est la moyenne empirique de X et $\sigma_X$ son écart-type
Tableaux croisés :
- Calculer le nombre de communes par type d'espace à l'aide de la fonction `table`, et le pourcentage associé
- Calculer le nombre de communes par région et type d'espace, et les pourcentages associés
```{r stat_10}
df <- base %>%
select(1:24) %>%
mutate(densite = P14_POP / SUPERF,
tx_natal = 1000 * NAISD15 / P14_POP,
tx_mort = DECESD15 / P14_POP,
ZAU2 = as.factor(substr(ZAU, 1, 3))) # Parce que la variable originale est longue
summary(df)
```
```{r stat_11, eval = F}
df %>% pull(densite) %>% mean()
df %>% pull(densite) %>% sd()
df %>% pull(densite) %>% median()
df %>% pull(densite) %>% var()
```
On a des NA car les valeurs manquantes sont absorbantes !
```{r stat_12, eval = F}
df %>% pull(densite) %>% mean(na.rm = T)
df %>% pull(densite) %>% sd(na.rm = T)
df %>% pull(densite) %>% median(na.rm = T)
df %>% pull(densite) %>% var(na.rm = T)
```
```{r stat_13}
df <- df %>%
mutate(std_dens = (densite - mean(densite, na.rm = T)) / sd(densite, na.rm = T))
```
Avantage des variables centrées réduites : on élimine les effets d'unité (d'ordre de grandeur), et on peut donc comparer les distributions de deux variables qui ont des unités différentes (voir module 3)
```{r stat_14}
df %>% pull(densite) %>% quantile(na.rm = T)
```
```{r stat_15}
seq(0, 1, 0.1) # vérifier la séquence qu'on souhaite
df %>% pull(densite) %>% quantile(probs = seq(0, 1, 0.1), na.rm = T)
```
```{r stat_16}
t <- table(df$ZAU2)
t
100 * prop.table(t) %>% round(digits = 4)
```
- Deux variables
```{r stat_17}
t <- table(df$REG, df$ZAU2)
t
100 * prop.table(t) %>% round(digits = 4)
```
Pour aller plus loin et ajouter des variables de pondération, calculer les profils-ligne ou profils-colonne, rendez-vous au [module 3 "Statistiques descriptives"](https://mtes-mct.github.io/parcours-r/m3/index.html) ou demander à un GF (Gentil Formateur).