[00:01] Après avoir vu les principaux tests d associations dans le cas où on croise deux variables, on va s intéresser au modèle d ANOVA et de régression linéaire et logistique. 1
[00:10] On va charger de nouveau notre fichier de données, cette fois-ci on voit qu on peut très bien cliquer dessus 2
[00:15] plutôt que de taper la commande load() et on va s intéresser à considérer un sousensemble de notre data-frame smp. En particulier on va regarder pour la variable profession les individus qui sont soit sans-emploi soit qui ont profession intermédiaire soit qui sont cadre et on va regarder simplement les variables age, nombre enfant (n.enfant). Donc on avait vu la commande subset(). On lui donne le nom du data-frame et un filtre pour sélectionner les lignes. Ici on va dire que prof vaut soit «sans emploi» OU (c est le OU logique : ) prof vaut «prof.intermediaire» OU (c est toujours le OU logique) prof vaut «cadre» et on sélectionnera les variables : age, n.enfant et la profession. On peut regarder les premières observations de ce data-frame là (head(subset(smp, prof == "sans emploi" prof == "prof.intermediaire" prof == "cadre", c(age, n.enfant, prof)))) donc ça ce sont les six premières observations c est pas le tableau complet. On a bien la variable "age", "nombre d enfant" et "profession". Parmi les professions on a que des professions intermédiaires, les sans-emploi et ce qui n apparaît pas ici : les cadres. 3
[01:33] En fait, on peut sauvegarder ce data-frame-là dans une variable qu on va appeler smpb (smpb <- subset(smp, prof %in% c("sans emploi", "prof.intermediaire", "cadre"), c(age, n.enfant, prof))). Donc si on regarde maintenant notre espace de travail, on a un nouveau data frame qui est un sous-ensemble du data-frame de départ dans lequel on a seulement 304 observations, donc ce sont les observations qui remplissent ce critère-là donc la profession est parmi ces modalités-là et on a simplement trois variables. Si on regarde en fait un résumé de ce tableau (summary(smpb)), on s aperçoit qu on a bien notre variable «age» qui est résumée avec le minimum, le maximum, etc., le nombre d enfants de la même manière (on a 11 valeurs manquantes). Par contre ce dont on s aperçoit, c est que pour la variable «prof», R a conservé les anciens niveaux qui n ont plus lieu d être ici puisque de toute façon ils ne sont plus vérifiés. 4
[02:28] Donc ce qu on va faire c est simplement réappliquer la commande factor() (smpb$prof <- factor(smpb$prof, labels=c("cadre", "intermédiaire", "sans emploi"))) sur notre variable «profession» et dans ce cas-là R va recalculer automatiquement les niveaux de notre variable de sorte que cette foisci on aura bien les trois modalités qui sont listées. On peut faire un tableau également pour vérifier (table(smp$prof)) ça c est notre variable d origine ; (table(smpb$prof)) ça c est notre variable dans le tableau restreint. On retrouve bien les mêmes effectifs mais on n a plus que ces modalités-là. 5
[03:05] Alors si maintenant on souhaite résumer le nombre d enfants moyen (c est la variable «n.enfant») en fonction de la profession dans ce data-frame-là, on utilisera la commande par exemple aggregate() (aggregate(n.enfant ~ prof, data=smpb, mean)) avec une formule donc on décrit le nombre d enfants par la variable profession en utilisant le tilde (~) pour indiquer la relation entre les deux variables. [03 :29] On peut éventuellement faire un graphique en utilisant exactement la même expression et avec boxplot() (boxplot(n.enfant ~ prof, data=smpb, xlab="profession", ylab="nombre d'enfants", col="cornflowerblue", border="cornflowerblue")) donc on a pour chacune des modalités la distribution du nombre d enfants, ici en ordonnée. 6
[03:47] Que se passe-t-il si on souhaite réaliser une ANOVA, alors la commande pour réaliser les ANOVA ou les modèles de régression linéaire s appelle lm(). On peut regarder dans l aide en ligne (help(lm)) donc c est une commande très générale pour ce qu on appelle les modèles linéaires. Ça inclut la régression linéaire et puis la régression sur variables indicatrices ou variables catégorielles qui est le cas particulier de l ANOVA. Donc on va utiliser la formule qu on a utilisée juste précédemment : le nombre d enfants décrit par la profession dans le data-frame smpb et puis on va stocker ce résultat-là dans une variable qu on appellera «m» (m <- lm(n.enfant ~ prof, data=smpb)). Ici on a en fait stocké le résultat de notre analyse de régression dans la variable «m» ; on peut regarder à quoi correspond "m", en fait ça nous rappelle l instruction qu on a tapée c.à.d. la commande lm(), la formule et le data-frame dans lequel on trouve les variables et puis des coefficients. Dans un cadre d ANOVA en fait on utilisera la commande drop1() (drop1(m, test="f")) qui nous permet en donnant le nom d une variable et en spécifiant un test de Fisher Snedecor de fournir un tableau d analyse de variance, avec ici la variable explicative «profession» à deux degrés de liberté, la somme des carrés correspondante et la valeur de «F» correspondant au test de l analyse de variance. Donc ici la statistique de test 3.83 et ici le degré de significativité 0.02. 7
[05:19] En fait on peut regarder aussi par exemple dans le cas de deux variables numériques : la variable nombre d enfant et l âge par exemple. Donc c est toujours avec le même dataframe et puis on peut utiliser, stocker ça dans une variable «m» (m <- lm(n.enfant ~ age, data=smpb)), cette fois-ci on va avoir l intercept qui représente le terme d ordonnée à l origine et «age» qui va représenter la pente. 8
[05:52] Pour avoir les tests associés on tapera simplement summary(m) et on aura un tableau avec les coefficients de régression et les tests t associés ici pour la pente 10.77 et le degré de significativité. 9
[06:11] En fait on a toujours travaillé sur notre data-frame smpb mais la commande lm() permet d utiliser directement une option subset qui revient globalement au subset qu on a effectué ici donc ce test-là. On va recopier simplement cette expression (prof == "sans emploi" prof == "prof.intermediaire" prof == "cadre") 10
[06:29] et on va refaire exactement le même modèle. La seule différence c est que on va travailler avec le tableau d origine donc smp et on va rajouter la commande subset= et on va indiquer ici les options du filtre qu on souhaite réaliser sur notre tableau (m <- lm(n.enfant ~ age, data=smp, subset= prof == "sans emploi" prof == "prof.intermediaire" prof == "cadre")). Si on produit le résumé du modèle de régression, on vérifie qu on a bien le même résultat. Donc l intérêt ici, c est que l on peut utiliser à la fois une notation par formule, on décrit la relation entre le nombre d enfants qui est la variable de réponse et l âge qui est la variable explicative, ces variables se trouvent dans le data-frame qui s appelle smp. Par contre ce data-frame-là va être filtré selon les critères qui sont indiqués (dans la commande) dans l option subset. Donc en particulier on ne va s intéresser qu aux individus qui remplissent les conditions profession égal soit sans emploi, soit profession intermédiaire, soit cadre. 11
[07:29] Lorsqu on a un modèle de régression, on peut utiliser la commande coef() pour afficher les coefficients du modèle de régression et on peut éventuellement indexer ces coefficients par le numéro de position donc coef du modèle entre crochets 2 (coef(m)[2]), c est le deuxième élément renvoyé par la commande coef(). Ça correspond donc à la pente. Ici on s aperçoit que la pente, on pourrait directement l appeler «age» comme on avait fait pour indexer des variables dans un data-frame (coef(m)["age"]) et on obtient le coefficient de régression associé à la variable «age» dans le modèle de régression simple présenté précédemment. 12
[08:06] On peut utiliser pour obtenir les intervalles de confiance en utilisant la commande confint() donc toujours sur la variable dans laquelle on a stocké notre modèle de régression, donc ici les intervalles de confiance à 95% par défaut pour la pente sont indiqués sur la deuxième ligne et on peut également obtenir un tableau d analyse de variance associé à la régression à l aide de la commande anova(). 13
[08:32] Lorsque l on souhaite réaliser des prédictions sur des valeurs non nécessairement observées on peut utiliser la commande predict(). Dans ces cas-là on va lui donner le nom de la variable dans laquelle on a stocké notre modèle de régression et un data-frame dans lequel on va indiquer pour la variable qui sert de variable explicative les valeurs pour lesquelles on souhaite effectuer la prédiction. Si on souhaite avoir des intervalles de confiance pour la prédiction on rajoutera l option interval="confidence" (predict(m, data.frame(age=c(20, 30, 40)), interval="confidence")). On a dans ces cas-là sous la colonne «fit» les valeurs prédites et «lwr», «upr» représentent les bornes inférieures et supérieures des intervalles de confiance à 95% pour la prévision. 14
[09:18] En dehors de la régression linéaire, on peut s intéresser à la régression logistique. Dans ces cas-là on prendra par exemple une variable binaire. On va en construire une à partir de nombre d enfants. On va s intéresser au nombre d enfants supérieur à 2. Dans ces cas-là on codera 1 sinon on code 0 et là j ai juste oublié qu il faut rajouter l instruction ifelse() qui permet de construire la variable binaire (smp$n.enfant.bin <- factor(ifelse(smp$n.enfant > 2, 1, 0))), donc la commande ifelse() prend une variable sur laquelle on réalise un test logique donc «est-ce-que le nombre d enfants est supérieur à deux?» Dans ces cas-là on associe la valeur 1 sinon on associe la valeur 0. On a maintenant un moyen de comparer très rapidement qu on s est pas trompé. Il suffit simplement d afficher les deux tableaux (table(smp$n.enfant) table(smp$n.enfant.bin)). Donc en fait les individus pour lesquels le nombre d enfants n est pas supérieur à 2 sont ici et le reste se trouve ici. Donc ça ce sont les individus pour lesquels on a associé la valeur 1, donc il y en a 214. 15
[10:25] On a vu la commande lm(), en fait pour la régression logistique c est la commande glm() qu on utilisera avec toujours une notation par formule. La seule différence c est qu il faudra indiquer le type de régression qu on souhaite effectuer. Donc on va utiliser un modèle pareil «m» et on va dire que notre formule ça va être le nombre d enfants en fonction de l âge comme dans le cas de la régression linéaire sauf qu ici on a dichotomisé la variable. On prendra les données dans notre data-frame smp. Cette foisci on va prendre tout le data-frame et ce qu on va indiquer c est qu on veut faire de la régression logistique donc on indiquera dans la famille «binomiale» avec comme échelle de lien le «logit» (m <- glm(n.enfant.bin ~ age, data=smp, family=binomial("logit"))). 16
[11:11] On peut afficher un résumé des coefficients de régression avec la commande summary() et cette fois-ci on a la variable explicative avec la valeur du coefficient de régression sur l échelle du log odds. 17