Rappel

Variable dépendante et Variable indépendante celle-ci aussi appelée facteru ou parametre.

Les tests statistique En résumé, les tests servent à déterminer des p-values par l’intermédiaire d’une statistique (ou variable de décision), qui est le quantile d’une loi statistique. Cette p-value va ensuite servir d’outils d’aide à la décision. Le terme significatif est un élément de jargon statistique qui signifie pas dû au hasard

On pose donc une hypothèse nulle notée H0, et une hypothèse complémentaire dite hypothèse alternative notée H1 ou Ha.

Le calcul est fait en partant du principe que H0 est vérifiée, on dit sous H0. Si la p-value est faible, cela veut dire soit qu’on a eu par hasard un évènement rare (voir très rare), soit qu’en réalité H0 était fausse : on choisit donc de la rejeter au profit de H1, mais ce n’est qu’un choix et pas une démonstration. Ce n’est qu’un outil d’aide à la décision.

Définition de la p-value:

La p-value est la probabilité, si H0 est vraie, qu’une variable de décision soit égale ou plus extrême que la valeur calculée à partir des données.

Demarche pour appliquer un analyse statistique:

  1. Identifier les variables et identifier le problème, notamment en trouvant la nature des mesures et des facteurs(quantitative, nominale …).
  2. Choisir le test (variable de décision) en fonction du 1) et poser α = 5%. La suite du cours expliquera quel test choisir dans chaque cas.
  3. Vérifier si les conditions d’application du tests sont remplies.
  4. Poser Ho et H1.
  5. Calcul de la statistique (la variable de décision) et obtention de la p-value. R fera ça pour vous.
  6. Conclure en acceptant/rejetant Ho puis en revenant à la question initiale.

Les tests:

* Les Khi2
    + Des effectifs théoriques sont calculés à partir de la table de contingence
    + Il faut que 80% de ces effectifs théoriques soient supérieurs à 5: Le critère de *Cochran*
* Wilcoxon
* ACM
kable(head(df_test))
code day year sex diplôme_plus_élevé fam_st Combien_enfants religion combien_pièces liv Avec_qui_confiné travaille_confinement after_COVID ST_env LT_env
2020-04-17_18:00:19 1 1995 Féminin Bac +5 Célibataire 0 Athée 2 En zone urbaine Avec un.e conjoint.e. Oui, je suis en télétravail Oui Plutôt oui Plutôt non
2020-04-18_21:07:51 2 1995 Féminin Bac +5 Célibataire 0 NA 6 En zone urbaine Chez vos parents Oui, je suis en télétravail Non Plutôt non Plutôt non
2020-04-19_15:01:46 3 1994 Féminin Bac +5 Célibataire 0 Croyant non pratiquant (ex: de culture chrétienne) 8 En zone périurbaine Chez vos parents Oui, je suis en télétravail Non Plutôt oui Plutôt non
2020-04-23_13:05:43 7 1962 Masculin Bac +3 Marié.e 0 Bouddhiste 6 En zone rurale Avec un.e conjoint.e. Oui, je suis en télétravail Je n’ai pas d’opinion Plutôt oui Plutôt non
2020-04-23_13:10:16 7 1994 Féminin Bac +5 Célibataire 0 Croyant non pratiquant (ex: de culture chrétienne) 7 En zone urbaine Chez vos parents Oui, je suis en télétravail Oui Plutôt oui Plutôt oui
2020-04-23_13:31:23 7 1969 Féminin Bac ou bac professionnel Célibataire 0 Agnostique 2 En zone urbaine Seul.e Oui, je suis sur mon site de travail habituel Non Plutôt oui Plutôt non

On a déjà re codé les questions à un nom pour qu’ils soient plus faciles à moviliser sur R e.g. :

“Quel est votre diplôme le plus élevé?” –> diplôme_plus_élevé

Recodage et recategorize des variables

E.g. de variable qui a besoin de Recodage pour les analyses:

table(df_test$diplôme_plus_élevé)
## 
##                             Aucun diplôme 
##                                        16 
##                                    Bac +3 
##                                       263 
##                                    Bac +5 
##                                       467 
##                  Bac ou bac professionnel 
##                                       248 
## Brevet d'étude du premier cycle, CAP, BEP 
##                                        57 
##                          Doctorat et plus 
##                                        41 
##                                  DUT, BTS 
##                                        98
df_test[df_test == "NA"] = NA

#df_test = db_econfin_TP[,c(1:4,8,9,10,11,12,13,14,15,24,25,33,34,35,36,37,53:55)]

df_test = df_test %>% mutate(ES = case_when(diplôme_plus_élevé == "Bac +3" ~ 1, diplôme_plus_élevé == "Bac +5" ~ 1, diplôme_plus_élevé == "DUT, BTS" ~ 1, diplôme_plus_élevé == "Doctorat et plus" ~ 1, diplôme_plus_élevé == "Aucun diplôme" ~ 0, diplôme_plus_élevé == "Bac ou bac professionnel" ~ 0,diplôme_plus_élevé == "Brevet d'étude du premier cycle, CAP, BEP" ~ 0))

df_test = df_test %>% mutate(fam = case_when(fam_st == "Célibataire" ~ 0,fam_st == "Veuf.ve" ~ 0,fam_st == "En couple (concubinage)" ~ 1,fam_st == "Marié.e" ~ 1))

df_test = df_test %>% mutate(chi = case_when(Combien_enfants >= 1 ~ 1,Combien_enfants < 1 ~ 0))                                 

Pour la religion, travail_confinement, confiné_avec_qui et numero de chambre ont suit le même procédé; e.g on a crée une variable chambre avec trois modalité: Moins de 3; Entre 3 et 6; Plus de 6.

Pour la religion:on a deux modalité presence ou absence religion traditionelle.

On arrive a la base de donnée suivant:

kable(head(df_test))
code day year sex liv after_COVID ST_env LT_env ES fam chi rel room act lon
2020-04-17_18:00:19 1 1995 Féminin En zone urbaine Oui Plutôt oui Plutôt non 1 0 0 0 Moins de 3 1 0
2020-04-18_21:07:51 2 1995 Féminin En zone urbaine Non Plutôt non Plutôt non 1 0 0 NA Entre 3 et 6 1 0
2020-04-19_15:01:46 3 1994 Féminin En zone périurbaine Non Plutôt oui Plutôt non 1 0 0 0 Plus de 6 1 0
2020-04-23_13:05:43 7 1962 Masculin En zone rurale Je n’ai pas d’opinion Plutôt oui Plutôt non 1 1 0 1 Entre 3 et 6 1 0
2020-04-23_13:10:16 7 1994 Féminin En zone urbaine Oui Plutôt oui Plutôt oui 1 0 0 0 Plus de 6 1 0
2020-04-23_13:31:23 7 1969 Féminin En zone urbaine Non Plutôt oui Plutôt non 0 0 0 0 Moins de 3 1 1

Exploration et visualization des données

df_test[df_test == "NA"] = NA
lapply(df_test[,c(9:15)],useNA = "ifany",table)
## $ES
## 
##    0    1 <NA> 
##  322  870    1 
## 
## $fam
## 
##    0    1 <NA> 
##  517  625   51 
## 
## $chi
## 
##    0    1 <NA> 
##  824  333   36 
## 
## $rel
## 
##    0    1 <NA> 
##  958  218   17 
## 
## $room
## 
## Entre 3 et 6   Moins de 3    Plus de 6         <NA> 
##          642          189          340           22 
## 
## $act
## 
##    0    1 <NA> 
##  372  782   39 
## 
## $lon
## 
##    0    1 <NA> 
## 1055  136    2
ggplot(df_test) + aes(x = sex) + geom_bar() + theme_minimal()

ggplot(df_test) + aes(x = liv) +  geom_bar() + theme_minimal()

Les variables qu’on cherche à expliquer

ggplot(df_test) + aes(x = after_COVID) +  geom_bar() + theme_minimal()

ggplot(df_test) + aes(x = ST_env) +  geom_bar() + theme_minimal()

ggplot(df_test) + aes(x = LT_env) +  geom_bar() + theme_minimal()

Preparé la donnée pour les analysis

Renommée les modalités des variables

#liv
df_test [df_test == "En zone rurale"] = "1"
df_test [df_test == "En zone périurbaine"] = "2"
df_test [df_test == "En zone urbaine"] = "3"
#room
df_test [df_test == "Moins de 3"] = "1"
df_test [df_test == "Entre 3 et 6"] = "2"
df_test [df_test == "Plus de 6"] = "3"
# ST_env et LT_env
df_test [df_test == "Plutôt non"] = "0"
df_test [df_test == "Plutôt oui"] = "1"
#sex
df_test [df_test == "Masculin"] = "0"
df_test [df_test == "Féminin"] = "1"
df_test = filter(df_test, sex != "Agenre")
#After covid
df_test [df_test == "Non"] = "0"
df_test [df_test == "Oui"] = "1"
df_test [df_test == "Je n'ai pas d'opinion"] = "2"

Enlever NA

df_test <- na.omit(df_test)

Les resultat …

kable(head(df_test))
code day year sex liv after_COVID ST_env LT_env ES fam chi rel room act lon
2020-04-17_18:00:19 1 1995 1 3 1 1 0 1 0 0 0 1 1 0
2020-04-19_15:01:46 3 1994 1 2 0 1 0 1 0 0 0 3 1 0
2020-04-23_13:05:43 7 1962 0 1 2 1 0 1 1 0 1 2 1 0
2020-04-23_13:10:16 7 1994 1 3 1 1 1 1 0 0 0 3 1 0
2020-04-23_13:31:23 7 1969 1 3 0 1 0 0 0 0 0 1 1 1
2020-04-23_13:35:29 7 1996 0 1 1 1 1 1 0 0 0 3 0 0
dim(df_test)
## [1] 1002   15

Conversion de type de données

#rownames(df_test) = c(df_test$...1) ; # df_test = df_test[,2:13]
df_test[,c(4:15)] <- lapply(df_test[,c(4:15)], factor) 

df_test[,c(2:3)] <- lapply(df_test[,c(2:3)], as.numeric) #  coercion of year to numeric 


str(df_test)
## tibble [1,002 x 15] (S3: tbl_df/tbl/data.frame)
##  $ code       : chr [1:1002] "2020-04-17_18:00:19" "2020-04-19_15:01:46" "2020-04-23_13:05:43" "2020-04-23_13:10:16" ...
##  $ day        : num [1:1002] 1 3 7 7 7 7 7 7 7 7 ...
##  $ year       : num [1:1002] 1995 1994 1962 1994 1969 ...
##  $ sex        : Factor w/ 2 levels "0","1": 2 2 1 2 2 1 2 1 2 1 ...
##  $ liv        : Factor w/ 3 levels "1","2","3": 3 2 1 3 3 1 1 2 2 3 ...
##  $ after_COVID: Factor w/ 3 levels "0","1","2": 2 1 3 2 1 2 1 1 2 1 ...
##  $ ST_env     : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 1 ...
##  $ LT_env     : Factor w/ 2 levels "0","1": 1 1 1 2 1 2 1 1 1 1 ...
##  $ ES         : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 2 2 2 2 ...
##  $ fam        : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 2 2 2 1 ...
##  $ chi        : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 2 1 1 ...
##  $ rel        : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 2 1 1 1 ...
##  $ room       : Factor w/ 3 levels "1","2","3": 1 3 2 3 1 3 2 2 2 1 ...
##  $ act        : Factor w/ 2 levels "0","1": 2 2 2 2 2 1 2 1 2 2 ...
##  $ lon        : Factor w/ 2 levels "0","1": 1 1 1 1 2 1 1 1 1 2 ...
##  - attr(*, "na.action")= 'omit' Named int [1:186] 2 30 44 49 54 55 56 59 62 76 ...
##   ..- attr(*, "names")= chr [1:186] "2" "30" "44" "49" ...
attach(df_test)

Quantitative variables

####Jours de réponse de l’enquete

Jours 1: 2020-04-17 Jours 25:2020-05-11

hist(df_test$day)

Creating a new variables; age et tranche d’age

Les mesures de tendance centrale
df_test = df_test  %>% mutate(age = 2021 - year)

hist(df_test$age, xlab="Age") ; summary(df_test$age)

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      16      24      27      32      34      79
summary(df_test$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      16      24      27      32      34      79
df_test %>% group_by(sex) %>% dplyr::summarise(,n = n(), mean = round(mean(age,na.rm = TRUE),1),median = median(age),
                                               min = min(age), max = max(age)) 
## # A tibble: 2 x 6
##   sex       n  mean median   min   max
##   <fct> <int> <dbl>  <dbl> <dbl> <dbl>
## 1 0       261  35.9     30    19    79
## 2 1       741  30.6     27    16    77

Age par tranches d’age

df_test = df_test %>% mutate(t_age = case_when(age <= 27 ~ 1,age > 27 & age <= 40 ~ 2, age > 40 ~ 3)) 
df_test <- within(df_test, {t_age<-factor(t_age)})
ggplot(df_test) +  aes(x = t_age) + geom_bar() +  scale_fill_hue() + theme_minimal()

First MCA

Social variables and LT, ST, after_covid
library(FactoMineR);library(factoextra)

MCA constrains the ordination axes to be linear combinations of explanatory variables

mca_c = MCA(df_test[,c(4:15,17)], graph = FALSE)
print(mca_c) #mca_c$var$contrib
## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 1002 individuals, described by 13 variables
## *The results are available in the following objects:
## 
##    name              description                       
## 1  "$eig"            "eigenvalues"                     
## 2  "$var"            "results for the variables"       
## 3  "$var$coord"      "coord. of the categories"        
## 4  "$var$cos2"       "cos2 for the categories"         
## 5  "$var$contrib"    "contributions of the categories" 
## 6  "$var$v.test"     "v-test for the categories"       
## 7  "$ind"            "results for the individuals"     
## 8  "$ind$coord"      "coord. for the individuals"      
## 9  "$ind$cos2"       "cos2 for the individuals"        
## 10 "$ind$contrib"    "contributions of the individuals"
## 11 "$call"           "intermediate results"            
## 12 "$call$marge.col" "weights of columns"              
## 13 "$call$marge.li"  "weights of rows"

The proportion of variances retained by the different dimensions; Eigenvalues.

Visualizing the percentages of inertia explained by each MCA dimensions.

#eig.val <- get_eigenvalue(mca_c) # factoextra R package
fviz_screeplot(mca_c, addlabels = TRUE, ylim = c(0, 30))

fviz_contrib(mca_c, choice = "var", axes = 1, top = 15)

# Contributions of rows to dimension 2
fviz_contrib(mca_c, choice = "var", axes = 2, top = 15)

fviz_mca_var(mca_c, choice = "mca.cor",
repel = TRUE, # Avoid text overlapping (slow)
ggtheme = theme_minimal())

fviz_mca_var(mca_c,repel = TRUE,ggtheme = theme_minimal())

Chi-square test basics

Chi-square test examines whether rows and columns of a contingency table are statistically significantly associated.

  • Null hypothesis (H0): row and the column variables of the contingency table are independent (varible dependant et facteur en pratique)
  • Alternative hypothesis (H1): row and column variables are dependent

The Chi-square statistic:
\[\ X^2=\sum \frac{\ (o-e)^2}{\ e}\] * o is the observed value
* e is the expected value

Degrees of Freedom (DF):
\[DF\ =\ (\ rows\ – 1) * (columns\ – 1)\]

Example de deux variables avec deux modalités: \(DF = (2 – 1) * (2 – 1) = 1\)

Expliquer les vision du futur selon les variables sociales

after_COVID : Pensez-vous que le monde après-confinement sera radicalement différent du monde avant-confinement?

  • lon: Pendant la période de confinement, vivez-vous…
tab_after_COVID_lon = table(df_test$after_COVID,df_test$lon)
colnames(tab_after_COVID_lon) <- c("Non-seule","Seule")
rownames(tab_after_COVID_lon) <- c("Non","Oui","Pas avis")
tab_after_COVID_lon
##           
##            Non-seule Seule
##   Non            520    52
##   Oui            267    35
##   Pas avis       107    21
#La statistique, les degrés de liberté, la p-value ; conclusion ???
(chisq_a  <- chisq.test(tab_after_COVID_lon))
## 
##  Pearson's Chi-squared test
## 
## data:  tab_after_COVID_lon
## X-squared = 6.116, df = 2, p-value = 0.04698

Bar plot

ggplot(df_test) +  aes(x = lon, fill = after_COVID) +  geom_bar() +  scale_fill_hue() + theme_minimal()

Vérification des effectifs théoriques : le critère de Cochran est-il respecté ?

chisq_a$expected   
##           
##            Non-seule    Seule
##   Non       510.3473 61.65269
##   Oui       269.4491 32.55090
##   Pas avis  114.2036 13.79641

The most contributing cells to the total Chi-square score

\[r\ = \frac{\ o-e}{\ \sqrt{e}}\]

round(chisq_a$residuals, 3) 
##           
##            Non-seule  Seule
##   Non          0.427 -1.229
##   Oui         -0.149  0.429
##   Pas avis    -0.674  1.939
library(corrplot)
corrplot(chisq_a$residuals, is.cor = FALSE) #cl.pos = 'b')

Ce qui habitent seules tendance à dire moins non than expected et dire plus 2 (j’ai pas d’opinion)

  • room: Dans votre résidence de confinement, de combien de pièces disposez-vous?
tab_room_after = table(df_test$after_COVID, df_test$room)
(chisq_b  <- chisq.test(tab_room_after))
## 
##  Pearson's Chi-squared test
## 
## data:  tab_room_after
## X-squared = 2.2964, df = 4, p-value = 0.6814

Variable room fortement explicative dans l’ACM mais pas dans le chi2.

#tab_COVID_liv_env = table(df_test$after_COVID,df_test$liv) # not significant
#chisq.test(table(df_test$after_COVID,df_test$t_age)) # not significant 
#chisq.test(table(df_test$after_COVID,df_test$chi))   # not significant 
#chisq.test(table(df_test$after_COVID,df_test$fam))   # not significant   

Les test non parametric

Mann-Whitney-Wilcoxon

Rappel: Ho et H1 statistiques

boxplot(day ~ ST_env, data = df_test)

wilcox.test(day ~ ST_env, data=df_test) # diff
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  day by ST_env
## W = 45394, p-value = 0.01081
## alternative hypothesis: true location shift is not equal to 0

Rapport positive entre jour et 1:Plutôt oui

On peut enlever cela si on ne peut pas donner une explication

boxplot(age ~ ST_env, data = df_test)

wilcox.test(age ~ ST_env, data=df_test) # diff
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  age by ST_env
## W = 60070, p-value = 0.01608
## alternative hypothesis: true location shift is not equal to 0

Ceux et celles qui sont moins agées plus de tendance à dire: Plutôt oui