L’objectif de ce document est d’analyser un tableau de données multivariées, en l’occurrence les profils de valeurs de 35000 européens en 2016, ainsi qu’un groupe de variables relatives à leur satisfaction dans la vie et dans la société, ainsi que leur degré de confiance envers les institutions et les personnes. Un groupe de variables socio-démographiques est disponible. La source des données est l’European Social Survey , et notamment la vague 8 (2016). Elle concerne 16 pays.
C’est le support de cours pour les enseignements suivants:
On pourra aussi consulter une analyse du même type centré sur la Confiance en France de 2002 à 2006.
Le synopsis général de l’analyse est simple : Les 21 valeurs mesurées dans l’enquête (inventaire de Schwartz (1992) et Schwartz (2012) ) peuvent étre étre décrites par un nombre réduit de dimensions sous-jascentes. On verra comment les identifier.
L’autre probléme, symétrique, est d’identifier les individus qui se ressemblent, et de les regrouper en un nombre limité de segments (types, cluster, groupes …) dont on cherchera à décrire les profils. On envisage ensuite leurs relations avec les indicateurs de bien-être, avec un controle par les variables socio-démographiques.
On conduira l’analyse d’abord en suivant l’hypothése que les valeurs “font” le bonheur, puis en retenant au contraire l’hypothése que le niveau de bonheur peut expliquer les valeurs auxquelles on adhére.
On utilisera les techniques suivantes :
Les données ont été préparées au préalable (Recodage et labellisation), le code est disponible dans le fichier recodage.r, il faut le consulter, mais il est inutile de l’activer), On charge directement le fichier au format r (pensez é modifier le chemin du fichier de données). Les packages utilisés sont déclarés dans le chunk suivant.
knitr::opts_chunk$set(echo = TRUE,include=TRUE,warning=FALSE)
library(Rcmdr)
library(readr)
library(readr)
H <- read_delim("~/Bonheur master/bonheur/H.csv",
";", escape_double = FALSE, trim_ws = TRUE)
#library(Rcmdr) #le demarrage et le secours
library(bookdown) # encore pour de fonctions dans le markdown
#gestion des données
library(dplyr) # ce truc bizarre pour gerer les données
library(plyr) #l'autre ne l'inclue pas t il le precedent é
library(tidyr) # ces truc bizarre pour gerer les donnes
library(reshape2) #surtout utilé pour ggplot
#graphiques
library(fmsb)
library(ggplot2) #l indispensable bibliothéque graphique
library(radarchart) #graphique radar
library(ggridges)
#psych pour aller bcp plus loin dans l'analyse factorielle
library(psych)
#typologie
library(dendextend) #pour visualiser les dendogram
library(NbClust) #test du nb optimal de groupe
library(FactoMineR) #la boite é outil de l'analyse des correspondance
library(factoextra) #pour faire la liaison avec GGplot
#regression
library(multilevel) #l'espace - 16- pays
library(stargazer) # mise en tableau des résultats de modeles de régression
library("foreign") #pour la regression multinomiale
library("nnet") #pour la regression multinomiale
#modele structurel
library(lavaan)
library(semPlot)
#palettes et graphiques
library(RColorBrewer)
library(corrplot)
library(gridExtra) # plusieurs ggplot en une image
library(knitr)#pour la fonction kable qui permet de faire des tableaux élégants
library(kableExtra) #complement de kable
#palette pal16 : des couleurs sur mesure des pays
pal16<-c("#3B9AB2", "#EBCC2A" , "#F8AFA8" , "#C25B56", "#0B775E", "#BEB9B5","#35274A","#FEE1AE",
"#F2AD00" ,"#F98400","#F5CDB6" ,"#FF0000", "#9A8822","#00A08A","#046C9A","#74828F")
Le premier temps de l’analyse est consacré à l’analyse de la structure des corrélations entre les 21 items de l’échelle de mesure des valeurs. L’objectif est de les réduire à un petit nombre de facteurs fondamentaux.
les statistiques élémentaires sont les suivantes
V<-as.data.frame(H[,c("Admiration", "Altruisme", "Autoritegvt", "Aventure", "Bontemps", "Creativite", "Egalite", "Environnement", "Liberte","Loyaute", "Modestie", "Nouveau", "Plaisir", "Respect", "RespectdesRegles", "Richesse", "SeConduireBien", "Securite", "Succes",
"Tolerance", "Tradition")])
elem <-V %>%
psych::describe(quant=c(.25,.75)) %>%
as_tibble() %>%
print()
## # A tibble: 21 x 15
## vars n mean sd median trimmed mad min max range skew
## * <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 34249 3.73 1.41 4 3.72 1.48 1 6 5 -0.149
## 2 2 34299 4.82 1.00 5 4.94 1.48 1 6 5 -0.864
## 3 3 34130 4.61 1.21 5 4.75 1.48 1 6 5 -0.829
## 4 4 34280 3.16 1.44 3 3.12 1.48 1 6 5 0.284
## 5 5 34294 4.14 1.31 4 4.21 1.48 1 6 5 -0.454
## 6 6 34280 4.44 1.25 5 4.56 1.48 1 6 5 -0.662
## 7 7 34284 4.82 1.08 5 4.96 1.48 1 6 5 -1.000
## 8 8 34322 4.81 1.05 5 4.94 1.48 1 6 5 -0.877
## 9 9 34318 4.85 1.09 5 4.99 1.48 1 6 5 -0.998
## 10 10 34297 5.08 0.921 5 5.21 1.48 1 6 5 -1.19
## # ... with 11 more rows, and 4 more variables: kurtosis <dbl>, se <dbl>,
## # Q0.25 <dbl>, Q0.75 <dbl>
elem %>% kable(digit=2) %>% kable_styling(full_width =F,bootstrap_options = "striped", font_size = 10)
vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | Q0.25 | Q0.75 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Admiration | 1 | 34249 | 3.73 | 1.41 | 4 | 3.72 | 1.48 | 1 | 6 | 5 | -0.15 | -0.98 | 0.01 | 3 | 5 |
Altruisme | 2 | 34299 | 4.82 | 1.00 | 5 | 4.94 | 1.48 | 1 | 6 | 5 | -0.86 | 0.73 | 0.01 | 4 | 6 |
Autoritegvt | 3 | 34130 | 4.61 | 1.21 | 5 | 4.75 | 1.48 | 1 | 6 | 5 | -0.83 | 0.12 | 0.01 | 4 | 6 |
Aventure | 4 | 34280 | 3.16 | 1.44 | 3 | 3.12 | 1.48 | 1 | 6 | 5 | 0.28 | -0.91 | 0.01 | 2 | 4 |
Bontemps | 5 | 34294 | 4.14 | 1.31 | 4 | 4.21 | 1.48 | 1 | 6 | 5 | -0.45 | -0.59 | 0.01 | 3 | 5 |
Creativite | 6 | 34280 | 4.44 | 1.25 | 5 | 4.56 | 1.48 | 1 | 6 | 5 | -0.66 | -0.18 | 0.01 | 4 | 5 |
Egalite | 7 | 34284 | 4.82 | 1.08 | 5 | 4.96 | 1.48 | 1 | 6 | 5 | -1.00 | 0.83 | 0.01 | 4 | 6 |
Environnement | 8 | 34322 | 4.81 | 1.05 | 5 | 4.94 | 1.48 | 1 | 6 | 5 | -0.88 | 0.56 | 0.01 | 4 | 6 |
Liberte | 9 | 34318 | 4.85 | 1.09 | 5 | 4.99 | 1.48 | 1 | 6 | 5 | -1.00 | 0.72 | 0.01 | 4 | 6 |
Loyaute | 10 | 34297 | 5.08 | 0.92 | 5 | 5.21 | 1.48 | 1 | 6 | 5 | -1.19 | 1.82 | 0.00 | 5 | 6 |
Modestie | 11 | 34244 | 4.31 | 1.24 | 5 | 4.41 | 1.48 | 1 | 6 | 5 | -0.57 | -0.34 | 0.01 | 4 | 5 |
Nouveau | 12 | 34296 | 4.00 | 1.36 | 4 | 4.04 | 1.48 | 1 | 6 | 5 | -0.30 | -0.82 | 0.01 | 3 | 5 |
Plaisir | 13 | 34295 | 4.03 | 1.32 | 4 | 4.08 | 1.48 | 1 | 6 | 5 | -0.37 | -0.63 | 0.01 | 3 | 5 |
Respect | 14 | 34152 | 3.77 | 1.37 | 4 | 3.77 | 1.48 | 1 | 6 | 5 | -0.17 | -0.92 | 0.01 | 3 | 5 |
RespectdesRegles | 15 | 34147 | 3.76 | 1.41 | 4 | 3.78 | 1.48 | 1 | 6 | 5 | -0.23 | -0.95 | 0.01 | 3 | 5 |
Richesse | 16 | 34311 | 2.85 | 1.33 | 3 | 2.77 | 1.48 | 1 | 6 | 5 | 0.52 | -0.55 | 0.01 | 2 | 4 |
SeConduireBien | 17 | 34257 | 4.27 | 1.25 | 5 | 4.37 | 1.48 | 1 | 6 | 5 | -0.59 | -0.35 | 0.01 | 3 | 5 |
Securite | 18 | 34315 | 4.57 | 1.25 | 5 | 4.72 | 1.48 | 1 | 6 | 5 | -0.79 | -0.09 | 0.01 | 4 | 6 |
Succes | 19 | 34237 | 3.73 | 1.38 | 4 | 3.74 | 1.48 | 1 | 6 | 5 | -0.16 | -0.91 | 0.01 | 3 | 5 |
Tolerance | 20 | 34264 | 4.67 | 1.06 | 5 | 4.77 | 1.48 | 1 | 6 | 5 | -0.87 | 0.63 | 0.01 | 4 | 5 |
Tradition | 21 | 34326 | 4.18 | 1.38 | 4 | 4.28 | 1.48 | 1 | 6 | 5 | -0.55 | -0.56 | 0.01 | 3 | 5 |
Une représentation graphique est sans doute plus utile. On va utiliser un lolipop chart en
elem$label<-row.names(elem)
g<-ggplot(elem, aes(x=reorder(label,mean),y=mean))
g<-g+geom_segment(aes(y = 0, x=reorder(label,mean), xend = label, yend = mean+0.5*sd), color = "grey60", size=0.8) + coord_flip() +geom_point(size=2)
g<-g+ geom_point( aes(x=reorder(label,mean), y=mean-0.5*sd), color=rgb(0.2,0.7,0.1,0.5), size=2 )
g<-g+ geom_point( aes(x=reorder(label,mean), y=mean+0.5*sd), color=rgb(0.7,0.2,0.1,0.5), size=2 )
g
Commençons par analyser les correlations bi-variées. Le probléme est qu’analyser 21 variables, c’est analyser 21x20/2= 210 corrélations. Un tableau illisible pour la plupart d’entre nous. On se tournera donc vers une méthode de visualisation proposée par le package corrplot.
On extrait le bloc de variables qui nous intéressent du fichier de base H. On calcule la correlation entre les variable avec cor, que l’on stocke dans l’objet X, qu’on introduit dans la fonction corrplot avec deux autres paramétres : une méthode de regroupement des variables (hclust que l’on va étudier un peu plus loin et associe les variables qui sont le plus corrélées entres elles, et un nombre de rectangle qui permet d’identifier ces groupes). X n’est pas affiché, on peut afficher les (21x20)/2= 210 corrélations simplement en enlevant le # avant le X.
X<-cor(V, use="complete")
#X
#avec corrplot
corrplot(X,order="hclust", addrect=4) # avec un clustering des variables
L’objectif de l’analyse factorielle exploratoire est de réduire cette batterie d’items en facteurs principaux. (pour en savoir plus voici quelques liens : - sur rblogger - )
L’idée a été introduite Thurstone (1931) notamment pour identifier les structures de l’intelligence, elle est désormais au coeur de la construction des échelles de mesures dont Churchill (1979) a popularisé le processus dans un article fameux pour les sciences de gestion.
L’analyse nous montre qu’il y a apparemment 4 groupes de variables. Si les variables sont représentées par des vecteurs, d’autant plus proche qu’ils sont correlées (le cosinus de leur angle est élevé), on peut rechercher un vecteur moyen, qui indique une variable latente, un concept, dont les variables associées donne la signification.
On utilise ici la fonction factanal
en optant pour une méthode de rotation oblique promax
. Cette dernière permet aux facteurs d’étre corrélés entre eux alors que la rotation varimax
importe l’orthogonalité.
#analyse factorielle
library(GPArotation)
Valeurs <- fa(V,nfactors = 4,rotate = "oblimin",fm="minres")
print(Valeurs, digits = 3)
## Factor Analysis using method = minres
## Call: fa(r = V, nfactors = 4, rotate = "oblimin", fm = "minres")
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 MR4 MR3 MR2 h2 u2 com
## Admiration 0.082 -0.010 0.706 -0.024 0.498 0.502 1.03
## Altruisme 0.626 0.092 -0.017 0.046 0.452 0.548 1.06
## Autoritegvt 0.177 0.415 0.157 -0.020 0.310 0.690 1.67
## Aventure -0.050 -0.134 0.153 0.600 0.484 0.516 1.25
## Bontemps 0.088 0.009 0.045 0.546 0.361 0.639 1.07
## Creativite 0.395 -0.216 0.273 0.117 0.295 0.705 2.62
## Egalite 0.558 -0.015 0.041 -0.056 0.297 0.703 1.03
## Environnement 0.457 0.156 -0.018 0.002 0.277 0.723 1.23
## Liberte 0.395 -0.072 0.159 0.142 0.254 0.746 1.68
## Loyaute 0.552 0.120 -0.024 0.084 0.389 0.611 1.15
## Modestie 0.260 0.366 -0.186 0.016 0.255 0.745 2.36
## Nouveau 0.222 -0.105 0.134 0.460 0.402 0.598 1.76
## Plaisir 0.010 0.094 -0.080 0.734 0.488 0.512 1.06
## Respect -0.058 0.328 0.442 0.041 0.370 0.630 1.91
## RespectdesRegles -0.068 0.545 0.075 0.028 0.301 0.699 1.07
## Richesse -0.276 0.074 0.508 0.166 0.395 0.605 1.84
## SeConduireBien 0.076 0.620 0.007 0.002 0.423 0.577 1.03
## Securite 0.148 0.447 0.217 -0.151 0.348 0.652 1.97
## Succes 0.027 0.058 0.676 0.093 0.558 0.442 1.06
## Tolerance 0.596 0.016 -0.035 0.035 0.369 0.631 1.02
## Tradition 0.037 0.500 0.004 0.048 0.266 0.734 1.03
##
## MR1 MR4 MR3 MR2
## SS loadings 2.334 1.847 1.881 1.732
## Proportion Var 0.111 0.088 0.090 0.082
## Cumulative Var 0.111 0.199 0.289 0.371
## Proportion Explained 0.299 0.237 0.241 0.222
## Cumulative Proportion 0.299 0.536 0.778 1.000
##
## With factor correlations of
## MR1 MR4 MR3 MR2
## MR1 1.000 0.330 0.126 0.279
## MR4 0.330 1.000 0.228 -0.054
## MR3 0.126 0.228 1.000 0.514
## MR2 0.279 -0.054 0.514 1.000
##
## Mean item complexity = 1.4
## Test of the hypothesis that 4 factors are sufficient.
##
## The degrees of freedom for the null model are 210 and the objective function was 5.02 with Chi Square of 174849.5
## The degrees of freedom for the model are 132 and the objective function was 0.31
##
## The root mean square of the residuals (RMSR) is 0.025
## The df corrected root mean square of the residuals is 0.032
##
## The harmonic number of observations is 34119 with the empirical chi square 8946.146 with prob < 0
## The total number of observations was 34837 with Likelihood Chi Square = 10784.65 with prob < 0
##
## Tucker Lewis Index of factoring reliability = 0.903
## RMSEA index = 0.0481 and the 90 % confidence intervals are 0.0474 0.0489
## BIC = 9404.135
## Fit based upon off diagonal values = 0.986
## Measures of factor score adequacy
## MR1 MR4 MR3 MR2
## Correlation of (regression) scores with factors 0.885 0.860 0.885 0.876
## Multiple R square of scores with factors 0.783 0.740 0.784 0.767
## Minimum correlation of possible factor scores 0.567 0.479 0.568 0.534
#on ajoute les scores factoriels ( mean=0 sd=1) c'est é dire les coordonnées des individus
#fans le df de base (H)
H <<- within(H, {
F4Hedonisme <- Valeurs$scores[,4]
F3Conformisme <- Valeurs$scores[,3]
F2Reussite <- Valeurs$scores[,2]
F1Civisme <- Valeurs$scores[,1]
})
Les résultats se présentent sous la forme de 6 éléments
On a bien 4 facteurs dont l’interprétation est assez aisée :
Ce sont ceux qu’ils proposent, les resultats sont consistants.
Les “Uniqueness” qui représentent la variance propre é l’item (ce que n’explique pas les facteurs) sont élevés. C’est compréhensible compte-tenu de la redaction des items qui sont peu redondants, et est en ligne avec l’idée de schartz que les 4 grands facteurs sont des meta-facteurs, les valeurs sont véritablement multiples et se réduisent partiellement é ces quatres dimensions.
La structure profonde est sans doute é deux niveaux : des facteurs et sous-facteurs. C’est ce que suggérent les travaux de Schwartz.
L’usage de questionnaires dans les sciences de gestion a largement emprunté é la littérature psychométrique oé la question de la fiabilité des échelles est depuis longtemps une préoccupation essentielle.
la validité est relative é la question de savoir si on mesure sans biais ce qu’on veut mesurer, la fiabilité est celle de savoir si nos indicateurs, les items sont consistants au sens qu’ils convergent vers la méme valeur.
Un indicateurs historique de la fiabilité est le alpha de cronbach dont les valeurs sont qualitativement évaluées : * 0.90 est excellent et denote une convergence presque parfaite, * 0.60 est acceptable dans le cadre de test, * 0.75 peut étre bon si les items sémantiquement sont peu redondants. * en dessous on peut avoir des doutes d’autant plus prononcés qu’on est é un stade avancé d’évaluation des échelles.
le alpha de crobach mesure la consistance interne de l’échalle. Il estime la part de variance commune des items. Sa formulation est la suivante avec X le score total et xi les items , le coeef tend vers 1 quand la somme de la variance des items est égale à la variance du score et que le nombre des items est élevé.
pour écrire les équations : formules markdown
\[\alpha=\frac{k}{(k-1)}*1-\frac{\sum_{x = i}^{k}\sigma_{x_i}^2}{\sigma_X^2}\]
Elle exprime l’idée que la somme des variance des items sur la variance totale de l’échelle est faible. Autrement dit si cette quantité est faible, c’est que la variance des items ext expliquée par un fateur général plus que par la spécificité des items.Cette quantité est pondéré par le nombre d’item dans l’échelle, si celui ci est important la pondératin tend vers 1.
D’autres méthodes ont été proposés, mais c’est un classique.
Dans le chunks suivant on en fait le calcul. Deux résultats nous intéressent : la fiabilité de l’échelle testée, sa valeur si on enléve l’item d’intérét.
On en profite pour fabriquer les scores en les normalisant sur une échelle de 1 é 6.
On en décrit ensuite les ditribution par des histogrammes simples, un diagramme de densité superposée, et la technique élégante des violons.
H$Val_reussite<-(H$Admiration+H$Respect+H$Succes+H$Richesse)/4
reliability(cov(H[,c("Admiration","Respect","Richesse","Succes")], use="complete.obs"))
## Alpha reliability = 0.7319
## Standardized alpha = 0.7311
##
## Reliability deleting each item in turn:
## Alpha Std.Alpha r(item, total)
## Admiration 0.6431 0.6429 0.5696
## Respect 0.7062 0.7054 0.4615
## Richesse 0.7078 0.7074 0.4571
## Succes 0.6217 0.6212 0.6056
H$Val_plaisir<-(H$Bontemps+H$Aventure+H$Nouveau+H$Plaisir)/4
reliability(cov(H[,c("Bontemps","Aventure","Nouveau","Plaisir")], use="complete.obs"))
## Alpha reliability = 0.7321
## Standardized alpha = 0.7325
##
## Reliability deleting each item in turn:
## Alpha Std.Alpha r(item, total)
## Bontemps 0.6919 0.6915 0.4870
## Aventure 0.6641 0.6651 0.5370
## Nouveau 0.6782 0.6810 0.5118
## Plaisir 0.6528 0.6516 0.5569
H$Val_Civisme<-(H$Altruisme+H$Tolerance+H$Creativite+H$Egalite+H$Environnement+H$Liberte+H$Loyaute)/7
reliability(cov(H[,c("Altruisme","Tolerance","Creativite","Egalite","Environnement","Liberte","Loyaute")], use="complete.obs"))
## Alpha reliability = 0.7316
## Standardized alpha = 0.7395
##
## Reliability deleting each item in turn:
## Alpha Std.Alpha r(item, total)
## Altruisme 0.6788 0.6861 0.5395
## Tolerance 0.6881 0.6979 0.4943
## Creativite 0.7279 0.7322 0.3494
## Egalite 0.7003 0.7101 0.4427
## Environnement 0.7052 0.7147 0.4214
## Liberte 0.7132 0.7236 0.3887
## Loyaute 0.6875 0.6931 0.5127
H$Val_Conformisme<-(H$Modestie+H$RespectdesRegles+H$SeConduireBien+H$Autoritegvt+H$Securite+H$Tradition)/6
reliability(cov(H[,c("Modestie","RespectdesRegles","SeConduireBien","Autoritegvt","Securite","Tradition")], use="complete.obs"))
## Alpha reliability = 0.705
## Standardized alpha = 0.707
##
## Reliability deleting each item in turn:
## Alpha Std.Alpha r(item, total)
## Modestie 0.6920 0.6952 0.3469
## RespectdesRegles 0.6695 0.6713 0.4271
## SeConduireBien 0.6378 0.6401 0.5256
## Autoritegvt 0.6625 0.6642 0.4478
## Securite 0.6546 0.6558 0.4720
## Tradition 0.6756 0.6773 0.4074
#histogrammes
ggplot(H, aes(x=Val_reussite))+geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(H, aes(x=Val_plaisir))+geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(H, aes(x=Val_Civisme))+geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(H, aes(x=Val_Conformisme))+geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#diagramme de densité
Vdf<-subset(H,select=c(Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme))
Vdf<-melt(Vdf)
## No id variables; using all as measure variables
ggplot(Vdf, aes(x=value,fill=variable))+ geom_density(alpha=.3)+scale_fill_manual(values=pal16)
#violin plot
p<-ggplot(Vdf, aes(x=variable, y=value)) #la forme de base
p<-p+geom_violin(trim=FALSE) # le triatement de la queue de distribution
p<-p+ stat_summary(fun.data=mean_sdl, mult=1, geom="pointrange", color="red") #ajout de la mediane
p<-p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9", "#56B4E9"))+ theme_classic()
p
On peut examiner comment ces quatre meta valeurs varient selon les différents variables socio-demo; commenéons par l’ége, on laisse le soin aux étudiants de tester la procédure avec le sexe, l’éducation etc… : AgeClasse, gender, NbFoyer, education
naturellement avant de s’aventurer é interpréter les différences, on s’assure par une simplke anbalyse de variance que ces différences ne sont pas le produit de l’alea de l’échantillonnage, qu’elle sont suffisemment solide pour qu’on puisse le donner un sens, celui de la formulation de l’hypothése théorique. Dans notre cas, l’éducation étant une ressource, on peut supposer que plus elle est abondante et plus on peut préter d’attention au plaisir et é la réussite. le respect des régles devrait étre moins important.
En complément on introduit le calcul du d de cohen pour mesurer la taille de l’effet qui est devenu un standard en psychologie, voir aussi.
Vdf<-subset(H,select=c(gender,Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme))
AnovaModel.1 <- aov(Val_plaisir ~ gender, data=Vdf)
summary(AnovaModel.1)
## Df Sum Sq Mean Sq F value Pr(>F)
## gender 1 199 198.73 195.9 <2e-16 ***
## Residuals 33978 34467 1.01
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 857 observations deleted due to missingness
with(Vdf, numSummary(Val_plaisir, groups=gender
, statistics=c("mean", "sd")))
## mean sd data:n data:NA
## F 3.763226 1.025606 17655 431
## H 3.916294 0.986838 16325 377
#cohen.d(Vdf$Val_plaisir, Vdf$education)
Vdf<-aggregate(cbind(Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme)~ gender,data=Vdf,FUN=mean)
Vdf<-melt(Vdf, id="gender")
g<-ggplot(Vdf,aes(x=gender,y=value,group=variable))+geom_line(aes(color=variable), size=1.5)+scale_color_manual(values=pal16)+ylim(3,5.5) + coord_flip()
g
On observe un gradiant systématique : les valeurs civiques et celles de la réussite sont d’autant plus fortes que le niveau d’éducation est élevé. La conformité aux régles se réduit en proportion. Quand aux valeurs hédonique elles semblent étre les faits des niveaux intermédiaires. Il y a dans ce résultat une indication sur la relation entre les valeurs et les ressources.
Pays et par pays on observe plutot ceci (on classe les pays par leur score moyen avec la fonction reorder()
.
La valeur civique semble assez bien partagée. Conformisme et hédonisme semblent étre négativement liés. La valeur réussite est plus faible dans la partie occidentale de l’europe.
Un test d’analyse de variance permet de s’assurance de la pertience d’interpreter les différences ( on laisse é la réflexion des étudiants un aspect intéressant de la taille de l’échantillon : é une échelle de plusieurs dizaines de milliers d’observation, les test sont toujours significatifs)
Vdf<-subset(H,select=c(cntry,Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme))
Vdf<-aggregate(cbind(Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme)~ cntry, data=Vdf,FUN=mean)
Vdf<-melt(Vdf, id=c("cntry"))
ggplot(Vdf,aes(x=reorder(cntry,value),y=value,group=variable))+geom_line(aes(color=variable), size=1.5)+scale_color_manual(values=pal16)+coord_flip()
Au cours des années 80, l’analyses factorielle a connu un nouveau développement avec l’idée de modéle confirmatoire. L’article de Joreskorg en 1969 marque un tournant. Il developpera ce travail en introduisant le premier systéme d’évaluation de modéle structurels é variables latente : le fameux lisrel. http://www.ssicentral.com/lisrel/
On peut aussi tester notre structure avec un modéle confirmatoire, le modéle CFA. La différence avec l’EFA c’est qu’on impose des contraintes sur les paramétres, certains sont fixés é zero. Dans ce modéle chaque item de l’échelle de valeurs dépend d’un seul facteur et d’un terme spécifique.
On utilise ici les ressources de lavaan et pour le graphique celles de semplot.
#avec http://lavaan.ugent.be/tutorial/cfa.html
Value.model <- ' civism =~ Altruisme + Egalite + Tolerance +Creativite+ Environnement +Liberte
ordre =~ Autoritegvt + SeConduireBien + Tradition + Securite+ RespectdesRegles
reussite =~ Admiration + Respect + Succes + Richesse
hedonism =~ Aventure + Bontemps + Succes+Nouveau+Plaisir '
fit <- cfa(Value.model, data=H)
summary(fit, fit.measures=TRUE,standardized=TRUE)
## lavaan 0.6-3 ended normally after 42 iterations
##
## Optimization method NLMINB
## Number of free parameters 45
##
## Used Total
## Number of observations 32814 34837
##
## Estimator ML
## Model Fit Test Statistic 22292.101
## Degrees of freedom 145
## P-value (Chi-square) 0.000
##
## Model test baseline model:
##
## Minimum Function Test Statistic 142617.075
## Degrees of freedom 171
## P-value 0.000
##
## User model versus baseline model:
##
## Comparative Fit Index (CFI) 0.845
## Tucker-Lewis Index (TLI) 0.817
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -962303.758
## Loglikelihood unrestricted model (H1) -951157.707
##
## Number of free parameters 45
## Akaike (AIC) 1924697.516
## Bayesian (BIC) 1925075.454
## Sample-size adjusted Bayesian (BIC) 1924932.444
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.068
## 90 Percent Confidence Interval 0.067 0.069
## P-value RMSEA <= 0.05 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.064
##
## 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
## civism =~
## Altruisme 1.000 0.632 0.637
## Egalite 0.895 0.012 72.353 0.000 0.566 0.526
## Tolerance 0.975 0.012 78.271 0.000 0.617 0.588
## Creativite 0.838 0.014 61.079 0.000 0.530 0.425
## Environnement 0.837 0.012 70.178 0.000 0.530 0.505
## Liberte 0.786 0.012 65.082 0.000 0.497 0.459
## ordre =~
## Autoritegvt 1.000 0.711 0.589
## SeConduireBien 1.050 0.014 75.263 0.000 0.747 0.598
## Tradition 0.949 0.014 65.854 0.000 0.675 0.489
## Securite 1.078 0.014 76.423 0.000 0.767 0.614
## RespectdesRgls 0.997 0.015 67.297 0.000 0.709 0.504
## reussite =~
## Admiration 1.000 0.979 0.699
## Respect 0.794 0.009 85.507 0.000 0.777 0.570
## Succes 0.978 0.012 78.722 0.000 0.957 0.698
## Richesse 0.733 0.009 81.818 0.000 0.718 0.541
## hedonism =~
## Aventure 1.000 0.958 0.666
## Bontemps 0.806 0.010 84.806 0.000 0.772 0.592
## Succes 0.143 0.010 13.811 0.000 0.137 0.100
## Nouveau 0.905 0.010 89.889 0.000 0.867 0.641
## Plaisir 0.886 0.010 90.587 0.000 0.848 0.648
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## civism ~~
## ordre 0.217 0.004 49.136 0.000 0.483 0.483
## reussite 0.161 0.005 31.956 0.000 0.260 0.260
## hedonism 0.277 0.006 49.860 0.000 0.458 0.458
## ordre ~~
## reussite 0.327 0.007 49.734 0.000 0.470 0.470
## hedonism 0.040 0.005 7.674 0.000 0.059 0.059
## reussite ~~
## hedonism 0.523 0.009 57.799 0.000 0.558 0.558
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .Altruisme 0.585 0.006 97.018 0.000 0.585 0.594
## .Egalite 0.836 0.008 110.784 0.000 0.836 0.723
## .Tolerance 0.718 0.007 104.050 0.000 0.718 0.654
## .Creativite 1.272 0.011 118.169 0.000 1.272 0.819
## .Environnement 0.817 0.007 112.610 0.000 0.817 0.745
## .Liberte 0.923 0.008 116.054 0.000 0.923 0.789
## .Autoritegvt 0.955 0.009 103.650 0.000 0.955 0.654
## .SeConduireBien 1.003 0.010 102.447 0.000 1.003 0.643
## .Tradition 1.449 0.013 113.703 0.000 1.449 0.761
## .Securite 0.971 0.010 100.146 0.000 0.971 0.623
## .RespectdesRgls 1.478 0.013 112.492 0.000 1.478 0.746
## .Admiration 1.005 0.011 91.797 0.000 1.005 0.512
## .Respect 1.257 0.011 110.592 0.000 1.257 0.675
## .Succes 0.802 0.010 81.316 0.000 0.802 0.426
## .Richesse 1.243 0.011 113.100 0.000 1.243 0.707
## .Aventure 1.148 0.012 97.525 0.000 1.148 0.556
## .Bontemps 1.104 0.010 107.605 0.000 1.104 0.650
## .Nouveau 1.077 0.011 101.439 0.000 1.077 0.589
## .Plaisir 0.992 0.010 100.360 0.000 0.992 0.580
## civism 0.400 0.007 54.538 0.000 1.000 1.000
## ordre 0.506 0.010 49.666 0.000 1.000 1.000
## reussite 0.958 0.015 62.956 0.000 1.000 1.000
## hedonism 0.917 0.015 59.450 0.000 1.000 1.000
semPaths(fit, layout = "circle",'std', style="lisrel",nCharNodes=6)
Les résultats valident la structure, tout les lambda sont significatifs et importants. On peut avoir l’habitude de valeur plus faibles, mais lé les items sont heterogénes dans leurs formulation, ils ont une forte spécificité rencontre dans l’EFA.
mais le RMSEA de 0.068 est acceptable compte tenu de la complexité du modéle.
L’information intéressante est dans la corrélation des facteurs. La réussite et l’hédonisme vont de pair. L’ordre et la réussite aussi. On a ici deux systémes de valeurs. En troisiéme lieu une bonne liaison entre civisme et hédonisme.
A ce stade de l’analyse on commence é comprendre la structure des valeurs : une sorte de double plan :
l’un se structure dans la polarité Hédonisme/ordre, la seconde Civisme/ réussite personnel. (carré sémiotique ?)
Puisqu’on comprend mieux la structure de l’échelle, et ses variations, on peut passer é la seconde téche : identifier des groupes qui partagent les mémes valeurs.
On construit la typologie en deux temps. D’abord sur un petit échantillon une évaluation des groupes, puis on emploie la méthode kmeans qui permet de traiter l’ensemble de l’échantillon large .
Pour explorer les partitions possibles de l’ensemble des individus on va s’appuyer sur la fonction hclust
dont les paramétres sont a) le tableau de distance ( obtenu par la fonction dist appliqué au tableau de données b) la méthode de regroupement ici ward.D2
qui marche bien le plus souvent ( en particulier si les distances sont euclidienne).
Cette méthode consiste é regroupper successivement les classes les plus proches. Elle est spécifié par un double choix : l’indicateur de distance, et choix de la distance é retenir quand on évalue la distance entre deux groupes : la plus petite des distances des individus des deux classes, ou au contraire la plus longue.
Ces méthodes ont été proposées d’abord dans le champs de la biologie pour répondre aux problémes de la classification des éspéces en particulier par sokal et sneath.
Pour une explcation plus détailleé voir xxx, . Le package `ape’ apportent des ressources particuliérement riche, méme si on ne l’utilise pas dans cette application.
Les premiéres lignes servent é “sampler” notre base d’étude. La classification ne prend qu’une ligne, on affiche les résultat avec plot
, les autres lignes permettent de faire un peu de décoration avec les ressources du package .
mysample<-subset(H,select=c(F4Hedonisme,F3Conformisme,F2Reussite,F1Civisme)) #on isole les variables
set.seed(42)
mysample <- mysample[sample(1:nrow(H),1000,replace=FALSE),] #on echantillonne les individus
mysample<-as.data.frame(mysample) #on cree le dataframe
mysample<- mysample[complete.cases(mysample), ] #on filtre sur les observations valides
la fonction hclust dont les paramétres sont a) le tableau de distance ( obtenu par la fonction dist appliquée au tableau de données b) la méthode de regroupement ici ward.D2 qui marche bien le plus souvent. Les autres paramétres labellisent le graphique. Avec cutree
, on choisit le nombre de groupe qui nous semble adéquat. Les lignes suivantes améliorent le graphique (dplyr
est requis)
ClustHV <- hclust(dist(mysample), method= "ward.D2") #clustering
plot(ClustHV, main= "Typologie des valeurs (Schwartz)", xlab= "Observation", sub="Method=ward; Distance=euclidian")
ClustHV5 <- cutree(ClustHV, k=5) # cut tree into 5 clusters
#un peu de decoration avec dendextend
Dend<-as.dendrogram(ClustHV)
Dend<-hang.dendrogram(Dend)
Dend<-Dend %>% set("branches_lwd", 1.5)
Dend<-Dend %>% set("labels_colors", k=5)
plot(Dend,horiz=T)
Le probléme principal posé par cette famille de méthode, outre le choix des distances et des algorithmes d’agrégation est celui de déterminer le nombre de groupes optimum. NBClust
, un package qui calcule plus de 30 indices pour évaluer la qualité d’une partition, est un outil particuliérement utile é cette fin. Il répond é un besoin exprimé depuis trés longtemps.
On explore ici toute les solutions de 3 é 12 groupes et pour tous les indices, et une méthode du vote majoritaire (le nombre de groupes qui est le plus souvent indiqué par les 30 indices disponibles) aide é conclure . Dans notre cas une majorité penche pour 4 groupes. Pour en savoir plus on consultera ce lien.
Dans la foulée, on constitue le fichier des centres de classes qu’on va employer ensuite pour initialiser la solution kmeans
, avec une simple aggrégation.
#test du nombre de groupes avec la fonction nbclust
nb <- NbClust(mysample, distance = "euclidean", min.nc = 3, max.nc = 12, method = "ward.D2",index="all", alphaBeale = 0.1)
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 8 proposed 3 as the best number of clusters
## * 3 proposed 4 as the best number of clusters
## * 4 proposed 5 as the best number of clusters
## * 3 proposed 6 as the best number of clusters
## * 3 proposed 7 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
## * 1 proposed 11 as the best number of clusters
## * 1 proposed 12 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 3
##
##
## *******************************************************************
# Print the result
nb
## $All.index
## KL CH Hartigan CCC Scott Marriot TrCovW
## 3 0.0474 312.2362 101.1926 -13.9172 1411.887 141215826269 148862.11
## 4 6.7263 264.3984 102.9766 -20.2745 1715.075 181016784663 142241.28
## 5 0.3101 245.8999 107.1941 -20.0523 2112.820 184161033024 138085.81
## 6 2.0124 240.7685 83.2776 -18.5803 2400.762 194384128647 98390.70
## 7 27.0813 232.4095 63.8677 -17.8486 2659.570 200126392185 79083.60
## 8 0.6091 221.9199 55.1835 -17.6970 2869.205 208485257538 64112.88
## 9 0.6642 212.5064 50.4995 -17.6188 3073.010 211786615101 53946.76
## 10 0.4649 204.6736 46.5624 -17.4787 3241.828 217933145650 53587.38
## 11 0.3498 197.9997 45.8902 -17.2983 3406.178 220857183834 45901.33
## 12 1.2659 192.9784 41.4365 -16.9526 3575.776 218893598236 42275.31
## TraceW Friedman Rubin Cindex DB Silhouette Duda Pseudot2
## 3 1629.5423 4.0083 1.6762 0.2737 1.5168 0.2263 0.7289 137.9590
## 4 1468.6968 4.7126 1.8597 0.2659 1.6176 0.1693 0.7755 107.0923
## 5 1321.2847 5.7082 2.0672 0.2474 1.7338 0.1545 0.6373 102.4364
## 6 1183.6683 6.4382 2.3076 0.2925 1.6021 0.1680 0.6962 92.9293
## 7 1085.5151 7.1280 2.5162 0.2849 1.4919 0.1721 0.7331 73.8935
## 8 1015.0489 7.7570 2.6909 0.2740 1.4886 0.1625 0.6912 69.2596
## 9 957.5506 8.4476 2.8525 0.2655 1.4283 0.1659 0.6906 51.9701
## 10 907.6220 9.0066 3.0094 0.3399 1.4157 0.1669 0.5859 63.6193
## 11 863.7628 9.5774 3.1622 0.3347 1.3226 0.1645 0.7554 53.7418
## 12 822.5541 10.1542 3.3206 0.3240 1.3924 0.1590 0.7609 46.2010
## Beale Ratkowsky Ball Ptbiserial Frey McClain Dunn Hubert
## 3 0.8953 0.3609 543.1808 0.4172 1.4600 1.2032 0.0349 0.0007
## 4 0.6969 0.3369 367.1742 0.3795 0.4149 1.7411 0.0349 0.0008
## 5 1.3663 0.3183 264.2569 0.3684 0.0255 2.5465 0.0349 0.0008
## 6 1.0484 0.3063 197.2780 0.3855 0.1953 2.7182 0.0433 0.0009
## 7 0.8745 0.2931 155.0736 0.3866 0.3541 3.0664 0.0441 0.0010
## 8 1.0718 0.2799 126.8811 0.3743 0.1085 3.5995 0.0441 0.0010
## 9 1.0724 0.2682 106.3945 0.3768 0.0821 3.7887 0.0441 0.0011
## 10 1.6878 0.2580 90.7622 0.3794 0.1129 3.8962 0.0578 0.0011
## 11 0.7769 0.2490 78.5239 0.3801 0.3440 3.9875 0.0578 0.0011
## 12 0.7536 0.2411 68.5462 0.3666 0.2823 4.5272 0.0578 0.0013
## SDindex Dindex SDbw
## 3 2.3618 1.2335 1.6536
## 4 2.7059 1.1636 1.2177
## 5 2.5864 1.0988 1.3902
## 6 2.3604 1.0414 1.3065
## 7 2.2878 1.0036 1.0029
## 8 2.4162 0.9702 0.6746
## 9 2.3270 0.9441 0.5483
## 10 2.6250 0.9228 0.4690
## 11 2.4158 0.9024 0.4362
## 12 2.9221 0.8793 0.4015
##
## $All.CriticalValues
## CritValue_Duda CritValue_PseudoT2 Fvalue_Beale
## 3 0.7362 132.9207 0.4659
## 4 0.7361 132.6584 0.5941
## 5 0.6911 80.4639 0.2440
## 6 0.7030 89.9668 0.3811
## 7 0.6997 87.1134 0.4787
## 8 0.6796 73.0785 0.3695
## 9 0.6548 61.1420 0.3696
## 10 0.6302 52.8136 0.1522
## 11 0.6850 76.3502 0.5404
## 12 0.6753 70.6752 0.5558
##
## $Best.nc
## KL CH Hartigan CCC Scott Marriot
## Number_clusters 7.0000 3.0000 6.0000 3.0000 5.0000 5
## Value_Index 27.0813 312.2362 23.9165 -13.9172 397.7445 7078847261
## TrCovW TraceW Friedman Rubin Cindex DB Silhouette
## Number_clusters 6.00 6.0000 5.0000 7.000 5.0000 11.0000 3.0000
## Value_Index 39695.11 39.4632 0.9956 -0.034 0.2474 1.3226 0.2263
## Duda PseudoT2 Beale Ratkowsky Ball PtBiserial Frey
## Number_clusters 4.0000 4.0000 3.0000 3.0000 4.0000 3.0000 3.00
## Value_Index 0.7755 107.0923 0.8953 0.3609 176.0066 0.4172 1.46
## McClain Dunn Hubert SDindex Dindex SDbw
## Number_clusters 3.0000 10.0000 0 7.0000 0 12.0000
## Value_Index 1.2032 0.0578 0 2.2878 0 0.4015
##
## $Best.partition
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 1 1 2 1 3 1 3 1 2 1 1 1 2 2 3
## 16 17 19 20 21 22 23 24 25 26 27 29 30 31 32
## 1 2 2 2 2 2 2 1 1 1 2 3 1 1 1
## 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
## 3 1 2 3 1 1 3 1 1 1 1 2 3 3 3
## 48 49 51 52 53 54 56 57 58 59 61 62 63 64 65
## 2 1 2 2 1 1 2 1 2 2 2 2 2 3 1
## 66 67 68 69 70 71 72 74 75 76 77 78 79 80 81
## 1 2 1 3 2 1 2 2 3 1 2 1 3 2 2
## 82 83 84 85 86 87 88 90 91 92 93 94 95 96 97
## 1 3 2 1 1 1 3 1 2 3 3 3 1 2 2
## 98 99 100 102 103 104 105 106 107 108 109 110 111 112 113
## 2 3 1 1 1 1 1 3 1 2 1 1 3 2 2
## 114 115 117 118 119 120 121 122 123 124 125 126 127 128 129
## 1 1 2 1 2 1 1 2 3 1 2 3 1 1 3
## 130 131 132 134 135 136 137 138 139 140 141 142 143 144 145
## 1 3 2 1 1 2 1 2 2 2 2 1 2 1 1
## 146 147 148 149 151 152 153 154 155 156 157 158 159 160 161
## 1 3 3 1 3 1 1 1 2 2 3 1 3 2 3
## 162 163 164 165 166 168 169 170 171 172 174 175 176 178 179
## 2 3 2 1 1 1 2 1 1 1 3 1 3 2 2
## 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
## 1 2 1 2 3 1 3 2 2 2 1 2 1 2 1
## 195 196 197 198 200 201 202 205 206 207 208 209 210 211 212
## 3 2 1 1 2 2 3 3 3 3 3 2 2 1 3
## 213 214 215 216 217 218 219 221 222 223 224 225 226 227 228
## 1 1 2 1 2 1 3 1 3 1 3 1 1 2 1
## 229 231 232 233 234 235 236 237 238 239 240 241 242 243 244
## 2 3 2 3 2 2 3 2 2 2 1 2 2 2 3
## 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
## 2 2 2 2 1 1 1 3 3 1 2 1 1 2 1
## 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
## 2 2 3 2 2 1 1 1 3 2 2 3 3 2 1
## 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
## 2 3 2 2 2 1 3 2 2 1 1 3 1 2 3
## 290 291 292 293 294 295 296 297 298 299 301 302 303 304 306
## 2 3 2 3 1 3 1 1 3 2 2 2 1 2 3
## 308 309 310 311 312 313 314 315 317 318 319 320 321 322 323
## 3 1 3 2 2 1 3 2 2 2 2 1 1 2 1
## 324 325 326 327 328 329 330 332 333 334 335 336 337 338 339
## 1 2 1 1 1 3 1 2 3 1 2 2 1 1 1
## 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
## 3 2 2 2 1 1 3 1 3 1 1 2 3 2 2
## 356 358 359 360 361 363 364 365 366 367 368 369 370 371 372
## 3 3 2 1 2 1 3 1 3 2 1 2 2 2 2
## 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
## 2 2 1 2 1 1 2 1 3 2 2 1 1 2 1
## 389 390 391 392 393 394 396 397 398 399 400 401 402 404 405
## 2 3 3 2 1 2 3 2 1 1 2 2 2 1 2
## 406 407 408 409 411 412 413 414 416 417 418 419 420 421 422
## 2 1 1 2 3 2 2 1 1 2 1 2 1 2 1
## 423 424 425 426 427 428 429 430 431 432 433 434 436 437 438
## 2 1 1 3 1 1 1 3 1 1 1 2 1 3 3
## 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
## 2 2 2 2 3 2 3 3 2 1 2 1 2 1 1
## 454 455 456 458 459 460 461 462 463 464 465 466 467 468 469
## 3 2 1 1 2 1 3 1 1 3 3 2 3 2 1
## 470 471 472 474 475 476 477 478 479 480 481 482 483 484 485
## 2 2 1 1 1 3 2 1 3 1 1 2 1 1 2
## 486 488 489 490 491 492 493 494 495 496 497 498 499 500 501
## 3 3 1 2 2 1 2 2 2 3 2 1 3 1 1
## 502 503 504 505 507 508 509 510 511 512 513 514 516 517 518
## 2 2 1 1 3 2 1 3 2 2 3 2 3 2 2
## 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533
## 1 1 3 2 1 1 2 1 2 1 3 1 2 2 2
## 534 535 536 537 538 539 540 541 542 543 544 545 546 548 549
## 2 1 2 1 1 2 2 3 3 1 2 1 2 3 2
## 550 551 552 553 554 555 556 557 558 559 560 561 562 563 565
## 1 1 1 2 1 1 2 2 1 1 2 1 2 1 1
## 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580
## 1 2 1 2 1 3 1 1 2 3 2 1 2 3 1
## 581 583 584 585 586 587 588 589 590 591 592 593 594 595 596
## 1 2 1 2 3 2 2 1 2 2 2 1 2 3 2
## 598 600 601 602 603 604 605 606 607 608 609 610 611 612 613
## 2 2 2 1 1 2 1 3 2 2 2 2 1 1 2
## 614 615 617 618 619 620 621 622 623 624 625 626 627 628 629
## 3 2 3 3 2 2 1 2 2 2 2 1 1 2 1
## 630 631 632 633 634 635 636 637 639 640 641 642 643 645 646
## 3 3 1 2 1 1 1 1 1 1 1 1 3 3 2
## 648 649 650 652 653 654 655 656 657 658 659 660 661 663 664
## 1 1 1 1 1 1 2 3 1 1 1 3 2 1 3
## 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
## 2 1 3 1 1 1 2 3 3 1 1 1 1 1 2
## 680 681 682 683 684 685 686 687 688 689 690 692 693 694 695
## 2 1 2 1 2 2 2 1 1 2 3 2 2 2 2
## 696 697 699 700 702 703 704 706 708 709 710 712 713 714 715
## 1 1 2 3 2 3 1 1 3 2 1 2 2 1 3
## 716 718 719 720 721 722 723 724 725 726 727 728 729 730 731
## 2 1 2 2 2 2 1 2 1 3 1 3 2 1 2
## 732 733 734 735 736 737 738 739 740 741 743 744 745 746 747
## 1 2 2 2 3 3 3 2 1 1 2 1 1 2 2
## 748 749 750 751 752 754 755 756 757 758 759 760 761 762 763
## 2 3 2 1 2 2 2 1 2 2 1 1 1 1 2
## 764 765 767 768 769 770 771 772 773 774 775 776 777 778 779
## 3 2 1 2 2 2 2 2 3 2 3 3 2 2 2
## 780 782 783 784 785 786 787 789 790 792 793 794 795 796 797
## 1 2 1 1 2 3 1 1 2 1 1 2 3 1 1
## 798 799 800 801 802 803 804 805 807 808 809 810 811 812 813
## 2 2 1 1 3 1 1 3 2 1 1 1 3 1 2
## 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828
## 2 1 1 3 1 3 2 1 2 2 2 1 1 2 2
## 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843
## 3 1 1 1 3 1 1 2 2 2 2 1 2 2 3
## 844 845 846 847 848 849 850 851 852 853 854 855 856 857 859
## 2 3 2 1 3 2 1 1 2 2 1 3 2 2 1
## 860 862 863 864 865 867 868 869 870 871 872 873 874 875 876
## 3 1 2 3 1 3 2 2 1 3 2 1 1 1 3
## 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891
## 2 3 2 1 1 3 2 3 1 1 1 3 2 2 1
## 892 893 894 895 896 897 898 899 900 901 902 903 904 905 907
## 1 1 2 2 1 1 1 2 2 1 2 2 2 3 2
## 909 910 911 912 913 914 915 917 918 919 920 921 922 923 924
## 1 1 2 1 1 2 1 2 1 2 1 3 2 1 2
## 925 926 927 928 930 931 932 933 935 937 938 939 940 941 942
## 2 1 2 1 1 2 2 3 3 3 1 2 1 1 2
## 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957
## 2 1 1 1 2 3 2 2 1 1 2 2 2 1 2
## 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972
## 2 2 2 3 2 1 2 2 3 2 1 1 1 3 3
## 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987
## 2 2 2 3 2 1 3 2 2 2 1 1 2 1 2
## 988 989 990 992 993 994 995 996 997 998 999 1000
## 1 3 1 3 2 2 1 1 3 1 1 1
fviz_nbclust(nb) + theme_minimal()
## Among all indices:
## ===================
## * 2 proposed 0 as the best number of clusters
## * 8 proposed 3 as the best number of clusters
## * 3 proposed 4 as the best number of clusters
## * 4 proposed 5 as the best number of clusters
## * 3 proposed 6 as the best number of clusters
## * 3 proposed 7 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
## * 1 proposed 11 as the best number of clusters
## * 1 proposed 12 as the best number of clusters
##
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is 3 .
#sauvegarde des centres de classes
mysample$cluster <- assignCluster(mysample,mysample,ClustHV5)
Initial<-as.matrix(aggregate(cbind(F4Hedonisme,F3Conformisme,F2Reussite,F1Civisme)~ cluster, data=mysample,FUN=mean))
Initial
## cluster F4Hedonisme F3Conformisme F2Reussite F1Civisme
## [1,] "1" "-0.783914783" "-0.87294888" "-0.04268095" "-0.132926662"
## [2,] "2" " 0.826892221" " 1.04473571" " 0.70723181" " 0.728358493"
## [3,] "3" "-0.559744557" "-0.05521409" " 0.76278058" " 0.373885097"
## [4,] "4" "-0.009488216" "-0.43303348" "-1.07422264" "-0.741343788"
## [5,] "5" " 0.599515917" " 0.48311365" "-0.21951238" " 0.009991042"
Cette analyse sur un échantillon indique que le nombre optimum est de 3, 5 étant le second concurrent.
On part sur l’ hypothése d’une partition é 5 groupes en generalisant avec une méthode kmeans. L’astuce est qu’on prendra comme centre de groupes initiaux la solution précédentes.
pour en savoir plus sur kmeans : https://uc-r.github.io/kmeans_clustering
Avant d’analyser le profil des groupes on observera qu’avec notre partition , la variance entre les groupes représente presque 60% de la variance totale.
#les classes initiales
H<- H[complete.cases(H), ]
Kdf<- subset(H,select=c(F4Hedonisme, F3Conformisme , F2Reussite , F1Civisme))
set.seed(239)
Cluster <- kmeans(Kdf[, 1:4], centers=5, nstart = 25, iter.max = 200, algorithm="MacQueen")
H$KMeans <- assignCluster(H,Kdf,Cluster$cluster)
Cluster$size # Effectifs des Cluste
## [1] 2943 1958 2449 2778 1803
Cluster$centers # Cluster Centroids
## F4Hedonisme F3Conformisme F2Reussite F1Civisme
## 1 -0.7963279 -0.4822977 0.72680591 0.3041223
## 2 0.1781069 -0.5908922 -0.51315529 0.4900884
## 3 0.3651100 0.5696762 -0.09059955 -0.3296810
## 4 0.7646141 0.9176065 0.80760324 0.8219914
## 5 -0.8087633 -0.7693738 -0.60456095 -1.0373149
Cluster$withinss # Within Cluster Sum of Squares
## [1] 3503.540 2320.734 2570.639 3021.752 2781.954
Cluster$tot.withinss # Total Within Sum of Squares
## [1] 14198.62
Cluster$betweenss # Between Cluster Sum of Squares
## [1] 19462.22
remove(Cluster)
Les groupes sont affectés , il n’y a plus qu’a examiner les profils par une méthodes graphique. On fait d’abord une comparaison des profils avec un simple diagramme en ligne avec ggplot
Mais la solution la plus pratique est celle d’un diagramme radar interactif, qui permet de mieux analyser les profils de nos 5 types.
#diagramme en ligne
Vdf<-subset(H,select=c(KMeans,Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme))
Vdf<-aggregate(cbind(Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme)~ KMeans, data=Vdf,FUN=mean)
Vdf<-melt(Vdf, id=c("KMeans"))
ggplot(Vdf,aes(x=variable,y=value,group=KMeans))+geom_line(aes(color=KMeans), size=1.5)
#diagramme radar
Vdf<-subset(H,select=c(KMeans,Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme))
Vdf<-aggregate(cbind(Val_reussite,Val_plaisir,Val_Civisme,Val_Conformisme)~ KMeans, data=Vdf,FUN=mean)
#radarDF <- Vdf %>% select(KMeans,2:5) %>% as.data.frame()
radarDF <- gather(Vdf, key=Label, value=Score, -KMeans) %>% spread(key=KMeans, value=Score)
chartJSRadar(scores = radarDF, maxScale = 6, minScale=0, scaleStartValue=1, labelSize =16,showToolTipLabel = TRUE)
Le radar plot est pratique pour interpreter les profils :
le travail interprétatif conduit é 5 dénominations
autoritarisme“” “scepticisme” * “Réussite etlegitimité” “civisme et hedonisme”" “Pluralisme”
Pour mieux apprécier ces configurations , on peut revenir aux données initiales et refaire le radarplot avec les 21 valeurs.
Vdf<-subset(H,select=c(KMeans,Admiration,Altruisme,Autoritegvt,Aventure,Bontemps,
Creativite,Egalite,Environnement,Liberte,Loyaute,Modestie,
Nouveau,Plaisir,Respect,RespectdesRegles,Richesse,SeConduireBien,Securite,Succes,Tolerance,Tradition))
H$KMeansb[Vdf$KMeans=="1"]<-"Scepticisme"
H$KMeansb[Vdf$KMeans=="2"]<-"HedonismeCivique"
H$KMeansb[Vdf$KMeans=="3"]<-"RéussiteLégitime"
H$KMeansb[Vdf$KMeans=="4"]<-"Polyethique"
H$KMeansb[Vdf$KMeans=="5"]<-"Hedonisme materiel"
H$KMeansb<-as.factor(H$KMeansb)
Vdf<-subset(H,select=c(KMeansb,Admiration,Altruisme,Autoritegvt,Aventure,Bontemps,
Creativite,Egalite,Environnement,Liberte,Loyaute,Modestie,
Nouveau,Plaisir,Respect,RespectdesRegles,Richesse,SeConduireBien,Securite,Succes,Tolerance,Tradition))
Vdf<-aggregate(cbind(Admiration,Altruisme,Autoritegvt,Aventure,Bontemps,
Creativite,Egalite,Environnement,Liberte,Loyaute,Modestie,
Nouveau,Plaisir,Respect,RespectdesRegles,Richesse,SeConduireBien,Securite,Succes,Tolerance,Tradition)~ KMeansb, data=Vdf,FUN=mean)
radarDF <- gather(Vdf, key=Label, value=Score, -KMeansb) %>% spread(key=KMeansb, value=Score)
chartJSRadar(scores = radarDF, maxScale = 7, minScale=1, scaleStartValue=1, labelSize =16,showToolTipLabel = TRUE)
L’étape précédente visait é décrire les classes en fonctions des variables qui ont permis de les élaborer. Il y a un caractére tautologique et interne.
Pour mieux apprécier la qualité de la typologie il est utile d’examiner quelles variables externes, en l’occurennce les profils sociodémographique, sont associés é ces différents types. On croisera donc la typologie avec par exemple les niveaux d’éducations ( On laisse le soin aux étudiants de copier le chunk et é l’adpater aux autres variables : age, sexe, )
Pour chaque variable une analyse en trois temps est effectuée : 1 - analyse du tableau croisé 2 - test du chié pour s’assurer d’une dépendance ( pour comprendre le test du chi2 on se reportera é xxxxxx) 3 - analyse factorielle des correspondance sur le tableau (pour l’AFC simple on se reportera é xxxxx) Des tableaux, une AFC, et quelques graphiques ggplots
Vdf<-subset(H,select=c(KMeansb,education,cntry))
#tableau croisé
.Table <- with(Vdf, table(KMeansb))
cat("\ncounts:\n")
##
## counts:
print(.Table)
## KMeansb
## Hedonisme materiel HedonismeCivique Polyethique
## 1803 1958 2778
## RéussiteLégitime Scepticisme
## 2449 2943
cat("\npercentages:\n")
##
## percentages:
print(round(100*.Table/sum(.Table), 2))
## KMeansb
## Hedonisme materiel HedonismeCivique Polyethique
## 15.11 16.41 23.28
## RéussiteLégitime Scepticisme
## 20.53 24.67
mytable <- xtabs(~education+KMeansb, data=Vdf)
mytable
## KMeansb
## education Hedonisme materiel HedonismeCivique
## 2 primary 149 92
## 3 Lower secondary 276 204
## 4 Upper secondary 584 637
## 5 Post-second non tertia. 136 122
## 6 Short-cycle tertiary 179 221
## 7 Bachelor 226 310
## 8 Master 231 336
## 9 Doctoral 22 36
## KMeansb
## education Polyethique RéussiteLégitime Scepticisme
## 2 primary 190 111 251
## 3 Lower secondary 314 316 516
## 4 Upper secondary 1118 840 1015
## 5 Post-second non tertia. 171 166 194
## 6 Short-cycle tertiary 250 252 298
## 7 Bachelor 372 358 287
## 8 Master 327 371 360
## 9 Doctoral 36 35 22
print(rowPercents(mytable))
## KMeansb
## education Hedonisme materiel HedonismeCivique
## 2 primary 18.8 11.6
## 3 Lower secondary 17.0 12.5
## 4 Upper secondary 13.9 15.2
## 5 Post-second non tertia. 17.2 15.5
## 6 Short-cycle tertiary 14.9 18.4
## 7 Bachelor 14.6 20.0
## 8 Master 14.2 20.7
## 9 Doctoral 14.6 23.8
## KMeansb
## education Polyethique RéussiteLégitime Scepticisme Total
## 2 primary 24.0 14.0 31.7 100.1
## 3 Lower secondary 19.3 19.4 31.7 99.9
## 4 Upper secondary 26.7 20.0 24.2 100.0
## 5 Post-second non tertia. 21.7 21.0 24.6 100.0
## 6 Short-cycle tertiary 20.8 21.0 24.8 99.9
## 7 Bachelor 24.0 23.1 18.5 100.2
## 8 Master 20.1 22.8 22.2 100.0
## 9 Doctoral 23.8 23.2 14.6 100.0
## KMeansb
## education Count
## 2 primary 793
## 3 Lower secondary 1626
## 4 Upper secondary 4194
## 5 Post-second non tertia. 789
## 6 Short-cycle tertiary 1200
## 7 Bachelor 1553
## 8 Master 1625
## 9 Doctoral 151
#test du chié
.Test <- chisq.test(mytable, correct=FALSE)
.Test
##
## Pearson's Chi-squared test
##
## data: mytable
## X-squared = 240.67, df = 28, p-value < 2.2e-16
#analyse des correspondances
res.ca <- CA(mytable)
eig.val <- res.ca$eig
barplot(eig.val[, 2],
names.arg = 1:nrow(eig.val),
main = "Variances Explained by Dimensions (%)",
xlab = "Principal Dimensions",
ylab = "Percentage of variances",
col ="steelblue")
#graphique répartition par CSP en effectifs absolus
ggplot(Vdf,aes(x = education, fill=KMeansb))+ geom_bar()+scale_fill_manual(values=pal16)+coord_flip()
#graphique répartition par CSP en effectifs relatifs
ggplot(Vdf,aes(x = education, fill=KMeansb))+ geom_bar(position ="fill")+scale_fill_manual(values=pal16)+coord_flip()
Une importance particuliére doit étre données aux pays. La variable pays permet de distinguer des situations historique, culturelle, économique différentes. Notre tableau de données est en fait constitué de 16 tableaux distincts.
l’analyse par pays La carto par pays permet de discerner une double structuration :
Les pays é forte population ( en h é d) s’apposent petit pays oé le pluralisme est le plus répandu ( en b é d) . En gb, en fr, en all on se partage entre une forme d’autoritarisme et un certain de gré de scepticisme.
L’autre opposition se construit dans le dualisme de la réussite sociale et du plaisir é vivre. L’est pays de l’est contre ceux du nord ouest.
# par pays
ggplot(H,aes(x = cntry, fill=KMeansb))+ geom_bar(position = "fill")+scale_fill_manual(values=pal16)+coord_flip()
mytable <- xtabs(~cntry+KMeansb, data=Vdf)
print(rowPercents(mytable))
## KMeansb
## cntry Hedonisme materiel HedonismeCivique Polyethique RéussiteLégitime
## AT 7.1 9.6 34.1 23.7
## BE 8.5 15.9 25.9 25.9
## CH 6.8 19.1 33.2 18.6
## CZ 25.3 2.0 14.5 26.7
## DE 11.1 27.0 16.5 19.2
## EE 20.7 8.0 12.4 25.6
## FI 16.0 25.9 14.3 16.1
## FR 25.4 26.2 14.0 11.1
## GB 16.0 20.1 20.6 16.8
## IE 18.2 10.9 22.0 23.2
## IL 12.7 5.7 47.1 21.5
## IS 21.4 34.0 11.5 13.7
## NL 10.5 26.8 17.8 24.2
## NO 25.0 16.9 12.2 18.3
## PL 10.2 4.5 22.3 23.9
## RU 24.0 1.7 18.3 33.4
## SE 23.2 32.7 13.7 14.9
## SI 4.9 8.4 50.3 17.7
## KMeansb
## cntry Scepticisme Total Count
## AT 25.5 100.0 889
## BE 23.7 99.9 691
## CH 22.4 100.1 603
## CZ 31.4 99.9 296
## DE 26.2 100.0 1248
## EE 33.3 100.0 426
## FI 27.7 100.0 914
## FR 23.3 100.0 841
## GB 26.5 100.0 601
## IE 25.7 100.0 1033
## IL 13.0 100.0 993
## IS 19.5 100.1 262
## NL 20.8 100.1 400
## NO 27.6 100.0 663
## PL 39.1 100.0 704
## RU 22.6 100.0 470
## SE 15.6 100.1 410
## SI 18.7 100.0 487
.Test <- chisq.test(mytable, correct=FALSE)
.Test
##
## Pearson's Chi-squared test
##
## data: mytable
## X-squared = 1961.2, df = 68, p-value < 2.2e-16
res.ca <- CA(mytable)
PLusieurs package sont disponibles, on a choisi partykit.<>
Le principe des arbre de décision est é chauque étape de choisir la variable la plus prédictive, et son découpage le plus discriminant, celui-ci est retenu pour diviser la population en deux sous propulations qui différent le plus du point de vue de la variable qu’on veut prédire. La méme opération est réalisée sur chacun des groupes, jusqu’à ce qu’un critére minimal de prediction n’est plus satisfait.
Vdf<-subset(H,select=c(KMeansb,education,Pays,gender,AgeClasse,NbFoyer))
library(partykit)
## Loading required package: grid
## Loading required package: libcoin
## Loading required package: mvtnorm
# grow tree
Vdf$education<-as.factor(Vdf$education)
Vdf$NbFoyer<-as.factor(Vdf$NbFoyer)
Vdf$gender<-as.factor(Vdf$gender)
Vdf$AgeClasse<-as.factor(Vdf$AgeClasse)
fit <- ctree(KMeansb ~ education + NbFoyer + gender+ AgeClasse, data=Vdf,maxdepth = 3)
plot(fit, main="Conditional Inference Tree for Valeurs", gp = gpar(fontsize = 7),type="extended",drop=F,
ip_args=list(abbreviate = F, id = F, pval=F), tp_args = list(rot = 45, just = c("right", "top")))
#png("fit.png", res=60, height=800, width=1600)
# evaluation et accuracy
table<-table(Vdf$KMeansb, predict(fit), dnn = c("Actual ", "Predicted "))
table
## Predicted
## Actual Hedonisme materiel HedonismeCivique Polyethique
## Hedonisme materiel 0 0 131
## HedonismeCivique 0 0 285
## Polyethique 0 0 480
## RéussiteLégitime 0 0 420
## Scepticisme 0 0 206
## Predicted
## Actual RéussiteLégitime Scepticisme
## Hedonisme materiel 279 1393
## HedonismeCivique 289 1384
## Polyethique 655 1643
## RéussiteLégitime 778 1251
## Scepticisme 280 2457
prop.table(table, 1)
## Predicted
## Actual Hedonisme materiel HedonismeCivique Polyethique
## Hedonisme materiel 0.00000000 0.00000000 0.07265668
## HedonismeCivique 0.00000000 0.00000000 0.14555669
## Polyethique 0.00000000 0.00000000 0.17278618
## RéussiteLégitime 0.00000000 0.00000000 0.17149857
## Scepticisme 0.00000000 0.00000000 0.06999660
## Predicted
## Actual RéussiteLégitime Scepticisme
## Hedonisme materiel 0.15474210 0.77260122
## HedonismeCivique 0.14759959 0.70684372
## Polyethique 0.23578114 0.59143269
## RéussiteLégitime 0.31768069 0.51082074
## Scepticisme 0.09514101 0.83486239
margin.table(mytable, 1)
## cntry
## AT BE CH CZ DE EE FI FR GB IE IL IS NL NO PL
## 889 691 603 296 1248 426 914 841 601 1033 993 262 400 663 704
## RU SE SI
## 470 410 487
Vdf$predict<-predict(fit)
Vdf$match<-0
Vdf$match[which(Vdf$predict==Vdf$KMeansb)]<-1
accuracy<-sum(Vdf$match)/nrow(Vdf)
accuracy
## [1] 0.3113737
Adopter des valeurs distinctes conduit-il é des niveaux de bonheur différents ou non é bien sur se poser la question de savoir si le bonheur ne conduit pas le choix des valeurs. L’hypothése d’absence de relation : qu’importe le niveau de bonheur, les valeurs sont juste des grilles culturelles (acquises lors de la socialisation).
Bref une vaste question
On reprend la méthode corrplot pour analyser les variables :
l’état de santé est lié uniquement é la satisfaction dans la vie, c’est une variable isolée. La confiance se distribue en deux blocs clairs : la confiance dans les institutions et dans les personnes. Satisfaction dans la vie et satisfaction é l’égards de la situation économique sont trés liés.
W<-subset(H,select=c("happyness","sat_life","sat_eco","sat_gov","sat_demo","sat_edu","sat_sant","Healthness","Trust_tst","Trust_fair","Trust_hlp","trstprl", "trstlgl","trstplc","trstplc", "trstplt", "trstprt","trstep","trstun"))
X<-cor(W, use="complete")
#necessite corrplot
corrplot(X,order="hclust", addrect=6) # avec un clustering des variables
Trois sources : - les valeurs susceptibles d’engendre du bonheur - la confiance - l’origine pays comme contréle ( effet pays)
x<-c("KMeansb")
Vdf<-subset(H,select=c(get(paste0(x)),Trust_people,Trust_Institut,happyness,Healthness))
Vdf<-aggregate(cbind(Trust_people,Trust_Institut,happyness,Healthness)~ KMeansb,data=Vdf,FUN=mean)
Vdf<-melt(Vdf, id="KMeansb")
g<-ggplot(Vdf,aes(x=KMeansb,y=value,group=variable))+geom_line(aes(color=variable), size=1.5)+scale_color_manual(values=pal16)+ylim(3,9) + coord_flip()
g
AnovaModel.1 <- aov(Trust_Institut ~ KMeansb, data=H)
summary(AnovaModel.1)
## Df Sum Sq Mean Sq F value Pr(>F)
## KMeansb 4 225 56.30 14.86 4.05e-12 ***
## Residuals 11926 45176 3.79
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
with(H, numSummary(Trust_Institut, groups=KMeansb, statistics=c("mean", "sd")))
## mean sd data:n
## Hedonisme materiel 4.745055 1.888800 1803
## HedonismeCivique 5.082482 1.868739 1958
## Polyethique 4.688145 2.077688 2778
## RéussiteLégitime 4.814278 1.894084 2449
## Scepticisme 4.700079 1.946121 2943
AnovaModel.2 <- aov(Trust_people ~ KMeansb, data=H)
summary(AnovaModel.2)
## Df Sum Sq Mean Sq F value Pr(>F)
## KMeansb 4 519 129.65 41.93 <2e-16 ***
## Residuals 11926 36874 3.09
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
with(H, numSummary(Trust_people, groups=KMeansb, statistics=c("mean", "sd")))
## mean sd data:n
## Hedonisme materiel 5.844518 1.756034 1803
## HedonismeCivique 6.199694 1.619907 1958
## Polyethique 5.617591 1.797191 2778
## RéussiteLégitime 5.587587 1.693857 2449
## Scepticisme 5.749462 1.860976 2943
AnovaModel.3 <- aov(happyness ~ KMeansb, data=H)
summary(AnovaModel.3)
## Df Sum Sq Mean Sq F value Pr(>F)
## KMeansb 4 584 145.96 51.66 <2e-16 ***
## Residuals 11926 33692 2.83
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
with(H, numSummary(happyness, groups=KMeansb, statistics=c("mean", "sd")))
## mean sd data:n
## Hedonisme materiel 7.392124 1.693457 1803
## HedonismeCivique 8.064862 1.452143 1958
## Polyethique 7.899568 1.689743 2778
## RéussiteLégitime 7.599837 1.667382 2449
## Scepticisme 7.615358 1.812280 2943
moduler par l’effet pays
d’abord des modèles emboités, l’effet pays est fort.
on se demande si l’effet est homogéne : une regression par pays et comparaison des paramètres
LinearModel.1 <- lm(happyness ~ Trust_Institut+Trust_people+Healthness+cntry, data=H)
LinearModel.2 <- lm(happyness ~ Trust_Institut+Trust_people+Healthness+cntry+KMeansb, data=H)
LinearModel.3 <- lm(happyness ~ Trust_Institut+Trust_people+Healthness+Val_Civisme + Val_Conformisme + Val_plaisir + Val_reussite + cntry,
data=H)
stargazer(LinearModel.1, LinearModel.2, LinearModel.3, type="text",font.size="tiny",style="asq",column.sep.width = "1pt")
##
## --------------------------------------------------------------------------------------------------
## happyness
## Model 1 Model 2 Model 3
## --------------------------------------------------------------------------------------------------
## Trust_Institut 0.071 0.071 0.076
## (0.008) (0.008) (0.008)
## Trust_people 0.167 0.166 0.159
## (0.009) (0.009) (0.009)
## Healthness 0.509 0.504 0.503
## (0.016) (0.016) (0.017)
## Val_Civisme 0.227
## (0.027)
## Val_Conformisme 0.058
## (0.021)
## Val_plaisir 0.087
## (0.017)
## Val_reussite -0.146
## (0.017)
## cntryBE 0.216 0.223 0.187
## (0.077) (0.077) (0.077)
## cntryCH 0.302 0.288 0.237
## (0.081) (0.080) (0.080)
## cntryCZ -0.377 -0.307 -0.289
## (0.103) (0.103) (0.102)
## cntryDE 0.322 0.325 0.255
## (0.067) (0.067) (0.067)
## cntryEE -0.238 -0.185 -0.203
## (0.090) (0.090) (0.090)
## cntryFI 0.395 0.411 0.282
## (0.072) (0.073) (0.074)
## cntryFR -0.095 -0.066 -0.183
## (0.074) (0.074) (0.075)
## cntryGB 0.082 0.096 0.036
## (0.080) (0.080) (0.080)
## cntryIE -0.336 -0.298 -0.339
## (0.070) (0.070) (0.069)
## cntryIL 0.213 0.215 0.243
## (0.071) (0.071) (0.070)
## cntryIS 0.386 0.408 0.300
## (0.107) (0.108) (0.108)
## cntryNL 0.277 0.285 0.204
## (0.092) (0.092) (0.092)
## cntryNO 0.288 0.340 0.286
## (0.079) (0.080) (0.079)
## cntryPL 0.305 0.325 0.319
## (0.078) (0.078) (0.077)
## cntryRU -0.817 -0.745 -0.673
## (0.088) (0.088) (0.088)
## cntrySE 0.148 0.175 0.080
## (0.091) (0.092) (0.092)
## cntrySI 0.142 0.112 0.081
## (0.086) (0.086) (0.086)
## KMeansbHedonismeCivique 0.341
## (0.050)
## KMeansbPolyethique 0.341
## (0.048)
## KMeansbRéussiteLégitime 0.110
## (0.048)
## KMeansbScepticisme 0.248
## (0.046)
## Constant 4.357 4.149 3.252
## (0.094) (0.100) (0.153)
## Observations 11931 11931 11931
## R-squared 0.198 0.204 0.211
## Adj. R-squared 0.197 0.202 0.210
## Residual Std. Error 1.519 (df = 11910) 1.514 (df = 11906) 1.507 (df = 11906)
## F Statistic 147.217 (df = 20; 11910) 126.748 (df = 24; 11906) 132.847 (df = 24; 11906)
## --------------------------------------------------------------------------------------------------
## p < .1; p < .05; p < .01
On se demande si l’éffet est homogéne : une régression par pays et comparaison des paramaétres. On s’appeleréoit sur le graphique, que la hiérarchie des paramétres est relativement homogéne à travers les pays : c’est l’état de santé qui domine. La confiance suit avec un effet plus important de sa composante interpersonnelle et systématiquement moins de sa dimension institutionnelle. Les valeurs semblent peu compter. La réussite personnelle semble être systématiquement liée de manière négative. Accorder de l’importance à la réussite c’est connaitre un bonheur moindre.
Voilà qui incite à renverser le raisonnement : le niveau de bonheur ne determine-t-il pas les valeurs plus qu’il n’en dépend ?
# analyse par Pays
P<-subset(H, select=c(happyness, Trust_Institut,Trust_people,Healthness,F1Civisme , F2Reussite , F3Conformisme , F4Hedonisme,cntry))
P$cntry<-as.factor(P$cntry)
LinearModel.4 <- lmList(happyness ~ Trust_Institut+Trust_people+Healthness+F1Civisme +F2Reussite+ F3Conformisme +F4Hedonisme| cntry,data=P)
LinearModel.4
## Call:
## Model: happyness ~ Trust_Institut + Trust_people + Healthness + F1Civisme + F2Reussite + F3Conformisme + F4Hedonisme | cntry
## Data: P
##
## Coefficients:
## (Intercept) Trust_Institut Trust_people Healthness F1Civisme
## AT 4.870922 -0.001744686 0.13418157 0.5296114 0.449606350
## BE 4.765240 0.109645646 0.20395229 0.3434629 0.213676385
## CH 4.575883 0.114819323 0.16892567 0.4583313 0.068362435
## CZ 3.389928 0.097055686 0.20656997 0.6321306 0.227921617
## DE 4.659349 0.152530601 0.10973349 0.4861942 0.066623839
## EE 2.576923 0.095307431 0.25474473 0.8508526 0.124839518
## FI 5.043651 0.057745184 0.13737054 0.4806825 0.135861594
## FR 4.275366 0.027681484 0.22812323 0.4722172 -0.087297604
## GB 4.141808 0.201060872 0.15404743 0.4585331 -0.277029293
## IE 4.523587 0.104263385 0.07362376 0.4812407 0.550345301
## IL 5.306760 -0.014998776 0.17680762 0.4228383 0.376946939
## IS 5.951011 0.126830656 0.06909009 0.2765650 0.439777091
## NL 4.952356 0.117457414 0.19502462 0.2986999 -0.065598279
## NO 5.649964 0.061674728 0.09399799 0.3889012 0.169803040
## PL 4.407164 0.027928296 0.12696578 0.6510296 0.059937060
## RU 1.843668 0.116516453 0.19950558 0.9350509 0.087925936
## SE 4.600316 0.027074175 0.14059287 0.5661212 -0.008240946
## SI 4.036871 0.126666557 0.16910208 0.5587997 0.132957770
## F2Reussite F3Conformisme F4Hedonisme
## AT -0.244753865 -0.066237045 -0.23331929
## BE 0.098690050 -0.134441882 0.18006890
## CH 0.122875442 -0.200152387 0.08608399
## CZ 0.071821417 -0.173136309 0.17295232
## DE 0.095177336 -0.288689786 0.38685828
## EE -0.294539609 -0.154194414 0.33279853
## FI -0.031551911 -0.167298867 0.04618130
## FR 0.068781762 -0.093193803 0.34410290
## GB 0.072364951 -0.317833679 0.40516185
## IE -0.009818119 -0.126843946 0.06771607
## IL 0.075722910 -0.268757578 -0.12645844
## IS 0.031198195 -0.050137905 -0.17923834
## NL 0.115587795 -0.063268089 0.38380016
## NO 0.300591909 -0.355634591 0.13764293
## PL 0.213339780 -0.092079786 0.11894468
## RU 0.113013953 -0.007623289 -0.03734924
## SE 0.144920563 -0.323043105 0.27265351
## SI 0.137900740 -0.536041700 0.63409185
##
## Degrees of freedom: 11931 total; 11787 residual
## Residual standard error: 1.48663
Coefff<-as.data.frame(coef(LinearModel.4))
Coefff$Pays<-row.names(Coefff)
Coefff<-melt(Coefff, id=c("Pays"))
Coefff<-subset(Coefff, variable != "(Intercept)")
ggplot(Coefff,aes(x=reorder(Pays, value), y=value, group=variable))+geom_line(aes(color=variable), size=1.5)+scale_color_manual(values=pal16) + coord_flip()
C’est é cette derniére question que l’on va essayer de répondre en reprenant un graphique précédent.
Dans le diagramme suivant on met en abcisse les variables du bien-étre et les profil des groupes en ordonnée.
x<-c("KMeansb")
Vdf<-subset(H,select=c(get(paste0(x)),Trust_people,Trust_Institut,happyness,Healthness))
Vdf<-aggregate(cbind(Trust_people,Trust_Institut,happyness,Healthness)~ KMeansb,data=Vdf,FUN=mean)
Vdf<-melt(Vdf, id="KMeansb")
g<-ggplot(Vdf,aes(x=KMeansb,y=value,group=variable))+geom_line(aes(color=variable),size=1.5)+scale_color_manual(values=pal16)+ylim(1,9) + coord_flip()+facet_grid(variable ~ .)
g
On va chercher é modéliser l’effet des 4 variables de bien-être sur la probabilité d’appartenir à tel ou tel type de valeurs.
va étre utile é cette fin. On s’appuit sur cette page
Formellement le modéle peut étre écrit sous la forme de k-1 équation. K indique le nombre de groupe considérées. On cherche donc é estimer k-1 équations.
\[\log(p(Y_{i})/p(Y_{k}))= \beta_{k}X_{ki}\] Pour plus de détails l’article de wikipedia donne une bonne idée formelle de l’idée introduite semble-t-il par Engel (1988) .
library("foreign")
library("nnet")
# ajustement du model
test <- multinom(KMeansb ~ Trust_Institut+Trust_people+Healthness+happyness, data = H)
## # weights: 30 (20 variable)
## initial value 19202.203733
## iter 10 value 18768.836768
## iter 20 value 18669.757286
## final value 18617.184896
## converged
summary(test)
## Call:
## multinom(formula = KMeansb ~ Trust_Institut + Trust_people +
## Healthness + happyness, data = H)
##
## Coefficients:
## (Intercept) Trust_Institut Trust_people Healthness
## HedonismeCivique -2.4616339 0.024218284 0.04519159 0.1591529
## Polyethique -1.2507036 -0.016239357 -0.13524680 0.3394605
## RéussiteLégitime -0.5596819 0.044043016 -0.14245426 0.2998944
## Scepticisme 0.5968257 -0.006220424 -0.04632736 -0.1892006
## happyness
## HedonismeCivique 0.19847529
## Polyethique 0.15877979
## RéussiteLégitime 0.04206823
## Scepticisme 0.11807647
##
## Std. Errors:
## (Intercept) Trust_Institut Trust_people Healthness
## HedonismeCivique 0.2027586 0.01910700 0.02190373 0.03921921
## Polyethique 0.1783958 0.01762601 0.01983488 0.03674377
## RéussiteLégitime 0.1748996 0.01815274 0.02026870 0.03730786
## Scepticisme 0.1632163 0.01735905 0.01951068 0.03467173
## happyness
## HedonismeCivique 0.02202251
## Polyethique 0.01953104
## RéussiteLégitime 0.01922563
## Scepticisme 0.01848321
##
## Residual Deviance: 37234.37
## AIC: 37274.37
#calcul des "cotes" (odd ratio) (exp(b))
z <- summary(test)$coefficients/summary(test)$standard.errors
p <- (1 - pnorm(abs(z), 0, 1))*2
p
## (Intercept) Trust_Institut Trust_people Healthness
## HedonismeCivique 0.000000e+00 0.20497346 3.909448e-02 4.948780e-05
## Polyethique 2.368994e-12 0.35687868 9.191092e-12 0.000000e+00
## RéussiteLégitime 1.374193e-03 0.01525591 2.090772e-12 8.881784e-16
## Scepticisme 2.555287e-04 0.72008962 1.757459e-02 4.844808e-08
## happyness
## HedonismeCivique 0.000000e+00
## Polyethique 4.440892e-16
## RéussiteLégitime 2.865989e-02
## Scepticisme 1.677289e-10
exp(coef(test))
## (Intercept) Trust_Institut Trust_people Healthness
## HedonismeCivique 0.08529547 1.0245139 1.0462283 1.1725172
## Polyethique 0.28630328 0.9838918 0.8735003 1.4041898
## RéussiteLégitime 0.57139081 1.0450273 0.8672272 1.3497163
## Scepticisme 1.81634399 0.9937989 0.9547294 0.8276204
## happyness
## HedonismeCivique 1.219542
## Polyethique 1.172080
## RéussiteLégitime 1.042966
## Scepticisme 1.125330
L’interprétation des paramétre du modéle n’est pas évidente. Pour mieux visaliser le résultat, nous allons simuler les probabilités d’appartenir é l’un des 5 groupes en fonction de valeurs données aux quatre variables étudiée . On explore toute l’étendue de la plage de valeur.
#prediction
#simulation d'un fichiers de valeurs combinées
expanded=expand.grid(Trust_Institut=c(1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9),
Trust_people=c(1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9),
Healthness=c(1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9),
happyness=c(1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9) )
#prediction des probabilités
predicted=predict(test,expanded,type="probs")
#head(predicted)
#associer les valeurs simulées et leurs probabilités
bpp=cbind(expanded, predicted)
bpp2 = melt (bpp,id.vars=c("Trust_Institut", "Trust_people","Healthness", "happyness"))
#affichage des résultats
trust<- aggregate(value ~ Trust_Institut + variable, data=bpp2, FUN=mean)
ggplot(trust, aes(x = Trust_Institut, y = value, colour = variable)) + geom_line() +facet_grid(variable ~ ., scales="free")
trust<- aggregate(value ~ Trust_people + variable, data=bpp2, FUN=mean)
ggplot(trust, aes(x = Trust_people, y = value, colour = variable)) + geom_line() + facet_grid(variable ~ ., scales="free")
trust<- aggregate(value ~ Healthness + variable, data=bpp2, FUN=mean)
ggplot(trust, aes(x = Healthness, y = value, colour = variable)) + geom_line() + facet_grid(variable ~ ., scales="free")
trust<- aggregate(value ~ happyness + variable, data=bpp2, FUN=mean)
ggplot(trust, aes(x = happyness, y = value, colour = variable)) + geom_line() + facet_grid(variable ~ ., scales="free")
On observe que :
On peut élaborer ici l’hypothése que le bonheur, ou plutot l’écart au bonheur normatif (Nous nous inscrivons dans une théorie homéostatique du bonheur) détermine les stratégies de représentations du monde et sans doute les critéres de son évaluation.
C’est au fond une théorie de la justification plus qu’une théorie causale. Les valeur ne determine pas le bonheur, mais ce dernier oriente les modes de jugement.
Le premier job est de lire ligne à ligne ce document, y compris les références.
Le second job est de jouer avec les variables, en décomposant les chunks, en en variant le paramétrage, mais aussi en jouant directement avec les données avec On laisse aux étudiants le soin de commenter et de lancer des analyses complémentaires é chaque étape de l’analyse avec Rcmdr
qui permet d’analyser avec une interface graphique pas bien différente du vieux SPSS.
Le troisiéme est de s’approprier le code, et de l’augmenter par exemple en
* étude de la structure des valeurs (explorer une structure plus complexe ) * contruction d’une typologie (par exemple tester un nombre de groupes différent) * relation avec la confiance et le bonheur (exploration des interactions produites par une tierce variable).
Ce document est une premiére matrice, il peut étre affiné et enrichi. On conseille aux étudiants d’en faire une copie qu’ils ajusterons à leurs propres analyses, commentaires, notes et leurs propres besoins.
A ce stade du pipe, Il n’y a plus qu’à emballer!
Pour tricoter ce document en html, il suffit de lancer la commande suivante dans la console ( on pourra aussi tester le bouton Knit
dans Rstudio) :
rmarkdown::render(‘analyseValeurs.Rmd’) rmarkdown::render(‘analyseValeurs.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.
Engel, J. 1988. “Polytomous Logistic Regression.” Statistica Neerlandica 42 (4): 233–52. doi:10.1111/j.1467-9574.1988.tb01238.x.
Schwartz, Shalom H. 1992. “Universals in the Content and Structure of Values: Theoretical Advances and Empirical Tests in 20 Countries.” In Advances in Experimental Social Psychology, 25:1–65. Elsevier. doi:10.1016/S0065-2601(08)60281-6.
———. 2012. “An Overview of the Schwartz Theory of Basic Values.” Online Readings in Psychology and Culture 2 (1). doi:10.9707/2307-0919.1116.
Thurstone, L. L. 1931. “Multiple Factor Analysis.” Psychological Review 38 (5): 406–27. doi:10.1037/h0069792.