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)
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
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)
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