Bibliothèques et données

Les donnĂ©es sont un extrait de la base de l’ess. Elle rassemble les jugement de confiance Ă  l’égards des institution et des personnes ( 10 items) en France et en allamenage, au cours de vagues d’enquĂªtes bisannuelles de l’EuropĂ©an Social Survey. On dispose donc de donnĂ©es de 20014 Ă  2018. S’joutent quelques variables socio-dĂ©mo : le pouvoir d’achat percu, l’age, le genre, l’orientation politique, le type d’habitat. On cherchera Ă  examiner l’impact des conditions de vie du la confiance.

knitr::opts_chunk$set(echo = TRUE, include=TRUE, cache=TRUE, message=FALSE, warning=FALSE)
library(tidyverse)
library(gridExtra)
library(reshape2)
library(ggridges)
library(stargazer)
library(jtools)

#lecture du fichier
df<-readRDS("mastermoi.rds")

#quelques recodages

#on renomme les items de confiance pour plus de clarte
names(df)[names(df)=="trstun"] <- "NationsUnies" 
names(df)[names(df)=="trstep"] <- "ParlementEurop" 
names(df)[names(df)=="trstlgl"] <- "Justice" 
names(df)[names(df)=="trstplc"] <- "Police" 
names(df)[names(df)=="trstplt"] <- "Politiques" 
names(df)[names(df)=="trstprl"] <-"Parlement" 
names(df)[names(df)=="trstprt"] <- "Partis"
names(df)[names(df)=="pplhlp"] <- "help"
names(df)[names(df)=="pplfair"] <- "fair"
names(df)[names(df)=="ppltrst"] <- "trust"

#recodage des variables indépendantes
df$Year[df$essround==1]<-2002 
df$Year[df$essround==2]<-2004 
df$Year[df$essround==3]<-2006 
df$Year[df$essround==4]<-2008 
df$Year[df$essround==5]<-2010 
df$Year[df$essround==6]<-2012 
df$Year[df$essround==7]<-2014 
df$Year[df$essround==8]<-2016 
df$Year[df$essround==9]<-2018
df$Year<-as.factor(df$Year)

df$cntry<-as.factor(df$cntry)

#on construit les scores de confiance 
df<-df %>% mutate(trust_institution=(Partis+Parlement+Politiques+Police+Justice+NationsUnies+ParlementEurop)*10/7)

df<-df %>% mutate(trust_interpersonal=(help+fair+trust)*10/3)

Un premier coup d’oeil sur les données

On doit examiner la distribution de Confiance institutionnelle et interpersonnelle, en France et en allemagne de 2004 Ă  2018. Mais ici on a des donnĂ©es de panels : un niveau pays et un niveau vague d’enquĂªtes, dont 14 enquĂªtes et quatorze distributions.

Par exemple la distribution du score de confiance interpersonnelle en France et en 2018.

hist<-df %>% dplyr::select(Year,cntry, trust_institution) %>% melt(id=c("cntry", "Year")) %>%filter(Year!="2002")

ggplot(df,aes(x=trust_institution))+geom_density(fill="lightblue")+
  theme_minimal()+
  labs(title = "Comparaison FR-ALL de l'évolution de la confiance institutionnelle",subtitle = "corrélation par vague" ,x = "Confiance", y="densité", caption="source : ESS 8 waves")

Généralisons aux deux variables et aux deux pays ainsi qu’aux 7 vagues d’enquetes. Une première méthode consiste à utiliser la fonction facet_grid de ggplot2.

hist<-df %>% dplyr::select(Year,cntry, trust_institution) %>% 
  melt(id=c("cntry", "Year")) %>%filter(Year!="2002")
ggplot(hist,aes(x=value))+geom_density(fill="lightblue")+facet_grid(Year~cntry)+
  theme_minimal()+
  labs(title = "Comparaison FR-ALL de l'évolution de la confiance institutionnelle",subtitle = "corrélation par vague" ,x = "Confiance", y="densité", caption="source : ESS 8 waves")

hist<-df %>% dplyr::select(Year,cntry, trust_interpersonal) %>% 
  melt(id=c("cntry", "Year")) %>%filter(Year!="2002")
ggplot(hist,aes(x=value))+geom_density(fill="lightblue")+facet_grid(Year~cntry)+
  theme_minimal()+
  labs(title = "Comparaison FR-ALL de l'évolution de la confiance interpersonnelle",subtitle = "corrélation par vague" ,x = "Confiance", y="densité", caption="source : ESS 8 waves")

On peut cependant faire beaucoup mieux avec ggridges, et encore plus simplement et de manières plus élégante. Un bel hommage à joy division] (). https://www.etsy.com/fr/listing/599973120/joy-division-unknown-pleasures-album-art

#library(ggridges)

hist<-df %>% dplyr::select(Year,cntry, trust_institution, trust_interpersonal) %>% 
  melt(id=c("cntry", "Year")) %>%filter(Year!="2002")

ggplot(hist, aes(value, Year, group = Year, height = ..density..)) +
  geom_density_ridges(stat = "density", trim = TRUE) + facet_grid((variable~cntry))+theme_minimal()

bien sur on veut mieux saisir les variations de la tendance centrale, pour les deux variable et les deux pays Ă  travers les 7 vagues d’enquĂªtes.

foo<-hist %>% filter(!is.na(value)) %>% group_by(cntry,variable,Year) %>% dplyr::summarise(Conf=mean(value, na.rm=FALSE))

ggplot(foo, aes( x=Year, y=Conf, group = variable, group=cntry)) +geom_line(aes(color=variable), size=1.5) +theme_minimal()+ facet_grid(cntry~.)
## Warning: Duplicated aesthetics after name standardisation: group

La corrélation entre les deux composantes de la confiance

On va faire un une analyse classique de correlation mais rĂ©pĂ©tĂ© Ă  travers les pays et les vagues d’enquĂªtes. Manifestement les corrĂ©lations sont stables dans le temps et les pays Ă  une constante d’échelle et de paramètre près.

Pour mieux saisir les variation de corrélations, on peut vérifier en calculant les corrélations par année et par pays, et en les représentant graphiquement.

library(corrplot)
df_cor <-df %>% dplyr::select(cntry,Year,trust_institution, trust_interpersonal) %>%filter(!is.na(trust_interpersonal) & !is.na(trust_institution))
library(plyr)
cor <- ddply(df_cor, c("Year","cntry"), summarise, corr=cor(trust_institution, trust_interpersonal))

ggplot(cor, aes(x=Year,y=corr,group=cntry))+geom_line(size=1.5,aes(color=cntry)) +
  theme_minimal()+ylim(0.3,0.6)+
  labs(title = "Evolution des corrĂ©lations entre Ă©lĂ©ments de la confiance",subtitle = "corrĂ©lations par vague et pays" ,x = "Vagues d'enquĂªtes", y="Correlation de pearson", caption="source : ESS 8 waves")

# corrélations multiples

nous avons raisonner sur la base d’une relation,on pourrait vouloir observer toutes les corrélations entre k variables. Regardons ce qui en est si on reprends les, items qui ont servi à construire les scores de satisfaction. On notera que c’est le point de départ d’une analyse factorielles.

On pourra chercher à représenter cette matrice pour les différents pays et vagues d’enquetes. Mais celà suffira.

library(corrplot)
M<-df %>% dplyr::select(help,fair,trust,NationsUnies,ParlementEurop,Justice, Police,Politiques,Parlement,Partis) %>% drop_na()
M<-cor(M)
corrplot(M, order = "hclust",addrect = 3)

régression multiple

on va maintenant cercher à expliquer les différences entre les niveaux de confiances en fonction de quelques variables socio demo. Autrement dit construire un modèle du type :

y= a0+a1X1+a2X2+…+e

On va avoir besoin de recodage des variables explicatives.

df$OP[df$lrscale==0] <- "ExtrĂªme gauche" 
df$OP[df$lrscale==1] <- "Gauche" 
df$OP[df$lrscale==2] <- "Gauche" 
df$OP[df$lrscale==3] <- "Centre Gauche" 
df$OP[df$lrscale==4] <- "Centre Gauche" 
df$OP[df$lrscale==5] <- "Ni G ni D" 
df$OP[df$lrscale==6] <- "Centre Droit" 
df$OP[df$lrscale==7] <- "Centre Droit" 
df$OP[df$lrscale==8] <- "Droite" 
df$OP[df$lrscale==9] <- "Droite" 
df$OP[df$lrscale==10] <- "ExtrĂªme droite" 
#la ligne suivante est pour ordonner les modalités de la variables
df$OP<-factor(df$OP,levels=c("ExtrĂªme droite","Droite","Centre Droit","Ni G ni D","Centre Gauche","Gauche","ExtrĂªme gauche"))


df$revenu<-df$hincfel
df$revenu[df$hincfel>4] <- NA
df$revenu[df$hincfel==1] <- "Vie confortable" 
df$revenu[df$hincfel==2] <- "Se débrouille avec son revenu" 
df$revenu[df$hincfel==3] <- "Revenu insuffisant" 
df$revenu[df$hincfel==4] <- "Revenu très insuffisant" 
df$revenu<-factor(df$revenu,levels=c("Vie confortable","Se débrouille avec son revenu","Revenu insuffisant","Revenu très insuffisant"))

df$habitat[df$domicil==1]<- "Big city"
df$habitat[df$domicil==2]<-"Suburbs"
df$habitat[df$domicil==3]<-"Town"
df$habitat[df$domicil==4]<-"Village"
df$habitat[df$domicil==5]<-"Countryside"
df$habitat<-factor(df$habitat,levels=c("Big city","Suburbs","Town","Village","Countryside"))

df$genre[df$gndr==1]<-"H"
df$genre[df$gndr==2]<-"F"

df$age[df$agea<26]<-"25<"
df$age[df$agea>25 & df$agea<36]<-"26-35"
df$age[df$agea>35 & df$agea<46]<-"36-45"
df$age[df$agea>45 & df$agea<66]<-"46-65"
df$age[df$agea>65 & df$agea<76]<-"66-75"
df$age[df$agea>75]<-"75>"
df$age<-factor(df$age,levels=c("25<","26-35","36-45","46-65","66-75", "75>"))

construisons un modèle de régression multiple par les MCO pour les deux variables. On présente les résultats en suivant le modèle de stargazer

df_DE<-df %>% filter(cntry=="DE")
library(lme4)
fit00<-lm(trust_institution~age+genre+habitat+revenu+OP+trust_interpersonal+Year, data=df_DE)
summary(fit00)
## 
## Call:
## lm(formula = trust_institution ~ age + genre + habitat + revenu + 
##     OP + trust_interpersonal + Year, data = df_DE)
## 
## Residuals:
## <Labelled double>: Trust in political parties
##     Min      1Q  Median      3Q     Max 
## -66.972 -10.192   0.660  10.659  79.508 
## 
## Labels:
##  value           label
##      0 No trust at all
##      1               1
##      2               2
##      3               3
##      4               4
##      5               5
##      6               6
##      7               7
##      8               8
##      9               9
##     10  Complete trust
##     77         Refusal
##     88      Don't know
##     99       No answer
## 
## Coefficients:
##                                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                         31.021655   1.255821  24.702  < 2e-16 ***
## age26-35                            -3.802856   0.434569  -8.751  < 2e-16 ***
## age36-45                            -4.766877   0.410709 -11.606  < 2e-16 ***
## age46-65                            -6.758909   0.354618 -19.060  < 2e-16 ***
## age66-75                            -7.104649   0.434055 -16.368  < 2e-16 ***
## age75>                              -5.752892   0.536100 -10.731  < 2e-16 ***
## genreH                               0.450817   0.223887   2.014 0.044067 *  
## habitatSuburbs                      -0.383885   0.406355  -0.945 0.344823    
## habitatTown                         -0.991763   0.327765  -3.026 0.002483 ** 
## habitatVillage                      -1.870934   0.342243  -5.467 4.64e-08 ***
## habitatCountryside                  -2.283695   0.844811  -2.703 0.006874 ** 
## revenuSe débrouille avec son revenu -3.549202   0.246649 -14.390  < 2e-16 ***
## revenuRevenu insuffisant            -6.661449   0.412273 -16.158  < 2e-16 ***
## revenuRevenu très insuffisant       -9.189290   0.683195 -13.450  < 2e-16 ***
## OPDroite                             1.969134   1.203515   1.636 0.101824    
## OPCentre Droit                       3.996118   1.108113   3.606 0.000311 ***
## OPNi G ni D                          1.938753   1.087473   1.783 0.074634 .  
## OPCentre Gauche                      3.390500   1.093811   3.100 0.001940 ** 
## OPGauche                             0.708533   1.129295   0.627 0.530397    
## OPExtrĂªme gauche                    -2.753428   1.222742  -2.252 0.024343 *  
## trust_interpersonal                  0.407524   0.006862  59.388  < 2e-16 ***
## Year2006                            -0.449703   0.457666  -0.983 0.325816    
## Year2008                             1.811007   0.458697   3.948 7.90e-05 ***
## Year2010                            -0.573590   0.449150  -1.277 0.201598    
## Year2012                             2.729743   0.446258   6.117 9.72e-10 ***
## Year2014                             1.694438   0.440538   3.846 0.000120 ***
## Year2016                             2.946782   0.447458   6.586 4.65e-11 ***
## Year2018                             3.081185   0.470080   6.555 5.72e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 15.42 on 19295 degrees of freedom
##   (6377 observations deleted due to missingness)
## Multiple R-squared:  0.2388, Adjusted R-squared:  0.2377 
## F-statistic: 224.1 on 27 and 19295 DF,  p-value: < 2.2e-16
fit01<-lm(trust_interpersonal~age+genre+habitat+revenu+OP+trust_institution+ Year, data=df_DE)

df_FR<-df %>% filter(cntry=="FR")
fit02<-lm(trust_institution~age+genre+habitat+revenu+OP+trust_interpersonal+Year, data=df_FR)
fit03<-lm(trust_interpersonal~age+genre+habitat+revenu+OP+trust_institution+ Year, data=df_FR)

On peut faire plus plus joli avec summ en produisant un diagramme des effets, le premier est général le second particulier. On utilise pour celà des fonctions du package jtools. https://cran.r-project.org/web/packages/jtools/vignettes/summ.html

#library(jtools)
export_summs(fit00,scale = TRUE)
Model 1
(Intercept) 52.94 ***
(1.20)   
age26-35 -3.80 ***
(0.43)   
age36-45 -4.77 ***
(0.41)   
age46-65 -6.76 ***
(0.35)   
age66-75 -7.10 ***
(0.43)   
age75> -5.75 ***
(0.54)   
genreH 0.45 *  
(0.22)   
habitatSuburbs -0.38    
(0.41)   
habitatTown -0.99 ** 
(0.33)   
habitatVillage -1.87 ***
(0.34)   
habitatCountryside -2.28 ** 
(0.84)   
revenuSe débrouille avec son revenu -3.55 ***
(0.25)   
revenuRevenu insuffisant -6.66 ***
(0.41)   
revenuRevenu très insuffisant -9.19 ***
(0.68)   
OPDroite 1.97    
(1.20)   
OPCentre Droit 4.00 ***
(1.11)   
OPNi G ni D 1.94    
(1.09)   
OPCentre Gauche 3.39 ** 
(1.09)   
OPGauche 0.71    
(1.13)   
OPExtrĂªme gauche -2.75 *  
(1.22)   
trust_interpersonal 6.85 ***
(0.12)   
Year2006 -0.45    
(0.46)   
Year2008 1.81 ***
(0.46)   
Year2010 -0.57    
(0.45)   
Year2012 2.73 ***
(0.45)   
Year2014 1.69 ***
(0.44)   
Year2016 2.95 ***
(0.45)   
Year2018 3.08 ***
(0.47)   
N 19323       
R2 0.24    
*** p < 0.001; ** p < 0.01; * p < 0.05.
plot_summs(fit00,fit01,fit02,fit03, scale = FALSE ,model.names = c("Institutionnelle DE", "Interpersonnelle DE", "Institutionnelle FR", "Interpersonnelle FR"), legend.title="Confiance")

effect_plot(fit00, pred = OP, interval = TRUE, plot.points = FALSE)

effect_plot(fit02, pred = OP, interval = TRUE, plot.points = FALSE)

effect_plot(fit00, pred = trust_interpersonal, interval = TRUE, plot.points = FALSE)

https://cran.r-project.org/web/packages/jtools/vignettes/summ.html