Ce document est un des éléments du Séminaire r pour la recherche en sciences sociales donné à l’Université Paris Nanterre, dans le cadre du programme doctoral de l’Ecole Doctorale EOS. Il synthètise l’ensemble des techniques statistiques et programmatiques (en r)qui seront examinées dans ce séminaire et constituent le socle d’une culture statistique doctorale : statistiques descriptives et graphiques, modèles factoriels, analyses de variance, régressions, modèles SEM, test d’hypothèse et puissance de test.
Il est organisé non pas par un ordre croissant de complexité des techniques, mais par l’ordre naturel d’un jeu de données, celui de l’ESS, qui depuis 2002, interroge des européens tout les deux ans, sur leur sentiment de bonheur, de confiance dans les institutions , de confiance envers les autres, et des valeurs auxquelles ils adhèrent.
Audelà des éléments méthodologiques et techniques, le jeu de données que cet atelier emploie ouvre à une réflexion sur l’évolution des sociétés européennes des quinze dernières années. Avec toutes les réserves néçessaires, il faudra tenir les résultats obtenus comme bien plus que des illustrations, ils donnent des indications sur des évolutions réelles de notre société. Il reste à trouver la bonne lunette théorique pour les analyser.
Ce document est un laboratoire, il evoluera à mesure qu’on le pratiquera avec nos étudiants qui sont incités à se l’approprier en partie ou en entier, à le copier, le modifier et l’adapter à leurs envies et leurs besoins. (on va bientôt coller une licence copy left ;)
Les critiques, les conseils, les suggestions, les commentaires sont bienvenus en DM sur (???)(https://twitter.com/benavent)
Naturellement une introduction à l’univers r et son eco-système : un langage r, un espace de travail Rstudio, les packages et leurs communautés, des plateformes de données.
Ils sont à installer au préalable. Le document est en markdown rédigé avec les ressources de bookdown
, dont trouvera un très bon memento
knitr::opts_chunk$set(echo = TRUE,include=TRUE,warning=FALSE,message=FALSE)
library(haven) #pour lire des fichiers spss
library(Rcmdr) #bouée de sauvetage pour ceux qui savent pas coder
library(bookdown) #plus que markdown
library(bookdownplus) #plus que bookdown
library(reshape2) #pour ggplot library(ggplot2) #graphiques
library(tidyverse) # pour tout : graphiques et pipe de données
library(knitr) # pour les jolis tableaux ci dessous mais c'est ce qui tricote ce carnet de recherche
library(kableExtra) # pour de jolis tableaux
#library(ggplot2) # desomrais inutile si on lance tidyverse
library(psych) #alpha de crombach et factor analysis
library(GPArotation) #en complement du précédent
library(sjstats) #calcul de taille des effets et puissance de test
pal <-c("#3B9AB2", "#EBCC2A" , "#F8AFA8" , "#C25B56", "#9A8822","#0B775E","#FEE1AE","#E8AEA8")
Source : European Social Survey
On travaille sur une petite partie de la base définie par les extractions suivantes (les données de 2016 ne sont pas intégrées à la base générale 2002-2014, ce qui est fait ici).
Le fichier de données a été préparé au préalable. On le téléchargera ici
#library(haven) nécessaire
ESS1_7e01 <- read_sav("~/Bonheur master/ConfianceFrance/ESS1-7e01.sav")
T1<-subset(ESS1_7e01, select=c("trstprl", "trstlgl", "trstplc", "trstplt", "trstprt" ,"trstep","trstun",
"ppltrst","pplfair","pplhlp","essround","vote",
"happy","stflife","health","edulvlb","eisced","eduyrs",
"hincfel","hinctnta","lrscale","yrbrn"),cntry=="FR")
ESS8e01 <- read_sav("~/Bonheur master/ConfianceFrance/ESS8e01.sav")
T2<-subset(ESS8e01, select=c("trstprl", "trstlgl", "trstplc", "trstplt", "trstprt" ,"trstep","trstun",
"ppltrst","pplfair","pplhlp","essround","vote",
"happy","stflife","health","edulvlb","eisced","eduyrs",
"hincfel","hinctnta", "lrscale","yrbrn"),cntry=="FR")
T<-rbind(T1,T2)
Les pondérations proposées par l’ESS ne sont pas utilisées dans ces analyses car l’objectif n’est pas d’obtenir une bonne estimation des valeurs mais de les comparer pour des groupes distincts, tout en restant dans des manipulations simples. Il vaudrait mieux cependant les appliquer! pour une discussions détaillée voir : weighting schemes.
On appréciera donc les résultats suivants (moyennes, distribution, et tests d’hypothèses) comme relatif à l’échantillon et pas tout à fait de la population.
A faire : comparaison de quelques distributions clés : genre, age, education entre l’échantillon et la population.
Les items de la confiance institutionnelle sont formulés de manière générique :
*“how much you personally trust each of the institutions” :
Le gouvernement n’est pas dans les items, la confiance en celui-ci est sans doute affectée fortement par la conjoncture. On peut s’interroger aussi sur son caractère institutionnel.le gouvernement comme ensemble de ministres n’est pas le gouvernement comme instance.
On recode, pour des raisons de commodité, les variables sélectionnées suivantes pour analyser la variabilité des composantes de la confiance institutionnelles :
T$Year[T$essround==1]<-2002
T$Year[T$essround==2]<-2004
T$Year[T$essround==3]<-2006
T$Year[T$essround==4]<-2008
T$Year[T$essround==5]<-2010
T$Year[T$essround==6]<-2012
T$Year[T$essround==7]<-2014
T$Year[T$essround==8]<-2016
T$Year<-as.factor(T$Year)
names(T)[names(T)=="trstun"] <- "NationsUnies"
names(T)[names(T)=="trstep"] <- "ParlementEurop"
names(T)[names(T)=="trstlgl"] <- "Justice"
names(T)[names(T)=="trstplc"] <- "Police"
names(T)[names(T)=="trstplt"] <- "Politiques"
names(T)[names(T)=="trstprl"] <-"Parlement"
names(T)[names(T)=="trstprt"] <- "Partis"
names(T)[names(T)=="ppltrst"] <- "Confiance"
names(T)[names(T)=="pplhlp"] <-"Equitable"
names(T)[names(T)=="pplfair"] <- "Aide"
T$vote2[T$vote==1]<-"Oui"
T$vote2[T$vote==2]<-"Non"
T$vote2[T$vote==3]<-"Pas de droit"
T$revenu[T$hincfel==1] <- "Vie confortable"
T$revenu[T$hincfel==2] <- "Se débrouille avec son revenu"
T$revenu[T$hincfel==3] <- "Revenu insuffisant"
T$revenu[T$hincfel==4] <- "Revenu insuffisant"
T$revenu<-as.factor(T$revenu)
T$quintileR[T$hinctnta==1] <- "1 10% les plus pauvres"
T$quintileR[T$hinctnta==2] <- "2 50% sous la médiane"
T$quintileR[T$hinctnta==3] <- "2 50% sous la médiane"
T$quintileR[T$hinctnta==4] <- "2 50% sous la médiane"
T$quintileR[T$hinctnta==5] <- "2 50% sous la médiane"
T$quintileR[T$hinctnta==6] <- "3 entre 50% et 70%"
T$quintileR[T$hinctnta==7] <- "3 entre 50% et 70%"
T$quintileR[T$hinctnta==8] <- "4 entre 70% et 90%"
T$quintileR[T$hinctnta==9] <- "4 entre 70% et 90%%"
T$quintileR[T$hinctnta==10] <- "5 10% les plus riches"
T$quintileR<-as.factor(T$quintileR)
T$happy<-as.numeric(T$happy)
T$Bonheur[T$happy==1]<-"Malheureux"
T$Bonheur[T$happy==2]<-"Malheureux"
T$Bonheur[T$happy==3]<-"Malheureux"
T$Bonheur[T$happy==4]<-"Malheureux"
T$Bonheur[T$happy==5]<-"Peu heureux"
T$Bonheur[T$happy==6]<-"Peu heureux"
T$Bonheur[T$happy==7]<-"Plutôt heureux"
T$Bonheur[T$happy==8]<-"Plutôt heureux"
T$Bonheur[T$happy==9]<-"Très heureux"
T$Bonheur[T$happy==10]<-"Très heureux"
T$eisced<-as.factor(T$eisced)
T$education[T$eisced==0]<-NA
T$education[T$eisced==1]<-"1 Primary education"
T$education[T$eisced==2]<-"2 Lower secondary "
T$education[T$eisced==3]<-"3 Upper secondary "
T$education[T$eisced==4]<-"4 Post-secondary non-tertiary"
T$education[T$eisced==5]<-"5 Short-cycle tertiary"
T$education[T$eisced==6]<-"6 Bachelor"
T$education[T$eisced==7]<-"7 Master"
T$education[T$eisced==8]<-"8 Doctoral"
T$OP[T$lrscale==0] <- "1 Très à gauche"
T$OP[T$lrscale==1] <- "1 Très à gauche"
T$OP[T$lrscale==2] <- "2 Gauche"
T$OP[T$lrscale==3] <- "2 Gauche"
T$OP[T$lrscale==4] <- "2 Gauche"
T$OP[T$lrscale==5] <- "3 Ni G ni D"
T$OP[T$lrscale==6] <- "4 Droite"
T$OP[T$lrscale==7] <- "4 Droite"
T$OP[T$lrscale==8] <- "4 Droite"
T$OP[T$lrscale==9] <- "7 Très à droite"
T$OP[T$lrscale==10] <- "7 Très à droite"
T$OP<-as.factor(T$OP)
Dans cette section on va faire des comparaisons systématiques et graphiques avec ggplot
. On trouvera dans R for datascience un excellent chapitre d’introduction à la Data Visualisation
On représente d’abord l’évolution de la répartition du facteur étudié au cours du temps. Puis on représente les évolutions de chacun des indicateurs de confiance institutionnelle pour chacune des modalités du facteur étudié.
Dans un premier temps on produit la table qui croise les catégories de niveaux de bonheur
et les vagues d’enquête : Year
. On utilise l’opérateur %>%
du tidyverse
, qui passe (pipe) l’objet à gauche dans l’objet à droite. le tableau obtenu TabEv
. On notera d’emblée l’utilisation ( très simple) de Kable
et KableExtra
pour éditer la table. On se reportera à cette page pour plus de détail sur la syntaxe.
TabEv <- with(T, table(Bonheur, Year)) %>% prop.table(margin = 2) #création de la page en tidy
TabEv %>% kable(digit=2,format = "html", caption = "Evolution de la répartition des niveaux de bonheur") %>% kable_styling(bootstrap_options = c("striped", "hover"),full_width =F,font_size = 9) # édition de la table avec kable
2002 | 2004 | 2006 | 2008 | 2010 | 2012 | 2014 | 2016 | |
---|---|---|---|---|---|---|---|---|
Malheureux | 0.05 | 0.06 | 0.06 | 0.06 | 0.07 | 0.06 | 0.06 | 0.06 |
Peu heureux | 0.22 | 0.23 | 0.23 | 0.24 | 0.26 | 0.24 | 0.22 | 0.21 |
Plutôt heureux | 0.46 | 0.48 | 0.52 | 0.51 | 0.50 | 0.51 | 0.52 | 0.51 |
Très heureux | 0.27 | 0.23 | 0.20 | 0.19 | 0.17 | 0.20 | 0.20 | 0.22 |
Pour le graphique, on isole d’abord nos variables, puis on exécute un ggplot en mettant en x (abcisse) la variable Year
,on remplit les barres en les cumulant avec les effectifs des modalités de la variableBonheur
Vdf<-subset(T,select=c(Year,Bonheur))
ggplot(Vdf,aes(x = Year,fill=Bonheur))+geom_bar(position="fill")+scale_fill_manual(values=pal)
Dans le troisième temps , il s’agit de représenter l’évolution (Year
en abscisse) pour chacun des critères de confiance (échelle de 1 à 10) et chacun des niveaux de Bonheur
.
On construit les données à représenter en aggrégant les 7 critères de confiance par vagues d’enquête Year
et modalité de Bonheur
. Dans la seconde ligne on utilise la fonction melt
qui transforme un fichier “large” (individu- variable 1 - variable 2- …) en un fichier long ( individu - variable - valeur de la variable).( Pour plus de détails ) utilisable par ggplot
.
Ty<- aggregate(cbind(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies) ~Year+Bonheur, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","Bonheur")) #from reshape2
#les éléments de construction
g<-ggplot(Tym,aes(x=Year,y=value,group=Bonheur))+geom_line(aes(colour = Bonheur),size=1.5)+ facet_grid(cols = vars(variable))
# la labelisation
g<-g+labs(title="Evolution de la confiance dans les institutions", subtitle="et par niveau de bonheur", x = "Années", y= "degré de confiance (de 1 à 10)",caption="Source: European Social Survey - France vagues 1 à 7")
#des ajustements .
g<-g+ theme(axis.text.x =element_text(angle = 45, hjust = 1,size=8))+scale_color_manual(values=pal)
g
La distribution du bonheur semble assez stable sur la période avec en 2010 un accroissement de la proportion des moins heureux. Un petit quart s’estime très heureuse et une moitié le sont assez.
Le degré de confiance est d’autant moins élevé qu’on ne se sent pas heureux, on observera la faible différence entre les très heureux et les plutôt heureux (audelà d’un certain niveau de bonheur la confiance ne s’accroît plus) et surtout les évolutions contrastées : accroissement pour la police, réduction pour les politiques.
Il est demandé aux enquêtés s’ils ont voté aux dernières élections avant l’enquête.On s’apercoit de l’accroissement régulier de l’absentéisme électoral passant de 23% dans la période 2002 à 2008 à plus de 30% de 2012 à 2016. Les votants sont plus heureux que les non-votants, les sans droits semblent avoir plus confiance que tout les autres. Les étrangers ( et mineurs ?) auraient-ils plus confiance que les citoyens dans nos institutions?
TabEv <- with(T, table(vote2, Year)) %>% prop.table(margin = 2) #création de la page en tidy
TabEv %>% kable(digit=2) %>% kable_styling(full_width =F) # édition de la table avec kable
2002 | 2004 | 2006 | 2008 | 2010 | 2012 | 2014 | 2016 | |
---|---|---|---|---|---|---|---|---|
Non | 0.25 | 0.21 | 0.19 | 0.2 | 0.25 | 0.19 | 0.28 | 0.28 |
Oui | 0.75 | 0.69 | 0.68 | 0.7 | 0.64 | 0.72 | 0.61 | 0.60 |
Pas de droit | 0.00 | 0.10 | 0.13 | 0.1 | 0.10 | 0.09 | 0.11 | 0.13 |
Vdf<-subset(T,select=c(Year,vote2))
ggplot(Vdf,aes(x = Year,fill=vote2))+geom_bar(position="fill")+scale_fill_manual(values=pal)
Ty<- aggregate(cbind(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies) ~Year+vote2, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","vote2"))
#les éléments de construction
g<-ggplot(Tym,aes(x=Year,y=value,group=vote2))+geom_line(aes(colour = vote2),size=1.5)+ facet_grid(cols = vars(variable))
# la labelisation
g<-g+labs(title="Evolution de la confiance dans les institutions", subtitle="et participation aux dernières élections", x = "Années", y= "degré de confiance (de 1 à 10)",caption="Source: European Social Survey - France - vagues 1 à 8")
#des ajustements de couleur et de position.
g<-g+ theme(axis.text.x =element_text(angle = 45, hjust = 1))+scale_color_manual(values=pal)
g
On retrouve les évolutions précédentes avec une hierachie de ressources : les plus diplômés ont une plus grande confiance que les non diplômés. Mais surtout une forte variance sur les items relatifs aux instances délibératives. Les partis sont l’objet d’une défiance plus homogène.
TabEv <- with(T, table(education, Year)) %>% prop.table(margin = 2) #création de la page en tidy
TabEv %>% kable(digit=2) %>% kable_styling(full_width =F) # édition de la table avec kable
2002 | 2004 | 2006 | 2008 | 2010 | 2012 | 2014 | 2016 | |
---|---|---|---|---|---|---|---|---|
1 Primary education | NaN | NaN | 0.18 | 0.19 | 0.20 | 0.20 | 0.15 | 0.18 |
2 Lower secondary | NaN | NaN | 0.13 | 0.15 | 0.09 | 0.09 | 0.09 | 0.08 |
3 Upper secondary | NaN | NaN | 0.25 | 0.19 | 0.25 | 0.25 | 0.24 | 0.25 |
4 Post-secondary non-tertiary | NaN | NaN | 0.18 | 0.17 | 0.19 | 0.18 | 0.17 | 0.17 |
5 Short-cycle tertiary | NaN | NaN | 0.12 | 0.12 | 0.12 | 0.13 | 0.14 | 0.14 |
6 Bachelor | NaN | NaN | 0.09 | 0.09 | 0.04 | 0.04 | 0.06 | 0.04 |
7 Master | NaN | NaN | 0.05 | 0.09 | 0.12 | 0.11 | 0.15 | 0.13 |
Vdf<-subset(T,select=c(Year,education))
ggplot(Vdf,aes(x = Year,fill=education))+geom_bar(position="fill")+scale_fill_manual(values=pal)
Ty<- aggregate(cbind(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies) ~Year+education, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","education"))
#les éléments de construction
g<-ggplot(Tym,aes(x=Year,y=value,group=education))+geom_line(aes(colour = education),size=1.5)+ facet_grid(cols = vars(variable))
# la labelisation
g<-g+labs(title="Evolution de la confiance dans les institutions", subtitle="et par niveau d'éducation", x = "Années", y= "degré de confiance (de 1 à 10)",caption="Source: European Social Survey - France vagues 1 à 7")
#des ajustements de couleur et de position.
g<-g+ theme(axis.text.x =element_text(angle = 45, hjust = 1))+scale_colour_brewer()
g
Les conditions de vie perçus se définissent au travers de l’appréciation relative des revenus : couvrent-ils nos dépenses ? et de la répartition par quintile du revenu des ménages.
L’évolution est à la hausse pour ceux qui le revenu est insuffisant pour couvrir les besoins : on passe de 15.5% à 19.5% sur la période. La proportion qui estime avoir une vie confortable oscille autour de 30%. Ceux qui se débrouillent voient leur part se réduire de 54% à 50%. Le degré d’inégalité semble s’être accru.
TabEv <- with(T, table(revenu, Year)) %>% prop.table(margin = 2) #création de la page en tidy
TabEv %>% kable(digit=3) %>% kable_styling(full_width =F) # édition de la table avec kable
2002 | 2004 | 2006 | 2008 | 2010 | 2012 | 2014 | 2016 | |
---|---|---|---|---|---|---|---|---|
Revenu insuffisant | NaN | NaN | 0.164 | 0.155 | 0.180 | 0.189 | 0.204 | 0.189 |
Se débrouille avec son revenu | NaN | NaN | 0.543 | 0.514 | 0.515 | 0.526 | 0.476 | 0.503 |
Vie confortable | NaN | NaN | 0.293 | 0.332 | 0.304 | 0.284 | 0.320 | 0.308 |
Vdf<-subset(T,select=c(Year,revenu))
ggplot(Vdf,aes(x = Year,fill=revenu))+geom_bar(position="fill")+scale_fill_manual(values=pal)
Ty<- aggregate(cbind(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies) ~Year+revenu, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","revenu"))
#les éléments de construction
g<-ggplot(Tym,aes(x=Year,y=value,group=revenu))+geom_line(aes(colour = revenu),size=1.5)+ facet_grid(cols = vars(variable))
# la labelisation
g<-g+labs(title="Evolution de la confiance dans les institutions", subtitle="et par niveau de revenu", x = "Années", y= "degré de confiance (de 1 à 10)",caption="Source: European Social Survey - France vagues 1 à 7")
#des ajustements de couleur et de position.
g<-g+ theme(axis.text.x =element_text(angle = 45, hjust = 1))+scale_colour_brewer(palette = "Greens")
g
En terme de niveau de niveau de vie, le phénomène se confirme, avec une nuance, le 5 quintile, les plus aisés sont à un niveau bien plus élevés que les autres. Les partis sont encore l’objet d’une défiance homogène.
Tna<-subset(T,select=c(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies,Year,quintileR))
Tna$na_count <- apply(Tna, 1, function(x) sum(is.na(x)))
Tna<-subset(Tna,na_count==0)
TabEv <- with(Tna, table(quintileR, Year)) %>% prop.table(margin = 2) #création de la page en tidy
TabEv %>% kable(digit=2) %>% kable_styling(full_width =F) # édition de la table avec kable
2002 | 2004 | 2006 | 2008 | 2010 | 2012 | 2014 | 2016 | |
---|---|---|---|---|---|---|---|---|
1 10% les plus pauvres | NaN | NaN | NaN | 0.08 | 0.16 | 0.14 | 0.12 | 0.14 |
2 50% sous la médiane | NaN | NaN | NaN | 0.35 | 0.47 | 0.47 | 0.41 | 0.44 |
3 entre 50% et 70% | NaN | NaN | NaN | 0.23 | 0.18 | 0.20 | 0.22 | 0.19 |
4 entre 70% et 90% | NaN | NaN | NaN | 0.12 | 0.08 | 0.07 | 0.09 | 0.11 |
4 entre 70% et 90%% | NaN | NaN | NaN | 0.11 | 0.07 | 0.06 | 0.08 | 0.07 |
5 10% les plus riches | NaN | NaN | NaN | 0.11 | 0.05 | 0.05 | 0.07 | 0.05 |
Vdf<-subset(Tna,select=c(Year,quintileR))
ggplot(Vdf,aes(x = Year,fill=quintileR))+geom_bar(position="fill")+scale_fill_manual(values=pal)
Ty<- aggregate(cbind(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies) ~Year+quintileR, data=Tna, FUN=mean)
Tym<-melt(Ty, id=c("Year","quintileR"))
#les éléments de construction
g<-ggplot(Tym,aes(x=Year,y=value,group=quintileR))+geom_line(aes(colour = quintileR),size=1.5)+ facet_grid(cols = vars(variable))
# la labelisation
g<-g+labs(title="Evolution de la confiance dans les institutions", subtitle="et par niveau de revenu", x = "Années", y= "degré de confiance (de 1 à 10)",caption="Source: European Social Survey - France vagues 1 à 7")
#des ajustements de couleur et de position.
g<-g+ theme(axis.text.x =element_text(angle = 45, hjust = 1))+scale_colour_brewer()
g
On change un peu la représentation en intervertissant l’année par l’orientation politique sur l’axe des abcisses. Ceci permet de rendre plus saillant une forme régulière en M : La confiance est systématiquement plus faible aux extrêmes de l’échelle politique, elle s’affaiblit aussi pour ceux qui occupent une position centrale. C’est un effet de l’ambiguité de l’échelle qui dans sa mediane ne distinguent pas les centristes de ceux qui se refuse à être classé ou de gauche ou de droite et forment le groupe majoritaire.
On constate aussi l’évolution et noatmment le décrochage pour les hommes politiques et les partis des deux dernières vagues. IL s’est passé quelques chose après 2012.
On remarque aussi que le M s’affaisse sur sa droite : ce serait la désillusion de ceux de droite, à gauche les niveaux de confiance institutionnel semble se maintenir
T$OP<-as.factor(T$OP)
TabEv <- with(T, table(OP, Year)) %>% prop.table(margin = 2) #création de la page en tidy
TabEv %>% kable(digit=2) %>% kable_styling(full_width =F) # édition de la table avec kable
2002 | 2004 | 2006 | 2008 | 2010 | 2012 | 2014 | 2016 | |
---|---|---|---|---|---|---|---|---|
1 Très à gauche | 0.10 | 0.08 | 0.08 | 0.09 | 0.09 | 0.09 | 0.07 | 0.07 |
2 Gauche | 0.30 | 0.31 | 0.30 | 0.29 | 0.31 | 0.27 | 0.29 | 0.27 |
3 Ni G ni D | 0.28 | 0.30 | 0.31 | 0.28 | 0.31 | 0.28 | 0.27 | 0.29 |
4 Droite | 0.25 | 0.24 | 0.26 | 0.30 | 0.24 | 0.27 | 0.29 | 0.29 |
7 Très à droite | 0.07 | 0.05 | 0.06 | 0.04 | 0.05 | 0.08 | 0.08 | 0.08 |
Vdf<-subset(T,select=c(Year,OP))
ggplot(Vdf,aes(x = Year,fill=OP))+geom_bar(position="fill")+scale_fill_manual(values=pal)
Ty<- aggregate(cbind(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies) ~Year+OP, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","OP"))
#les éléments de construction
g<-ggplot(Tym,aes(x=OP,y=value,group=Year))+geom_line(aes(colour = Year),size=1.5)+ facet_grid(cols = vars(variable))
# la labelisation
g<-g+labs(title="Evolution de la confiance pour lesinstitutions", subtitle="et par orientation politique", x = "Années", y= "degré de confiance (de 1 à 10)",caption="Source: European Social Survey - France vagues 1 à 7")
#des ajustements de couleur et de position.
g<-g+ theme(axis.text.x =element_text(angle = 45, hjust = 1))+scale_colour_brewer(palette = "Spectral")
g
L’analyse descripive, même avec peu de variables, fait apparaitre un tableau plus complexe qu’il ne semble, tant dans ses évolutions, sa structure par groupes sociaux, que dans les évolutions contrastés de ses items.
C’est ce qui va être analysé, de manière classique, par différentes méthodes et modèles d’analyse factorielle.
Dans la tradition de Thurstone (1931) et de Churchill (1979), on opte pour une solution à 3 facteurs et une rotation oblique qui conduit souvent rapidement à la solution la plus lisible. Ces trois facteurs couvre 68% de la variance des items. L’analyse des loading montre - un facteur auquel contribuent la justice et la police : on pense au régalien, mais aussi à l’état comme administration ( d’autres items comme la confiance dans le système éducatif auraient pu être employés), mais aussi aux fonctions de l’état du maintien de l’ordre intérieurs. - un second facteur qui concerne des instances internationales et parlementaire. - le troisième est clairement lié à la vie politiques avec ses partis, ses représentants, et le parlement.
Ils sont plutôt fortement intercorrélés, ce qui fait douter de leur structure trifactorielle.
F<-cbind(T$Justice, T$Police, T$Politiques, T$Parlement, T$Partis, T$ParlementEurop,T$NationsUnies)
pa <- fa(F,3,fm="pa" ,rotate="oblimin", SMC=FALSE) #principal axis
print(pa,sort=TRUE)
## Factor Analysis using method = pa
## Call: fa(r = F, nfactors = 3, rotate = "oblimin", SMC = FALSE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
## item PA1 PA3 PA2 h2 u2 com
## 3 3 0.97 -0.05 0.04 0.91 0.087 1.0
## 5 5 0.80 0.11 -0.04 0.75 0.249 1.0
## 4 4 0.36 0.34 0.14 0.54 0.458 2.3
## 6 6 0.10 0.83 -0.04 0.77 0.229 1.0
## 7 7 -0.09 0.75 0.09 0.56 0.445 1.1
## 2 2 0.00 -0.04 0.84 0.67 0.333 1.0
## 1 1 0.10 0.21 0.53 0.55 0.453 1.4
##
## PA1 PA3 PA2
## SS loadings 1.94 1.66 1.15
## Proportion Var 0.28 0.24 0.16
## Cumulative Var 0.28 0.51 0.68
## Proportion Explained 0.41 0.35 0.24
## Cumulative Proportion 0.41 0.76 1.00
##
## With factor correlations of
## PA1 PA3 PA2
## PA1 1.0 0.70 0.50
## PA3 0.7 1.00 0.54
## PA2 0.5 0.54 1.00
##
## Mean item complexity = 1.3
## Test of the hypothesis that 3 factors are sufficient.
##
## The degrees of freedom for the null model are 21 and the objective function was 3.75 with Chi Square of 56361.91
## The degrees of freedom for the model are 3 and the objective function was 0.01
##
## The root mean square of the residuals (RMSR) is 0.01
## The df corrected root mean square of the residuals is 0.03
##
## The harmonic number of observations is 14264 with the empirical chi square 64.09 with prob < 7.9e-14
## The total number of observations was 15051 with Likelihood Chi Square = 201.49 with prob < 2e-43
##
## Tucker Lewis Index of factoring reliability = 0.975
## RMSEA index = 0.066 and the 90 % confidence intervals are 0.059 0.074
## BIC = 172.63
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy
## PA1 PA3 PA2
## Correlation of (regression) scores with factors 0.97 0.92 0.88
## Multiple R square of scores with factors 0.94 0.85 0.77
## Minimum correlation of possible factor scores 0.87 0.70 0.53
alpha(F)
##
## Reliability analysis
## Call: alpha(x = F)
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.88 0.88 0.89 0.51 7.2 0.0015 4.4 1.7 0.49
##
## lower alpha upper 95% confidence boundaries
## 0.87 0.88 0.88
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## V1 0.86 0.86 0.87 0.52 6.4 0.0017 0.020 0.48
## V2 0.88 0.88 0.88 0.55 7.4 0.0015 0.011 0.51
## V3 0.85 0.85 0.84 0.48 5.6 0.0019 0.010 0.48
## V4 0.85 0.86 0.87 0.50 6.0 0.0019 0.017 0.46
## V5 0.85 0.85 0.85 0.49 5.9 0.0019 0.010 0.49
## V6 0.85 0.85 0.86 0.49 5.8 0.0019 0.015 0.46
## V7 0.87 0.87 0.87 0.52 6.6 0.0017 0.017 0.51
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## V1 15008 0.75 0.74 0.68 0.64 4.9 2.4
## V2 15025 0.64 0.63 0.54 0.50 5.9 2.3
## V3 14973 0.82 0.83 0.83 0.75 3.2 2.1
## V4 14809 0.79 0.79 0.74 0.70 4.2 2.3
## V5 13432 0.79 0.80 0.79 0.71 3.1 2.1
## V6 14521 0.81 0.81 0.78 0.73 4.2 2.3
## V7 14539 0.73 0.72 0.65 0.61 5.0 2.4
omega(F)
## Omega
## Call: omega(m = F)
## Alpha: 0.88
## G.6: 0.89
## Omega Hierarchical: 0.77
## Omega H asymptotic: 0.84
## Omega Total 0.92
##
## Schmid Leiman Factor loadings greater than 0.2
## g F1* F2* F3* h2 u2 p2
## V1 0.62 0.52 0.65 0.35 0.59
## V2 0.49 0.50 0.49 0.51 0.48
## V3 0.78 0.59 0.96 0.04 0.64
## V4 0.67 0.20 0.54 0.46 0.84
## V5 0.72 0.45 0.73 0.27 0.72
## V6 0.78 0.49 0.86 0.14 0.72
## V7 0.61 0.34 0.51 0.49 0.75
##
## With eigenvalues of:
## g F1* F2* F3*
## 3.20 0.59 0.39 0.55
##
## general/max 5.44 max/min = 1.49
## mean percent general = 0.68 with sd = 0.12 and cv of 0.17
## Explained Common Variance of the general factor = 0.68
##
## The degrees of freedom are 3 and the fit is 0.01
## The number of observations was 15051 with Chi Square = 131.73 with prob < 2.3e-28
## The root mean square of the residuals is 0.01
## The df corrected root mean square of the residuals is 0.02
## RMSEA index = 0.053 and the 10 % confidence intervals are 0.046 0.061
## BIC = 102.87
##
## Compare this with the adequacy of just a general factor and no group factors
## The degrees of freedom for just the general factor are 14 and the fit is 0.68
## The number of observations was 15051 with Chi Square = 10265.99 with prob < 0
## The root mean square of the residuals is 0.1
## The df corrected root mean square of the residuals is 0.12
##
## RMSEA index = 0.221 and the 10 % confidence intervals are 0.217 0.224
## BIC = 10131.32
##
## Measures of factor score adequacy
## g F1* F2* F3*
## Correlation of scores with factors 0.9 0.77 0.67 0.70
## Multiple R square of scores with factors 0.8 0.60 0.45 0.49
## Minimum correlation of factor score estimates 0.6 0.19 -0.10 -0.02
##
## Total, General and Subset omega for each subset
## g F1* F2* F3*
## Omega total for total scores and subscales 0.92 0.88 0.80 0.73
## Omega general for total scores and subscales 0.77 0.67 0.59 0.39
## Omega group for total scores and subscales 0.11 0.21 0.21 0.33
On peut faire celà de manière plus moderne, avec des méthodes de modèles structurels à variables latentes ( Jöreskog (1969) ). On utilise le package Lavaan
.
On emploie semplot
pour la représentation graphique et semTools
ajustement 1988.224
library(lavaan)
library(semTools)
library(semPlot)
mod <- ' Etat =~ Justice + Police
Politique =~ Parlement + Partis+Politiques
InstInt =~ ParlementEurop + NationsUnies
'
fit1 <- cfa(mod, data = T)
summary(fit1, fit.measures=TRUE, standardized=TRUE)
## lavaan 0.6-3 ended normally after 52 iterations
##
## Optimization method NLMINB
## Number of free parameters 17
##
## Used Total
## Number of observations 12757 15051
##
## Estimator ML
## Model Fit Test Statistic 1988.224
## Degrees of freedom 11
## P-value (Chi-square) 0.000
##
## Model test baseline model:
##
## Minimum Function Test Statistic 48504.966
## Degrees of freedom 21
## P-value 0.000
##
## User model versus baseline model:
##
## Comparative Fit Index (CFI) 0.959
## Tucker-Lewis Index (TLI) 0.922
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -176362.645
## Loglikelihood unrestricted model (H1) -175368.533
##
## Number of free parameters 17
## Akaike (AIC) 352759.290
## Bayesian (BIC) 352886.005
## Sample-size adjusted Bayesian (BIC) 352831.981
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.119
## 90 Percent Confidence Interval 0.114 0.123
## P-value RMSEA <= 0.05 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.047
##
## Parameter Estimates:
##
## Information Expected
## Information saturated (h1) model Structured
## Standard Errors Standard
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Etat =~
## Justice 1.000 2.063 0.867
## Police 0.710 0.012 57.395 0.000 1.465 0.653
## Politique =~
## Parlement 1.000 1.642 0.710
## Partis 1.123 0.012 94.213 0.000 1.844 0.885
## Politiques 1.195 0.012 96.404 0.000 1.962 0.919
## InstInt =~
## ParlementEurop 1.000 2.112 0.907
## NationsUnies 0.811 0.010 80.169 0.000 1.713 0.722
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Etat ~~
## Politique 2.154 0.045 47.770 0.000 0.636 0.636
## InstInt 2.809 0.054 51.581 0.000 0.645 0.645
## Politique ~~
## InstInt 2.635 0.048 54.410 0.000 0.760 0.760
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Justice 1.402 0.064 22.009 0.000 1.402 0.248
## .Police 2.887 0.048 60.740 0.000 2.887 0.574
## .Parlement 2.660 0.037 72.373 0.000 2.660 0.497
## .Partis 0.943 0.019 48.744 0.000 0.943 0.217
## .Politiques 0.704 0.019 36.620 0.000 0.704 0.155
## .ParlementEurop 0.958 0.042 22.719 0.000 0.958 0.177
## .NationsUnies 2.701 0.043 62.791 0.000 2.701 0.479
## Etat 4.258 0.092 46.272 0.000 1.000 1.000
## Politique 2.697 0.060 44.756 0.000 1.000 1.000
## InstInt 4.460 0.078 57.148 0.000 1.000 1.000
#parameterEstimates(fit)
#fitted(fit)
#standardizedSolution(fit)
#c("chisq", "df", "pvalue", "cfi", "rmsea"))
reliability(fit1) # Should provide a warning for the endogenous variables
## Etat Politique InstInt total
## alpha 0.7222828 0.8640826 0.7912275 0.8790880
## omega 0.7436977 0.8732978 0.7999328 0.9140073
## omega2 0.7436977 0.8732978 0.7999328 0.9140073
## omega3 0.7436977 0.8828879 0.7999328 0.8919251
## avevar 0.5988122 0.6978535 0.6689745 0.6595681
semPaths(fit1, what='std', nCharNodes=6, sizeMan=10,style="lisrel",
edge.label.cex=1.25, curvePivot = TRUE, fade=FALSE)
Pour corser l’analyse on choisit un modèle de second ordre. On suppose que la confiance est un concept qui se manifeste dans trois contstruits de premier ordres. Ceux-ci peuvent avoir des sources de variances propres, notamment dues dans notre cas à des jugements spécifiques des institutions.
On obtient un chi² de 1988.2 .
mod <- ' Etat =~ Justice + Police
Politique =~ Parlement + Partis+Politiques
InstInt =~ ParlementEurop + NationsUnies
higher =~ Etat + Politique + InstInt
'
fit2 <- cfa(mod, data = T)
summary(fit2, fit.measures=TRUE, standardized=TRUE)
## lavaan 0.6-3 ended normally after 47 iterations
##
## Optimization method NLMINB
## Number of free parameters 17
##
## Used Total
## Number of observations 12757 15051
##
## Estimator ML
## Model Fit Test Statistic 1988.224
## Degrees of freedom 11
## P-value (Chi-square) 0.000
##
## Model test baseline model:
##
## Minimum Function Test Statistic 48504.966
## Degrees of freedom 21
## P-value 0.000
##
## User model versus baseline model:
##
## Comparative Fit Index (CFI) 0.959
## Tucker-Lewis Index (TLI) 0.922
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -176362.645
## Loglikelihood unrestricted model (H1) -175368.533
##
## Number of free parameters 17
## Akaike (AIC) 352759.290
## Bayesian (BIC) 352886.005
## Sample-size adjusted Bayesian (BIC) 352831.981
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.119
## 90 Percent Confidence Interval 0.114 0.123
## P-value RMSEA <= 0.05 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.047
##
## Parameter Estimates:
##
## Information Expected
## Information saturated (h1) model Structured
## Standard Errors Standard
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Etat =~
## Justice 1.000 2.063 0.867
## Police 0.710 0.012 57.395 0.000 1.465 0.653
## Politique =~
## Parlement 1.000 1.642 0.710
## Partis 1.123 0.012 94.213 0.000 1.844 0.885
## Politiques 1.195 0.012 96.404 0.000 1.962 0.919
## InstInt =~
## ParlementEurop 1.000 2.112 0.907
## NationsUnies 0.811 0.010 80.169 0.000 1.713 0.722
## higher =~
## Etat 1.000 0.734 0.734
## Politique 0.938 0.016 57.098 0.000 0.866 0.866
## InstInt 1.223 0.019 65.629 0.000 0.878 0.878
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Justice 1.402 0.064 22.009 0.000 1.402 0.248
## .Police 2.887 0.048 60.740 0.000 2.887 0.574
## .Parlement 2.660 0.037 72.373 0.000 2.660 0.497
## .Partis 0.943 0.019 48.744 0.000 0.943 0.217
## .Politiques 0.704 0.019 36.620 0.000 0.704 0.155
## .ParlementEurop 0.958 0.042 22.719 0.000 0.958 0.177
## .NationsUnies 2.701 0.043 62.791 0.000 2.701 0.479
## Etat 1.961 0.068 28.931 0.000 0.461 0.461
## Politique 0.676 0.028 24.056 0.000 0.251 0.251
## InstInt 1.025 0.053 19.168 0.000 0.230 0.230
## higher 2.297 0.063 36.542 0.000 1.000 1.000
reliability(fit2) # Should provide a warning for the endogenous variables
## Etat Politique InstInt total
## alpha 0.7222828 0.8640826 0.7912275 0.8790880
## omega 0.7436977 0.8732978 0.7999327 0.9140073
## omega2 0.7436977 0.8732978 0.7999327 0.9140073
## omega3 0.7436976 0.8828877 0.7999327 0.8919249
## avevar 0.5988122 0.6978534 0.6689745 0.6595680
reliabilityL2(fit2, "higher")
## omegaL1 omegaL2 partialOmegaL1
## 0.7979834 0.8623845 0.9027206
semPaths(fit2, what='std', nCharNodes=6, sizeMan=10,style="lisrel",
edge.label.cex=1.0, curvePivot = TRUE, fade=TRUE)
testons un modèle bifactoriel 858.093
Il semble bien meilleur. Les facteurs spécifiques sont lié à la nature internationale des institutions d’une part, et à la catégorie du politique d’autres parts, qui en quelque sorte contamine.
mod <- 'Arene =~ ParlementEurop + NationsUnies+Parlement
General=~ Justice + Police+Parlement + Partis+Politiques+ParlementEurop + NationsUnies
Politique =~ Parlement+Partis+Politiques
General ~~ 0*Arene
General ~~ 0*Politique
Politique ~~ Arene'
fit3 <- cfa(mod, data = T)
fitMeasures(fit3, c("chisq","cfi","rmsea","srmr"))
## chisq cfi rmsea srmr
## 323.094 0.993 0.059 0.011
summary(fit3, fit.measures=TRUE, standardized=TRUE)
## lavaan 0.6-3 ended normally after 87 iterations
##
## Optimization method NLMINB
## Number of free parameters 21
##
## Used Total
## Number of observations 12757 15051
##
## Estimator ML
## Model Fit Test Statistic 323.094
## Degrees of freedom 7
## P-value (Chi-square) 0.000
##
## Model test baseline model:
##
## Minimum Function Test Statistic 48504.966
## Degrees of freedom 21
## P-value 0.000
##
## User model versus baseline model:
##
## Comparative Fit Index (CFI) 0.993
## Tucker-Lewis Index (TLI) 0.980
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -175530.080
## Loglikelihood unrestricted model (H1) -175368.533
##
## Number of free parameters 21
## Akaike (AIC) 351102.160
## Bayesian (BIC) 351258.691
## Sample-size adjusted Bayesian (BIC) 351191.955
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.059
## 90 Percent Confidence Interval 0.054 0.065
## P-value RMSEA <= 0.05 0.002
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.011
##
## Parameter Estimates:
##
## Information Expected
## Information saturated (h1) model Structured
## Standard Errors Standard
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Arene =~
## ParlementEurop 1.000 1.794 0.771
## NationsUnies 0.613 0.018 34.736 0.000 1.100 0.463
## Parlement 0.257 0.013 19.154 0.000 0.461 0.199
## General =~
## Justice 1.000 2.046 0.860
## Police 0.722 0.012 60.504 0.000 1.477 0.659
## Parlement 0.677 0.012 54.896 0.000 1.384 0.598
## Partis 0.537 0.011 49.171 0.000 1.098 0.527
## Politiques 0.604 0.011 53.399 0.000 1.236 0.579
## ParlementEurop 0.649 0.012 52.668 0.000 1.327 0.570
## NationsUnies 0.606 0.012 48.841 0.000 1.239 0.522
## Politique =~
## Parlement 1.000 0.671 0.290
## Partis 2.264 0.071 31.683 0.000 1.518 0.729
## Politiques 2.280 0.072 31.655 0.000 1.529 0.716
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Arene ~~
## General 0.000 0.000 0.000
## General ~~
## Politique 0.000 0.000 0.000
## Arene ~~
## Politique 0.639 0.026 24.141 0.000 0.531 0.531
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .ParlementEurop 0.437 0.075 5.839 0.000 0.437 0.081
## .NationsUnies 2.890 0.045 64.078 0.000 2.890 0.513
## .Parlement 2.452 0.033 73.919 0.000 2.452 0.458
## .Justice 1.476 0.059 25.029 0.000 1.476 0.261
## .Police 2.850 0.046 61.789 0.000 2.850 0.566
## .Partis 0.834 0.027 31.183 0.000 0.834 0.192
## .Politiques 0.689 0.026 26.455 0.000 0.689 0.151
## Arene 3.219 0.091 35.376 0.000 1.000 1.000
## General 4.184 0.088 47.324 0.000 1.000 1.000
## Politique 0.450 0.029 15.617 0.000 1.000 1.000
semPaths(fit3, what='std', nCharNodes=7, sizeMan=9,style="lisrel",layout="tree2",
edge.label.cex=1.0, curvePivot = TRUE, fade=TRUE)
enfin proposons un modèle par pays , on reprend le modèle bifactoriel qui semble le plus adapté. On obtient un chi*isq de 400 un peu inférieur au précédent. L’examen des paramètres fait apparaitre de faible variations. On teste en comparant à un modèle où les paramètre par période sont contraints à être égaux. La dégradation est suffisemment importe pour que le modèle soit plus précis, mais les variations étant faibles, on garde l’hypothèse d’une stabilité de la structure factorielle.
F<-subset(T,select=c(Justice, Police, Politiques, Parlement, Partis, ParlementEurop,NationsUnies,Year))
F$na_count <- apply(F, 1, function(x) sum(is.na(x)))
F<-subset(F,na_count==0)
fit4 <- cfa(mod, data = F,group="Year",estimator="GLS")
fitMeasures(fit4, c("chisq","cfi","rmsea","srmr"))
## chisq cfi rmsea srmr
## 400.092 0.964 0.063 0.012
par<-standardizedSolution(fit4) #sauvegarde des par dans un df
par$parameter<-paste(par$lhs,par$op,par$rhs) #creation de la variable parameter
par<-subset(par,select=c(parameter,group,est.std)) #on retient ce qui nous intéresse
parb<-dcast(par, parameter~group) #on "caste"
parb %>% kable(digit=2) %>% kable_styling(full_width =F) # édition de la table avec kable
parameter | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Arene ~~ Arene | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
Arene ~~ General | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
Arene ~~ Politique | 0.59 | 0.52 | 0.51 | 0.54 | 0.49 | 0.46 | 0.55 |
Arene ~1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
Arene =~ NationsUnies | 0.52 | 0.46 | 0.50 | 0.51 | 0.43 | 0.41 | 0.45 |
Arene =~ Parlement | 0.23 | 0.24 | 0.24 | 0.24 | 0.18 | 0.13 | 0.20 |
Arene =~ ParlementEurop | 0.65 | 0.75 | 0.75 | 0.74 | 0.77 | 0.82 | 0.80 |
General ~~ General | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
General ~~ Politique | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
General ~1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
General =~ Justice | 0.87 | 0.80 | 0.87 | 0.86 | 0.86 | 0.87 | 0.85 |
General =~ NationsUnies | 0.52 | 0.48 | 0.55 | 0.51 | 0.53 | 0.54 | 0.56 |
General =~ Parlement | 0.61 | 0.58 | 0.60 | 0.61 | 0.59 | 0.63 | 0.64 |
General =~ ParlementEurop | 0.59 | 0.53 | 0.60 | 0.60 | 0.58 | 0.58 | 0.59 |
General =~ Partis | 0.58 | 0.49 | 0.51 | 0.55 | 0.55 | 0.54 | 0.54 |
General =~ Police | 0.69 | 0.67 | 0.71 | 0.73 | 0.67 | 0.68 | 0.60 |
General =~ Politiques | 0.62 | 0.57 | 0.59 | 0.61 | 0.60 | 0.60 | 0.58 |
Justice ~~ Justice | 0.24 | 0.36 | 0.25 | 0.26 | 0.26 | 0.24 | 0.28 |
Justice ~1 | 2.04 | 2.09 | 2.12 | 2.06 | 2.15 | 2.08 | 2.07 |
NationsUnies ~~ NationsUnies | 0.46 | 0.55 | 0.44 | 0.47 | 0.54 | 0.53 | 0.49 |
NationsUnies ~1 | 2.00 | 2.13 | 2.27 | 2.16 | 2.27 | 2.14 | 1.96 |
Parlement ~~ Parlement | 0.43 | 0.48 | 0.46 | 0.43 | 0.47 | 0.46 | 0.43 |
Parlement ~1 | 1.90 | 1.90 | 2.00 | 1.79 | 1.79 | 1.65 | 1.75 |
ParlementEurop ~~ ParlementEurop | 0.23 | 0.16 | 0.08 | 0.09 | 0.07 | -0.02 | 0.02 |
ParlementEurop ~1 | 1.91 | 1.93 | 1.99 | 1.84 | 1.80 | 1.64 | 1.58 |
Partis ~~ Partis | 0.18 | 0.21 | 0.27 | 0.16 | 0.22 | 0.16 | 0.14 |
Partis ~1 | 1.64 | 1.55 | 1.67 | 1.46 | 1.51 | 1.30 | 1.37 |
Police ~~ Police | 0.52 | 0.55 | 0.49 | 0.47 | 0.55 | 0.54 | 0.64 |
Police ~1 | 2.55 | 2.58 | 2.58 | 2.42 | 2.69 | 2.84 | 3.02 |
Politique ~~ Politique | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
Politique ~1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
Politique =~ Parlement | 0.28 | 0.25 | 0.26 | 0.26 | 0.31 | 0.31 | 0.27 |
Politique =~ Partis | 0.69 | 0.74 | 0.68 | 0.73 | 0.69 | 0.74 | 0.75 |
Politique =~ Politiques | 0.70 | 0.70 | 0.71 | 0.71 | 0.71 | 0.70 | 0.73 |
Politiques ~~ Politiques | 0.13 | 0.18 | 0.15 | 0.12 | 0.15 | 0.15 | 0.13 |
Politiques ~1 | 1.65 | 1.60 | 1.67 | 1.45 | 1.51 | 1.30 | 1.37 |
fit5 <- cfa(mod, data = F,group="Year",group.equal = c("loadings"), estimator="GLS")
anova(fit4,fit5)
## Chi Square Difference Test
##
## Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
## fit4 49 400.09
## fit5 109 523.82 123.72 60 2.527e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
T$ConfInstitut<-(T$Justice+T$Police+T$Politiques+T$Parlement+T$Partis+T$ParlementEurop+T$NationsUnies)/6
#Tb<-subset(T,(!is.na(revenu)))
ggplot(T,aes(x=revenu,y=ConfInstitut))+geom_violin(fill='#E69F00')
Ty1<- aggregate(cbind(ConfInstitut) ~ Year+revenu+education, data=T, FUN=mean)
ggplot(Ty1,aes(x=Year,y=ConfInstitut,group=education))+geom_line(aes(colour =education), size=1.5)+theme(axis.text.x = element_text(angle = 90, hjust = 1)) +labs(x = "Ans", y="degré de confiance interpersonnelle ( de 1 à 10)")+theme(axis.text.x =element_text(angle = 45, hjust = 1))+scale_colour_brewer(palette = "Spectral")+facet_grid(. ~ revenu)+ylim(3,7)
La même opération est réalisée, on ne représente cependant pas les évolutions des critères car c’est déjà fait dans la partie précédente. 3 items : Entraide, loyauté, digne de confiance. L’objet de ces jugement est ancré dans l’idée de gens en général, et pas forcément les proches.
Les items sont : - Would you say that most people can be trusted, or that you can’t be too careful in dealing with people? Please tell me on a score of 0 to 10, where 0 means you can’t be too careful and 10 means that most people can be trusted. - do you think that most people would try to take advantage of you (0) if they got the chance, or would they try to be fair (10)? - Would you say that most of the time people try to be helpful or that they are mostly looking out for themselves?
Ty<- aggregate(cbind(Confiance, Aide, Equitable) ~Year+Bonheur, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","Bonheur"))
ggplot(Tym,aes(x=Year,y=value,group=Bonheur))+geom_line(aes(colour = Bonheur),size=1.5)+ facet_grid(cols = vars(variable))+ theme(axis.text.x =element_text(angle = 90, hjust = 1)) + labs(x = "Ans", y= "degré de confiance (de 1 à 10")+scale_color_manual(values=pal)
Ty<-filter(T,vote <3)
Ty<- aggregate(cbind(Confiance, Aide, Equitable) ~ Year+vote2, data=Ty,FUN=mean)
names(Ty)[names(Ty)=="vote2"] <- "Vote"
Tym<-melt(Ty, id=c("Year","Vote"))
ggplot(Tym,aes(x=Year,y=value,group=Vote))+geom_line(aes(colour = Vote),size=1.5)+ facet_grid(cols = vars(variable))+ theme(axis.text.x =element_text(angle = 90, hjust = 1)) + labs(x = "Ans", y="degré de confiance (de 1 à 10")+scale_color_manual(values=pal)
pas de baisse de confiance chez les plus diplomés. effondrement chez les moins diplomé
Ty<- aggregate(cbind(Confiance, Aide, Equitable) ~Year+education, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","education"))
ggplot(Tym,aes(x=Year,y=value,group=education))+geom_line(aes(colour = education),size=1.5)+ facet_grid(cols = vars(variable))+ theme(axis.text.x =element_text(angle = 90, hjust = 1)) + labs(x = "Ans", y="degré de confiance (de 1 à 10")+scale_color_manual(values=pal)
des lignes bien parallèles.
Ty<- aggregate(cbind(Confiance, Aide, Equitable) ~Year+revenu, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","revenu"))
ggplot(Tym,aes(x=Year,y=value,group=revenu))+geom_line(aes(colour = revenu),size=1.5)+ facet_grid(cols = vars(variable))+ theme(axis.text.x =element_text(angle = 90, hjust = 1)) + labs(x = "Ans", y="degré de confiance (
de 1 à 10)")+scale_color_manual(values=pal)
les quintiles de revenu. ( modèle 10% , 50%, 80%, 90%, 10%)
Ty<- aggregate(cbind(Confiance, Aide, Equitable) ~Year+quintileR, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","quintileR"))
ggplot(Tym,aes(x=Year,y=value,group=quintileR))+geom_line(aes(colour = quintileR),size=1.5)+ facet_grid(cols = vars(variable))+ theme(axis.text.x =element_text(angle = 90, hjust = 1)) + labs(x = "Ans", y="degré de confiance (
de 1 à 10)")+scale_colour_brewer(palette = "Blues")+ylim(3,7)
des lignes bien parallèles.
Ty<- aggregate(cbind(Confiance, Aide, Equitable) ~Year+OP, data=T, FUN=mean)
Tym<-melt(Ty, id=c("Year","OP"))
ggplot(Tym,aes(x=Year,y=value,group=OP))+geom_line(aes(colour = OP),size=1.5)+ facet_grid(cols = vars(variable))+ theme(axis.text.x =element_text(angle = 90, hjust = 1)) + labs(x = "Ans", y="degré de confiance (
de 1 à 10)")+scale_colour_brewer(palette = "Spectral")+ylim(3,7)
On ne se content plus de description. Il faut aussi tester les effets des variables. Une approche par analyse de variance mais avant une analyse plus fine de notre variable.
Pour évaluer l’échelle de mesure, la première chose est d’examiner ma matrice de corrélation. On la calcule dans la première ligne, la seconde utilise la fonction kable
pour afficher le résultat
X<-cor(T[,c("Aide","Confiance","Equitable")], use="complete")
kable(X,caption = "Correlation des objets de confiance", digits = 2)
Aide | Confiance | Equitable | |
---|---|---|---|
Aide | 1.00 | 0.40 | 0.36 |
Confiance | 0.40 | 1.00 | 0.32 |
Equitable | 0.36 | 0.32 | 1.00 |
le alpha de cronbach est peu élevé mais acceptable, car une grande spécificité des items. Avec 3 items l’analyse factorielle est inutile.
alpha(X) #calcul de l alpha de Cronbach
##
## Reliability analysis
## Call: alpha(x = X)
##
## raw_alpha std.alpha G6(smc) average_r S/N median_r
## 0.63 0.63 0.53 0.36 1.7 0.36
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N var.r med.r
## Aide 0.49 0.49 0.32 0.32 0.94 NA 0.32
## Confiance 0.53 0.53 0.36 0.36 1.13 NA 0.36
## Equitable 0.57 0.57 0.40 0.40 1.34 NA 0.40
##
## Item statistics
## r r.cor r.drop
## Aide 0.78 0.59 0.47
## Confiance 0.76 0.55 0.44
## Equitable 0.74 0.51 0.41
On calcule le score ( moyenne des items) et l’examen de la distribution du score montre une assez bonne adéquation à la loi normale de même paramètres.
T$ConfInterperso <-(T$Aide+T$Confiance+T$Equitable)/3
uni<-summary(T[,"ConfInterperso", drop=FALSE], statistics=c("mean", "sd","IQR", "quantiles"),quantiles=c(0,.25,.5,.75,1))
uni
## ConfInterperso
## Min. : 0.000
## 1st Qu.: 4.000
## Median : 5.000
## Mean : 4.963
## 3rd Qu.: 6.000
## Max. :10.000
## NA's :48
kable(describe(T$ConfInterperso),digit=2)
vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X1 | 1 | 15003 | 4.96 | 1.64 | 5 | 5.03 | 1.48 | 0 | 10 | 10 | -0.36 | 0.2 | 0.01 |
g<-ggplot(T,aes(x=ConfInterperso))+geom_density(fill="#0B775E",alpha=0.3)
g1<-g+stat_function(fun=dnorm,color="red", args = list(mean = 4.96, sd=1.64))
g1
## Warning: Removed 48 rows containing non-finite values (stat_density).
avec quelques écarts notables qui laissent à penser que nous avons affaire à une distribution mélangées, ce qui est tester avec Mixtools
et une fonction gg.mixEM créée par JLhoward
library(mixtools)
ConfInter<-as.numeric(T$ConfInterperso)
ConfInter<-na.omit(ConfInter)
mixD <- normalmixEM(ConfInter,k=3,maxit=1000,epsilon=0.01) # a réitirer ca marche pas toujours!
## One of the variances is going to zero; trying new starting values.
## One of the variances is going to zero; trying new starting values.
## number of iterations= 65
summary(mixD)
## summary of normalmixEM object:
## comp 1 comp 2 comp 3
## lambda 0.311598 0.475475 0.212927
## mu 3.742517 5.189563 6.245623
## sigma 1.653215 1.206134 1.190522
## loglik at estimate: -28518.08
g2<-g+stat_function(fun=dnorm,color="blue", args = list(mean = 5.58, sd=1.22))
g2<-g2+stat_function(fun=dnorm,color="blue", args = list(mean = 4.34, sd=1.77))
g2<-g2+stat_function(fun=dnorm,color="blue", args = list(mean = 3.31, sd=1.70))
g2
## Warning: Removed 48 rows containing non-finite values (stat_density).
#function
# ggplot mixture plot
gg.mixEM <- function(EM) {
require(ggplot2)
x <- with(EM,seq(min(x),max(x),len=1000))
pars <- with(EM,data.frame(comp=colnames(posterior), mu, sigma,lambda))
em.df <- data.frame(x=rep(x,each=nrow(pars)),pars)
em.df$y <- with(em.df,lambda*dnorm(x,mean=mu,sd=sigma))
ggplot(data.frame(x=EM$x),aes(x,y=..density..)) +
geom_density(fill=NA,color="black")+
geom_polygon(data=em.df,aes(x,y,fill=comp),color="grey50", alpha=0.5)+
scale_fill_discrete("Component\nMeans",labels=format(em.df$mu,digits=3))+
theme_bw()
}
gg.mixEM(mixD)
un modèle full interaction, puis un modèle plus restreint aux effets principaux Une analyse de variance un peu brutale ( car dans certaine cellules les effectifs sont très faibles) , on simplifie ensuite.
https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html
AnovaModel.2<- lm(ConfInterperso ~ education+revenu+vote2+Year+Year*revenu, data=T,contrasts=list(education ="contr.Sum", revenu ="contr.Sum", vote2 ="contr.Sum", Year="contr.Sum"))
sstable <- Anova(AnovaModel.2, type = 3)
kable(sstable, digits = 2)
Sum Sq | Df | F value | Pr(>F) | |
---|---|---|---|---|
(Intercept) | 138713.29 | 1 | 56068.96 | 0.00 |
education | 430.45 | 6 | 29.00 | 0.00 |
revenu | 604.03 | 2 | 122.08 | 0.00 |
vote2 | 120.08 | 2 | 24.27 | 0.00 |
Year | 78.86 | 5 | 6.38 | 0.00 |
revenu:Year | 28.08 | 10 | 1.14 | 0.33 |
Residuals | 28386.40 | 11474 | NA | NA |
AnovaModel.1 <- lm(ConfInterperso ~ education*revenu*vote2*Year, data=T,contrasts=list(education ="contr.Sum", revenu="contr.Sum", vote2 ="contr.Sum", Year="contr.Sum"))
sstable<-Anova(AnovaModel.1, type = 2)
kable(sstable,digit=2,format = "html", caption = "Analyse de variance - full interaction") %>% kable_styling(bootstrap_options = c("striped", "hover"),full_width =F,font_size = 9)%>%
group_rows("Effets principaux", 1, 4) %>%
group_rows("Interactions ordre 2", 5, 10)%>%
group_rows("Interactions ordre n", 11, 16)
Sum Sq | Df | F value | Pr(>F) | |
---|---|---|---|---|
Effets principaux | ||||
education | 433.80 | 6 | 29.36 | 0.00 |
revenu | 598.78 | 2 | 121.59 | 0.00 |
vote2 | 122.44 | 2 | 24.86 | 0.00 |
Year | 107.56 | 5 | 8.74 | 0.00 |
Interactions ordre 2 | ||||
education:revenu | 32.18 | 12 | 1.09 | 0.36 |
education:vote2 | 51.96 | 12 | 1.76 | 0.05 |
revenu:vote2 | 15.27 | 4 | 1.55 | 0.18 |
education:Year | 81.05 | 30 | 1.10 | 0.33 |
revenu:Year | 34.98 | 10 | 1.42 | 0.16 |
vote2:Year | 28.77 | 10 | 1.17 | 0.31 |
Interactions ordre n | ||||
education:revenu:vote2 | 51.94 | 24 | 0.88 | 0.63 |
education:revenu:Year | 189.67 | 60 | 1.28 | 0.07 |
education:vote2:Year | 201.80 | 60 | 1.37 | 0.03 |
revenu:vote2:Year | 63.71 | 20 | 1.29 | 0.17 |
education:revenu:vote2:Year | 261.34 | 116 | 0.92 | 0.73 |
Residuals | 27394.54 | 11126 | NA | NA |
et le calcul de la taille de l’effet (eta) qui montre que les effets sont très faibles même si la puissance de test est forte. En terme de f de Cohen (1988) qui mesure la taille de l’effet : revenu et education prédomine.
Pour des repères on sereporte à cette page sur les tailles d’effets
#library(sjstats)
eta_sq(AnovaModel.2)
## term etasq
## 1 education 0.029
## 2 revenu 0.023
## 3 vote2 0.004
## 4 Year 0.004
## 5 revenu:Year 0.001
omega_sq(AnovaModel.2)
## term omegasq
## 1 education 0.029
## 2 revenu 0.023
## 3 vote2 0.003
## 4 Year 0.003
## 5 revenu:Year 0.000
cohens_f(AnovaModel.2)
## term cohens.f
## 1 education 0.17581331
## 2 revenu 0.15583823
## 3 vote2 0.06202630
## 4 Year 0.06201289
## 5 revenu:Year 0.03145188
sstable<-anova_stats(car::Anova(AnovaModel.2, type = 3)) #
kable(sstable,digit=2,format = "html", caption = "Analyse de variance - full interaction") %>%kable_styling(bootstrap_options = c("striped", "hover"),full_width =F,font_size = 9)%>%group_rows("Effets principaux", 1, 5) %>%group_rows("Interactions ordre 2", 6, 7)
term | sumsq | meansq | df | statistic | p.value | etasq | partial.etasq | omegasq | partial.omegasq | cohens.f | power |
---|---|---|---|---|---|---|---|---|---|---|---|
Effets principaux | |||||||||||
(Intercept) | 138713.29 | 138713.29 | 1 | 56068.96 | 0.00 | 0.82 | 0.83 | 0.82 | 0.83 | 2.21 | 1.00 |
education | 430.45 | 71.74 | 6 | 29.00 | 0.00 | 0.00 | 0.02 | 0.00 | 0.01 | 0.12 | 1.00 |
revenu | 604.02 | 302.01 | 2 | 122.08 | 0.00 | 0.00 | 0.02 | 0.00 | 0.02 | 0.15 | 1.00 |
vote2 | 120.08 | 60.04 | 2 | 24.27 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.06 | 1.00 |
Year | 78.86 | 15.77 | 5 | 6.38 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.05 | 1.00 |
Interactions ordre 2 | |||||||||||
revenu:Year | 28.08 | 2.81 | 10 | 1.14 | 0.33 | 0.00 | 0.00 | 0.00 | 0.00 | 0.03 | 0.61 |
Residuals | 28386.40 | 2.47 | 11474 | NA | NA | NA | NA | NA | NA | NA | NA |
concentrons-nous sur le revenu perçu et le niveau d’éducation.
Tb<-subset(T,(!is.na(revenu)))
ggplot(Tb,aes(x=revenu,y=ConfInterperso))+geom_violin(fill='#E69F00')
Ty1<- aggregate(cbind(ConfInterperso) ~ Year+revenu+education, data=Tb, FUN=mean)
ggplot(Ty1,aes(x=Year,y=ConfInterperso,group=revenu))+geom_line(aes(colour =revenu), size=1.5)+theme(axis.text.x = element_text(angle = 90, hjust = 1)) +labs(x = "Ans", y="degré de confiance interpersonnelle (de 1 à
10)")+scale_color_manual(values=pal)+facet_grid(. ~ education)+ylim(3,7)
observations : 1) plus le niveau de diplôme est élevé et plus la confiance interpersonnelle est grande et plus sa variance est faible en terme de conditions de vie. Si pour le niveau master on distingue mal les différences de niveau de confiance selon l’aisance budgétaire, les différences sont marquées pour les niveaux de formations les plus faibles. Une interaction semble se manifester : quelque soit le niveau de diplôme quand la vie est confortable la confiance interpersonnelle varie peu. Quand le revenu est insuffissant la confiance se dégrade avec l’absence de diplôme. 2) il est difficile de visu de témoigner d’une évolution dans le temps, la confiance interpersonnelle semble être stationnaire. On peut envisager des tests plus sophistiqué pour tester cette hypothèse. On laisse aux étudiants de faire cet approfondissement.
La confiance est-elle une source de bien-être?
Un modèle structurel, on ajoute une variable de contrôle : l’état de santé perçu Car on sait (citation) qu’elle est un des déterminants les plus forts.
Nos données se constituant comme échantillon réparti dans le temps, on est parfaitement en droit de se demander, si le modèle est stable dans le temps. On estime donc à la suite d’un modèle général, un modèle par groupe que l’on compare à un modèle identique à celà près qu’on contraint les paramètres de mesure à une valeur égale quelques soit la période utilisée. En ajoutant cette contrainte on s’attend à ce que l’ajustement du modèle se dégrade, toute la question est de savoir si cette dégradation est significative. Si oui on acceptera l’idée que les modèles varient dans le temps, si non on acceptera l’hypothèse que la structure du modèle de mesure est la même à travers le temps.
e terme de procédure on estime 1) un modèle général qui ne différencie pas les sources de données 2) un modèle libre, dont tous les paramètres s’ajustent pour chacune des périodes étudiées. 3) un modèle où l’on contraint les paramètres de mesure à être égaux.
Un filtre est construit pour ne garder que les lignes sans aucune valeur manquante. C’est une exigence de Lavaan et du mode d’estimation standard par ML. Le choix d’une méthode GLS permet de prendre en compte toute les observations. On laisse le soin aux étudiants de comparer ces deux solutions.
Tna<-subset(T,select=c(Aide,Confiance,Equitable,Justice,NationsUnies,Parlement,ParlementEurop,Partis,Police,Politiques,stflife,happy,health,Year))
Tna$na_count <- apply(Tna, 1, function(x) sum(is.na(x)))
Tna<-subset(Tna,na_count==0)
model <- '
# measurement model
T_Interperso =~ Aide+Confiance+Equitable
T_Institution =~ NationsUnies+Parlement+ParlementEurop+Partis+Police+Politiques
Happyness =~ happy + stflife
# regressions
Happyness ~ T_Institution + T_Interperso+health
T_Institution ~ health
T_Interperso ~ health
# residual correlations
T_Institution ~~ T_Interperso
'
fit0 <- sem(model, data=Tna)
summary(fit0, standardized=TRUE)
## lavaan 0.6-3 ended normally after 51 iterations
##
## Optimization method NLMINB
## Number of free parameters 28
##
## Number of observations 12706
##
## Estimator ML
## Model Fit Test Statistic 5546.299
## Degrees of freedom 49
## P-value (Chi-square) 0.000
##
## Parameter Estimates:
##
## Information Expected
## Information saturated (h1) model Structured
## Standard Errors Standard
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## T_Interperso =~
## Aide 1.000 1.342 0.645
## Confiance 1.030 0.023 44.640 0.000 1.382 0.635
## Equitable 0.858 0.021 41.595 0.000 1.151 0.535
## T_Institution =~
## NationsUnies 1.000 1.407 0.593
## Parlement 1.200 0.019 64.843 0.000 1.689 0.730
## ParlementEurop 1.223 0.019 65.457 0.000 1.721 0.740
## Partis 1.288 0.018 72.313 0.000 1.813 0.870
## Police 0.725 0.016 45.084 0.000 1.021 0.455
## Politiques 1.356 0.019 73.275 0.000 1.907 0.894
## Happyness =~
## happy 1.000 1.391 0.777
## stflife 1.443 0.028 52.426 0.000 2.007 0.829
##
## Regressions:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## Happyness ~
## T_Institution 0.050 0.012 4.265 0.000 0.051 0.051
## T_Interperso 0.389 0.016 24.013 0.000 0.376 0.376
## health -0.457 0.016 -29.287 0.000 -0.329 -0.291
## T_Institution ~
## health -0.180 0.015 -12.091 0.000 -0.128 -0.113
## T_Interperso ~
## health -0.267 0.017 -15.738 0.000 -0.199 -0.176
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .T_Interperso ~~
## .T_Institution 0.849 0.027 31.330 0.000 0.460 0.460
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Aide 2.520 0.048 52.383 0.000 2.520 0.583
## .Confiance 2.829 0.053 53.851 0.000 2.829 0.597
## .Equitable 3.304 0.051 64.660 0.000 3.304 0.714
## .NationsUnies 3.646 0.048 75.513 0.000 3.646 0.648
## .Parlement 2.499 0.035 70.763 0.000 2.499 0.467
## .ParlementEurop 2.443 0.035 70.182 0.000 2.443 0.452
## .Partis 1.052 0.020 53.855 0.000 1.052 0.243
## .Police 3.987 0.051 77.702 0.000 3.987 0.793
## .Politiques 0.912 0.019 47.324 0.000 0.912 0.200
## .happy 1.272 0.037 34.298 0.000 1.272 0.397
## .stflife 1.832 0.073 24.949 0.000 1.832 0.313
## .T_Interperso 1.744 0.056 31.381 0.000 0.969 0.969
## .T_Institution 1.954 0.055 35.389 0.000 0.987 0.987
## .Happyness 1.378 0.037 36.927 0.000 0.712 0.712
fitMeasures(fit0, c("chisq","cfi","rmsea","srmr"))
## chisq cfi rmsea srmr
## 5546.299 0.904 0.094 0.047
semPaths(fit0, "std", whatLabels="std",layout="tree2",intercepts = FALSE,residuals = FALSE, rotation=1,
edge.label.cex = 0.7, label.cex=0.9,nCharNodes=13,curve = TRUE,
shapeMan="rectangle",shapeLat="ellipse",curvePivot = FALSE,groups = "latent", pastel = TRUE, mar = c(3, 3, 3, 3),
layoutSplit=TRUE, reorder=TRUE)
fitG0 <- sem(model, data=Tna, group="Year") # estimator="GLS" pour passer pardessus les NA
fitMeasures(fitG0, c("chisq","cfi","rmsea","srmr"))
## chisq cfi rmsea srmr
## 5951.196 0.903 0.095 0.045
fitG1 <- sem(model, data=Tna, group="Year",group.equal = c("loadings"))
fitMeasures(fitG1, c("chisq","cfi","rmsea","srmr"))
## chisq cfi rmsea srmr
## 6076.446 0.902 0.090 0.047
anova(fitG0,fitG1)
## Chi Square Difference Test
##
## Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
## fitG0 343 561673 563707 5951.2
## fitG1 391 561703 563379 6076.4 125.25 48 8.088e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par<-standardizedSolution(fitG0) #sauvegarde des par dans un df
par$parameter<-paste(par$lhs,par$op,par$rhs) #creation de la variable parameter
par<-subset(par,select=c(parameter,group,est.std)) #on retient ce qui nous intéresse
parb<-dcast(par, parameter~group) #on "caste"
parb %>% kable(digit=2) %>% kable_styling(full_width =F) # édition de la table avec kable
parameter | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Aide ~~ Aide | 0.60 | 0.61 | 0.61 | 0.59 | 0.51 | 0.58 | 0.56 |
Aide ~1 | 2.88 | 3.00 | 3.04 | 3.08 | 3.21 | 3.27 | 3.28 |
Confiance ~~ Confiance | 0.56 | 0.64 | 0.53 | 0.67 | 0.61 | 0.63 | 0.56 |
Confiance ~1 | 2.33 | 2.28 | 2.35 | 2.24 | 2.48 | 2.44 | 2.46 |
Equitable ~~ Equitable | 0.73 | 0.74 | 0.72 | 0.71 | 0.68 | 0.72 | 0.70 |
Equitable ~1 | 2.32 | 2.33 | 2.30 | 2.29 | 2.54 | 2.49 | 2.46 |
happy ~~ happy | 0.36 | 0.38 | 0.41 | 0.41 | 0.40 | 0.42 | 0.39 |
happy ~1 | 4.50 | 4.82 | 4.73 | 4.65 | 4.80 | 4.79 | 4.79 |
Happyness ~ health | -0.27 | -0.29 | -0.29 | -0.34 | -0.26 | -0.29 | -0.30 |
Happyness ~ T_Institution | 0.09 | 0.04 | 0.05 | 0.10 | 0.01 | 0.07 | 0.03 |
Happyness ~ T_Interperso | 0.31 | 0.37 | 0.40 | 0.37 | 0.41 | 0.39 | 0.36 |
Happyness ~~ Happyness | 0.76 | 0.72 | 0.69 | 0.65 | 0.71 | 0.69 | 0.73 |
Happyness ~1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
Happyness =~ happy | 0.80 | 0.79 | 0.77 | 0.77 | 0.78 | 0.76 | 0.78 |
Happyness =~ stflife | 0.83 | 0.83 | 0.83 | 0.82 | 0.84 | 0.83 | 0.83 |
health ~~ health | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
health ~1 | 2.63 | 2.63 | 2.53 | 2.53 | 2.56 | 2.57 | 2.59 |
NationsUnies ~~ NationsUnies | 0.61 | 0.69 | 0.54 | 0.61 | 0.67 | 0.70 | 0.65 |
NationsUnies ~1 | 2.16 | 2.26 | 2.51 | 2.34 | 2.43 | 2.27 | 2.09 |
Parlement ~~ Parlement | 0.44 | 0.50 | 0.45 | 0.44 | 0.48 | 0.48 | 0.47 |
Parlement ~1 | 2.10 | 2.07 | 2.27 | 2.03 | 1.99 | 1.84 | 1.93 |
ParlementEurop ~~ ParlementEurop | 0.47 | 0.51 | 0.37 | 0.42 | 0.47 | 0.48 | 0.43 |
ParlementEurop ~1 | 2.10 | 2.09 | 2.28 | 2.08 | 2.01 | 1.84 | 1.76 |
Partis ~~ Partis | 0.21 | 0.29 | 0.36 | 0.22 | 0.25 | 0.22 | 0.18 |
Partis ~1 | 1.88 | 1.75 | 1.96 | 1.73 | 1.76 | 1.54 | 1.59 |
Police ~~ Police | 0.75 | 0.80 | 0.74 | 0.74 | 0.78 | 0.78 | 0.83 |
Police ~1 | 2.67 | 2.67 | 2.76 | 2.57 | 2.80 | 2.93 | 3.09 |
Politiques ~~ Politiques | 0.18 | 0.24 | 0.29 | 0.18 | 0.21 | 0.19 | 0.16 |
Politiques ~1 | 1.89 | 1.81 | 1.98 | 1.73 | 1.77 | 1.54 | 1.59 |
stflife ~~ stflife | 0.31 | 0.31 | 0.32 | 0.33 | 0.29 | 0.32 | 0.32 |
stflife ~1 | 3.41 | 3.34 | 3.31 | 3.40 | 3.36 | 3.40 | 3.66 |
T_Institution ~ health | -0.10 | -0.09 | -0.15 | -0.13 | -0.11 | -0.10 | -0.09 |
T_Institution ~~ T_Institution | 0.99 | 0.99 | 0.98 | 0.98 | 0.99 | 0.99 | 0.99 |
T_Institution ~1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
T_Institution =~ NationsUnies | 0.62 | 0.56 | 0.68 | 0.62 | 0.57 | 0.55 | 0.59 |
T_Institution =~ Parlement | 0.75 | 0.71 | 0.74 | 0.75 | 0.72 | 0.72 | 0.73 |
T_Institution =~ ParlementEurop | 0.73 | 0.70 | 0.79 | 0.76 | 0.73 | 0.72 | 0.75 |
T_Institution =~ Partis | 0.89 | 0.84 | 0.80 | 0.88 | 0.86 | 0.88 | 0.90 |
T_Institution =~ Police | 0.50 | 0.45 | 0.51 | 0.51 | 0.47 | 0.47 | 0.41 |
T_Institution =~ Politiques | 0.91 | 0.87 | 0.84 | 0.90 | 0.89 | 0.90 | 0.92 |
T_Interperso ~ health | -0.16 | -0.17 | -0.16 | -0.19 | -0.22 | -0.18 | -0.17 |
T_Interperso ~~ T_Institution | 0.53 | 0.50 | 0.47 | 0.39 | 0.47 | 0.47 | 0.45 |
T_Interperso ~~ T_Interperso | 0.97 | 0.97 | 0.97 | 0.96 | 0.95 | 0.97 | 0.97 |
T_Interperso ~1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
T_Interperso =~ Aide | 0.63 | 0.62 | 0.63 | 0.64 | 0.70 | 0.64 | 0.66 |
T_Interperso =~ Confiance | 0.66 | 0.60 | 0.69 | 0.58 | 0.62 | 0.61 | 0.66 |
T_Interperso =~ Equitable | 0.52 | 0.51 | 0.52 | 0.54 | 0.57 | 0.53 | 0.55 |
L’analyse des résultats montre que si effectivement un modèle multi-groupe libre s’ajuste mieux, les différences de valeurs des paramètres du modèles sont minces. Le meilleur modèle est sans doute un modèle sur-ajusté, et le modèle le plus général rend compte clairement des relations.
Le bonheur ne dépend pas où très peu de la confiance qu’on témoigne aux institutions. En revanche la santé et la confiance interpersonnelle y contribue de manière très sensible. Le bonheur reste determiné par une situation personnelle bien plus que par le rapport aux institutions. Le sentiment d’être en bonne santé joue un rôle déterminant, direct et indirect par le chemin de la confiance interpersonnelle : quand on se sent bien dans son coprs on fait confiance aux autres et par conséquent on est plus heureux. La confiance interpersonnelle contribue au bonheur, sans doute parcequ’en étant confiant envers les autres, on espère un soutien si les choses vont moins bien.
la structure factorielle de la confiance : le general et le particulier . Des limites intrinsèque à l’échelle, un facteur général, des facteurs spécifiques : la politique ( rancière) et le politique, le corps de l’état chevillé au régalien et incarné dans son inamovible administration, les arènes du débat.
pour éditer en html
rmarkdown::render(‘trustFrance.Rmd’) rmarkdown::render(‘trustFrance.Rmd’, encoding = ‘UTF-8’)
Churchill, Gilbert A. 1979. “A Paradigm for Developing Better Measures of Marketing Constructs.” Journal of Marketing Research 16 (1): 64. doi:10.2307/3150876.
Cohen, Jacob. 1988. Statistical Power Analysis for the Behavioral Sciences. 2nd ed. Hillsdale, N.J: L. Erlbaum Associates.
Jöreskog, K. G. 1969. “A General Approach to Confirmatory Maximum Likelihood Factor Analysis.” Psychometrika 34 (2): 183–202. doi:10.1007/BF02289343.
Munafò, Marcus R., Brian A. Nosek, Dorothy V. M. Bishop, Katherine S. Button, Christopher D. Chambers, Nathalie Percie du Sert, Uri Simonsohn, Eric-Jan Wagenmakers, Jennifer J. Ware, and John P. A. Ioannidis. 2017. “A Manifesto for Reproducible Science.” Nature Human Behaviour 1 (1): 0021. doi:10.1038/s41562-016-0021.
Thurstone, L. L. 1931. “Multiple Factor Analysis.” Psychological Review 38 (5): 406–27. doi:10.1037/h0069792.