-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.Rmd
2953 lines (2552 loc) · 176 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
output: github_document
bibliography: Dissonance_Santiago_v3/mybibfile.bib
always_allow_html: true
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
# Do Drivers Dream of Walking? An Investigation of Travel Mode Dissonance from the Perspective of Affective Values
<!-- badges: start -->
<!-- badges: end -->
Beatriz Mella Lira (Pontificia Universidad Católica de Chile)
Antonio Paez (McMaster University)
Journal of Transport and Health (2021) Vol. 20:101015, https://doi.org/10.1016/j.jth.2021.101015
## Abstract
### Introduction
Subjective wellbeing is a topic that has attracted considerable attention in the transportation literature in recent years. As a result, there is a burgeoning literature that investigates the impacts of travel on subjective wellbeing, and how wellbeing, in turn, can influence behavior. An important aspect of subjective wellbeing are the affective reactions of people to their experiences.
### Objective
The objective of this paper is to analyze the affective reactions of travelers with respect to various modes of transportation. In particular, we are interested in the potential for dissonance between primary mode of travel and the mode(s) of travel identified as evoking various affective reactions.
### Materials and Methods
The study is based on data collected from a sample of travelers in the city of Santiago, in Chile. Participants in the study were asked about their usual mode of travel, and then were asked to name their ideal mode(s) of transportation from the perspective of various affective reactions. The reactions we investigate are associated with the values of Freedom, Enjoyment, Happiness, Poverty, Luxury, and Status. Analysis is based on tests of independence and visualization techniques.
### Results
The results indicate that users of public transportation experience the most dissonance in terms of affective reactions, and active travelers the least. For those travelers who experience dissonance, active travel is the mode most commonly associated with Freedom, Enjoyment, and Happiness, while public transportation is most commonly associated with Poverty. The automobile, in contrast, is the mode most commonly associated with Luxury and Status.
## Keywords
- Mode of travel
- Subjective wellbeing
- Dissonance
- Affective values
- Santiago de Chile
- Survey
- Data analysis
```{r load-packages, include=FALSE}
# Load packages used in this document
library(ggmosaic)
library(ggthemes)
library(grid)
library(gridExtra)
library(kableExtra)
library(readxl)
library(rgdal)
library(rticles)
library(sf)
library(tidyverse)
```
```{r install-data-package, include=FALSE}
# Run only once if needed
#devtools::install_github("paezha/Mode-Dissonance-and-Subjective-Wellbeing", subdir = "ModeDissonanceSantiago")
```
```{r load-data-package, include=FALSE}
library(ModeDissonanceSantiago)
```
```{r load-data, include=FALSE}
# To run this notebook, the file `Dissonance_Santiago.RData` is needed. This file contains the following object:
#
# master: a dataframe with information collected from 451 respondents. The variables in the dataframe are:
#
# - NUMERO: Respondent ID
# - USED: Main mode of transportation used by the respondent
# - FREEDOM: Mode(s) that the respondent associates with feelings of freedom
# - ENJOYMENT: Mode(s) that the respondent associates with feelings of enjoyment
# - HAPPINESS: Mode(s) that the respondent associates with feelings of happiness
# - POVERTY: Mode(s) that the respondent associates with feelings of poverty
# - LUXURY: Mode(s) that the respondent associates with feelings of luxury
# - STATUS: Mode(s) that the respondent associates with feelings of status
# - SAFETY: Mode(s) that the respondent associates with feelings of safety
# - TIME: Mode(s) that the respondent associates with feelings of WASTED TIME
# - EFFICIENCY: Mode(s) that the respondent associates with feelings of efficiency
# - AGE: Age of the respondent
# - EDUCATION: Level of education of the respondent
# - INCOME: Level of income of respondent
# - TRAVEL_TIME: Trip duration of regular commuting trip
# - WEIGHT_*: A weight for the responses by ATTRIBUTE. Some respondents selected more than one mode that they associated with feelings of {FREEDOM, ENJOYMENT, HAPPINESS, POVERTY, LUXURY, STATUS, SAFETY, TIME, and EFFICIENCY}. To avoid giving greater weight to respondents who indicated several modes of transportation, a weight was calculated that is the inverse of the number of modes indicated. These weights can be used to weight the frequencies prior to any analysis.
#
# The modes of transportation (USED, FREEDOM, ENJOYMENT, HAPPINESS, POVERTY, LUXURY, STATUS, SAFETY, TIME, EFFICIENCY) are coded as:
# "A": Car
# "B": Taxi
# "C": Colectivo
# "D": Moto
# "E": Metro
# "F": Bus
# "G": Bicycle
# "H": Walk
#
# AGE is coded as:
#
# "A": Less18
# "B": 18to24
# "C": 25to34
# "D": 35to54
# "E": 55to64
# "F": 65more
#
# EDUCATION is coded as:
#
# "A": ELEMENTARY
# "B": SECUNDARY
# "C": PROFESS_TECH
# "D": COLLEGE
# "E": POSTGRAD
#
# INCOME is coded as (in pesos?):
#
# "A": Less423
# "B": 423to639
# "C": 639to977
# "D": 977to1550
# "E": 1550to2380
# "F": 2380more
#
# TRAVEL_TIME is coded as:
#
# "A": 0-20 min
# "B": 20-40 min
# "C": 40-60 min
# "D": 1h and more
# Read the RData file:
#load("Dissonance_Santiago_v3/Dissonance_Santiago.RData")
```
```{r data-preparation, include=FALSE}
# The master dataframe is processed for analysis. We plan to conduct two distinct types of analysis:
#
# 1. Who experiences dissonace?
#
# Analysis of dissonance using the characteristics of respondents (i.e., AGE, EDUCATION, INCOME, (Mode) USED, and TRAVEL_TIME) by ATTRIBUTE (i.e., FREEDOM et al.). In this case, dissonance is defined as follows:
#
# >> If the mode used is identical to the mode that the respondent associates with ATTRIBUTE (i.e. FREEDOM et al.), we consider that there is no dissonance; otherwise, we consider that there is dissonance. For example, if the respondent's main mode of transportation is Car, and the respondent associates Car with feelings of FREEDOM, then there is no dissonance. On the other hand, if the respondent's main mode of transportation is Car, but associates Walking with feelings of FREEDOM, there is dissonance.
#
# Given this, we will calculate how frequently there is dissonance at different levels of AGE, EDUCATION, INCOME, MODE, TRAVEL_TIME. Tests of independence can be implemented.
#
# 2. For those respondents who experience dissonance, what mode(s) are better aligned with various affective values
#
# Analysis of dissonance using the mode USED and the mode respondents associated with ATTRIBUTE, then stratified by characteristics of respondents (i.e., AGE et al.) in this case, we see how frequently each mode was associated with ATTRIBUTE, given the main mode of transportation of the respondents.
#
# Here the dataframes are prepared to support these two types of analysis
#####################################################################################
# Prepare a dataframe for Analysis 1: Who experiences dissonance by affective value #
#####################################################################################
# First, select the variables needed from the master table, and code dissonance as 1 (no dissonance) or two (dissonance):
Overall_dissonance <- Dissonance_Santiago %>%
transmute(USED,
FREEDOM_DISSONANCE = ifelse(USED == FREEDOM, 1, 2),
ENJOYMENT_DISSONANCE = ifelse(USED == ENJOYMENT, 1, 2),
HAPPINESS_DISSONANCE = ifelse(USED == HAPPINESS, 1, 2),
POVERTY_DISSONANCE = ifelse(USED == POVERTY, 1, 2),
LUXURY_DISSONANCE = ifelse(USED == LUXURY, 1, 2),
STATUS_DISSONANCE = ifelse(USED == STATUS, 1, 2),
SAFETY_DISSONANCE = ifelse(USED == SAFETY, 1, 2),
TIME_DISSONANCE = ifelse(USED == TIME, 1, 2),
EFFICIENCY_DISSONANCE = ifelse(USED == EFFICIENCY, 1, 2),
AGE,
EDUCATION,
INCOME,
TRAVEL_TIME)
# Recode variables and convert to factors:
Overall_dissonance <- Overall_dissonance %>%
mutate(USED = case_when(USED == "A" ~ "Car",
USED == "B" | USED == "C" | USED == "D" ~ "Other",
USED == "E" | USED == "F" ~ "Public",
USED == "G" | USED == "H" ~ "Active"),
AGE = case_when(AGE == "A" | AGE == "B" | AGE == "C" ~ "< 35",
AGE == "D" ~ "35 - 54",
AGE == "E" | AGE == "F" ~ "> 54"),
EDUCATION = case_when(EDUCATION == "A" | EDUCATION == "B" ~ "K-12",
EDUCATION == "C" | EDUCATION == "D" ~ "Tech/Univ",
EDUCATION == "E" ~ "Graduate"),
INCOME = case_when(INCOME == "A" | INCOME == "B" ~ "Low",
INCOME == "C" | INCOME == "D" ~ "Middle",
INCOME == "E" | INCOME == "F" ~ "High"),
TRAVEL_TIME = case_when(TRAVEL_TIME == "A" ~ "< 20 min",
TRAVEL_TIME == "B" ~ "20 - 40 min",
TRAVEL_TIME == "C" ~ "40 - 60 min",
TRAVEL_TIME == "D" ~ "> 60 min")) %>%
mutate(USED = factor(USED, levels = c("Car", "Active", "Public", "Other"), labels = c("Car", "Active", "Public", "Other")),
FREEDOM_DISSONANCE = factor(FREEDOM_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
ENJOYMENT_DISSONANCE = factor(ENJOYMENT_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
HAPPINESS_DISSONANCE = factor(HAPPINESS_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
POVERTY_DISSONANCE = factor(POVERTY_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
LUXURY_DISSONANCE = factor(LUXURY_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
STATUS_DISSONANCE = factor(STATUS_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
SAFETY_DISSONANCE = factor(SAFETY_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
TIME_DISSONANCE = factor(TIME_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
EFFICIENCY_DISSONANCE = factor(EFFICIENCY_DISSONANCE, levels = c(1, 2), labels = c("No Dissonance", "Dissonance")),
AGE = factor(AGE, levels = c("< 35", "35 - 54", "> 54"), labels = c("< 35", "35 - 54", "> 54")),
EDUCATION = factor(EDUCATION, levels = c("K-12", "Tech/Univ", "Graduate"), labels = c("K-12", "Tech/Univ", "Graduate")),
INCOME = factor(INCOME, levels = c("Low", "Middle", "High"), labels = c("Low", "Middle", "High")),
TRAVEL_TIME = factor(TRAVEL_TIME, levels = c("< 20 min", "20 - 40 min", "40 - 60 min", "> 60 min"), labels = c("< 20 min", "20 - 40 min", "40 - 60 min", "> 60 min")))
###############################################################################################
# Prepare a dataframe for Analysis 2: What mode(s) align better with various affective values #
###############################################################################################
# First, split the responses regarding the modes associated with each attribute, so that we can record each mode selected individually:
Modes_by_Attribute <- Dissonance_Santiago %>%
mutate(FREEDOM = strsplit(as.character(FREEDOM), ""),
ENJOYMENT = strsplit(as.character(ENJOYMENT), ""),
HAPPINESS = strsplit(as.character(HAPPINESS), ""),
POVERTY = strsplit(as.character(POVERTY), ""),
LUXURY = strsplit(as.character(LUXURY), ""),
STATUS = strsplit(as.character(STATUS), ""),
SAFETY = strsplit(as.character(SAFETY), ""),
TIME = strsplit(as.character(TIME), ""),
EFFICIENCY = strsplit(as.character(EFFICIENCY), ""))
# Here, we convert each of the responses into an individual row and stack the resulting dataframes, after adding the name of the attribute for identification:
Modes_by_Attribute <- rbind(data.frame(Modes_by_Attribute %>%
select(-c(ENJOYMENT,
HAPPINESS,
POVERTY,
LUXURY,
STATUS,
SAFETY,
TIME,
EFFICIENCY,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = FREEDOM, WEIGHT = WEIGHT_FREEDOM) %>%
unnest(IDEAL),
ATTRIBUTE = "FREEDOM"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
HAPPINESS,
POVERTY,
LUXURY,
STATUS,
SAFETY,
TIME,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = ENJOYMENT, WEIGHT = WEIGHT_ENJOYMENT) %>%
unnest(IDEAL),
ATTRIBUTE = "ENJOYMENT"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
POVERTY,
LUXURY,
STATUS,
SAFETY,
TIME,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = HAPPINESS, WEIGHT = WEIGHT_HAPPINESS) %>%
unnest(IDEAL),
ATTRIBUTE = "HAPPINESS"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
HAPPINESS,
LUXURY,
STATUS,
SAFETY,
TIME,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = POVERTY, WEIGHT = WEIGHT_POVERTY) %>%
unnest(IDEAL),
ATTRIBUTE = "POVERTY"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
HAPPINESS,
POVERTY,
#LUXURY,
STATUS,
SAFETY,
TIME,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
#WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = LUXURY, WEIGHT = WEIGHT_LUXURY) %>%
unnest(IDEAL),
ATTRIBUTE = "LUXURY"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
HAPPINESS,
POVERTY,
LUXURY,
#STATUS,
SAFETY,
TIME,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
#WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = STATUS, WEIGHT = WEIGHT_STATUS) %>%
unnest(IDEAL),
ATTRIBUTE = "STATUS"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
HAPPINESS,
POVERTY,
LUXURY,
STATUS,
TIME,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_TIME,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = SAFETY, WEIGHT = WEIGHT_SAFETY) %>%
unnest(IDEAL),
ATTRIBUTE = "SAFETY"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
HAPPINESS,
POVERTY,
LUXURY,
STATUS,
SAFETY,
EFFICIENCY,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_EFFICIENCY)) %>%
rename(IDEAL = TIME, WEIGHT = WEIGHT_TIME) %>%
unnest(IDEAL),
ATTRIBUTE = "TIME"),
data.frame(Modes_by_Attribute %>%
select(-c(FREEDOM,
ENJOYMENT,
HAPPINESS,
POVERTY,
LUXURY,
STATUS,
SAFETY,
TIME,
WEIGHT_FREEDOM,
WEIGHT_ENJOYMENT,
WEIGHT_HAPPINESS,
WEIGHT_POVERTY,
WEIGHT_LUXURY,
WEIGHT_STATUS,
WEIGHT_SAFETY,
WEIGHT_TIME)) %>%
rename(IDEAL = EFFICIENCY, WEIGHT = WEIGHT_EFFICIENCY) %>%
unnest(IDEAL),
ATTRIBUTE = "EFFICIENCY"))
# There are some missing values. Drop all NAs:
Modes_by_Attribute <- drop_na(Modes_by_Attribute)
# We now recode the variables:
Modes_by_Attribute <- Modes_by_Attribute %>%
mutate(USED = case_when(USED == "A" ~ "Car",
USED == "B" | USED == "C" | USED == "D" ~ "Other",
USED == "E" | USED == "F" ~ "Public",
USED == "G" | USED == "H" ~ "Active"),
IDEAL = case_when(IDEAL == "A" ~ "Car",
IDEAL == "B" | IDEAL == "C" | IDEAL == "D" ~ "Other",
IDEAL == "E" | IDEAL == "F" ~ "Public",
IDEAL == "G" | IDEAL == "H" ~ "Active"),
AGE = case_when(AGE == "A" | AGE == "B" | AGE == "C" ~ "< 35",
AGE == "D" ~ "35 - 54",
AGE == "E" | AGE == "F" ~ "> 54"),
EDUCATION = case_when(EDUCATION == "A" | EDUCATION == "B" ~ "K-12",
EDUCATION == "C" | EDUCATION == "D" ~ "Tech/Univ",
EDUCATION == "E" ~ "Graduate"),
INCOME = case_when(INCOME == "A" | INCOME == "B" ~ "Low",
INCOME == "C" | INCOME == "D" ~ "Middle",
INCOME == "E" | INCOME == "F" ~ "High"),
TRAVEL_TIME = case_when(TRAVEL_TIME == "A" ~ "< 20 min",
TRAVEL_TIME == "B" ~ "20 - 40 min",
TRAVEL_TIME == "C" ~ "40 - 60 min",
TRAVEL_TIME == "D" ~ "> 60 min"))
# After recoding the , there will be some duplicate entries, because a person may have attributed, say, feelings of freedom to walking and cycling, so in the table this will appear as two instances of "Active". This is ok, because each is weighted appropriately.
# Convert to factors:
Modes_by_Attribute <- Modes_by_Attribute %>%
mutate(USED = factor(USED, levels = c("Car", "Active", "Public", "Other"), labels = c("Car", "Active", "Public", "Other")),
IDEAL = factor(IDEAL, levels = c("Car", "Active", "Public", "Other"), labels = c("Car", "Active", "Public", "Other")),
AGE = factor(AGE, levels = c("< 35", "35 - 54", "> 54"), labels = c("< 35", "35 - 54", "> 54")),
EDUCATION = factor(EDUCATION, levels = c("K-12", "Tech/Univ", "Graduate"), labels = c("K-12", "Tech/Univ", "Graduate")),
INCOME = factor(INCOME, levels = c("Low", "Middle", "High"), labels = c("Low", "Middle", "High")),
TRAVEL_TIME = factor(TRAVEL_TIME, levels = c("< 20 min", "20 - 40 min", "40 - 60 min", "> 60 min"), labels = c("< 20 min", "20 - 40 min", "40 - 60 min", "> 60 min")))
```
```{r cross-tabs-function, include=FALSE}
## Define functions for crosstabs; these functions enhance the base crosstabs functions and make it easier to report cross tabulations in different ways.
crosstab <- function (..., dec.places = NULL,
type = NULL,
style = "wide",
row.vars = NULL,
col.vars = NULL,
percentages = TRUE,
addmargins = TRUE,
subtotals=TRUE)
###################################################################################
# #
# Function created by Dr Paul Williamson, Dept. of Geography and Planning, #
# School of Environmental Sciences, University of Liverpool, UK. #
# #
# Adapted from the function ctab() in the catspec package. #
# #
# Version: 12th July 2013 #
# #
# Output best viewed using the companion function print.crosstab() #
# #
###################################################################################
#Declare function used to convert frequency counts into relevant type of proportion or percentage
{mk.pcnt.tbl <- function(tbl, type) {
a <- length(row.vars)
b <- length(col.vars)
mrgn <- switch(type, column.pct = c(row.vars[-a], col.vars),
row.pct = c(row.vars, col.vars[-b]),
joint.pct = c(row.vars[-a], col.vars[-b]),
total.pct = NULL)
tbl <- prop.table(tbl, mrgn)
if (percentages) {
tbl <- tbl * 100
}
tbl
}
#Find no. of vars (all; row; col) for use in subsequent code
n.row.vars <- length(row.vars)
n.col.vars <- length(col.vars)
n.vars <- n.row.vars + n.col.vars
#Check to make sure all user-supplied arguments have valid values
stopifnot(as.integer(dec.places) == dec.places, dec.places > -1)
#type: see next section of code
stopifnot(is.character(style))
stopifnot(is.logical(percentages))
stopifnot(is.logical(addmargins))
stopifnot(is.logical(subtotals))
stopifnot(n.vars>=1)
#Convert supplied table type(s) into full text string (e.g. "f" becomes "frequency")
#If invalid type supplied, failed match gives user automatic error message
types <- NULL
choices <- c("frequency", "row.pct", "column.pct", "joint.pct", "total.pct")
for (tp in type) types <- c(types, match.arg(tp, choices))
type <- types
#If no type supplied, default to 'frequency + total' for univariate tables and to
#'frequency' for multi-dimensional tables
#For univariate table....
if (n.vars == 1) {
if (is.null(type)) {
# default = freq count + total.pct
type <- c("frequency", "total.pct")
#row.vars <- 1
} else {
#and any requests for row / col / joint.pct must be changed into requests for 'total.pct'
type <- ifelse(type == "frequency", "frequency", "total.pct")
}
#For multivariate tables...
} else if (is.null(type)) {
# default = frequency count
type <- "frequency"
}
#Check for integrity of requested analysis and adjust values of function arguments as required
if ((addmargins==FALSE) & (subtotals==FALSE)) {
warning("WARNING: Request to suppress subtotals (subtotals=FALSE) ignored because no margins requested (addmargins=FALSE)")
subtotals <- TRUE
}
if ((n.vars>1) & (length(type)>1) & (addmargins==TRUE)) {
warning("WARNING: Only row totals added when more than one table type requested")
#Code lower down selecting type of margin implements this...
}
if ((length(type)>1) & (subtotals==FALSE)) {
warning("WARNING: Can only request supply one table type if requesting suppression of subtotals; suppression of subtotals not executed")
subtotals <- TRUE
}
if ((length(type)==1) & (subtotals==FALSE)) {
choices <- c("frequency", "row.pct", "column.pct", "joint.pct", "total.pct")
tp <- match.arg(type, choices)
if (tp %in% c("row.pct","column.pct","joint.pct")) {
warning("WARNING: subtotals can only be suppressed for tables of type 'frequency' or 'total.pct'")
subtotals<- TRUE
}
}
if ((n.vars > 2) & (n.col.vars>1) & (subtotals==FALSE))
warning("WARNING: suppression of subtotals assumes only 1 col var; table flattened accordingly")
if ( (subtotals==FALSE) & (n.vars>2) ) {
#If subtotals not required AND total table vars > 2
#Reassign all but last col.var as row vars
#[because, for simplicity, crosstabs assumes removal of subtotals uses tables with only ONE col var]
#N.B. Subtotals only present in tables with > 2 cross-classified vars...
if (length(col.vars)>1) {
row.vars <- c(row.vars,col.vars[-length(col.vars)])
col.vars <- col.vars[length(col.vars)]
n.row.vars <- length(row.vars)
n.col.vars <- 1
}
}
#If dec.places not set by user, set to 2 unless only one table of type frequency requested,
#in which case set to 0. [Leaves user with possibility of having frequency tables with > 0 dp]
if (is.null(dec.places)) {
if ((length(type)==1) & (type[1]=="frequency")) {
dec.places <- 0
} else {
dec.places <-2
}
}
#Take the original input data, whatever form originally supplied in,
#convert into table format using requested row and col vars, and save as 'tbl'
args <- list(...)
if (length(args) > 1) {
if (!all(sapply(args, is.factor)))
stop("If more than one argument is passed then all must be factors")
tbl <- table(...)
}
else {
if (is.factor(...)) {
tbl <- table(...)
}
else if (is.table(...)) {
tbl <- eval(...)
}
else if (is.data.frame(...)) {
#tbl <- table(...)
if (is.null(row.vars) && is.null(col.vars)) {
tbl <- table(...)
}
else {
var.names <- c(row.vars,col.vars)
A <- (...)
tbl <- table(A[var.names])
if(length(var.names==1)) names(dimnames(tbl)) <- var.names
#[table() only autocompletes dimnames for multivariate crosstabs of dataframes]
}
}
else if (class(...) == "ftable") {
tbl <- eval(...)
if (is.null(row.vars) && is.null(col.vars)) {
row.vars <- names(attr(tbl, "row.vars"))
col.vars <- names(attr(tbl, "col.vars"))
}
tbl <- as.table(tbl)
}
else if (class(...) == "ctab") {
tbl <- eval(...)
if (is.null(row.vars) && is.null(col.vars)) {
row.vars <- tbl$row.vars
col.vars <- tbl$col.vars
}
for (opt in c("dec.places", "type", "style", "percentages",
"addmargins", "subtotals")) if (is.null(get(opt)))
assign(opt, eval(parse(text = paste("tbl$", opt,
sep = ""))))
tbl <- tbl$table
}
else {
stop("first argument must be either factors or a table object")
}
}
#Convert supplied table style into full text string (e.g. "l" becomes "long")
style <- match.arg(style, c("long", "wide"))
#Extract row and col names to be used in creating 'tbl' from supplied input data
nms <- names(dimnames(tbl))
z <- length(nms)
if (!is.null(row.vars) && !is.numeric(row.vars)) {
row.vars <- order(match(nms, row.vars), na.last = NA)
}
if (!is.null(col.vars) && !is.numeric(col.vars)) {
col.vars <- order(match(nms, col.vars), na.last = NA)
}
if (!is.null(row.vars) && is.null(col.vars)) {
col.vars <- (1:z)[-row.vars]
}
if (!is.null(col.vars) && is.null(row.vars)) {
row.vars <- (1:z)[-col.vars]
}
if (is.null(row.vars) && is.null(col.vars)) {
col.vars <- z
row.vars <- (1:z)[-col.vars]
}
#Take the original input data, converted into table format using supplied row and col vars (tbl)
#and create a second version (crosstab) which stores results as percentages if a percentage table type is requested.
if (type[1] == "frequency")
crosstab <- tbl
else
crosstab <- mk.pcnt.tbl(tbl, type[1])
#If multiple table types requested, create and add these to
if (length(type) > 1) {
tbldat <- as.data.frame.table(crosstab)
z <- length(names(tbldat)) + 1
tbldat[z] <- 1
pcntlab <- type
pcntlab[match("frequency", type)] <- "Count"
pcntlab[match("row.pct", type)] <- "Row %"
pcntlab[match("column.pct", type)] <- "Column %"
pcntlab[match("joint.pct", type)] <- "Joint %"
pcntlab[match("total.pct", type)] <- "Total %"
for (i in 2:length(type)) {
if (type[i] == "frequency")
crosstab <- tbl
else crosstab <- mk.pcnt.tbl(tbl, type[i])
crosstab <- as.data.frame.table(crosstab)
crosstab[z] <- i
tbldat <- rbind(tbldat, crosstab)
}
tbldat[[z]] <- as.factor(tbldat[[z]])
levels(tbldat[[z]]) <- pcntlab
crosstab <- xtabs(Freq ~ ., data = tbldat)
names(dimnames(crosstab))[z - 1] <- ""
}
#Add margins if required, adding only those margins appropriate to user request
if (addmargins==TRUE) {
vars <- c(row.vars,col.vars)
if (length(type)==1) {
if (type=="row.pct")
{ crosstab <- addmargins(crosstab,margin=c(vars[n.vars]))
tbl <- addmargins(tbl,margin=c(vars[n.vars]))
}
else
{ if (type=="column.pct")
{ crosstab <- addmargins(crosstab,margin=c(vars[n.row.vars]))
tbl <- addmargins(tbl,margin=c(vars[n.row.vars]))
}
else
{ if (type=="joint.pct")
{ crosstab <- addmargins(crosstab,margin=c(vars[(n.row.vars)],vars[n.vars]))
tbl <- addmargins(tbl,margin=c(vars[(n.row.vars)],vars[n.vars]))
}
else #must be total.pct OR frequency
{ crosstab <- addmargins(crosstab)
tbl <- addmargins(tbl)
}
}
}
}
#If more than one table type requested, only adding row totals makes any sense...
if (length(type)>1) {
crosstab <- addmargins(crosstab,margin=c(vars[n.vars]))
tbl <- addmargins(tbl,margin=c(vars[n.vars]))
}
}
#If subtotals not required, and total vars > 2, create dataframe version of table, with relevant
#subtotal rows / cols dropped [Subtotals only present in tables with > 2 cross-classified vars]
t1 <- NULL
if ( (subtotals==FALSE) & (n.vars>2) ) {
#Create version of crosstab in ftable format
t1 <- crosstab
t1 <- ftable(t1,row.vars=row.vars,col.vars=col.vars)
#Convert to a dataframe
t1 <- as.data.frame(format(t1),stringsAsFactors=FALSE)
#Remove backslashes from category names AND colnames
t1 <- apply(t1[,],2, function(x) gsub("\"","",x))
#Remove preceding and trailing spaces from category names to enable accurate capture of 'sum' rows/cols
#[Use of grep might extract category labels with 'sum' as part of a longer one or two word string...]
t1 <- apply(t1,2,function(x) gsub("[[:space:]]*$","",gsub("^[[:space:]]*","",x)))
#Reshape dataframe to that variable and category labels display as required
#(a) Move col category names down one row; and move col variable name one column to right
t1[2,(n.row.vars+1):ncol(t1)] <- t1[1,(n.row.vars+1):ncol(t1)]
t1[1,] <- ""
t1[1,(n.row.vars+2)] <- t1[2,(n.row.vars+1)]
#(b) Drop the now redundant column separating the row.var labels from the table data + col.var labels
t1 <- t1[,-(n.row.vars+1)]
#In 'lab', assign category labels for each variable to all rows (to allow identification of sub-totals)
lab <- t1[,1:n.row.vars]
for (c in 1:n.row.vars) {
for (r in 2:nrow(lab)) {
if (lab[r,c]=="") lab[r,c] <- lab[r-1,c]
}
}
lab <- (apply(lab[,1:n.row.vars],2,function(x) x=="Sum"))
lab <- apply(lab,1,sum)
#Filter out rows of dataframe containing subtotals
t1 <- t1[((lab==0) | (lab==n.row.vars)),]
#Move the 'Sum' label associated with last row to the first column; in the process
#setting the final row labels associated with other row variables to ""
t1[nrow(t1),1] <- "Sum"
t1[nrow(t1),(2:n.row.vars)] <- ""
#set row and column names to NULL
rownames(t1) <- NULL
colnames(t1) <- NULL
}
#Create output object 'result' [class: crosstab]
result <- NULL
#(a) record of argument values used to produce tabular output
result$row.vars <- row.vars
result$col.vars <- col.vars
result$dec.places <- dec.places
result$type <- type
result$style <- style
result$percentages <- percentages
result$addmargins <- addmargins
result$subtotals <- subtotals
#(b) tabular output [3 variants]
result$table <- tbl #Stores original cross-tab frequency counts without margins [class: table]
result$crosstab <- crosstab #Stores cross-tab in table format using requested style(frequency/pct) and table margins (on/off)
#[class: table]
result$crosstab.nosub <- t1 #crosstab with subtotals suppressed [class: dataframe; or NULL if no subtotals suppressed]
class(result) <- "crosstab"
#Return 'result' as output of function
result
}
```
Introduction
===================
Transportation planning for decades has focused on providing mobility for the private automobile. This is a model of development that was initially introduced in North America as a solution to problems created by rapid urbanization, and that was eventually copied elsewhere [@Brown2009planning;@Angotti1996latin]. Despite the initial promise of automotive technology, it is now evident that mobility centered on the private automobile has given rise to a litany of maladies that are in urgent need of correction. This includes environmental concerns [i.e., climate change; @Chapman2007transport] as well as numerous other social [@Boschman2008toward; @Lucas2012transport; @Lucas2019evolution], health [@Khreis2016health; @Milne2012public], and equity issues [@Bocarejo2012transport; @Martens2012justice; @Pereira2017distributive].
As the impacts of our societal dependence on the private automobile have become increasingly evident, the transportation agenda has aimed to shift focus to the reduction of car use and towards the creation of mobility polycultures that offer a broader menu of transportation alternatives other than primarily (or even just) the private automobile [@Miller2011collaborative; @Lavery2013driving]. In order to successfully achieve this goal, it is essential not only to provide the services and facilities that support public transportation and active travel, but also to attract new users to these modes of transportation [@Ettema2011satisfaction]. Within this context, it has been argued that sustainable transportation policies require all participants in the transportation system to challenge what Gossling and Cohen [-@Gossling2014sustainable] termed _transportation taboos_: deep-seated ideas concerning the contribution to emissions by individuals, the inequality of market-based approaches, and the social and psychological functions of transportation. With respect to the latter, subjective wellbeing (SWB) is increasingly recognized as a policy goal in and of itself [@Diener2015national; @Dolan2012measuring], and also as an intermediate objective to achieve ulterior goals. Accordingly, there is a growing consensus in the field of transportation about the need to move beyond a purely utilitarian focus to understand the affective and wellbeing values of the transportation experience [e.g., @Anable2005work; @Devos2013travel; @Domarchi2008effect; @Gatersleben2007affective; @Steg2005car]. Consideration of factors related to subjective wellbeing, for example, are useful for policy-makers to enhance the experience of travel, to increase satisfaction with travel, and to meet the preferences of travelers [@Chatterjee2019commuting].
A definition of subjective wellbeing is as “[g]ood mental states, including all of the various evaluations, positive and negative, that people make of their lives, and the affective reactions of people to their experiences” [@oecd2013oecd, p. 10]. As memorably put by Steg [-@Steg2005car]: is the use of a car a must, or is it a lust? A close alignment, or consonance, between affective reactions and the mode of transportation used to travel can result in greater subjective wellbeing and increase the probability of choosing that mode (i.e., by satisfying the _lust_); on the other hand, dissonance, namely the lack of concordance between the mode used and the affective reaction to that mode, would be detrimental to subjective wellbeing, especially to those for whom the use of the mode is a _must_ [@Devos2019satisfaction; @Mokhtarian2018travel]. With these considerations in mind, the present research aims to investigate _who_ experiences affective dissonance with respect to their primary mode of travel. We focus our investigation on reactions from the perspective of feelings of Freedom, Enjoyment, Happiness, Poverty, Luxury, and Status - concepts termed _affective values_ hereafter. Furthermore, it is possible, even if use of a particular mode is a _must_, that travelers may still _lust_ for something else - in other words, the grass may look greener from the window of a car. For this reason, we also aim to investigate which mode or modes are most commonly identified as ideal from the perspective of the aforementioned affective values.
Our research is based on data collected from a sample of travelers in the city of Santiago in Chile. The analysis sheds light on the affective reactions of people towards their primary mode of travel, and their perceptions towards 'ideal modes'. This reveals important differences in situations when the ideal mode of a traveler is not the mode they actually use - or in other words, the affective dissonance between actual and ideal modes of travel. More concretely, the results indicate that users of public transportation experience the most dissonance, followed by automobile users, and finally active travelers, who tend to experience the least affective dissonance. For those travelers who experience dissonance, active travel is the mode most commonly associated with Freedom, Enjoyment, and Happiness, whereas public transportation is most commonly associated with Poverty, and the automobile is most commonly associated with Luxury and Status. We also find that there are significant variations in dissonance by age, education, income, and typical commute time. The reactions of travelers towards various transport modes are critical factors that policy-makers need to consider to promote and increase the use of public transport and active modes [@Bornioli2019affective; @Devos2017travel; @Devos2019satisfying; @Garling2019role; @Redman2013quality].
After these introductory remarks, the paper follows up with a review of the literature on the topics of subjective wellbeing and affective values. Next, we discuss the case study, as well as the methodology and data used for this research. The analysis and results of the study are presented afterwards, before concluding with some discussion and directions for future research and policy.
Please note that this document was prepared using R Markdown and is an example of reproducible research [@Brunsdon2020opening]. The R Markdown file, along with the data file needed to reproduce the analysis, are available for download [here](https://github.com/paezha/Mode-Dissonance-and-Subjective-Wellbeing).
Background
===================
A consensus has emerged in recent years regarding the need to complement the traditional utilitarian perspective of transportation by investigating mobility and transport from the lens of their affective functions. The affective value of transportation is important due to its potential to improve or detract from SWB.
One of the primary ways to explore issues of subjective wellbeing in transportation has been the satisfaction that travelers feel towards their everyday mobility experience [e.g., @Bergstad2011subjective]. As a consequence, there is a wealth of research on satisfaction with the use of different modes of transportation. For example, numerous studies report that car users often have a higher level of satisfaction compared to other transport modes [@Bergstad2011affective; @Eriksson2013perceived; @Redmond2001positive], although others report highest commute satisfaction for bicycle and train commuters [e.g., @Whalen2013mode; @Handy2019commute]. In a similar way, there are multiple reports that active travel also tends to yield higher levels of satisfaction [@Gatersleben2007affective; @Smith2017commute; @Stlouis2014happy; @Paez2010enjoyment; @Whalen2013mode; @Handy2019commute], In contrast, public transport users often assess their experience more negatively [@Abenoza2017travel; @Devos2016travel; @Gatersleben2007affective; @Handy2019commute; @Paez2010enjoyment]. Multi-modal trips also influence satisfaction levels; for instance, individuals tend to report higher levels of satisfaction with the mode they use – perhaps as a form of _post hoc_ validation of their choices or circumstance [@Susilo2014exploring].
While travel satisfaction has often been used in the context of daily trips – typically linked to cost-benefit and utilitarian measurements –, the evaluation of subjective wellbeing (SWB) over time has risen as an alternative measure. Ettema et al. [-@Ettema2010out, p. 725] define SWB as the degree to which an individual positively evaluates the overall quality of their lives, where the general life satisfaction encompasses a more extended temporal period – which implies greater temporal stability. This concept has prompted a growing literature that complements and applies SWB in a broader range of satisfaction scales and situations. The definition of other factors such as travel choice mode, attitudes, and external elements of the built environment have been studied for a broader understanding of the changes produced in the SWB [e.g., @Handy2019commute]. As these factors do not necessarily apply to longer-term general life satisfaction, other studies have aimed to determine both the direct and indirect effects on the perception of users [see, e.g., @Ye2017satisfaction]. Other concepts have also emerged, including the Satisfaction with Travel Scale [@Ettema2011satisfaction], as well as different scales based on people’s perceptions of travel. De Vos et al. [-@Devos2015satisfying], for instance, explore in detail the underlying dimensions of the affective domain of STS on which SWB is based [for more on STS also see @Friman2013psychometric].
The literature on SWB has demonstrated a relationship between people’s perceptions and satisfaction with their daily travel [e.g., @Smith2017commute; @Stlouis2014happy; @Mokhtarian2018travel]. Scholars have shown that accessibility is among the most studied factors that influences subjective wellbeing [@Delbosc2012role], and activities have a direct impact on travel satisfaction [@Bergstad2011subjective]. Delbosc [-@Delbosc2012role, p. 28], for instance, has summarized the most significant influences on psychological wellbeing: poverty and employment, meaningful relationships and health. However, understanding the components that affect these perceptions implies the differentiation between affective (also named as symbolic-affective) and instrumental values [@Bergstad2011affective]. Steg et al. (2011) have compared symbolic-affective and instrumental-reasoned motives for car-use, and similar findings are reported in other studies [e.g., @Gatersleben2007affective; @Lois2009relationship]. Previous research also demonstrates how socio-demographic factors affect the levels of SWB, including income [@Clark1996satisfaction; @Ferrer2005income], education and unemployment [@Argyle1999causes], age [@Diener1997subjective], and gender [@Tesch2008gender]. However, further research beyond the determinants of trip satisfaction is needed to understand how these socio-demographic variables connect with the affective reactions to various modes of travel [@Stlouis2014happy].
The research needs outlined above are well-recognized in the developed world, but there is still a dearth of research in the context of the Global South. Historical inequality in many developing countries has led to strong symbolic attachments to the automobile, in addition to negative connotations for public transport and active travel [@Zorrilla2019exploring]. To address this gap in knowledge a body of literature has emerged to investigate the affective aspects of travel behavior in a number of developing countries. A cross-country study in Asia revealed that the affective factors of public transportation and car use are important, and in particular the social orderliness of transit was suggested as a way to make this mode more attractive to users [@Van2014effect]. In terms of active travel, a study in China found that attitudes that embrace new styles and technologies despite their cost are associated with the intention to continue using shared bicycles [@Shao2019analysis]. The importance of affective factors for policy and planning is further highlighted by research in Colombia that shows the pride users feel when using a bicycle shared system. This affective reaction is above and beyond other positive feelings, such as a sense of belongingness to a civic culture, and the enjoyment and pleasure of active travel itself [@Bejarano2017user].
Case Study and Data
===================
## Context
The case study for the present research is Santiago. Santiago is the capital of Chile, a country with one of the highest levels of socio-economic inequality in the world. A tangible manifestation of the inequalities experienced by many in Chile is the large disparity in the relative cost of transportation, travel time, and distance traveled by different socio-economic segments of the population. To further complicate matters, strong spatial segregation also conditions car ownership and the use of public transportation – the higher the income, the higher the use of the automobile; conversely, the lower the income, the higher the reliance on public transportation. Although the transportation experience is but one of many dimensions of inequality, the experiences in this sector have triggered exceptional discomfort and dissatisfaction among the public. Recent social unrest, triggered by a seemingly minor hike in the fare of public transportation, brought many of these concerns to the forefront of the public conscience in dramatic fashion [e.g., @Davis2019].
Previous research has helped to contextualize everyday mobility in Santiago relative to other Latin American cities [e.g., @Avellaneda2011; @RodriguesVignoli2008], but much remains to be explored. Measuring instruments and new methods have led to more accurate and precise understandings of the social issues that arise as consequence of transport infrastructure and housing provision [@Cox2016], and the minimum provision of basic services [@TiznadoAitken2016]. However, the focus on accessibility as a measure of inequalities remains predominant [@TiznadoAitken2016; @Figueroa2018; @Niehaus2016; @Rojas2016].
## Data
The study is based on a survey conducted in the city of Santiago during the months of November and December of 2016, at the end of the Spring and beginning of Summer seasons. The survey collected information on a wide range of transportation and related issues, and the data collection protocol considered a quota-sampling method for gathering the information, considering the socio-demographic information from Pre-Census of 2012. The survey was carried out face-to-face in centers of activity with dense provision of offices, services, and educational centers. An equal representation of both genders and a representation of the proportion of inhabitants per area were chosen as relevant characteristics of the sample. In total, there were $n=451$ valid responses, although not every response was complete and some questions have missing values.
The study considers data from 3 out of 8 sections of a longer survey. The relevant sections of the survey concern the individual characteristics of respondents, their feelings and affective responses related to their commute, and aspects describing their regular commute trips. In terms of individual characteristics and their commute, participants were asked socio-demographic information, including age (coded in three classes: younger than 35, older than 35 but younger than 55, and 55 and older); level of education (three classes: Kindergarten to grade 12, or K-12, technical diploma or university graduate, and graduate degree), income (three classes, by tertile), and the typical duration of the respondent's regular commute (four classes, by duration in minutes). The descriptive statistics of the sample appear in Figure \ref{fig:descriptive-statistics}. The sample trends to younger (56% is younger than 34 years old) and well-educated respondents (68% of respondents having technical or professional education), with an almost uniform distribution of income levels. The trend in typical commute time is towards longer commutes – e.g. 55% of the trips are longer than 40 minutes, and from those 56% corresponds to trips over the 60 minutes long.
```{r plot-descriptive-statistics, echo=FALSE, cache = TRUE, fig.cap="\\label{fig:descriptive-statistics}Descriptive statistics of the sample"}
# Bar plots with descriptive statistics for the sample
age_plot <- ggplot(data = drop_na(Overall_dissonance), aes(x = AGE, fill = AGE)) +
geom_bar() +
theme_tufte() +
xlab("Age of respondents") +
scale_fill_viridis_d() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
education_plot <- ggplot(data = drop_na(Overall_dissonance), aes(x = EDUCATION, fill = EDUCATION)) +
geom_bar() +
theme_tufte() +
xlab("Education level of respondents") +
scale_fill_viridis_d() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
income_plot <- ggplot(data = drop_na(Overall_dissonance), aes(x = INCOME, fill = INCOME)) +
geom_bar() +
theme_tufte() +
xlab("Income level of respondents") +
scale_fill_viridis_d() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
time_plot <- ggplot(data = drop_na(Overall_dissonance), aes(x = TRAVEL_TIME, fill = TRAVEL_TIME)) +
geom_bar() +
theme_tufte() +
xlab("Duration of regular commute") +
scale_fill_viridis_d() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
grid.arrange(age_plot, education_plot, income_plot, time_plot)
```
In addition, respondents were asked about their primary mode of travel for their regular commute. The modes available were Car; Taxi; _Colectivo_ (a form of shared ride, intermediate in flexibility and capacity between taxi and bus); Motorcycle; Metro; Bus; Bicycle; and Walking. As seen in the top panel of Figure \ref{fig:primary-mode-travel}, the three most common modes of travel are Metro, Bus, and Car, followed by Walking and Bicycle. For the analysis, we aggregate these modes into the following categories (bottom panel of Figure \ref{fig:primary-mode-travel}): (26% of total modes – which corresponds to 91% of the total of private motorized modes), Active (9% \- Walking + Bicycle), Public (60% \- Metro + Bus), and Other motorized modes (6% \- Taxi + Colectivo + Motorcycle).
```{r figure-primary-mode-travel, fig.width= 4, fig.height=6, echo=FALSE, cache = TRUE, fig.cap="\\label{fig:primary-mode-travel}Frequency of primary mode used for regular commute; top panel: all modes, bottom panel: aggregated modes"}
mode_plot1 <- ggplot(data = master, aes(x = factor(USED, levels = c("A", "G", "H", "E", "F", "B", "C", "D"),
labels = c("Car", "Bicycle", "Walk", "Metro", "Bus", "Taxi", "Colectivo", "Motorcycle")),
fill = USED)) +
geom_bar() +
xlab("Primary Mode of Travel") +
scale_fill_manual(values = c("A" = "#F8766D",
"G" = "#00BA38", "H" = "#00BA38",
"E" = "#619CFF", "F" = "#619CFF",
"B" = "#C77CFF", "C" = "#C77CFF", "D" = "#C77CFF")) +
theme_tufte() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
mode_plot2 <- ggplot(data = Overall_dissonance, aes(x = USED, fill = USED)) +
geom_bar() +
xlab("Primary Mode of Travel") +
scale_fill_manual(values = c("Car" = "#F8766D", "Active" = "#00BA38", "Public" = "#619CFF", "Other" = "#C77CFF")) +
theme_tufte() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none")
grid.arrange(mode_plot1, mode_plot2, nrow = 2)
```
Of particular interest for the present study is the following question in Part 3 of the survey:
>> Q: Please indicate the mode(s) of transport that you relate to the following feelings and concepts
The question was asked for each of the following affective values: Freedom; Enjoyment; Happiness; Poverty; Luxury; and Status. The respondents were not constrained to select only one alternative, but could indicate by means of checkboxes any and all modes that they felt aligned with each affective value. This allows us to analyze the mode dissonance. Dissonance is a concept introduced into the transportation literature by Schwanen and Mokhtarian [-@Schwanen2004extent] based on earlier work by Feldman [-@Feldman1990settlement]. Originally used to investigate residential dissonance [@Schwanen2004extent], the concept has since been extended in the travel behavior literature to encompass the mismatch between the choices individuals make, and the alternatives that would enable users to improve their experience. This includes, for example, travel mode dissonance [@Devos2018people].
Based on the primary mode of travel and the questions about affective values, we derived a series of travel mode dissonance variables according to the following rule:
$$
D_{ij} =
\begin{cases}
0 & if \text{ primary mode of traveler }i == \text{mode associated with value } j\\
1 & \text{ otherwise}
\end{cases}
$$
Therefore, if respondent $i$ travels primarily by Car, but indicated any other mode(s) in relation to Freedom, the respondent experienced dissonance:
$$
D_{i,\text{Freedom}} = 1
$$
In these calculations we account for all modes identified by respondents in relation to the affective values. Therefore, to avoid double counting the respondents in our frequency tabulations, we also calculated a sample weight as the inverse of the number of modes selected in response to each affective value. For instance, for respondents who selected two modes in relation to affective value $j$, each of these two modes receive a weight of $w_{ij}=1/2$; if a respondent selected three modes, then their weights are $w_{ij}=1/3$; and so on. In this way we do not treat unfairly those respondents who selected only one mode, and the sum of all weighted responses is equal to the size of the sample $n$.
Results
==========
In what follows, the results refer to two related but distinct questions. The first part of the analysis seeks to understand _who_ experiences dissonance, whereas the second part, building off that, aims to explore _which modes_ are more commonly identified as embodying affective values by those travelers who experience dissonance.
```{r cross-with-instrumental, include=FALSE, eval=FALSE}
# Create cross tabulations by each respondent characteristic (i.e., AGE, EDUCATION, INCOME, mode USED, and TRAVEL_TIME)
## Age
age_by_freedom <- crosstab(Overall_dissonance, row.vars = "AGE", col.vars = "FREEDOM_DISSONANCE", type = "r")
age_by_enjoyment <- crosstab(Overall_dissonance, row.vars = "AGE", col.vars = "ENJOYMENT_DISSONANCE", type = "r")
age_by_happiness <- crosstab(Overall_dissonance, row.vars = "AGE", col.vars = "HAPPINESS_DISSONANCE", type = "r")
age_by_safety <- crosstab(Overall_dissonance, row.vars = "AGE", col.vars = "SAFETY_DISSONANCE", type = "r")
age_by_time <- crosstab(Overall_dissonance, row.vars = "AGE", col.vars = "TIME_DISSONANCE", type = "r")
age_by_efficiency <- crosstab(Overall_dissonance, row.vars = "AGE", col.vars = "EFFICIENCY_DISSONANCE", type = "r")
## Education
education_by_freedom <- crosstab(Overall_dissonance, row.vars = "EDUCATION", col.vars = "FREEDOM_DISSONANCE", type = "r")
education_by_enjoyment <- crosstab(Overall_dissonance, row.vars = "EDUCATION", col.vars = "ENJOYMENT_DISSONANCE", type = "r")
education_by_happiness <- crosstab(Overall_dissonance, row.vars = "EDUCATION", col.vars = "HAPPINESS_DISSONANCE", type = "r")
education_by_safety <- crosstab(Overall_dissonance, row.vars = "EDUCATION", col.vars = "SAFETY_DISSONANCE", type = "r")
education_by_time <- crosstab(Overall_dissonance, row.vars = "EDUCATION", col.vars = "TIME_DISSONANCE", type = "r")
education_by_efficiency <- crosstab(Overall_dissonance, row.vars = "EDUCATION", col.vars = "EFFICIENCY_DISSONANCE", type = "r")
## Income
income_by_freedom <- crosstab(Overall_dissonance, row.vars = "INCOME", col.vars = "FREEDOM_DISSONANCE", type = "r")
income_by_enjoyment <- crosstab(Overall_dissonance, row.vars = "INCOME", col.vars = "ENJOYMENT_DISSONANCE", type = "r")
income_by_happiness <- crosstab(Overall_dissonance, row.vars = "INCOME", col.vars = "HAPPINESS_DISSONANCE", type = "r")
income_by_safety <- crosstab(Overall_dissonance, row.vars = "INCOME", col.vars = "SAFETY_DISSONANCE", type = "r")
income_by_time <- crosstab(Overall_dissonance, row.vars = "INCOME", col.vars = "TIME_DISSONANCE", type = "r")
income_by_efficiency <- crosstab(Overall_dissonance, row.vars = "INCOME", col.vars = "EFFICIENCY_DISSONANCE", type = "r")
## Mode