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:
* 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é
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 |
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()
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()
#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"
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
#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)
####Jours de réponse de l’enquete
Jours 1: 2020-04-17 Jours 25:2020-05-11
hist(df_test$day)
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()
Chi-square test examines whether rows and columns of a contingency table are statistically significantly associated.
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\)
chisq_a$expected
##
## Non-seule Seule
## Non 510.3473 61.65269
## Oui 269.4491 32.55090
## Pas avis 114.2036 13.79641
\[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)
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
(chisq_c = chisq.test(table(df_test$ST_env,df_test$after_COVID)))
##
## Pearson's Chi-squared test
##
## data: table(df_test$ST_env, df_test$after_COVID)
## X-squared = 4.6515, df = 2, p-value = 0.09771
df_test %>% group_by(after_COVID) %>% count(ST_env) %>% mutate(per = n/sum(n)*100)
## # A tibble: 6 x 4
## # Groups: after_COVID [3]
## after_COVID ST_env n per
## <fct> <fct> <int> <dbl>
## 1 0 0 77 13.5
## 2 0 1 495 86.5
## 3 1 0 26 8.61
## 4 1 1 276 91.4
## 5 2 0 17 13.3
## 6 2 1 111 86.7
Des autres variables explicant la perception si la crise du Covid-19 aura un impact bénéfique sur l’environnement à court terme (Sur R codé comme ST_env)
tab_st_fam = table(df_test$ST_env,df_test$fam)
colnames(tab_st_fam) <- c("Seule","Famille")
rownames(tab_st_fam) <- c("Plutôt non","Plutôt oui")
(chisq_d = chisq.test(tab_st_fam))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab_st_fam
## X-squared = 4.0395, df = 1, p-value = 0.04445
corrplot(chisq_d$residuals, is.cor = FALSE)
Il y a des differencesdans le “non”, ceux/celles qui habitent en familles plus de tendance à dire: plutôt non”
tab_st_liv_env = table(df_test$ST_env,df_test$liv)
colnames(tab_st_liv_env) <- c("En zone rurale","En zone périurbaine","En zone urbaine")
rownames(tab_st_liv_env) <- c("Plutôt non","Plutôt oui")
(chisq_e <- chisq.test(tab_st_liv_env))
##
## Pearson's Chi-squared test
##
## data: tab_st_liv_env
## X-squared = 9.0943, df = 2, p-value = 0.0106
#round(chisq_e$residuals, 3)
corrplot(chisq_e$residuals, is.cor = FALSE)
Ceux et celles qui habitent en zones urbaines plus de tendance à dire: Plutôt non
tab_st_chi = table(df_test$ST_env,df_test$chi)
rownames(tab_st_chi) <- c("Plutôt non","Plutôt oui")
(chisq_f= chisq.test(tab_st_chi))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab_st_chi
## X-squared = 8.5603, df = 1, p-value = 0.003436
corrplot(chisq_f$residuals, is.cor = FALSE)
#round(chisq_f$residuals, 3)
ggplot(df_test) +
aes(x = chi, fill = ST_env) +
geom_bar() + scale_fill_hue() + theme_minimal()
df_test %>% group_by(chi) %>% count(ST_env) %>% mutate(per = n/sum(n)*100)
## # A tibble: 4 x 4
## # Groups: chi [2]
## chi ST_env n per
## <fct> <fct> <int> <dbl>
## 1 0 0 76 10.2
## 2 0 1 672 89.8
## 3 1 0 44 17.3
## 4 1 1 210 82.7
#test1 = df_test %>% group_by(chi,ST_env) %>% dplyr::count()
#transform(test1,perc = ave(n,chi,FUN = prop.table))
Ce qui ont des enfants plus de tendance à dire: plutôt non
#chisq.test(table(df_test$ST_env,df_test$t_age)) # not significant
#chisq.test(table(df_test$ST_env,df_test$room)) # no
#chisq.test(table(df_test$ST_env,df_test$act)) # no
#chisq.test(table(df_test$ST_env,df_test$ES)) # no
tab_st_sex = table(df_test$ST_env,df_test$sex) # yes but no so important in ACM
rownames(tab_st_sex) <- c("Plutôt non","Plutôt oui")
colnames(tab_st_sex) <- c("Masculin","Féminin")
(chisq_g <- chisq.test(tab_st_sex))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab_st_sex
## X-squared = 4.1983, df = 1, p-value = 0.04046
#round(chisq_g$residuals, 3)
corrplot(chisq_g$residuals, is.cor = FALSE)
Les Hommes disent Plutôt non
Au moins le chi2 ne montre pas grand choses.
E.g.
chisq.test(table(df_test$LT_env,df_test$chi))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(df_test$LT_env, df_test$chi)
## X-squared = 2.8998, df = 1, p-value = 0.08859
#chisq.test(table(df_test$after_COVID,df_test$chi))
Comment analyser une variable quantitative en rapport à une variable qualitative à deux modalités.
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
Social variables and LT, ST, after_covid
MCA constrains the ordination axes to be linear combinations of explanatory variables
The proportion of variances retained by the different dimensions; Eigenvalues.
Visualizing the percentages of inertia explained by each MCA dimensions.