Chapitre 9 Travailler avec trois ou quatre variables
Ce chapitre réutilise le fameux exemple de Paul Lazarsfeld combinant trois variables. On explore les différentes possibilités en sélectionnant logiquement, puis empiriquement, les relations causales (CR61 à CR66). Avec un exemple de Richard Lefrançois, on examine ensuite un jeu de quatre variables quantitatives (CR68 à CR74) en utilisant la corrélation partielle du package ppcor. Pour aller beaucoup plus loin sur l'analyse à quelques variables, il faut consulter le classique de Raymond Boudon (1967).
#CR63 packages nécessaires: vcd et questionr
Ici, on commence par reconstituer la base à partir des tableaux de Lazarsfeld. Puisqu'il n'y a que trois variables, et deux valeurs par variable, il est facile d'établir les huit possibilités, d'attribuer les fréquences de Lazarsfeld, puis d'obtenir un data.frame complet avec les 2300 observations. Tout le travail sur cette base est ainsi possible.
library(questionr)
library(vcd)
base = data.frame(AGE=c("jeunes", "jeunes",
"jeunes","jeunes","vieux","vieux","vieux","vieux"),
INSTRUCTION=c("inférieures","inférieures", "supérieures","supérieures", "inférieures",
"inférieures","supérieures","supérieures"), EMISSIONS=c("n'écoutent pas",
"écoutent","n'écoutent pas","écoutent","n'écoutent pas",
"écoutent","n'écoutent pas","écoutent"),
frequences=c(292,108,408,192,731,169,192,208))
base = base[rep(row.names(base), base$frequences),]
t1=table(base$EMISSIONS,base$AGE)
addmargins(t1)
cprop(t1)
assocstats(t1)
chisq.test(t1)
Complément: utilisation de la fonction matrix. #CR63 package nécessaire: vcd, questionr (anciennement rgrs)
Dans le code précédent, la base a été reproduite par le jeu des répétitions. Ici, on y va plus simplement, du moins pour un tableau unique. Avec la fonction matrix(), on reproduit le premier tableau (t1). Cela est utile quand on veut travailler un tableau de données déjà construit, sans qu'on ait accès aux données elles-mêmes. Évidemment, les résultats sont identiques! Particulièrement utile pour les méta-analyses.
library(vcd)
library(questionr)
tt=matrix(c(300,700,377,923), nrow=2)
colnames(tt)=c("jeunes", "vieux")
rownames(tt)=c("écoutent", "n'écoutent pas")
addmargins(tt)
cprop(tt)
assocstats(tt)
chisq.test(tt)
#CR64 packages nécessaires: vcd et questionr
library(vcd)
library(questionr)
base = data.frame(AGE=c("jeunes", "jeunes",
"jeunes","jeunes","vieux","vieux","vieux","vieux"),
INSTRUCTION=c("inférieures","inférieures", "supérieures","supérieures", "inférieures",
"inférieures","supérieures","supérieures"), EMISSIONS=c("n'écoutent pas",
"écoutent","n'écoutent pas","écoutent","n'écoutent pas",
"écoutent","n'écoutent pas","écoutent"),
frequences=c(292,108,408,192,731,169,192,208))
base = base[rep(row.names(base), base$frequences),]
t1=table(base$EMISSIONS,base$INSTRUCTION)
t1
addmargins(t1)
cprop(t1)
assocstats(t1)
chisq.test(t1)
#CR65 packages nécessaires: vcd et questionr
library(vcd)
library(questionr)
base = data.frame(AGE=c("jeunes", "jeunes",
"jeunes","jeunes","vieux","vieux","vieux","vieux"),
INSTRUCTION=c("inférieures","inférieures", "supérieures","supérieures", "inférieures",
"inférieures","supérieures","supérieures"), EMISSIONS=c("n'écoutent pas",
"écoutent","n'écoutent pas","écoutent","n'écoutent pas",
"écoutent","n'écoutent pas","écoutent"),
frequences=c(292,108,408,192,731,169,192,208))
base = base[rep(row.names(base), base$frequences),]
t1=table(base$INSTRUCTION,base$AGE)
addmargins(t1)
cprop(t1)
chisq.test(t1)
assocstats(t1)
#CR66 packages nécessaires: vcd et questionr
library(vcd)
library(questionr)
base = data.frame(AGE=c("jeunes", "jeunes",
"jeunes","jeunes","vieux","vieux","vieux","vieux"),
INSTRUCTION=c("inférieures","inférieures", "supérieures","supérieures", "inférieures",
"inférieures","supérieures","supérieures"), EMISSIONS=c("n'écoutent pas",
"écoutent","n'écoutent pas","écoutent","n'écoutent pas",
"écoutent","n'écoutent pas","écoutent"),
frequences=c(292,108,408,192,731,169,192,208))
base = base[rep(row.names(base), base$frequences),]
base1=subset(base, base$INSTRUCTION=="inférieures")
t1= table(base1$EMISSIONS,base1$AGE)
addmargins(t1)
cprop(t1)
assocstats(t1)
chisq.test(t1)
#CR67 packages nécessaires: vcd et questionr
library(questionr)
library(vcd)
base = data.frame(AGE=c("jeunes", "jeunes",
"jeunes","jeunes","vieux","vieux","vieux","vieux"),
INSTRUCTION=c("inférieures","inférieures", "supérieures","supérieures", "inférieures",
"inférieures","supérieures","supérieures"), EMISSIONS=c("n'écoutent pas",
"écoutent","n'écoutent pas","écoutent","n'écoutent pas",
"écoutent","n'écoutent pas","écoutent"),
frequences=c(292,108,408,192,731,169,192,208))
base = base[rep(row.names(base), base$frequences),]
base2=subset(base, base$INSTRUCTION=="supérieures")
t2= table(base2$EMISSIONS,base2$AGE)
addmargins(t2)
cprop(t2)
assocstats(t2)
chisq.test(t2)
#CR68
base = data.frame(AGE=c(0, 0, 0,0,1,1,1,1),
INSTRUCTION=c(0,0,1,1,0,0,1,1), EMISSIONS=c(0,1,0,1,0,1,0,1),
frequences=c(292, 108, 408,192,731,169,192,208))
base = base[rep(row.names(base), base$frequences),]
base$frequences=NULL
round(cor(base),3)
#CR69 package nécessaire: pwr
library(pwr)
pwr.r.test(r=-.29,n=2300,sig.level=.05,alternative="less")
pwr.r.test(r=.20,n=2300,sig.level=.05,alternative="greater")
#CR70
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
base
#CR71
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
base
summary(base)
#CR72
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
round(cor(base),3)
round(cor(base)^2,3)
#CR73
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
base
plot(base, main="Graphiques des relations entre les variables")
#CR74 package nécessaire: ppcor
library(ppcor)
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
pcor.test(base$sante,base$bienetre,base$age )
pcor.test(base$sante,base$bienetre,base$mobilite)
pcor.test(base$mobilite,base$bienetre,base$sante)
#CR75 package nécessaire: ppcor
library(ppcor)
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
round(pcor(base)$estimate,2)
round(pcor(base)$p.value,2)
#CR76 package nécessaire: pwr
library(pwr)
bienetre=c(17,14,16,11,10,15,14,17,8,7,15,15,18,12,13)
sante=c(17,13,15,10,12,16,14,18,7,8,15,14,19,13,14)
age=c(69,65,73,65,75,66,68,70,70,67,77,68,85,75,68)
mobilite=c(18,12,16,9,13,17,15,19,6,8,16,15,18,12,13)
base=data.frame(bienetre,sante, age,mobilite)
pwr.r.test(r=.66,n=15,sig.level=.05,alternative="less")
pwr.r.test(r=.79,n=15,sig.level=.05,alternative="greater")