article

RQ1. La crise sanitaire a-t-elle modifié les habitudes de mobilité des actifs franciliens en terme de choix modal et de fréquence de déplacement pour les différents motifs personnels et professionnels ?

Il s’agit ici de comparer avant et après même s’il n’y a pas d’impact je trouve ça très intéressant, notamment car l’augmentation de l’usage des modes actifs et la baisse de l’usage des TC est assez communément défendue dans la littérature. Pour les achats non alimentaires (voire peut-être alimentaires), certains défendent l’idée que la crise a augmenté le recours aux achats en ligne et baissé la fréquence de ce type de déplacement. Mais il n’y a pas énormément de travaux dans la littérature.

Code
library(splines)
library(MASS)
library(readxl)
library(ggplot2)
library(kableExtra)
library(dplyr)
library(tidygeocoder)
library(sf)
library(mapview)
library(units)
COMOPOCOV = read_excel("data/COMOPOCOV_transmis Etienne et Emmanuel(1).xlsx")

# Q1 -> Q22 contexte
# Q23 -> Q34 Avant
# Q35 -> Q47 Pendant
# Q48 -> Q59 Après
# Q60 -> Q64 Futur


# 
# villes = tibble(ville=unique(c(COMOPOCOV$nameVillex1,COMOPOCOV$nameVille))) |>
#   mutate(id=1:n(),addr=paste(ville, ", France"))
# 
# villes_lat_longs <- villes |>
#    geocode(addr, method = 'osm', lat = latitude , long = longitude)
# 
# villes.sf = st_as_sf(villes_lat_longs|>filter(!is.na(latitude)),coords = c("longitude","latitude"),crs=4326)
# 
# write_sf(villes.sf,'villes.sf.geojson')

villes.sf=read_sf("villes.sf.geojson")
mapview(villes.sf)
Code

dists_domtrav= st_distance(COMOPOCOV|>left_join(villes.sf,by=c("nameVille"="ville")) |> st_as_sf(), COMOPOCOV|>left_join(villes.sf,by=c("nameVillex1"="ville")) |> st_as_sf(),by_element = TRUE)
COMOPOCOV$distancedomtrav=set_units(dists_domtrav,"km")

lab_freq = c("Jamais","Moins de 1","1 à 3 / mois",
             "1 à 3 / sem","4 à 5 / semaine","Tous les jours")

lab_mode =  c("Conducteur","Passager","TC","deux-roues",
              "La marche","Le vélo","Trottinette","Pas")

COMAVANT_FREQ = COMOPOCOV |> select(uuid,Q28bis_1:Q28bis_8) |> 
  mutate(across(Q28bis_1:Q28bis_8, ~ factor(lab_freq[.x],levels=lab_freq)))
colnames(COMAVANT_FREQ)=c("uiid",paste0("FREQMO",1:8))


COMAVANT_MODE =  COMOPOCOV |> select(uuid,Q29_1:Q29_8) |> 
  mutate(across(Q29_1:Q29_8, ~ factor(lab_mode[.x],levels=lab_mode))) |>
  mutate(across(Q29_1:Q29_8, ~ factor(case_when(.x %in% c("Conducteur","Passager","deux-roues") ~ "Motorisé",.x=="TC"~ "TC",.default="Actif"))))
colnames(COMAVANT_MODE)=c("uiid",paste0("MODEMO",1:8))



COMAPRES_FREQ = COMOPOCOV |> select(uuid,Q48_1:Q48_8) |> 
  mutate(across(Q48_1:Q48_8, ~ factor(lab_freq[.x],levels=lab_freq)))
colnames(COMAPRES_FREQ)=c("uiid",paste0("FREQMO",1:8))

COMAPRES_MODE =  COMOPOCOV |> select(uuid,Q49_1:Q49_8) |> 
  mutate(across(Q49_1:Q49_8, ~ factor(lab_mode[.x],levels=lab_mode)))|>
  mutate(across(Q49_1:Q49_8, ~ factor(case_when(.x %in% c("Conducteur","Passager","deux-roues") ~ "Motorisé",.x=="TC"~ "TC",.default="Actif"))))
colnames(COMAPRES_MODE)=c("uiid",paste0("MODEMO",1:8))

Xmob=bind_rows(COMAPRES_FREQ[,c(0,1,4,5,7,8)+1] |> left_join(COMAPRES_MODE[,c(0,1,4,5,7,8)+1]),
COMAVANT_FREQ[,c(0,1,4,5,7,8)+1]  |> left_join(COMAVANT_MODE[,c(0,1,4,5,7,8)+1])) 

gg_evol = COMAVANT_FREQ|> rename_all(~paste0("AVANT_",.)) |> left_join(
  COMAPRES_FREQ|> rename_all(~paste0("APRES_",.)),
  by=c("AVANT_uiid"="APRES_uiid"))

gg_evol_mode = COMAVANT_MODE|> rename_all(~paste0("AVANT_",.)) |> left_join(
  COMAPRES_MODE|> rename_all(~paste0("APRES_",.)),
  by=c("AVANT_uiid"="APRES_uiid"))



lab_freq = c("Jamais","Moins de 1","1 à 3 / mois",
             "1 à 3 / sem","4 à 5 / semaine","Tous les jours")
             
             
lab_freq_p = c("--","-","=","+","++","0")

lab_mode =  c("Conducteur","Passager","TC","deux-roues",
              "La marche","Le vélo","Trottinette","Pas")

lab_age=c("18-24","25-34","35-44","45-54","55-64","65+")

lab_ouinon = c("Oui","Non")

lab_csp_detail =  c("Agriculteur","Artisan·e", "Cadre","Prof Intermédiaire","Employé·e","Ouvrièr·e","Retraité·e","Etudiant·e","Rech. emploi","Autre ina")

old_names_pre_freq=paste0("Q28bis_",1:8)
new_names_pre_freq=paste0("FREQMOPRE",1:8)

old_names_in_freq=paste0("Q35_",1:8)
new_names_in_freq=paste0("FREQMOIN",1:8)

old_names_in_chfreq=paste0("Q36_",1:7)
new_names_in_chfreq=paste0("CHANGEFREQIN",1:7)

old_names_in_mode=paste0("Q39_",1:8)
new_names_in_mode=paste0("MODEMOIN",1:8)

old_names_in_tele=paste0("Q46_",1:9)
new_names_in_tele=paste0("TELEINPER",1:9)

old_names_post_freq=paste0("Q48_",1:8)
new_names_post_freq=paste0("FREQMOPOST",1:8)

old_names_pre_mode=paste0("Q29_",1:8)
new_names_pre_mode=paste0("MODEMOPRE",1:8)

old_names_post_mode=paste0("Q49_",1:8)
new_names_post_mode=paste0("MODEMOPOST",1:8)


lab_courone=c("Paris","Petite","Grande")
lab_sexe = c("femme","homme","nsp")
lab_diplo = c("nodiplo","Brevet","CAP","Bac","Bac+2","Bac+3","Bac+4","Bac+5", ">Bac+5","nsp")
lab_situ_fam = c("Seul","Seul + enf(s)","Couple","Couple + enf(s)","Autres") 
lab_situ_trav =c("TP","P80","P80_50","P50","PM50")
lab_hab = c("maison","appartement")
lab_rev = c("M500","M500_1000","M1001_2500","M2501_4000","M4001_6000","M6001_9000","P9000","Jnsp","Jnspr") 
  
lab_5lev=c("--","-","=","+","++")





COMPOCOV_CLEAN =  COMOPOCOV |> 
  mutate(across(Q28bis_1:Q28bis_8, ~ factor(lab_freq[.x],levels=lab_freq))) |>
  rename_with(~ new_names_pre_freq, all_of(old_names_pre_freq)) |>
  mutate(across(Q29_1:Q29_8, ~ factor(lab_mode[.x],levels=lab_mode))) |>
  rename_with(~ new_names_pre_mode, all_of(old_names_pre_mode)) |>
  mutate(across(Q48_1:Q48_8, ~ factor(lab_freq[.x],levels=lab_freq))) |>
  rename_with(~ new_names_post_freq, all_of(old_names_post_freq)) |>
  mutate(across(Q35_1:Q35_8, ~ factor(lab_freq_p[.x],levels=lab_freq_p))) |>
  rename_with(~ new_names_in_freq, all_of(old_names_in_freq)) |>
  mutate(across(Q36_1:Q36_7, ~ factor(lab_ouinon[.x],levels=lab_ouinon))) |>
  rename_with(~ new_names_in_chfreq, all_of(old_names_in_chfreq)) |>
  mutate(across(Q39_1:Q39_8, ~ factor(lab_mode[.x],levels=lab_mode))) |>
  rename_with(~ new_names_in_mode, all_of(old_names_in_mode)) |>
  mutate(across(Q49_1:Q49_8, ~ factor(lab_mode[.x],levels=lab_mode))) |>
  rename_with(~ new_names_post_mode, all_of(old_names_post_mode)) |>
  mutate(across(Q46_1:Q46_9, ~ factor(lab_5lev[.x],levels=lab_5lev))) |>
  rename_with(~ new_names_in_tele, all_of(old_names_in_tele)) |>
  mutate(age= Q1) |>
  mutate(sexe= factor(lab_sexe[Q2]  ,levels=  lab_sexe)) |>  
  mutate(diplo= factor(lab_diplo[Q3]  ,levels=  lab_diplo)) |>  
  mutate(csp = factor(case_when(Q4<3 ~ "AgrArt",Q4 ==3 ~"CSP+",Q4 %in% 4:6 ~ "CSP-",Q4>6~"Ina"))) |>
  mutate(cspd = factor(lab_csp_detail[Q4],levels = lab_csp_detail)) |>
  mutate(tp = factor(lab_situ_trav[Q5],levels=lab_situ_trav)) |>
  mutate(situ_fam = factor(lab_situ_fam[Q7],levels=lab_situ_fam)) |>
  mutate(hab=factor(lab_hab[Q12],levels=lab_hab)) |>
  mutate(rev=factor(lab_rev[Q16],levels=lab_rev)) |>
  mutate(change_sociopro=factor(lab_ouinon[Q23])) |>
  mutate(tele_pre=if_else(is.na(Q33),0,Q33)) |>
  mutate(tele_pre=if_else(tele_pre>5,5,tele_pre)) |>
  mutate(tele_post=if_else(is.na(Q53),0,Q53)) |>
  mutate(depf=factor(dep),couronne=factor(lab_courone[Couronne])) |>
  dplyr::select(uuid,depf,couronne,distancedomtrav,age:tele_post,nb_tele_pre=Q33,nb_tele_post=Q53,FREQMOPRE1:MODEMOPRE8,FREQMOIN1:FREQMOIN8,TELEINPER1:TELEINPER9,FREQMOPOST1:MODEMOPOST8,MODEMOIN1:MODEMOIN8,CHANGEFREQIN1:CHANGEFREQIN7) |>
  mutate(change = (unclass(FREQMOPOST1)-unclass(FREQMOPRE1))<0)|> 
  mutate(change_tele=tele_post-tele_pre) |>
  mutate(change_alim = (unclass(FREQMOPOST4)-unclass(FREQMOPRE4))<0) |> 

  mutate(across(MODEMOPRE1:MODEMOPRE8, ~ factor(case_when(.x %in% c("Conducteur","Passager","deux-roues") ~ "Motorisé",.x=="TC"~ "TC",.default="Actif")))) |>
  mutate(across(MODEMOPOST1:MODEMOPOST8, ~ factor(case_when(.x %in% c("Conducteur","Passager","deux-roues") ~ "Motorisé",.x=="TC"~ "TC",.default="Actif")))) |>
  mutate(across(MODEMOIN1:MODEMOIN8, ~ factor(case_when(.x %in% c("Conducteur","Passager","deux-roues") ~ "Motorisé",.x=="TC"~ "TC",.default="Actif"))))


data = COMPOCOV_CLEAN |> 
  dplyr::select(depf:change_sociopro,distancedomtrav,FREQMOPRE1:MODEMOPRE8,FREQMOPOST1:MODEMOPOST8,FREQMOIN1,FREQMOIN4,FREQMOIN5,FREQMOIN7,TELEINPER1:TELEINPER9,change,change_alim,change_tele,tele_post,tele_pre,MODEMOIN1:MODEMOIN8,CHANGEFREQIN1:CHANGEFREQIN7) |>
    mutate(change_mode1 =(MODEMOPRE1!='Actif' & MODEMOPOST1=="Actif")) |>
  mutate(change_modealim = (MODEMOPRE4!='Actif' & MODEMOPOST4=="Actif")) 

kable(table(data$csp))
Var1 Freq
AgrArt 34
CSP- 477
CSP+ 253
Ina 204

Motif travail

Sur l’ensemble de la base on observe un certain nombre de transitions “4 à 5 / semaine” vers “1 à 3 / semaine” idem de “Tous les jours” vers les deux niveaux inférieurs.

Code
kable(table(COMAVANT_FREQ$FREQMO1,COMAPRES_FREQ$FREQMO1))
Jamais Moins de 1 1 à 3 / mois 1 à 3 / sem 4 à 5 / semaine Tous les jours
Jamais 106 11 11 6 12 15
Moins de 1 15 17 12 7 6 5
1 à 3 / mois 12 14 25 14 16 5
1 à 3 / sem 6 10 23 77 24 5
4 à 5 / semaine 24 4 14 74 131 10
Tous les jours 39 4 8 38 52 116
Code
kable(table(COMAVANT_FREQ$FREQMO1)/sum(table(COMAVANT_FREQ$FREQMO1))*100,digits=1)
Var1 Freq
Jamais 16.6
Moins de 1 6.4
1 à 3 / mois 8.9
1 à 3 / sem 15.0
4 à 5 / semaine 26.5
Tous les jours 26.5
Code
kable(table(COMAPRES_FREQ$FREQMO1)/sum(table(COMAPRES_FREQ$FREQMO1))*100,digits=1)
Var1 Freq
Jamais 20.9
Moins de 1 6.2
1 à 3 / mois 9.6
1 à 3 / sem 22.3
4 à 5 / semaine 24.9
Tous les jours 16.1
Code
prop.test(cbind(table(COMAVANT_FREQ$FREQMO1),table(COMAPRES_FREQ$FREQMO1)))
#> 
#>  6-sample test for equality of proportions without continuity correction
#> 
#> data:  cbind(table(COMAVANT_FREQ$FREQMO1), table(COMAPRES_FREQ$FREQMO1))
#> X-squared = 44.115, df = 5, p-value = 2.195e-08
#> alternative hypothesis: two.sided
#> sample estimates:
#>    prop 1    prop 2    prop 3    prop 4    prop 5    prop 6 
#> 0.4435262 0.5081967 0.4804469 0.4016620 0.5160643 0.6222760
ggplot(gg_evol|> count(AVANT_FREQMO1,APRES_FREQMO1,name = "nm")  |> add_count(AVANT_FREQMO1,wt=nm))+
  geom_point(aes(y=AVANT_FREQMO1,x=APRES_FREQMO1,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

En restreignant à la population active on trouve avec une regression ordinale un effet significatif de la période, de l’age, du temps partiel et de la situation familliale.

Code
data_reg_periode = data   |> filter(csp!="Ina") |> dplyr::select(depf:rev,freq=FREQMOPRE1) |> mutate(period="pre") |> bind_rows(
data |> dplyr::select(depf:rev,freq=FREQMOPOST1) |> mutate(period="post"))



fit=polr(freq~period+bs(age,4)+couronne+sexe+csp+diplo+tp+situ_fam+rev,data_reg_periode,Hess = TRUE)

(ctable <- coef(summary(fit)))
#>                                      Value Std. Error     t value
#> periodpre                       0.37168280 0.09191684  4.04368567
#> bs(age, 4)1                     0.05508107 0.53548280  0.10286244
#> bs(age, 4)2                     2.40943917 0.66750744  3.60960649
#> bs(age, 4)3                    -2.90490370 1.60946638 -1.80488622
#> bs(age, 4)4                    12.02099623 6.86020323  1.75227990
#> couronneParis                   0.01970724 0.13601502  0.14489017
#> couronnePetite                 -0.09488379 0.10617749 -0.89363377
#> sexehomme                       0.18509713 0.10139966  1.82542159
#> cspCSP-                         0.22029267 0.24668627  0.89300741
#> cspCSP+                         0.21952209 0.26227664  0.83698682
#> diploBrevet                    -0.43035026 0.63868113 -0.67381083
#> diploCAP                       -0.06370589 0.55221234 -0.11536484
#> diploBac                       -0.21316137 0.51910454 -0.41063284
#> diploBac+2                     -0.33130244 0.51835416 -0.63914302
#> diploBac+3                     -0.05690732 0.52121466 -0.10918212
#> diploBac+4                     -0.21049445 0.54992317 -0.38277066
#> diploBac+5                     -0.27406502 0.52492579 -0.52210240
#> diplo>Bac+5                    -0.32137804 0.55293043 -0.58122691
#> diplonsp                       -0.40423003 1.21751051 -0.33201358
#> tpP80                          -0.31616496 0.23401845 -1.35102574
#> tpP80_50                       -0.47616031 0.20840032 -2.28483480
#> tpP50                          -0.67947510 0.34561432 -1.96599233
#> tpPM50                         -1.94065441 0.36526184 -5.31304993
#> situ_famSeul + enf(s)          -0.55514092 0.19615739 -2.83007900
#> situ_famCouple                 -0.28413806 0.14995301 -1.89484737
#> situ_famCouple + enf(s)        -0.33945575 0.13826401 -2.45512741
#> situ_famAutres                 -0.14339485 0.29870390 -0.48005686
#> revM500_1000                    0.43243364 0.46869565  0.92263208
#> revM1001_2500                   0.43974667 0.39189372  1.12210696
#> revM2501_4000                   0.33809648 0.38815019  0.87104551
#> revM4001_6000                   0.31578096 0.39977714  0.78989249
#> revM6001_9000                   0.35488934 0.42063801  0.84369299
#> revP9000                        0.03794430 0.45167086  0.08400874
#> revJnsp                        -1.10565760 1.01221514 -1.09231482
#> revJnspr                        0.60936070 0.50606282  1.20412067
#> Jamais|Moins de 1              -1.67404529 0.69388270 -2.41257678
#> Moins de 1|1 à 3 / mois        -1.00252064 0.69211597 -1.44848650
#> 1 à 3 / mois|1 à 3 / sem       -0.39444856 0.69204293 -0.56997701
#> 1 à 3 / sem|4 à 5 / semaine     0.63516213 0.69299116  0.91655156
#> 4 à 5 / semaine|Tous les jours  2.02975771 0.69408813  2.92435156

p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2

## combined table
res_table <- data.frame(cbind(ctable[,c("Value","Std. Error")], "p value" = p)) |>
mutate(signif = if_else(p<0.01,"*",""))
kableExtra::kable(res_table,digits=3)
Value Std..Error p.value signif
periodpre 0.372 0.092 0.000 *
bs(age, 4)1 0.055 0.535 0.918
bs(age, 4)2 2.409 0.668 0.000 *
bs(age, 4)3 -2.905 1.609 0.071
bs(age, 4)4 12.021 6.860 0.080
couronneParis 0.020 0.136 0.885
couronnePetite -0.095 0.106 0.372
sexehomme 0.185 0.101 0.068
cspCSP- 0.220 0.247 0.372
cspCSP+ 0.220 0.262 0.403
diploBrevet -0.430 0.639 0.500
diploCAP -0.064 0.552 0.908
diploBac -0.213 0.519 0.681
diploBac+2 -0.331 0.518 0.523
diploBac+3 -0.057 0.521 0.913
diploBac+4 -0.210 0.550 0.702
diploBac+5 -0.274 0.525 0.602
diplo>Bac+5 -0.321 0.553 0.561
diplonsp -0.404 1.218 0.740
tpP80 -0.316 0.234 0.177
tpP80_50 -0.476 0.208 0.022
tpP50 -0.679 0.346 0.049
tpPM50 -1.941 0.365 0.000 *
situ_famSeul + enf(s) -0.555 0.196 0.005 *
situ_famCouple -0.284 0.150 0.058
situ_famCouple + enf(s) -0.339 0.138 0.014
situ_famAutres -0.143 0.299 0.631
revM500_1000 0.432 0.469 0.356
revM1001_2500 0.440 0.392 0.262
revM2501_4000 0.338 0.388 0.384
revM4001_6000 0.316 0.400 0.430
revM6001_9000 0.355 0.421 0.399
revP9000 0.038 0.452 0.933
revJnsp -1.106 1.012 0.275
revJnspr 0.609 0.506 0.229
Jamais|Moins de 1 -1.674 0.694 0.016
Moins de 1|1 à 3 / mois -1.003 0.692 0.147
1 à 3 / mois|1 à 3 / sem -0.394 0.692 0.569
1 à 3 / sem|4 à 5 / semaine 0.635 0.693 0.359
4 à 5 / semaine|Tous les jours 2.030 0.694 0.003 *

Motif travail modes

Les évolutions ne semble pas énormes sur les modes mais il y a tout de même quelques changements.

Code
kable(table(COMAVANT_MODE$MODEMO1,COMAPRES_MODE$MODEMO1))
Actif Motorisé TC
Actif 201 41 22
Motorisé 76 266 34
TC 48 53 227
Code
kable(table(COMAVANT_MODE$MODEMO1)/sum(table(COMAVANT_MODE$MODEMO1))*100,digits=1)
Var1 Freq
Actif 27.3
Motorisé 38.8
TC 33.9
Code
kable(table(COMAPRES_MODE$MODEMO1)/sum(table(COMAPRES_MODE$MODEMO1))*100,digits=1)
Var1 Freq
Actif 33.6
Motorisé 37.2
TC 29.2
Code
ptest = prop.test(cbind(table(COMAVANT_MODE$MODEMO1),table(COMAPRES_MODE$MODEMO1)));
ggplot(gg_evol_mode|> count(AVANT_MODEMO1,APRES_MODEMO1,name = "nm")  |> add_count(AVANT_MODEMO1,wt=nm))+
  geom_point(aes(y=AVANT_MODEMO1,x=APRES_MODEMO1,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

Avec un test d’égalité de proportions on trouve une p-value de 0.007.

Mais en utilisant un test d’églité de proportion pour données apairées (test de Mc Nemar) on trouve tout de même une différence significative pour la marche et les TC. i.e ce qui se dit dans la littérature.

Code
pvals = sapply( levels(COMAVANT_MODE$MODEMO1),\(lev){
  M= data.frame(av=COMAVANT_MODE$MODEMO1,ap=COMAPRES_MODE$MODEMO1) |> 
    filter(!is.na(av),!is.na(ap)) |> 
    mutate(av=av==lev,ap=ap==lev) |> 
    table()
    mcnemar.test(M)$p.value}
)
kable(t(pvals),digits=3)
Actif Motorisé TC
0 0.294 0

Motif achat alimentaires

Sur l’ensemble la population on voit un peu de transitions de “Tous les jours” vers les deux niveaux inférieurs (de même pour “4 à 5 par semaine”). Sur les niveaux intermédiaires les transitions on lieux dans les deux sens.

Code
kable(table(COMAVANT_FREQ$FREQMO4,COMAPRES_FREQ$FREQMO4))
Jamais Moins de 1 1 à 3 / mois 1 à 3 / sem 4 à 5 / semaine Tous les jours
Jamais 12 4 2 5 2 3
Moins de 1 4 14 19 4 3 1
1 à 3 / mois 8 13 155 56 12 1
1 à 3 / sem 6 14 76 332 30 8
4 à 5 / semaine 2 5 17 39 33 5
Tous les jours 1 7 9 14 19 33
Code
kable(table(COMAVANT_FREQ$FREQMO4)/sum(table(COMAVANT_FREQ$FREQMO4))*100,digits=1)
Var1 Freq
Jamais 2.9
Moins de 1 4.6
1 à 3 / mois 25.3
1 à 3 / sem 48.1
4 à 5 / semaine 10.4
Tous les jours 8.6
Code
kable(table(COMAPRES_FREQ$FREQMO4)/sum(table(COMAPRES_FREQ$FREQMO4))*100,digits=1)
Var1 Freq
Jamais 3.4
Moins de 1 5.9
1 à 3 / mois 28.7
1 à 3 / sem 46.5
4 à 5 / semaine 10.2
Tous les jours 5.3
Code
prop.test(cbind(table(COMAVANT_FREQ$FREQMO4),table(COMAPRES_FREQ$FREQMO4)))
#> 
#>  6-sample test for equality of proportions without continuity correction
#> 
#> data:  cbind(table(COMAVANT_FREQ$FREQMO4), table(COMAPRES_FREQ$FREQMO4))
#> X-squared = 11.845, df = 5, p-value = 0.03697
#> alternative hypothesis: two.sided
#> sample estimates:
#>    prop 1    prop 2    prop 3    prop 4    prop 5    prop 6 
#> 0.4590164 0.4411765 0.4684512 0.5087336 0.5050000 0.6194030
ggplot(gg_evol|> count(AVANT_FREQMO4,APRES_FREQMO4,name = "nm")  |> add_count(AVANT_FREQMO4,wt=nm))+
  geom_point(aes(y=AVANT_FREQMO4,x=APRES_FREQMO4,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

Avec la même approche que précement (mais pour ce motif et les autres pas de filtre sur les actifs) l’effet de la période a ici une p-value de 2% donc difficile de juger avec trop de certitude mais un effet post covid de baisse des déplacements de ce type ne peut pas être écarté. Les autres facteur significatifs : un effet parisien et de revenu.

Code



data_reg_periode = data |> dplyr::select(depf:rev,freq=FREQMOPRE4) |> mutate(period="pre") |> bind_rows(
data |> dplyr::select(depf:rev,freq=FREQMOPOST4) |> mutate(period="post"))



fit=polr(freq~period+bs(age,4)+couronne+sexe+csp+diplo+tp+situ_fam+rev,data_reg_periode,Hess = TRUE)

(ctable <- coef(summary(fit)))
#>                                      Value Std. Error     t value
#> periodpre                       0.22320065 0.09614726  2.32144591
#> bs(age, 4)1                     0.09189014 0.57085182  0.16097022
#> bs(age, 4)2                     0.30070995 0.68017497  0.44210675
#> bs(age, 4)3                    -0.17680734 1.60047752 -0.11047162
#> bs(age, 4)4                     0.20022368 6.32899386  0.03163594
#> couronneParis                   0.68040218 0.14658512  4.64168639
#> couronnePetite                  0.25515776 0.11125957  2.29335559
#> sexehomme                       0.26194070 0.10617727  2.46701300
#> cspCSP-                        -0.18795039 0.25882644 -0.72616380
#> cspCSP+                        -0.14320905 0.27319369 -0.52420337
#> diploBrevet                     0.10952438 0.63121842  0.17351265
#> diploCAP                        0.44696591 0.53370203  0.83748212
#> diploBac                        0.44481671 0.50378646  0.88294694
#> diploBac+2                      0.66295922 0.50186408  1.32099357
#> diploBac+3                      0.43646910 0.50347184  0.86691860
#> diploBac+4                      0.74209155 0.54671579  1.35736257
#> diploBac+5                      0.76740216 0.51128984  1.50091417
#> diplo>Bac+5                     0.65362556 0.54230716  1.20526817
#> diplonsp                        1.28276694 1.31697945  0.97402199
#> tpP80                           0.44579106 0.24971135  1.78522544
#> tpP80_50                       -0.22389902 0.22391490 -0.99992909
#> tpP50                           0.03902293 0.34317860  0.11371025
#> tpPM50                          0.11917167 0.40339936  0.29541859
#> situ_famSeul + enf(s)           0.05221480 0.20340020  0.25670966
#> situ_famCouple                  0.11708206 0.15503350  0.75520488
#> situ_famCouple + enf(s)         0.12925468 0.14362779  0.89992810
#> situ_famAutres                  0.16144842 0.30480280  0.52968156
#> revM500_1000                    0.93691491 0.49841572  1.87978603
#> revM1001_2500                   1.03491827 0.41768801  2.47773035
#> revM2501_4000                   1.08330967 0.41666281  2.59996728
#> revM4001_6000                   1.09065926 0.42814131  2.54742824
#> revM6001_9000                   1.66156587 0.45333664  3.66519214
#> revP9000                        0.32330902 0.48782420  0.66275724
#> revJnsp                         0.14100478 1.05320151  0.13388205
#> revJnspr                        1.19222990 0.53792561  2.21634718
#> Jamais|Moins de 1              -1.44911197 0.73604726 -1.96877570
#> Moins de 1|1 à 3 / mois        -0.36664603 0.72785959 -0.50373182
#> 1 à 3 / mois|1 à 3 / sem        1.49992654 0.72815648  2.05989587
#> 1 à 3 / sem|4 à 5 / semaine     3.85126702 0.73375318  5.24872279
#> 4 à 5 / semaine|Tous les jours  4.93905220 0.73844232  6.68847394

p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2

## combined table
res_table <- data.frame(cbind(ctable[,c("Value","Std. Error")], "p value" = p)) |>
mutate(signif = if_else(p<0.01,"*",""))
kableExtra::kable(res_table,digits=3)
Value Std..Error p.value signif
periodpre 0.223 0.096 0.020
bs(age, 4)1 0.092 0.571 0.872
bs(age, 4)2 0.301 0.680 0.658
bs(age, 4)3 -0.177 1.600 0.912
bs(age, 4)4 0.200 6.329 0.975
couronneParis 0.680 0.147 0.000 *
couronnePetite 0.255 0.111 0.022
sexehomme 0.262 0.106 0.014
cspCSP- -0.188 0.259 0.468
cspCSP+ -0.143 0.273 0.600
diploBrevet 0.110 0.631 0.862
diploCAP 0.447 0.534 0.402
diploBac 0.445 0.504 0.377
diploBac+2 0.663 0.502 0.187
diploBac+3 0.436 0.503 0.386
diploBac+4 0.742 0.547 0.175
diploBac+5 0.767 0.511 0.133
diplo>Bac+5 0.654 0.542 0.228
diplonsp 1.283 1.317 0.330
tpP80 0.446 0.250 0.074
tpP80_50 -0.224 0.224 0.317
tpP50 0.039 0.343 0.909
tpPM50 0.119 0.403 0.768
situ_famSeul + enf(s) 0.052 0.203 0.797
situ_famCouple 0.117 0.155 0.450
situ_famCouple + enf(s) 0.129 0.144 0.368
situ_famAutres 0.161 0.305 0.596
revM500_1000 0.937 0.498 0.060
revM1001_2500 1.035 0.418 0.013
revM2501_4000 1.083 0.417 0.009 *
revM4001_6000 1.091 0.428 0.011
revM6001_9000 1.662 0.453 0.000 *
revP9000 0.323 0.488 0.507
revJnsp 0.141 1.053 0.893
revJnspr 1.192 0.538 0.027
Jamais|Moins de 1 -1.449 0.736 0.049
Moins de 1|1 à 3 / mois -0.367 0.728 0.614
1 à 3 / mois|1 à 3 / sem 1.500 0.728 0.039
1 à 3 / sem|4 à 5 / semaine 3.851 0.734 0.000 *
4 à 5 / semaine|Tous les jours 4.939 0.738 0.000 *

Motif achat alimentaires modes

Rien de vraiment probant les parts modale ne sont pas significativement différentes entre avant / après.

Code
kable(table(COMAVANT_MODE$MODEMO4,COMAPRES_MODE$MODEMO4))
Actif Motorisé TC
Actif 243 40 20
Motorisé 71 452 27
TC 34 31 50
Code
kable(table(COMAVANT_MODE$MODEMO4)/sum(table(COMAVANT_MODE$MODEMO4))*100,digits=1)
Var1 Freq
Actif 31.3
Motorisé 56.8
TC 11.9
Code
kable(table(COMAPRES_MODE$MODEMO4)/sum(table(COMAPRES_MODE$MODEMO4))*100,digits=1)
Var1 Freq
Actif 36
Motorisé 54
TC 10
Code
ptest=prop.test(cbind(table(COMAVANT_MODE$MODEMO4),table(COMAPRES_MODE$MODEMO4)))
ggplot(gg_evol_mode|> count(AVANT_MODEMO4,APRES_MODEMO4,name = "nm")  |> add_count(AVANT_MODEMO4,wt=nm))+
  geom_point(aes(y=AVANT_MODEMO4,x=APRES_MODEMO4,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

Avec un test d’égalité de proportions on trouve une p-value de 0.07.

Mais en utilisant un test d’églité de proportion pour données apairées (test de Mc Nemar) on trouve tout de même une différence significative pour la marche et conducteur a 5%.

Code
pvals = sapply( levels(COMAVANT_MODE$MODEMO4),\(lev){
  M= data.frame(av=COMAVANT_MODE$MODEMO4,ap=COMAPRES_MODE$MODEMO4) |> 
    filter(!is.na(av),!is.na(ap)) |> 
    mutate(av=av==lev,ap=ap==lev) |> 
    table()
    mcnemar.test(M)$p.value}
)
kable(t(pvals),digits=3)
Actif Motorisé TC
0.001 0.046 0.108

Motif achat non alimentaires

La matrice de transition ne fait pas apparaître de motif clair. Les test de détecte pas de différence significative entre avant / après.

Code
kable(table(COMAVANT_FREQ$FREQMO5,COMAPRES_FREQ$FREQMO5))
Jamais Moins de 1 1 à 3 / mois 1 à 3 / sem 4 à 5 / semaine Tous les jours
Jamais 22 9 10 9 1 0
Moins de 1 5 102 62 19 4 3
1 à 3 / mois 15 46 222 59 15 5
1 à 3 / sem 7 13 73 139 26 5
4 à 5 / semaine 0 2 16 17 10 8
Tous les jours 1 9 6 8 5 15
Code
kable(table(COMAVANT_FREQ$FREQMO5)/sum(table(COMAVANT_FREQ$FREQMO5))*100,digits=1)
Var1 Freq
Jamais 5.3
Moins de 1 20.1
1 à 3 / mois 37.4
1 à 3 / sem 27.2
4 à 5 / semaine 5.5
Tous les jours 4.5
Code
kable(table(COMAPRES_FREQ$FREQMO5)/sum(table(COMAPRES_FREQ$FREQMO5))*100,digits=1)
Var1 Freq
Jamais 5.2
Moins de 1 18.7
1 à 3 / mois 40.2
1 à 3 / sem 25.9
4 à 5 / semaine 6.3
Tous les jours 3.7
Code
prop.test(cbind(table(COMAVANT_FREQ$FREQMO5),table(COMAPRES_FREQ$FREQMO5)))
#> 
#>  6-sample test for equality of proportions without continuity correction
#> 
#> data:  cbind(table(COMAVANT_FREQ$FREQMO5), table(COMAPRES_FREQ$FREQMO5))
#> X-squared = 3.1434, df = 5, p-value = 0.6779
#> alternative hypothesis: two.sided
#> sample estimates:
#>    prop 1    prop 2    prop 3    prop 4    prop 5    prop 6 
#> 0.5049505 0.5186170 0.4820240 0.5116732 0.4649123 0.5500000
ggplot(gg_evol|> count(AVANT_FREQMO5,APRES_FREQMO5,name = "nm")  |> add_count(AVANT_FREQMO5,wt=nm))+
  geom_point(aes(y=AVANT_FREQMO5,x=APRES_FREQMO5,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

De même avec la même approche de régression que précement l’effet de la période n’est ici pas significatif. Il reste un effet Paris, sexe et situation familiale.

Code



data_reg_periode = data |> dplyr::select(depf:rev,freq=FREQMOPRE5) |> mutate(period="pre") |> bind_rows(
data |> dplyr::select(depf:rev,freq=FREQMOPOST5) |> mutate(period="post"))



fit=polr(freq~period+bs(age,4)+couronne+sexe+csp+diplo+tp+situ_fam+rev,data_reg_periode,Hess = TRUE)

(ctable <- coef(summary(fit)))
#>                                      Value Std. Error    t value
#> periodpre                      -0.04809138 0.09357539 -0.5139320
#> bs(age, 4)1                     0.42213921 0.57494494  0.7342255
#> bs(age, 4)2                    -1.42861403 0.67612836 -2.1129331
#> bs(age, 4)3                    -0.79038499 1.64795487 -0.4796157
#> bs(age, 4)4                     1.32190898 6.83030166  0.1935360
#> couronneParis                   0.36604197 0.14217465  2.5745939
#> couronnePetite                  0.18517088 0.10807514  1.7133531
#> sexehomme                       0.39055049 0.10333165  3.7795824
#> cspCSP-                        -0.38237540 0.24985372 -1.5303971
#> cspCSP+                        -0.47217923 0.26529342 -1.7798377
#> diploBrevet                     0.62477763 0.64632093  0.9666678
#> diploCAP                        0.40659372 0.54350851  0.7480908
#> diploBac                        0.86584632 0.51761205  1.6727708
#> diploBac+2                      0.73529009 0.51571554  1.4257668
#> diploBac+3                      0.80187932 0.51805170  1.5478751
#> diploBac+4                      0.74175359 0.55725037  1.3310958
#> diploBac+5                      0.83767863 0.52445166  1.5972466
#> diplo>Bac+5                     1.08240948 0.55445486  1.9522049
#> diplonsp                        1.44122701 1.30074303  1.1080029
#> tpP80                           0.11267308 0.25382102  0.4439076
#> tpP80_50                        0.10066529 0.22102128  0.4554552
#> tpP50                          -0.32600812 0.31953648 -1.0202532
#> tpPM50                         -0.47166175 0.42055578 -1.1215201
#> situ_famSeul + enf(s)           0.59547832 0.19684211  3.0251572
#> situ_famCouple                  0.16089494 0.15184942  1.0595690
#> situ_famCouple + enf(s)         0.45135043 0.14061363  3.2098625
#> situ_famAutres                 -0.19703136 0.30766531 -0.6404081
#> revM500_1000                   -0.07327038 0.49836476 -0.1470216
#> revM1001_2500                  -0.38655530 0.41870769 -0.9232104
#> revM2501_4000                  -0.29921240 0.41711778 -0.7173331
#> revM4001_6000                  -0.32487841 0.42692591 -0.7609714
#> revM6001_9000                   0.40732379 0.45146952  0.9022177
#> revP9000                       -0.89074145 0.48938436 -1.8201265
#> revJnsp                        -0.47827924 1.08403952 -0.4412009
#> revJnspr                        0.30615057 0.51872838  0.5901944
#> Jamais|Moins de 1              -2.80254282 0.74495755 -3.7620168
#> Moins de 1|1 à 3 / mois        -0.92648719 0.73957592 -1.2527276
#> 1 à 3 / mois|1 à 3 / sem        0.89721387 0.73944469  1.2133617
#> 1 à 3 / sem|4 à 5 / semaine     2.68858020 0.74122897  3.6271925
#> 4 à 5 / semaine|Tous les jours  3.75471221 0.74804989  5.0193339

p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2

## combined table
res_table <- data.frame(cbind(ctable[,c("Value","Std. Error")], "p value" = p)) |>
mutate(signif = if_else(p<0.01,"*",""))
kableExtra::kable(res_table,digits=3)
Value Std..Error p.value signif
periodpre -0.048 0.094 0.607
bs(age, 4)1 0.422 0.575 0.463
bs(age, 4)2 -1.429 0.676 0.035
bs(age, 4)3 -0.790 1.648 0.632
bs(age, 4)4 1.322 6.830 0.847
couronneParis 0.366 0.142 0.010
couronnePetite 0.185 0.108 0.087
sexehomme 0.391 0.103 0.000 *
cspCSP- -0.382 0.250 0.126
cspCSP+ -0.472 0.265 0.075
diploBrevet 0.625 0.646 0.334
diploCAP 0.407 0.544 0.454
diploBac 0.866 0.518 0.094
diploBac+2 0.735 0.516 0.154
diploBac+3 0.802 0.518 0.122
diploBac+4 0.742 0.557 0.183
diploBac+5 0.838 0.524 0.110
diplo>Bac+5 1.082 0.554 0.051
diplonsp 1.441 1.301 0.268
tpP80 0.113 0.254 0.657
tpP80_50 0.101 0.221 0.649
tpP50 -0.326 0.320 0.308
tpPM50 -0.472 0.421 0.262
situ_famSeul + enf(s) 0.595 0.197 0.002 *
situ_famCouple 0.161 0.152 0.289
situ_famCouple + enf(s) 0.451 0.141 0.001 *
situ_famAutres -0.197 0.308 0.522
revM500_1000 -0.073 0.498 0.883
revM1001_2500 -0.387 0.419 0.356
revM2501_4000 -0.299 0.417 0.473
revM4001_6000 -0.325 0.427 0.447
revM6001_9000 0.407 0.451 0.367
revP9000 -0.891 0.489 0.069
revJnsp -0.478 1.084 0.659
revJnspr 0.306 0.519 0.555
Jamais|Moins de 1 -2.803 0.745 0.000 *
Moins de 1|1 à 3 / mois -0.926 0.740 0.210
1 à 3 / mois|1 à 3 / sem 0.897 0.739 0.225
1 à 3 / sem|4 à 5 / semaine 2.689 0.741 0.000 *
4 à 5 / semaine|Tous les jours 3.755 0.748 0.000 *

Motif achat non alimentaires modes

Rien de vraiment probant, les parts modale ne sont pas significativement différentes entre avant / après pour ce motif.

Code
kable(table(COMAVANT_MODE$MODEMO5,COMAPRES_MODE$MODEMO5))
Actif Motorisé TC
Actif 213 47 33
Motorisé 54 428 26
TC 46 24 97
Code
kable(table(COMAVANT_MODE$MODEMO5)/sum(table(COMAVANT_MODE$MODEMO5))*100,digits=1)
Var1 Freq
Actif 30.3
Motorisé 52.5
TC 17.3
Code
kable(table(COMAPRES_MODE$MODEMO5)/sum(table(COMAPRES_MODE$MODEMO5))*100,digits=1)
Var1 Freq
Actif 32.3
Motorisé 51.5
TC 16.1
Code
ptest = prop.test(cbind(table(COMAVANT_MODE$MODEMO5),table(COMAVANT_MODE$MODEMO5)))
ggplot(gg_evol_mode|> count(AVANT_MODEMO5,APRES_MODEMO5,name = "nm")  |> add_count(AVANT_MODEMO5,wt=nm))+
  geom_point(aes(y=AVANT_MODEMO5,x=APRES_MODEMO5,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

Avec un test d’égalité de proportions on trouve une p-value de 1.

Cette fois ci même en utilisant un test d’églité de proportion pour données apairées (test de Mc Nemar) on ne trouve pas de différence significatives.

Code
pvals = sapply( levels(COMAVANT_MODE$MODEMO5),\(lev){
  M= data.frame(av=COMAVANT_MODE$MODEMO5,ap=COMAPRES_MODE$MODEMO5) |> 
    filter(!is.na(av),!is.na(ap)) |> 
    mutate(av=av==lev,ap=ap==lev) |> 
    table()
    mcnemar.test(M)$p.value}
)
kable(t(pvals),digits=3)
Actif Motorisé TC
0.157 0.515 0.379

Motif sport loisir

Idem pas de motif clair pour la matrice de transition, et pas de différences significative dans les fréqeunces entre avant / après.

Code
kable(table(COMAVANT_FREQ$FREQMO7,COMAPRES_FREQ$FREQMO7))
Jamais Moins de 1 1 à 3 / mois 1 à 3 / sem 4 à 5 / semaine Tous les jours
Jamais 117 9 14 15 3 1
Moins de 1 28 37 25 20 6 4
1 à 3 / mois 17 33 96 55 12 3
1 à 3 / sem 17 15 59 182 26 3
4 à 5 / semaine 2 1 15 42 43 8
Tous les jours 5 5 6 11 10 23
Code
kable(table(COMAVANT_FREQ$FREQMO7)/sum(table(COMAVANT_FREQ$FREQMO7))*100,digits=1)
Var1 Freq
Jamais 16.4
Moins de 1 12.4
1 à 3 / mois 22.3
1 à 3 / sem 31.2
4 à 5 / semaine 11.5
Tous les jours 6.2
Code
kable(table(COMAPRES_FREQ$FREQMO7)/sum(table(COMAPRES_FREQ$FREQMO7))*100,digits=1)
Var1 Freq
Jamais 19.2
Moins de 1 10.3
1 à 3 / mois 22.2
1 à 3 / sem 33.6
4 à 5 / semaine 10.3
Tous les jours 4.3
Code
prop.test(cbind(table(COMAVANT_FREQ$FREQMO7),table(COMAPRES_FREQ$FREQMO7)))
#> 
#>  6-sample test for equality of proportions without continuity correction
#> 
#> data:  cbind(table(COMAVANT_FREQ$FREQMO7), table(COMAPRES_FREQ$FREQMO7))
#> X-squared = 8.5272, df = 5, p-value = 0.1295
#> alternative hypothesis: two.sided
#> sample estimates:
#>    prop 1    prop 2    prop 3    prop 4    prop 5    prop 6 
#> 0.4608696 0.5454545 0.5011601 0.4816587 0.5260664 0.5882353
ggplot(gg_evol|> count(AVANT_FREQMO7,APRES_FREQMO7,name = "nm")  |> add_count(AVANT_FREQMO7,wt=nm))+
  geom_point(aes(y=AVANT_FREQMO7,x=APRES_FREQMO7,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

Pas d’effet notable de la période de détecté avec une regression ordinale p-value de 0.22.

Code



data_reg_periode = data |> dplyr::select(depf:rev,freq=FREQMOPRE7) |> mutate(period="pre") |> bind_rows(
data |> dplyr::select(depf:rev,freq=FREQMOPOST7) |> mutate(period="post"))



fit=polr(freq~period+bs(age,4)+couronne+sexe+csp+diplo+tp+situ_fam+rev,data_reg_periode,Hess = TRUE)

(ctable <- coef(summary(fit)))
#>                                        Value Std. Error     t value
#> periodpre                       0.1122321748  0.0921542  1.21787373
#> bs(age, 4)1                    -0.1430735281  0.5320073 -0.26893151
#> bs(age, 4)2                    -2.0963372550  0.6462562 -3.24381767
#> bs(age, 4)3                     1.1655488080  1.5469836  0.75343320
#> bs(age, 4)4                    -8.6413294369  6.1987531 -1.39404318
#> couronneParis                   0.1426248847  0.1394869  1.02249638
#> couronnePetite                  0.0008258175  0.1061099  0.00778266
#> sexehomme                       0.5195452463  0.1022641  5.08042856
#> cspCSP-                         0.1840732169  0.2382419  0.77263163
#> cspCSP+                         0.2422276640  0.2540057  0.95363088
#> diploBrevet                     0.2076511563  0.6167513  0.33668537
#> diploCAP                       -0.4556913869  0.5305637 -0.85888159
#> diploBac                        0.6465913357  0.4991616  1.29535481
#> diploBac+2                      0.4687920477  0.4969014  0.94343079
#> diploBac+3                      0.6187350433  0.4996143  1.23842538
#> diploBac+4                      0.8727389467  0.5335402  1.63575098
#> diploBac+5                      0.5670995041  0.5043037  1.12451974
#> diplo>Bac+5                     0.6445829565  0.5357227  1.20320271
#> diplonsp                        3.5255367288  1.4949353  2.35832058
#> tpP80                           0.2666095297  0.2374655  1.12272969
#> tpP80_50                        0.4686564023  0.2071443  2.26246333
#> tpP50                          -0.6623965854  0.3189797 -2.07661054
#> tpPM50                         -0.1212553616  0.4094818 -0.29611906
#> situ_famSeul + enf(s)           0.2584960978  0.1935859  1.33530436
#> situ_famCouple                 -0.2686079237  0.1495526 -1.79607656
#> situ_famCouple + enf(s)         0.0661412135  0.1382740  0.47833441
#> situ_famAutres                 -0.5009549979  0.2847941 -1.75900761
#> revM500_1000                    0.4123843452  0.4597060  0.89706102
#> revM1001_2500                   0.4962774098  0.3832460  1.29493171
#> revM2501_4000                   0.3588226125  0.3788805  0.94706005
#> revM4001_6000                   0.4722289455  0.3897327  1.21167388
#> revM6001_9000                   0.7722825279  0.4137882  1.86637164
#> revP9000                        0.1575549425  0.4490581  0.35085649
#> revJnsp                        -1.0053088985  1.0852160 -0.92636755
#> revJnspr                        0.3117352190  0.5023410  0.62056499
#> Jamais|Moins de 1              -0.8700537698  0.6852533 -1.26968196
#> Moins de 1|1 à 3 / mois        -0.1515465017  0.6852971 -0.22113986
#> 1 à 3 / mois|1 à 3 / sem        0.8620739225  0.6859133  1.25682634
#> 1 à 3 / sem|4 à 5 / semaine     2.5829200630  0.6875047  3.75694922
#> 4 à 5 / semaine|Tous les jours  3.8649554656  0.6938789  5.57007236

p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2

## combined table
res_table <- data.frame(cbind(ctable[,c("Value","Std. Error")], "p value" = p)) |>
mutate(signif = if_else(p<0.01,"*",""))
kableExtra::kable(res_table,digits=3)
Value Std..Error p.value signif
periodpre 0.112 0.092 0.223
bs(age, 4)1 -0.143 0.532 0.788
bs(age, 4)2 -2.096 0.646 0.001 *
bs(age, 4)3 1.166 1.547 0.451
bs(age, 4)4 -8.641 6.199 0.163
couronneParis 0.143 0.139 0.307
couronnePetite 0.001 0.106 0.994
sexehomme 0.520 0.102 0.000 *
cspCSP- 0.184 0.238 0.440
cspCSP+ 0.242 0.254 0.340
diploBrevet 0.208 0.617 0.736
diploCAP -0.456 0.531 0.390
diploBac 0.647 0.499 0.195
diploBac+2 0.469 0.497 0.345
diploBac+3 0.619 0.500 0.216
diploBac+4 0.873 0.534 0.102
diploBac+5 0.567 0.504 0.261
diplo>Bac+5 0.645 0.536 0.229
diplonsp 3.526 1.495 0.018
tpP80 0.267 0.237 0.262
tpP80_50 0.469 0.207 0.024
tpP50 -0.662 0.319 0.038
tpPM50 -0.121 0.409 0.767
situ_famSeul + enf(s) 0.258 0.194 0.182
situ_famCouple -0.269 0.150 0.072
situ_famCouple + enf(s) 0.066 0.138 0.632
situ_famAutres -0.501 0.285 0.079
revM500_1000 0.412 0.460 0.370
revM1001_2500 0.496 0.383 0.195
revM2501_4000 0.359 0.379 0.344
revM4001_6000 0.472 0.390 0.226
revM6001_9000 0.772 0.414 0.062
revP9000 0.158 0.449 0.726
revJnsp -1.005 1.085 0.354
revJnspr 0.312 0.502 0.535
Jamais|Moins de 1 -0.870 0.685 0.204
Moins de 1|1 à 3 / mois -0.152 0.685 0.825
1 à 3 / mois|1 à 3 / sem 0.862 0.686 0.209
1 à 3 / sem|4 à 5 / semaine 2.583 0.688 0.000 *
4 à 5 / semaine|Tous les jours 3.865 0.694 0.000 *

Motif achat sports loisirs modes

Rien de vraiment probant, les parts modale ne sont pas significativement différentes entre avant / après pour ce motif.

Code
kable(table(COMAVANT_MODE$MODEMO7,COMAPRES_MODE$MODEMO7))
Actif Motorisé TC
Actif 404 57 33
Motorisé 94 237 21
TC 40 25 57
Code
kable(table(COMAVANT_MODE$MODEMO7)/sum(table(COMAVANT_MODE$MODEMO7))*100,digits=1)
Var1 Freq
Actif 51.0
Motorisé 36.4
TC 12.6
Code
kable(table(COMAPRES_MODE$MODEMO7)/sum(table(COMAPRES_MODE$MODEMO7))*100,digits=1)
Var1 Freq
Actif 55.6
Motorisé 33.0
TC 11.5
Code
ptest = prop.test(cbind(table(COMAVANT_MODE$MODEMO7),table(COMAVANT_MODE$MODEMO7)))
ggplot(gg_evol_mode|> count(AVANT_MODEMO7,APRES_MODEMO7,name = "nm")  |> add_count(AVANT_MODEMO7,wt=nm))+
  geom_point(aes(y=AVANT_MODEMO7,x=APRES_MODEMO7,size=nm,color=nm/n))+scale_color_distiller(palette="Reds",direction=1)+
  theme_bw()

Avec un test d’égalité de proportions on trouve une p-value de 1.

Cette fois ci même en utilisant un test d’églité de proportion pour données apairées (test de Mc Nemar) on ne trouve pas de différence significatives.

Code
pvals = sapply( levels(COMAVANT_MODE$MODEMO5),\(lev){
  M= data.frame(av=COMAVANT_MODE$MODEMO5,ap=COMAPRES_MODE$MODEMO5) |> 
    filter(!is.na(av),!is.na(ap)) |> 
    mutate(av=av==lev,ap=ap==lev) |> 
    table()
    mcnemar.test(M)$p.value}
)
kable(t(pvals),digits=3)
Actif Motorisé TC
0.157 0.515 0.379

RQ1. Conclusion

  • Il y a un effet significatif sur la fréquence de déplacement dom-trav.
  • Pour les achat alimentaire il y a aussi une petite évolution significative a 5% sur les fréquences.
  • Pour ce qui est des parts modales on observe un changement significatif pour la marche et les TCs pour le motif domicile travail et sur la marche et conducteur pour les achat alimentaire.

RQ2. Qui est le plus concernés par ces changements ?

Il s’agit de voir s’il y a des profils de personnes qui ont changé et qui n’ont pas changé. Peut-être que c’est limité à la possibilité de faire du télétravail mais peut-être pas.

changement freq dom-trav.

On se concentre sur les actifs qui n’ont pas changés de travail et à temps plein pour éviter les facteurs confondants.

Code
fit=glm(change ~ couronne + bs(age,4) + sexe + cspd + diplo + rev+hab+change_tele+situ_fam+tele_pre +distancedomtrav,data=data|> filter(csp!='Ina',tp=="TP",change_sociopro=="Non"),family = binomial)
co = summary(fit)$coefficients
kableExtra::kable(co[co[,4]<0.1,],digits=3)
Estimate Std. Error z value Pr(>|z|)
bs(age, 4)2 -1.699 0.959 -1.772 0.076
sexehomme 0.398 0.210 1.896 0.058
change_tele 0.367 0.065 5.645 0.000
situ_famCouple -0.731 0.312 -2.342 0.019
tele_pre 0.153 0.070 2.170 0.030
Code
data_comp = data|> filter(csp!='Ina',tp=="TP",change_sociopro=="Non") 
chisq.test(data_comp$couronne,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$couronne and data_comp$change
#> X-squared = 0.30751, df = 2, p-value = 0.8575
ttcour= table(data_comp$couronne,data_comp$change)
kable(ttcour/rowSums(ttcour)*100,digits=1)
FALSE TRUE
Grande 67.0 33.0
Paris 64.2 35.8
Petite 65.6 34.4

Pas d’effet géo par type de couronne.

Code
chisq.test(data_comp$depf,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$depf and data_comp$change
#> X-squared = 4.5953, df = 7, p-value = 0.7092
ttcour= table(data_comp$depf,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   75 0.6415094 0.3584906
#>   77 0.6533333 0.3466667
#>   78 0.6756757 0.3243243
#>   91 0.6470588 0.3529412
#>   92 0.7368421 0.2631579
#>   93 0.6338028 0.3661972
#>   94 0.5945946 0.4054054
#>   95 0.7076923 0.2923077
Code
chisq.test(cut(data_comp$age,c(0,25,30,40,50,75)),data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  cut(data_comp$age, c(0, 25, 30, 40, 50, 75)) and data_comp$change
#> X-squared = 1.1832, df = 4, p-value = 0.8809
ttcour= table(cut(data_comp$age,c(0,25,30,40,50,75)),data_comp$change)
ttcour/rowSums(ttcour)
#>          
#>               FALSE      TRUE
#>   (0,25]  0.6279070 0.3720930
#>   (25,30] 0.7037037 0.2962963
#>   (30,40] 0.6686747 0.3313253
#>   (40,50] 0.6666667 0.3333333
#>   (50,75] 0.6352201 0.3647799

Pas d’effet Age significatif.

Code
chisq.test(factor(data_comp$sexe,levels=c("femme","homme")),data_comp$change)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  factor(data_comp$sexe, levels = c("femme", "homme")) and data_comp$change
#> X-squared = 2.0094, df = 1, p-value = 0.1563
ttcour= table(factor(data_comp$sexe,levels=c("femme","homme")),data_comp$change)
ttcour/rowSums(ttcour)
#>        
#>             FALSE      TRUE
#>   femme 0.6941176 0.3058824
#>   homme 0.6355932 0.3644068

Pas d’effet sexe même si la p-valeur est un poil plus faible echantillon trop petit.

Code
data_comp=data_comp |> mutate(diplo_agg=case_when(diplo %in% c("nodiplo","Brevet","CAP","Bac")~ "<Bac+2", diplo %in% c("Bac+2","Bac+3","Bac+4")~"Bac+2,3,4",.default="Bac+5"))

chisq.test(data_comp$diplo_agg,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$diplo_agg and data_comp$change
#> X-squared = 6.0868, df = 2, p-value = 0.04767
ttcour= table(data_comp$diplo_agg,data_comp$change)
ttcour/rowSums(ttcour)
#>            
#>                 FALSE      TRUE
#>   <Bac+2    0.7400000 0.2600000
#>   Bac+2,3,4 0.6453901 0.3546099
#>   Bac+5     0.6158192 0.3841808

Un effet du diplome.

Code
chisq.test(table(data_comp$change,data_comp$csp)[,1:3])
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  table(data_comp$change, data_comp$csp)[, 1:3]
#> X-squared = 5.1538, df = 2, p-value = 0.07601
ttcour= table(data_comp$csp,data_comp$change)
ttcour/rowSums(ttcour)
#>         
#>              FALSE      TRUE
#>   AgrArt 0.7200000 0.2800000
#>   CSP-   0.6902174 0.3097826
#>   CSP+   0.6018519 0.3981481
#>   Ina

Un effet de la csp.

Code
chisq.test(data_comp$change,data_comp$situ_fam)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$change and data_comp$situ_fam
#> X-squared = 2.5892, df = 4, p-value = 0.6287
ttcour= table(data_comp$situ_fam,data_comp$change)
ttcour/rowSums(ttcour)
#>                  
#>                       FALSE      TRUE
#>   Seul            0.6438356 0.3561644
#>   Seul + enf(s)   0.6500000 0.3500000
#>   Couple          0.7142857 0.2857143
#>   Couple + enf(s) 0.6483516 0.3516484
#>   Autres          0.5714286 0.4285714
Code
chisq.test(data_comp$change,data_comp$hab)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$change and data_comp$hab
#> X-squared = 2.2969e-29, df = 1, p-value = 1
ttcour= table(data_comp$hab,data_comp$change)
ttcour/rowSums(ttcour)
#>              
#>                   FALSE      TRUE
#>   maison      0.6603774 0.3396226
#>   appartement 0.6599496 0.3400504
Code
chisq.test(data_comp$change,factor(unclass(data_comp$rev)<4))
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$change and factor(unclass(data_comp$rev) < 4)
#> X-squared = 3.9337, df = 1, p-value = 0.04733
ttcour= table(factor(unclass(data_comp$rev)<4),data_comp$change)
ttcour/rowSums(ttcour)
#>        
#>             FALSE      TRUE
#>   FALSE 0.6361607 0.3638393
#>   TRUE  0.7267081 0.2732919

Petit effet de revenu.

Code
chisq.test(data_comp$change,data_comp$MODEMOPRE1)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$change and data_comp$MODEMOPRE1
#> X-squared = 10.661, df = 2, p-value = 0.004841
ttcour= table(data_comp$MODEMOPRE1,data_comp$change)
ttcour/rowSums(ttcour)
#>           
#>                FALSE      TRUE
#>   Actif    0.7894737 0.2105263
#>   Motorisé 0.6390977 0.3609023
#>   TC       0.6200873 0.3799127

Un effet mode moins de changement pour ceux qui utilisent des modes actifs. Trajets plus court ? As t’on des infos sur la distance/temps domicile - travail ?

Code
ggplot(data_comp)+geom_boxplot(aes(x=change,y=distancedomtrav))+theme_bw()

Code
t.test(as.numeric(data_comp$distancedomtrav[data_comp$change=="TRUE"]),as.numeric(data_comp$distancedomtrav[data_comp$change=="FALSE"]),alternative="greater",var.equal=TRUE)
#> 
#>  Two Sample t-test
#> 
#> data:  as.numeric(data_comp$distancedomtrav[data_comp$change == "TRUE"]) and as.numeric(data_comp$distancedomtrav[data_comp$change == "FALSE"])
#> t = 0.60097, df = 600, p-value = 0.274
#> alternative hypothesis: true difference in means is greater than 0
#> 95 percent confidence interval:
#>  -5.489602       Inf
#> sample estimates:
#> mean of x mean of y 
#>  20.57884  17.42615
coin::wilcox_test(distancedomtrav~ factor(change),data=data_comp)
#> 
#>  Asymptotic Wilcoxon-Mann-Whitney Test
#> 
#> data:  distancedomtrav by factor(change) (FALSE, TRUE)
#> Z = -2.1333, p-value = 0.0329
#> alternative hypothesis: true mu is not equal to 0
chisq.test(data_comp$change,data_comp$distancedomtrav==set_units(0,"km"))
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$change and data_comp$distancedomtrav == set_units(0, "km")
#> X-squared = 2.2214, df = 1, p-value = 0.1361
ttcour= table(data_comp$distancedomtrav==set_units(0,"km"),data_comp$change)
ttcour/rowSums(ttcour)
#>        
#>             FALSE      TRUE
#>   FALSE 0.6254417 0.3745583
#>   TRUE  0.6865204 0.3134796

On ne peut pas conclure sur un effet de la distance domicile travail avec un t-test mais un test de Wilcoxon-Mann-Whitney rejette l’hypothèse s’égalité des distribution. Et la distance domicile travail a une mediane de r{median(data_comp$distancedomtrav[data_comp$change=="TRUE"])} pour les individus ayant changés leurs fréquence de déplacement domicile travail et de r{median(data_comp$distancedomtrav[data_comp$change=="TRUE"])} pour ceux n’ayant pas changés.

changement mode dom-trav passage aux modes actif ?

Code
fit=glm(change_mode1 ~ couronne + bs(age,4) + sexe + cspd + diplo + rev+hab+change+situ_fam+tele_pre +distancedomtrav,data=data|> filter(csp!='Ina',tp=="TP",change_sociopro=="Non"),family = binomial)
co = summary(fit)$coefficients
kableExtra::kable(co[co[,4]<0.1,],digits=3)
Estimate Std. Error z value Pr(>|z|)
changeTRUE 1.912 0.349 5.483 0.000
tele_pre 0.166 0.090 1.844 0.065
Code
chisq.test(data_comp$couronne,data_comp$change_mode1)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$couronne and data_comp$change_mode1
#> X-squared = 1.93, df = 2, p-value = 0.381
ttcour= table(data_comp$couronne,data_comp$change_mode1)
kable(ttcour/rowSums(ttcour)*100,digits=1)
FALSE TRUE
Grande 92.2 7.8
Paris 87.7 12.3
Petite 91.4 8.6

Pas d’effet géo par type de couronne.

Code
chisq.test(data_comp$depf,data_comp$change_mode1)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$depf and data_comp$change_mode1
#> X-squared = 7.6923, df = 7, p-value = 0.3605
ttcour= table(data_comp$depf,data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>     
#>           FALSE       TRUE
#>   75 0.87735849 0.12264151
#>   77 0.89333333 0.10666667
#>   78 0.90540541 0.09459459
#>   91 0.95588235 0.04411765
#>   92 0.96052632 0.03947368
#>   93 0.87323944 0.12676056
#>   94 0.90540541 0.09459459
#>   95 0.93846154 0.06153846
Code
chisq.test(cut(data_comp$age,c(0,25,30,40,50,75)),data_comp$change_mode1)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  cut(data_comp$age, c(0, 25, 30, 40, 50, 75)) and data_comp$change_mode1
#> X-squared = 2.8528, df = 4, p-value = 0.5828
ttcour= table(cut(data_comp$age,c(0,25,30,40,50,75)),data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>          
#>                FALSE       TRUE
#>   (0,25]  0.88372093 0.11627907
#>   (25,30] 0.87037037 0.12962963
#>   (30,40] 0.90963855 0.09036145
#>   (40,50] 0.90860215 0.09139785
#>   (50,75] 0.93710692 0.06289308

Pas d’effet Age significatif.

Code
chisq.test(factor(data_comp$sexe,levels=c("femme","homme")),data_comp$change_mode1)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  factor(data_comp$sexe, levels = c("femme", "homme")) and data_comp$change_mode1
#> X-squared = 0.066006, df = 1, p-value = 0.7972
ttcour= table(factor(data_comp$sexe,levels=c("femme","homme")),data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>        
#>              FALSE       TRUE
#>   femme 0.90588235 0.09411765
#>   homme 0.91525424 0.08474576

Pas d’effet sexe.

Code
data_comp=data_comp |> mutate(diplo_agg=case_when(diplo %in% c("nodiplo","Brevet","CAP","Bac")~ "<Bac+2", diplo %in% c("Bac+2","Bac+3","Bac+4")~"Bac+2,3,4",.default="Bac+5"))

chisq.test(data_comp$diplo_agg,data_comp$change_mode1)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$diplo_agg and data_comp$change_mode1
#> X-squared = 2.9278, df = 2, p-value = 0.2313
ttcour= table(data_comp$diplo_agg,data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>            
#>                  FALSE       TRUE
#>   <Bac+2    0.88000000 0.12000000
#>   Bac+2,3,4 0.92907801 0.07092199
#>   Bac+5     0.90960452 0.09039548

Pas d’effet siginificatif du diplome.

Code
chisq.test(table(data_comp$change_mode1,data_comp$csp)[,1:3])
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  table(data_comp$change_mode1, data_comp$csp)[, 1:3]
#> X-squared = 0.9745, df = 2, p-value = 0.6143
ttcour= table(data_comp$csp,data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>         
#>               FALSE       TRUE
#>   AgrArt 0.92000000 0.08000000
#>   CSP-   0.90217391 0.09782609
#>   CSP+   0.92592593 0.07407407
#>   Ina

Pas d’effet de la csp.

Code
chisq.test(data_comp$change_mode1,data_comp$situ_fam)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$change_mode1 and data_comp$situ_fam
#> X-squared = 5.4416, df = 4, p-value = 0.2449
ttcour= table(data_comp$situ_fam,data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>                  
#>                        FALSE       TRUE
#>   Seul            0.89726027 0.10273973
#>   Seul + enf(s)   0.92500000 0.07500000
#>   Couple          0.94736842 0.05263158
#>   Couple + enf(s) 0.90476190 0.09523810
#>   Autres          0.78571429 0.21428571

Pas d’effet significatrif de le situation familiale.

Code
chisq.test(data_comp$change_mode1,data_comp$hab)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$change_mode1 and data_comp$hab
#> X-squared = 0.47288, df = 1, p-value = 0.4917
ttcour= table(data_comp$hab,data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>              
#>                    FALSE       TRUE
#>   maison      0.92452830 0.07547170
#>   appartement 0.90428212 0.09571788

Idem pour maison/appart.

Code
chisq.test(data_comp$change_mode1,data_comp$rev)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$change_mode1 and data_comp$rev
#> X-squared = 6.2053, df = 8, p-value = 0.6243
ttcour= table(data_comp$rev,data_comp$change_mode1)
ttcour/rowSums(ttcour)
#>             
#>                   FALSE       TRUE
#>   M500       0.85714286 0.14285714
#>   M500_1000  0.90909091 0.09090909
#>   M1001_2500 0.92307692 0.07692308
#>   M2501_4000 0.89371981 0.10628019
#>   M4001_6000 0.93103448 0.06896552
#>   M6001_9000 0.91379310 0.08620690
#>   P9000      0.91304348 0.08695652
#>   Jnsp       0.50000000 0.50000000
#>   Jnspr      0.92307692 0.07692308

Idem pour revenus.

Code
ggplot(data_comp)+geom_boxplot(aes(x=change_mode1,y=distancedomtrav))+theme_bw()

Code
t.test(as.numeric(data_comp$distancedomtrav[data_comp$change_mode1]),as.numeric(data_comp$distancedomtrav[data_comp$change_mode1]),alternative="greater",var.equal=TRUE)
#> 
#>  Two Sample t-test
#> 
#> data:  as.numeric(data_comp$distancedomtrav[data_comp$change_mode1]) and as.numeric(data_comp$distancedomtrav[data_comp$change_mode1])
#> t = 0, df = 106, p-value = 0.5
#> alternative hypothesis: true difference in means is greater than 0
#> 95 percent confidence interval:
#>  -8.590684       Inf
#> sample estimates:
#> mean of x mean of y 
#>  8.523808  8.523808
coin::wilcox_test(distancedomtrav~ factor(change),data=data_comp)
#> 
#>  Asymptotic Wilcoxon-Mann-Whitney Test
#> 
#> data:  distancedomtrav by factor(change) (FALSE, TRUE)
#> Z = -2.1333, p-value = 0.0329
#> alternative hypothesis: true mu is not equal to 0
chisq.test(data_comp$change,data_comp$distancedomtrav==set_units(0,"km"))
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$change and data_comp$distancedomtrav == set_units(0, "km")
#> X-squared = 2.2214, df = 1, p-value = 0.1361
ttcour= table(data_comp$distancedomtrav==set_units(0,"km"),data_comp$change)
ttcour/rowSums(ttcour)
#>        
#>             FALSE      TRUE
#>   FALSE 0.6254417 0.3745583
#>   TRUE  0.6865204 0.3134796

changement freq achat alim.

Code
fit=glm(change_alim ~ couronne + bs(age,4) + sexe + cspd + diplo + rev+hab+change+situ_fam+tele_pre +distancedomtrav,data=data,family = binomial)
co = summary(fit)$coefficients
kableExtra::kable(co[co[,4]<0.1,],digits=3)
Estimate Std. Error z value Pr(>|z|)
revM6001_9000 -1.100 0.668 -1.645 0.100
changeTRUE 0.310 0.165 1.879 0.060
tele_pre 0.133 0.046 2.911 0.004
Code
chisq.test(data$couronne,data$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$couronne and data$change_alim
#> X-squared = 0.27958, df = 2, p-value = 0.8695
ttcour= table(data$couronne,data$change_alim)
ttcour/rowSums(ttcour)
#>         
#>              FALSE      TRUE
#>   Grande 0.7534884 0.2465116
#>   Paris  0.7738095 0.2261905
#>   Petite 0.7567568 0.2432432
Code

chisq.test(data$MODEMOPRE4,data$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$MODEMOPRE4 and data$change_alim
#> X-squared = 2.78, df = 2, p-value = 0.2491
ttcour= table(data$MODEMOPRE4,data$change_alim)
ttcour/rowSums(ttcour)
#>           
#>                FALSE      TRUE
#>   Actif    0.7821782 0.2178218
#>   Motorisé 0.7563636 0.2436364
#>   TC       0.7043478 0.2956522

Pas d’effet des modes.

Code
chisq.test(cut(data_comp$age,c(0,25,30,40,50,75)),data_comp$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  cut(data_comp$age, c(0, 25, 30, 40, 50, 75)) and data_comp$change_alim
#> X-squared = 14.497, df = 4, p-value = 0.005867
ttcour= table(cut(data_comp$age,c(0,25,30,40,50,75)),data_comp$change_alim)
ttcour/rowSums(ttcour)
#>          
#>               FALSE      TRUE
#>   (0,25]  0.6046512 0.3953488
#>   (25,30] 0.7592593 0.2407407
#>   (30,40] 0.7710843 0.2289157
#>   (40,50] 0.7956989 0.2043011
#>   (50,75] 0.8616352 0.1383648

Un effet age a réfléchir

Code

chisq.test(data$sexe,data$change_alim)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data$sexe and data$change_alim
#> X-squared = 0.091673, df = 1, p-value = 0.7621
ttcour= table(data$sexe,data$change_alim)
ttcour/rowSums(ttcour)
#>        
#>             FALSE      TRUE
#>   femme 0.7634855 0.2365145
#>   homme 0.7530864 0.2469136
#>   nsp

Pas d’effet sexe.

Code
data=data|> mutate(diplo_agg=case_when(diplo %in% c("nodiplo","Brevet","CAP","Bac")~ "<Bac+2", diplo %in% c("Bac+2","Bac+3","Bac+4")~"Bac+2,3,4",.default="Bac+5"))

chisq.test(data$diplo_agg,data$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$diplo_agg and data$change_alim
#> X-squared = 0.85808, df = 2, p-value = 0.6511
ttcour= table(data$diplo_agg,data$change_alim)
ttcour/rowSums(ttcour)
#>            
#>                 FALSE      TRUE
#>   <Bac+2    0.7458746 0.2541254
#>   Bac+2,3,4 0.7729469 0.2270531
#>   Bac+5     0.7490040 0.2509960
Code
chisq.test(data$csp,data$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$csp and data$change_alim
#> X-squared = 3.0052, df = 3, p-value = 0.3908
ttcour= table(data$csp,data$change_alim)
ttcour/rowSums(ttcour)
#>         
#>              FALSE      TRUE
#>   AgrArt 0.7941176 0.2058824
#>   CSP-   0.7463312 0.2536688
#>   CSP+   0.7944664 0.2055336
#>   Ina    0.7352941 0.2647059

Pas d’effet diplome / csp.

Code
chisq.test(data$situ_fam,data$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$situ_fam and data$change_alim
#> X-squared = 2.1146, df = 4, p-value = 0.7147
ttcour= table(data$situ_fam,data$change_alim)
ttcour/rowSums(ttcour)
#>                  
#>                       FALSE      TRUE
#>   Seul            0.7563025 0.2436975
#>   Seul + enf(s)   0.7272727 0.2727273
#>   Couple          0.7901786 0.2098214
#>   Couple + enf(s) 0.7513661 0.2486339
#>   Autres          0.7246377 0.2753623

Pas d’effet situation fam.

Code
chisq.test(data$hab,data$change_alim)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data$hab and data$change_alim
#> X-squared = 0.4824, df = 1, p-value = 0.4873
ttcour= table(data$hab,data$change_alim)
ttcour/rowSums(ttcour)
#>              
#>                   FALSE      TRUE
#>   maison      0.7427653 0.2572347
#>   appartement 0.7656012 0.2343988
Code
chisq.test(data$rev,data$change_alim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$rev and data$change_alim
#> X-squared = 14.038, df = 8, p-value = 0.08079
ttcour= table(data$rev,data$change_alim)
ttcour/rowSums(ttcour)
#>             
#>                  FALSE      TRUE
#>   M500       0.7083333 0.2916667
#>   M500_1000  0.6530612 0.3469388
#>   M1001_2500 0.7578125 0.2421875
#>   M2501_4000 0.7384106 0.2615894
#>   M4001_6000 0.7789474 0.2210526
#>   M6001_9000 0.9000000 0.1000000
#>   P9000      0.6764706 0.3235294
#>   Jnsp       0.8571429 0.1428571
#>   Jnspr      0.7586207 0.2413793

Un effet revenus.

Code
chisq.test(data_comp$change,data_comp$MODEMOPRE4)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$change and data_comp$MODEMOPRE4
#> X-squared = 1.7098, df = 2, p-value = 0.4253
ttcour= table(data_comp$MODEMOPRE4,data_comp$change_alim)
ttcour/rowSums(ttcour)
#>           
#>                FALSE      TRUE
#>   Actif    0.8135593 0.1864407
#>   Motorisé 0.7816712 0.2183288
#>   TC       0.7540984 0.2459016

Pas d’effet du mode.

changement mode achat alim.

Code
fit=glm(change_modealim ~ couronne + bs(age,4) + sexe + cspd + diplo + rev+hab+change+situ_fam+tele_pre +distancedomtrav,data=data,family = binomial)
co = summary(fit)$coefficients
kableExtra::kable(co[co[,4]<0.1,],digits=3)
Estimate Std. Error z value Pr(>|z|)
bs(age, 4)2 -4.060 1.834 -2.214 0.027
bs(age, 4)3 8.438 4.682 1.802 0.072
bs(age, 4)4 -54.089 26.465 -2.044 0.041
diploBrevet -1.822 1.011 -1.802 0.071
diploBac -1.500 0.721 -2.079 0.038
diploBac+3 -1.481 0.742 -1.996 0.046
Code
chisq.test(data$couronne,data$change_modealim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$couronne and data$change_modealim
#> X-squared = 1.4645, df = 2, p-value = 0.4808
ttcour= table(data$couronne,data$change_modealim)
ttcour/rowSums(ttcour)
#>         
#>               FALSE       TRUE
#>   Grande 0.90465116 0.09534884
#>   Paris  0.88690476 0.11309524
#>   Petite 0.87837838 0.12162162
Code
chisq.test(cut(data_comp$age,c(0,35,75)),data_comp$change_modealim)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  cut(data_comp$age, c(0, 35, 75)) and data_comp$change_modealim
#> X-squared = 4.5475, df = 1, p-value = 0.03297
ttcour= table(cut(data_comp$age,c(0,35,75)),data_comp$change_modealim)
ttcour/rowSums(ttcour)
#>          
#>                FALSE       TRUE
#>   (0,35]  0.86559140 0.13440860
#>   (35,75] 0.92417062 0.07582938

Un effet age a réfléchir.

Code

chisq.test(data$sexe,data$change_modealim)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data$sexe and data$change_modealim
#> X-squared = 0.33097, df = 1, p-value = 0.5651
ttcour= table(data$sexe,data$change_modealim)
ttcour/rowSums(ttcour)
#>        
#>             FALSE      TRUE
#>   femme 0.8983402 0.1016598
#>   homme 0.8847737 0.1152263
#>   nsp

Pas d’effet sexe.

Code
data=data|> mutate(diplo_agg=case_when(diplo %in% c("nodiplo","Brevet","CAP","Bac")~ "<Bac+2", diplo %in% c("Bac+2","Bac+3","Bac+4")~"Bac+2,3,4",.default="Bac+5"))

chisq.test(data$diplo_agg,data$change_modealim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$diplo_agg and data$change_modealim
#> X-squared = 0.52865, df = 2, p-value = 0.7677
ttcour= table(data$diplo_agg,data$change_modealim)
ttcour/rowSums(ttcour)
#>            
#>                 FALSE      TRUE
#>   <Bac+2    0.8910891 0.1089109
#>   Bac+2,3,4 0.8985507 0.1014493
#>   Bac+5     0.8804781 0.1195219
Code
chisq.test(data$csp,data$change_modealim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$csp and data$change_modealim
#> X-squared = 0.73756, df = 3, p-value = 0.8643
ttcour= table(data$csp,data$change_modealim)
ttcour/rowSums(ttcour)
#>         
#>               FALSE       TRUE
#>   AgrArt 0.91176471 0.08823529
#>   CSP-   0.89727463 0.10272537
#>   CSP+   0.88932806 0.11067194
#>   Ina    0.87745098 0.12254902

Pas d’effet diplome / csp.

Code
chisq.test(data$situ_fam,data$change_modealim)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data$situ_fam and data$change_modealim
#> X-squared = 4.6253, df = 4, p-value = 0.3279
ttcour= table(data$situ_fam,data$change_modealim)
ttcour/rowSums(ttcour)
#>                  
#>                        FALSE       TRUE
#>   Seul            0.86554622 0.13445378
#>   Seul + enf(s)   0.92424242 0.07575758
#>   Couple          0.91517857 0.08482143
#>   Couple + enf(s) 0.89344262 0.10655738
#>   Autres          0.85507246 0.14492754

Pas d’effet situation fam.

Code
chisq.test(data$hab,data$change_modealim)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data$hab and data$change_modealim
#> X-squared = 3.3218, df = 1, p-value = 0.06837
ttcour= table(data$hab,data$change_modealim)
ttcour/rowSums(ttcour)
#>              
#>                    FALSE       TRUE
#>   maison      0.91961415 0.08038585
#>   appartement 0.87823440 0.12176560

Un effet appartement !

Code
chisq.test(factor(unclass(data$rev)<4),data$change_modealim)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  factor(unclass(data$rev) < 4) and data$change_modealim
#> X-squared = 4.5849, df = 1, p-value = 0.03225
ttcour= table(factor(unclass(data$rev)<4),data$change_modealim)
ttcour/rowSums(ttcour)
#>        
#>              FALSE       TRUE
#>   FALSE 0.90766823 0.09233177
#>   TRUE  0.86018237 0.13981763

Un effet revenus.

RQ3. Quel est le rôle du télétravail (et de la crise covid) dans ces changements ?

Ici il s’agit de voir si le fait d’avoir commencé ou augmenté le télétravail pendant la crise a un effet sur la fréquence voire sur le mode de déplacement pour le motif travail. On peut aussi y inclure les questions de perception du télétravail (Q46 sauf la Q46-10) ainsi que quelques parties de la question Q36 et de la question Q61. # RQ4. Les bouleversements qui ont été causés par la crise sanitaires expliquent-ils en partie ces changements ? Il s’agirait d’exploiter la partie 3 en comparant ceux qui ont baissé en fréquence et les autres, en adaptant les questions selon le motif de déplacement considéré.

Code
data_rq3 = data |> filter(csp!='Ina',tp=="TP",change_sociopro=="Non") |> dplyr::select(change,change_tele,tele_pre,couronne:rev,CHANGEFREQIN1:CHANGEFREQIN7,FREQMOIN1:TELEINPER9) |>
  mutate(across(TELEINPER1:TELEINPER9, ~ addNA(.x))) |> dplyr::select(-csp) |> mutate(change=factor(change))
fit=glm(change ~  bs(age,4) + sexe + rev+change_tele+tele_pre+situ_fam +CHANGEFREQIN1+CHANGEFREQIN2+CHANGEFREQIN3+CHANGEFREQIN4+CHANGEFREQIN5+CHANGEFREQIN6+CHANGEFREQIN7+TELEINPER1+TELEINPER2+TELEINPER3+TELEINPER4+TELEINPER5+TELEINPER6+TELEINPER7+TELEINPER8,data=data_rq3,family = binomial)
co = summary(fit)$coefficients
kableExtra::kable(co[co[,4]<0.05,],digits=3)
Estimate Std. Error z value Pr(>|z|)
change_tele 0.281 0.072 3.895 0.000
situ_famCouple -0.748 0.332 -2.254 0.024
TELEINPER5++ 2.763 1.337 2.067 0.039
Code
chisq.test(data_comp$TELEINPER2,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER2 and data_comp$change
#> X-squared = 6.9973, df = 4, p-value = 0.136
ttcour= table(data_comp$TELEINPER2,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   -- 0.7692308 0.2307692
#>   -  0.5625000 0.4375000
#>   =  0.6415094 0.3584906
#>   +  0.5121951 0.4878049
#>   ++ 0.5677966 0.4322034
Code
chisq.test(data_comp$TELEINPER3,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER3 and data_comp$change
#> X-squared = 10.942, df = 4, p-value = 0.02722
ttcour= table(data_comp$TELEINPER3,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   -- 0.7222222 0.2777778
#>   -  0.8000000 0.2000000
#>   =  0.6739130 0.3260870
#>   +  0.5000000 0.5000000
#>   ++ 0.5645161 0.4354839
Code
chisq.test(data_comp$TELEINPER4,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER4 and data_comp$change
#> X-squared = 8.135, df = 4, p-value = 0.08676
ttcour= table(data_comp$TELEINPER4,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   -- 0.7333333 0.2666667
#>   -  0.5714286 0.4285714
#>   =  0.6976744 0.3023256
#>   +  0.5080645 0.4919355
#>   ++ 0.5575221 0.4424779
Code
chisq.test(data_comp$TELEINPER5,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER5 and data_comp$change
#> X-squared = 11.316, df = 4, p-value = 0.02323
ttcour= table(data_comp$TELEINPER5,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>           FALSE       TRUE
#>   -- 0.92307692 0.07692308
#>   -  0.64000000 0.36000000
#>   =  0.67346939 0.32653061
#>   +  0.55172414 0.44827586
#>   ++ 0.50833333 0.49166667
Code
chisq.test(data_comp$TELEINPER6,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER6 and data_comp$change
#> X-squared = 11.881, df = 4, p-value = 0.01826
ttcour= table(data_comp$TELEINPER6,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   -- 0.7142857 0.2857143
#>   -  0.6562500 0.3437500
#>   =  0.7400000 0.2600000
#>   +  0.4959350 0.5040650
#>   ++ 0.5396825 0.4603175
Code
chisq.test(data_comp$TELEINPER7,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER7 and data_comp$change
#> X-squared = 9.8953, df = 4, p-value = 0.04223
ttcour= table(data_comp$TELEINPER7,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   -- 0.8571429 0.1428571
#>   -  0.5312500 0.4687500
#>   =  0.6285714 0.3714286
#>   +  0.4923077 0.5076923
#>   ++ 0.6132075 0.3867925
Code
chisq.test(data_comp$TELEINPER9,data_comp$change)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  data_comp$TELEINPER9 and data_comp$change
#> X-squared = 10.161, df = 4, p-value = 0.0378
ttcour= table(data_comp$TELEINPER9,data_comp$change)
ttcour/rowSums(ttcour)
#>     
#>          FALSE      TRUE
#>   -- 0.7500000 0.2500000
#>   -  0.5416667 0.4583333
#>   =  0.6543210 0.3456790
#>   +  0.4796748 0.5203252
#>   ++ 0.6052632 0.3947368

Q46_2-> changement,Q46_3-> changement,Q46_4-> changement,Q46_5-> changement,Q46_6-> changement,Q46_7-> changement,Q46_9-> changement

Code
chisq.test(data_comp$CHANGEFREQIN1,data_comp$change)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$CHANGEFREQIN1 and data_comp$change
#> X-squared = 20.962, df = 1, p-value = 4.686e-06
ttcour= table(data_comp$CHANGEFREQIN1,data_comp$change)
ttcour/rowSums(ttcour)
#>      
#>           FALSE      TRUE
#>   Oui 0.5775076 0.4224924
#>   Non 0.7571429 0.2428571
Code
chisq.test(data_comp$CHANGEFREQIN2,data_comp$change)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$CHANGEFREQIN2 and data_comp$change
#> X-squared = 13.839, df = 1, p-value = 0.0001992
ttcour= table(data_comp$CHANGEFREQIN2,data_comp$change)
ttcour/rowSums(ttcour)
#>      
#>           FALSE      TRUE
#>   Oui 0.5940299 0.4059701
#>   Non 0.7408759 0.2591241
Code
chisq.test(data_comp$CHANGEFREQIN3,data_comp$change)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  data_comp$CHANGEFREQIN3 and data_comp$change
#> X-squared = 4.5408, df = 1, p-value = 0.0331
ttcour= table(data_comp$CHANGEFREQIN3,data_comp$change)
ttcour/rowSums(ttcour)
#>      
#>           FALSE      TRUE
#>   Oui 0.6185897 0.3814103
#>   Non 0.7037037 0.2962963

Q36_1,2,3-> changement

effet changement de mode pedant covid ?

Code
ch=table(data_comp$MODEMOIN1=="Actif" & data_comp$MODEMOPRE1!="Actif",data_comp$MODEMOPOST1=="Actif" & data_comp$MODEMOPRE1!="Actif")
chisq.test(ch)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  ch
#> X-squared = 38.638, df = 1, p-value = 5.103e-10

Oui !! Ceux qui se sont mis aux mode actifs pendant la crise ont une proba plus grande de se déplacer en mode actif après.