/
4.2-tests-statistiques.R
373 lines (180 loc) · 11.3 KB
/
4.2-tests-statistiques.R
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
############################################################
# #
#### ---- Analyses statistiques ---- ####
# Caroline Patenaude #
# Mooc - ISDS #
############################################################
# Installation et chargement des modules nécessaires
install.packages("car", dep = TRUE)
install.packages("questionr", dep = TRUE)
install.packages("effects", dep = TRUE)
library(effects)
library(car)
library(questionr)
# Téléchargement de la base de données hdv2003 du module questionr
# (Extrait de l'enquête "Histoire de vie" de l'Insee - https://www.insee.fr/fr/statistiques/2532244)
data(hdv2003)
# Copie de la base de données dans un objet (datatable) nommé bd
bd <- hdv2003
# ==================== 1. Les tests statistiques ====================
# On retrouve une multitude de modules dédiés aux méthodes statistiques (comme stats, MASS, FactoMineR, plm, glm).
# La même méthode peut se trouver avec variantes dans plusieurs modules.
# Les exemples ci-dessous proviennent principalement du module stats (module par défaut) où l'on retrouve de nombreuses fonctions pour différents types d'analyse.
#* 1.1. Notation formule et objet modèle --------------------------
mod <- nom.test(VD ~ VI)
# Souvent utilisé dans les modèles d'analyse (régressions...) et les graphiques.
# Peut s'interpréter comme en "fonction de...": variable dépendante (effet) en fonction (~) de la var indépendante (cause).
# Toutes les fonctions n'acceptent pas la notation formule, mais elle est utilisée dans la plupart des modèles d'analyse.
# On stocke l'analyse dans un objet qui contiendra les résultats qui, selon l'analyse, inclueront un ensemble d'éléments d'information auxquels on pourra accéder de deux façons:
# En passant notre objet-modèle à différentes fonctions génériques (selon le type de test):
mod <- lm(y ~ x, data=NomObjet) # Créer son objet modèle
mod # Tappe le nom de l'objet pour voir un résumé des résultats
summary(mod) # ensemble des résultats détaillés
coef(mod) # coefficients et erreurs standards
residuals(mod) # résidus
confint(mod) # intervalles de confiance
fitted(mod) # valeurs ajustées
anova(mod) # appliquer analyse de variance sur modèle
predict(mod) # calculer des valeurs prédites à partir d'un modèle
plot(mod) # et nombreuses autres fonctions graphiques
# En utilisant la fonction names(NomObjet) et en sélectionnant individuellement le nom de l'élément avec l'opérateur $:
mod <- lm(y ~ x) # Créer son objet modèle
names(mod) # Voir les éléments du résultat
mod$coefficients # Sélectionner l'élément individuel
## À noter: par défaut les résultats sont présentés selon la **notation scientifique**. Pour la désactiver, utiliser l'instruction: options(scipen = 999). Pour la réactiver: options(scipen = 0)*
#* 1.2. Les modalités de référence --------------------------
# Dans R, il n'est pas nécessaire de recoder ses variables en "dummy", les analyses s'en chargent par défaut lorsqu'on utilise des variables qualitatives.
# Mais attention à la **modalité de référence** des facteurs définie par défaut: la première dans la liste des niveaux.
# Pour voir la modalité de référence
levels(bd$sport) # "Non"
# Pour modifier la catégorie de référence - fonction relevel()
bd$sport <- relevel(bd$sport, ref = "Oui")
# ==================== 2. Intervalle de confiance ====================
#* 2.1. Intervalle de confiance d’une proportion --------------------------
# fonction prop.test
prop.test(table(bd$sport))
## Calcul l'intervalle pour la première catégorie du tableau
options(scipen = 999) # désactiver la notation scientifique
# Modifier la catégorie de référence avec la fonction relevel directement dans la fonction table()
prop.test(table(relevel(bd$sport, "Oui")))
#* 2.2. Intervalle de confiance d'une moyenne --------------------------
# Fonction t.test
t.test(bd$age, conf.level=.99)
## Changer le niveau de confiance avec l'argument (bd$age, conf.level=.x)
# ==================== 3. Test du Khi-carré ====================
# Passe la table comme argument à la fonction chisq.test() (Module questionr)
mod.chi <- chisq.test(bd$sport, bd$sexe)
## Applique correction par défaut, sinon ajouter argument: ,correct=FALSE
# Résumé des résultats
mod.chi
# Fonction names() pour voir les éléments d'information de nos résultats
names(mod.chi)
# Voir les valeurs attendues
mod.chi$expected
# Fonction chisq.residuals() du module questionr pour les résidus
tab <- table(bd$sport, bd$sexe)
chisq.residuals(tab)
# ==================== 4. Test de fisher ====================
fisher.test(bd$sport, bd$sexe)
# ==================== 5. Différence de moyennes entre deux groupes (Test T) ====================
# *Vérifier si les moyennes d'une variable quantitative de deux groupes sont statistiquement différentes*
#* Explorer les statistiques descriptives selon les groupes avec la fonction by() ==========
by(bd$age, bd$sport, FUN=summary)
by(bd$age, bd$sport, FUN=var)
#* Normalité des distributions - Test de Shapiro-Wilk ==========
## Avec la fonction by
by(bd$age, bd$sport, FUN=shapiro.test)
#* Égalité des variances - test F ==========
var.test(age ~ sport, data = bd)
#* Test de Levene (module car) ==========
leveneTest(bd$age, bd$sport) # Accepte aussi notation formule
#* Test T ==========
t.test(age ~ sport, data = bd)
## Par défaut, la fonction t.test est un test de Welsh qui ne suppose pas égalité des variances
# Pour un test t classique, ajouter l'argument var.equal = TRUE
t.test(age ~ sport, data=bd, var.equal= TRUE)
## Pour un test d'échantillons appariés (mesures répétées), ajouter argument paired=TRUE (sans notation formule)
# ==================== 6. Test Wilcoxon/Mann-Whitney ====================
# test non-paramétrique parmi d'autres
wilcox.test(age ~ sport, data = bd)
########## À NOTER - erreur de numérotation: 7. ANOVA et 7. Corrélations ###########
# ==================== 7. Différence de moyenne pour plus de deux groupes (ANOVA) ===================
# *Évaluer la relation entre une variable quantitative et une variable qualitative avec plus de deux modalités*
#* Explorer les statistiques descriptives avec la fonction tapply() ==========
tapply(bd$heures.tv, bd$occup, mean, na.rm=T)
## Vérifier si les moyennes semblent différentes entre les groupes
#* Fonction aov ==========
mod.aov <- aov(heures.tv ~ occup, data=bd)
## Créé un objet contenant le modèle
## Pour voir effet combiné entre facteurs mod.aov <- aov(heures.tv ~ occup*sexe, bd)
#* Voir un résumé du modèle ==========
mod.aov
#* Fonction summary ==========
summary(mod.aov)
## Applique la fonction summary à l'objet modèle pour voir résultats détaillés
#* Fonction lm ==========
mod.lm <- lm(heures.tv ~ occup, bd)
## Peut également utiliser fonction de régression linéaire pour analyse de variance
## Permet de voir les contrastes entre les différents groupes
## La modalité de référence est "Exerce une profession" (levels(bd$occup))
## Pour changer modalité de référence, utiliser la commande relevel: mod.lm <- lm(heures.tv ~ relevel(occup, ref="Etudiant, eleve"), data=bd)
## Possède aussi un argument subset= permettant de sélectionner des modalités. Par exemple:
## mod2.lm <- lm(heures.tv ~ occup, bd, subset = occup %in% c("Exerce une profession", "Chomeur", "Etudiant, eleve"))
# Résumé des coefficients
mod.lm
# Résultats détaillés
summary(mod.lm)
## Applique la fonction summary à l'objet modèle -> Coefficients + Tests associés (Test t, degré de significativité)
#* Fonction anova ==========
anova(mod.lm)
## Peut aussi obtenir des résultats d'analyse de variance (somme des carrés, degré de liberté, valeur de F...) en appliquant anova à l'objet modèle
## À noter: Les fonctions aov() et anova() retourne la somme des carrés de type I
# ==================== 7. Corrélations ====================
# Fonction cor()
cor(bd$age, bd$heures.tv, use="pairwise")
## Matrice de corrélations pour deux variables quanti ou plus
## pairwise: n'utiliser que les paires d'observations complètes
## pour Spearman, rajouter argument ,method = "spearman"
## instruction suivante si plus de deux variables: cor(bd[ ,c("age", "heures.tv", "freres.soeurs")], use='pairwise')
# Fonction cor.test()
cor.test(bd$age, bd$heures.tv)
## Ou notation formule cor.test( ~ age + heures.tv, bd)
# ==================== 8. Régression linéaire ====================
# *Prédire la valeur d'une variable dépendante continue sur la base des valeurs de variables indépendantes*
# Fonction lm()
# Quelles variables prédisent les heures de télé écoutées?
mod1.lm <- lm(heures.tv ~ occup + nivetud + sexe, data=bd)
## On stocke le résultat dans un objet modèle pour pouvoir le manipuler avec d'autres fonctions
## Pour limiter à un sous-groupe: argument ( , subset= age > 50")
# Passe notre objet modèle à la fonction summary pour voir le tableau des coefficients et leur test de significativité
summary(mod1.lm)
# La fonction coef présente les coefficients du modèle de régression et peut s'appliquer individuellement
coef(mod1.lm)
# la fonction confint présente les intervalles de confiance (95% par défaut)
confint(mod1.lm)
# Pour le tableau ANOVA appliqué au modèle de régression
anova(mod1.lm)
# La fonction fitted fournit les valeurs ajustées
head(fitted(mod1.lm))
# La fonction resid() founit les résidus de la régression
head(resid(mod1.lm))
# ==================== 9. Régression logistique binaire ====================
# *Prédire une variable dépendante dichotomique sur la base des valeurs de variables indépendantes*
# Fonction glm
mod.reg <- glm(sport ~ sexe + nivetud + qualif, bd, family = binomial(logit))
## La fonction glm permet de calculer plusieurs modèles statistiques que l'on indique avec l’argument family=binomial(logit)
# Applique fonction summary au modèle pour voir les résultats
summary(mod.reg)
# La fonction coef permet aussi de sélectionner les coefficients individuellement
coef(mod.reg)[1]
# La fonction exp pour les odds ratio et leurs intervalles de confiance
exp(coef(mod.reg))
## Aussi la fonction odds.ratio(mod.reg) du module questionr
# ==================== 10. Visualiser les résultats d'un modèle ====================
# Exemple du module effects
# Résultat de l'ANOVA
plot(allEffects(mod.aov))
# Résultat de la régression linéaire - effet de tous les prédicteurs
plot(allEffects(mod1.lm))
# Résultat de la régression linéaire - effet d'un seul prédicteur
plot(Effect("occup", mod=mod1.lm))