1. Read and set up Data Loyalty for SEM
# Read Data directly
t = "E:/NGHIEN CUU SINH/NCS - PHUONG ANH/Part 2-Satisfaction and Loyalty/So lieu/So lieu - PA xu ly-for SEM/SEM-LATS/854-SEM-LATS.csv"
SEM = read.csv(t, header = T, sep = ";")
head(SEM)
## ID AGE CITY FRE TripPurpose Departure TimeUseonBus TravelTime PSW1 PSW2 PSW3
## 1 3 1 2 1 2 0 4 3.00 4 5 6
## 2 4 1 2 2 4 0 4 2.00 2 5 3
## 3 5 1 2 1 2 1 4 0.17 4 6 6
## 4 6 1 2 1 2 1 1 4.00 5 5 5
## 5 7 1 2 1 2 1 4 2.00 3 2 4
## 6 8 1 2 1 2 1 6 2.00 2 5 6
## PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1 PSB2 PSB3 PSB4
## 1 4 6 4 5 6 6 6 6 4 6 4 6 6 4 6
## 2 2 4 5 3 2 3 4 2 2 2 2 3 3 4 4
## 3 4 1 4 2 2 6 6 4 2 2 2 2 6 6 4
## 4 2 6 4 2 6 6 4 1 4 4 6 5 6 6 5
## 5 4 2 6 5 3 3 5 2 1 2 2 2 2 5 5
## 6 5 4 4 6 3 4 6 2 1 1 2 2 5 4 4
## PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQR5 PQP1 PQP2
## 1 5 6 6 6 6 6 4 4 6 4 4 4 6 6 6
## 2 6 6 6 6 4 6 5 4 4 5 6 4 6 6 4
## 3 6 6 4 2 2 2 2 2 2 4 1 2 1 1 1
## 4 5 6 7 6 6 5 4 5 5 5 5 4 4 5 5
## 5 5 6 4 3 6 3 6 3 6 6 4 3 6 4 4
## 6 4 6 4 2 4 4 5 4 5 5 4 3 3 4 4
## PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQC5 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4 LOY5
## 1 5 6 4 4 6 4 2 6 6 6 4 6 5 7 6
## 2 4 5 4 3 4 3 6 5 5 4 4 5 4 4 4
## 3 6 6 2 6 2 5 2 2 2 2 2 6 6 4 4
## 4 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5
## 5 4 5 5 3 5 3 5 4 4 4 4 5 5 4 4
## 6 4 5 3 3 3 3 4 4 5 5 4 3 2 5 5
## LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3
## 1 6 6 6 6 6 4 6 6 7 6 7 7 4 4 4
## 2 4 5 4 5 6 5 4 3 4 3 4 6 5 6 6
## 3 2 2 4 2 5 2 2 5 2 6 6 6 6 5 6
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## 5 4 6 5 4 5 4 5 5 6 6 6 5 6 6 6
## 6 6 6 4 3 2 2 4 4 6 7 6 4 7 7 5
## PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 SIM1 SIM2 SIM3 SIM4
## 1 4 3 5 6 4 2 4 6 6 6 6 4 4 4 2
## 2 4 3 5 4 4 4 4 5 4 4 4 4 4 4 4
## 3 6 2 6 4 2 2 4 2 4 2 2 4 4 4 2
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## 5 6 3 4 2 2 5 4 3 2 3 4 6 6 5 5
## 6 2 1 4 5 2 1 4 2 5 2 2 2 2 2 2
## PPA1 PPA2 PPA3 PPA4 SBE1 SBE2 SBE3 SBE4 EXB1 EXB2 EXB3 PVA1 PVA2 PVA3 EC_Stop
## 1 4 6 4 4 4 4 4 4 4 4 3 6 6 6 0
## 2 4 4 4 4 5 4 5 5 4 5 3 5 5 3 0
## 3 4 6 6 2 6 6 6 6 4 6 2 6 2 4 0
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0
## 5 5 5 5 5 5 5 5 5 5 5 4 6 2 3 0
## 6 2 3 3 2 2 2 2 2 5 5 4 6 5 5 0
## WC_Stop EC_Bus WC_Bus Gender MarriedStatus Occupation Education Income
## 1 1 0 1 0 1 1 2 1
## 2 0 1 0 0 1 1 2 1
## 3 0 0 0 1 1 1 2 1
## 4 1 0 1 1 1 1 2 1
## 5 1 0 1 1 1 1 2 1
## 6 1 0 1 0 1 1 3 1
names(SEM)
## [1] "ID" "AGE" "CITY" "FRE"
## [5] "TripPurpose" "Departure" "TimeUseonBus" "TravelTime"
## [9] "PSW1" "PSW2" "PSW3" "PSW4"
## [13] "PSW5" "PSW6" "PSW7" "PSS1"
## [17] "PSS2" "PSS3" "PSS4" "PSS5"
## [21] "PSS6" "PSS7" "PSB1" "PSB2"
## [25] "PSB3" "PSB4" "PSB5" "PSB6"
## [29] "PSB7" "PSB8" "PQT1" "PQT2"
## [33] "PQT3" "PQT4" "PQC1" "PQC2"
## [37] "PQC3" "PQC4" "PQR5" "PQP1"
## [41] "PQP2" "PQP3" "PQP4" "PQR1"
## [45] "PQR2" "PQR3" "PQR4" "PQC5"
## [49] "SAT1" "SAT2" "SAT3" "LOY1"
## [53] "LOY2" "LOY3" "LOY4" "LOY5"
## [57] "LOY6" "LOY7" "IMA1" "IMA2"
## [61] "IMA3" "IMA4" "IMA5" "PHB1"
## [65] "PHB2" "PHB3" "PHB4" "PHB5"
## [69] "PEB1" "PEB2" "PEB3" "PEB4"
## [73] "PDE1" "PDE2" "PDE3" "PDE4"
## [77] "PDE5" "PDE6" "PDE7" "PSO1"
## [81] "PSO2" "PSO3" "SIM1" "SIM2"
## [85] "SIM3" "SIM4" "PPA1" "PPA2"
## [89] "PPA3" "PPA4" "SBE1" "SBE2"
## [93] "SBE3" "SBE4" "EXB1" "EXB2"
## [97] "EXB3" "PVA1" "PVA2" "PVA3"
## [101] "EC_Stop" "WC_Stop" "EC_Bus" "WC_Bus"
## [105] "Gender" "MarriedStatus" "Occupation" "Education"
## [109] "Income"
dim(SEM)
## [1] 854 109
2. Desscriptive statistic
# 2.1. Subset Data SEM (6 constructs and 28 items)
SEM <- SEM[, c(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, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109)]
head(SEM)
## AGE CITY FRE TripPurpose Departure TimeUseonBus TravelTime PSW1 PSW2 PSW3
## 1 1 2 1 2 0 4 3.00 4 5 6
## 2 1 2 2 4 0 4 2.00 2 5 3
## 3 1 2 1 2 1 4 0.17 4 6 6
## 4 1 2 1 2 1 1 4.00 5 5 5
## 5 1 2 1 2 1 4 2.00 3 2 4
## 6 1 2 1 2 1 6 2.00 2 5 6
## PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1 PSB2 PSB3 PSB4
## 1 4 6 4 5 6 6 6 6 4 6 4 6 6 4 6
## 2 2 4 5 3 2 3 4 2 2 2 2 3 3 4 4
## 3 4 1 4 2 2 6 6 4 2 2 2 2 6 6 4
## 4 2 6 4 2 6 6 4 1 4 4 6 5 6 6 5
## 5 4 2 6 5 3 3 5 2 1 2 2 2 2 5 5
## 6 5 4 4 6 3 4 6 2 1 1 2 2 5 4 4
## PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQR5 PQP1 PQP2
## 1 5 6 6 6 6 6 4 4 6 4 4 4 6 6 6
## 2 6 6 6 6 4 6 5 4 4 5 6 4 6 6 4
## 3 6 6 4 2 2 2 2 2 2 4 1 2 1 1 1
## 4 5 6 7 6 6 5 4 5 5 5 5 4 4 5 5
## 5 5 6 4 3 6 3 6 3 6 6 4 3 6 4 4
## 6 4 6 4 2 4 4 5 4 5 5 4 3 3 4 4
## PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQC5 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4 LOY5
## 1 5 6 4 4 6 4 2 6 6 6 4 6 5 7 6
## 2 4 5 4 3 4 3 6 5 5 4 4 5 4 4 4
## 3 6 6 2 6 2 5 2 2 2 2 2 6 6 4 4
## 4 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5
## 5 4 5 5 3 5 3 5 4 4 4 4 5 5 4 4
## 6 4 5 3 3 3 3 4 4 5 5 4 3 2 5 5
## LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3
## 1 6 6 6 6 6 4 6 6 7 6 7 7 4 4 4
## 2 4 5 4 5 6 5 4 3 4 3 4 6 5 6 6
## 3 2 2 4 2 5 2 2 5 2 6 6 6 6 5 6
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## 5 4 6 5 4 5 4 5 5 6 6 6 5 6 6 6
## 6 6 6 4 3 2 2 4 4 6 7 6 4 7 7 5
## PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1 PVA2 PVA3 EC_Stop
## 1 4 3 5 6 4 2 4 6 6 6 6 6 6 6 0
## 2 4 3 5 4 4 4 4 5 4 4 4 5 5 3 0
## 3 6 2 6 4 2 2 4 2 4 2 2 6 2 4 0
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0
## 5 6 3 4 2 2 5 4 3 2 3 4 6 2 3 0
## 6 2 1 4 5 2 1 4 2 5 2 2 6 5 5 0
## WC_Stop EC_Bus WC_Bus Gender MarriedStatus Occupation Education Income
## 1 1 0 1 0 1 1 2 1
## 2 0 1 0 0 1 1 2 1
## 3 0 0 0 1 1 1 2 1
## 4 1 0 1 1 1 1 2 1
## 5 1 0 1 1 1 1 2 1
## 6 1 0 1 0 1 1 3 1
names(SEM)
## [1] "AGE" "CITY" "FRE" "TripPurpose"
## [5] "Departure" "TimeUseonBus" "TravelTime" "PSW1"
## [9] "PSW2" "PSW3" "PSW4" "PSW5"
## [13] "PSW6" "PSW7" "PSS1" "PSS2"
## [17] "PSS3" "PSS4" "PSS5" "PSS6"
## [21] "PSS7" "PSB1" "PSB2" "PSB3"
## [25] "PSB4" "PSB5" "PSB6" "PSB7"
## [29] "PSB8" "PQT1" "PQT2" "PQT3"
## [33] "PQT4" "PQC1" "PQC2" "PQC3"
## [37] "PQC4" "PQR5" "PQP1" "PQP2"
## [41] "PQP3" "PQP4" "PQR1" "PQR2"
## [45] "PQR3" "PQR4" "PQC5" "SAT1"
## [49] "SAT2" "SAT3" "LOY1" "LOY2"
## [53] "LOY3" "LOY4" "LOY5" "LOY6"
## [57] "LOY7" "IMA1" "IMA2" "IMA3"
## [61] "IMA4" "IMA5" "PHB1" "PHB2"
## [65] "PHB3" "PHB4" "PHB5" "PEB1"
## [69] "PEB2" "PEB3" "PEB4" "PDE1"
## [73] "PDE2" "PDE3" "PDE4" "PDE5"
## [77] "PDE6" "PDE7" "PSO1" "PSO2"
## [81] "PSO3" "PVA1" "PVA2" "PVA3"
## [85] "EC_Stop" "WC_Stop" "EC_Bus" "WC_Bus"
## [89] "Gender" "MarriedStatus" "Occupation" "Education"
## [93] "Income"
dim(SEM)
## [1] 854 93
# Data coding
str(SEM)
## 'data.frame': 854 obs. of 93 variables:
## $ AGE : int 1 1 1 1 1 1 1 4 1 1 ...
## $ CITY : int 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : int 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : int 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : int 0 0 1 1 1 1 1 1 1 1 ...
## $ TimeUseonBus : int 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ PSW1 : int 4 2 4 5 3 2 1 2 3 4 ...
## $ PSW2 : int 5 5 6 5 2 5 1 6 4 4 ...
## $ PSW3 : int 6 3 6 5 4 6 3 6 4 7 ...
## $ PSW4 : int 4 2 4 2 4 5 1 3 2 4 ...
## $ PSW5 : int 6 4 1 6 2 4 5 2 3 7 ...
## $ PSW6 : int 4 5 4 4 6 4 6 2 5 4 ...
## $ PSW7 : int 5 3 2 2 5 6 4 6 3 7 ...
## $ PSS1 : int 6 2 2 6 3 3 1 6 2 1 ...
## $ PSS2 : int 6 3 6 6 3 4 1 6 3 4 ...
## $ PSS3 : int 6 4 6 4 5 6 5 6 4 7 ...
## $ PSS4 : int 6 2 4 1 2 2 1 3 3 7 ...
## $ PSS5 : int 4 2 2 4 1 1 5 1 2 1 ...
## $ PSS6 : int 6 2 2 4 2 1 1 1 2 1 ...
## $ PSS7 : int 4 2 2 6 2 2 3 5 3 1 ...
## $ PSB1 : int 6 3 2 5 2 2 1 6 2 4 ...
## $ PSB2 : int 6 3 6 6 2 5 1 6 4 4 ...
## $ PSB3 : int 4 4 6 6 5 4 5 6 4 7 ...
## $ PSB4 : int 6 4 4 5 5 4 1 6 4 4 ...
## $ PSB5 : int 5 6 6 5 5 4 5 1 7 7 ...
## $ PSB6 : int 6 6 6 6 6 6 6 6 6 7 ...
## $ PSB7 : int 6 6 4 7 4 4 6 6 6 7 ...
## $ PSB8 : int 6 6 2 6 3 2 6 5 6 7 ...
## $ PQT1 : int 6 4 2 6 6 4 2 5 5 7 ...
## $ PQT2 : int 6 6 2 5 3 4 5 6 4 7 ...
## $ PQT3 : int 4 5 2 4 6 5 5 4 5 7 ...
## $ PQT4 : int 4 4 2 5 3 4 2 4 3 7 ...
## $ PQC1 : int 6 4 2 5 6 5 2 6 3 7 ...
## $ PQC2 : int 4 5 4 5 6 5 2 6 4 7 ...
## $ PQC3 : int 4 6 1 5 4 4 2 3 4 7 ...
## $ PQC4 : int 4 4 2 4 3 3 2 4 4 4 ...
## $ PQR5 : int 6 6 1 4 6 3 2 3 3 4 ...
## $ PQP1 : int 6 6 1 5 4 4 4 4 3 4 ...
## $ PQP2 : int 6 4 1 5 4 4 4 4 4 4 ...
## $ PQP3 : int 5 4 6 5 4 4 3 4 5 7 ...
## $ PQP4 : int 6 5 6 5 5 5 4 4 6 7 ...
## $ PQR1 : int 4 4 2 4 5 3 2 5 3 4 ...
## $ PQR2 : int 4 3 6 5 3 3 1 3 4 7 ...
## $ PQR3 : int 6 4 2 5 5 3 1 3 5 4 ...
## $ PQR4 : int 4 3 5 5 3 3 2 2 4 7 ...
## $ PQC5 : int 2 6 2 5 5 4 4 6 4 7 ...
## $ SAT1 : int 6 5 2 5 4 4 2 7 5 7 ...
## $ SAT2 : int 6 5 2 5 4 5 2 7 6 7 ...
## $ SAT3 : int 6 4 2 5 4 5 3 6 4 7 ...
## $ LOY1 : int 4 4 2 5 4 4 2 6 6 6 ...
## $ LOY2 : int 6 5 6 5 5 3 1 6 5 6 ...
## $ LOY3 : int 5 4 6 5 5 2 1 6 6 6 ...
## $ LOY4 : int 7 4 4 5 4 5 2 7 5 6 ...
## $ LOY5 : int 6 4 4 5 4 5 2 7 5 4 ...
## $ LOY6 : int 6 4 2 5 4 6 1 7 5 6 ...
## $ LOY7 : int 6 5 2 5 6 6 2 7 5 7 ...
## $ IMA1 : int 6 4 4 5 5 4 2 6 5 6 ...
## $ IMA2 : int 6 5 2 5 4 3 3 6 6 7 ...
## $ IMA3 : int 6 6 5 5 5 2 2 5 6 7 ...
## $ IMA4 : int 4 5 2 5 4 2 2 6 6 7 ...
## $ IMA5 : int 6 4 2 5 5 4 2 6 6 7 ...
## $ PHB1 : int 6 3 5 5 5 4 3 6 6 7 ...
## $ PHB2 : int 7 4 2 5 6 6 3 7 5 7 ...
## $ PHB3 : int 6 3 6 5 6 7 1 4 3 7 ...
## $ PHB4 : int 7 4 6 5 6 6 4 6 7 7 ...
## $ PHB5 : int 7 6 6 5 5 4 4 6 7 7 ...
## $ PEB1 : int 4 5 6 5 6 7 4 6 7 7 ...
## $ PEB2 : int 4 6 5 5 6 7 2 7 7 7 ...
## $ PEB3 : int 4 6 6 5 6 5 2 6 6 7 ...
## $ PEB4 : int 4 4 6 5 6 2 2 6 6 7 ...
## $ PDE1 : int 3 3 2 5 3 1 4 4 5 4 ...
## $ PDE2 : int 5 5 6 5 4 4 4 4 5 5 ...
## $ PDE3 : int 6 4 4 5 2 5 2 4 4 4 ...
## $ PDE4 : int 4 4 2 5 2 2 2 3 4 4 ...
## $ PDE5 : int 2 4 2 5 5 1 2 5 4 6 ...
## $ PDE6 : int 4 4 4 5 4 4 2 4 4 4 ...
## $ PDE7 : int 6 5 2 5 3 2 1 4 3 4 ...
## $ PSO1 : int 6 4 4 5 2 5 2 6 1 2 ...
## $ PSO2 : int 6 4 2 5 3 2 1 6 1 4 ...
## $ PSO3 : int 6 4 2 5 4 2 1 6 4 4 ...
## $ PVA1 : int 6 5 6 5 6 6 6 6 6 6 ...
## $ PVA2 : int 6 5 2 5 2 5 4 5 4 6 ...
## $ PVA3 : int 6 3 4 5 3 5 5 6 5 6 ...
## $ EC_Stop : int 0 0 0 0 0 0 0 0 0 0 ...
## $ WC_Stop : int 1 0 0 1 1 1 0 0 1 0 ...
## $ EC_Bus : int 0 1 0 0 0 0 0 0 0 0 ...
## $ WC_Bus : int 1 0 0 1 1 1 0 0 1 0 ...
## $ Gender : int 0 0 1 1 1 0 0 0 0 0 ...
## $ MarriedStatus: int 1 1 1 1 1 1 1 0 1 1 ...
## $ Occupation : int 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : int 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : int 1 1 1 1 1 1 1 1 1 1 ...
attach(SEM)
SEM = within(SEM, {
AGE = factor(AGE, labels = c("16-25", "26-35", "36-45", "46-55", ">55"))
CITY = factor(CITY,labels = c("DaNang", "HoChiMinh"))
FRE = factor(FRE, labels = c(">=3 days/week", "2days/month-2days/week", "2days/year-1day/month", "<2 days/year"))
TripPurpose = factor(TripPurpose, labels = c("Working", "Studying", "Shopping", "Entertaining", "Others"))
Departure = factor(Departure, labels = c("Normal", "Peak-Hour"))
TimeUseonBus = factor(TimeUseonBus, labels = c("Using.telephone", "Reading", "Listening", "Nothing", "Talking", "Others"))
EC_Stop = factor(EC_Stop, labels = c("Never", "Ever"))
WC_Stop = factor(WC_Stop, labels = c("Never", "Ever"))
EC_Bus = factor(EC_Bus, labels = c("Never", "Ever"))
WC_Bus = factor(WC_Bus, labels = c("Never", "Ever"))
Gender = factor(Gender, labels = c("Female", "Male"))
MarriedStatus = factor(MarriedStatus, labels = c("Married", "Single"))
Occupation = factor(Occupation, labels = c("Students/Pupils", "Full.time.job", "Part.time.job", "Retirement", "No.job", "Housewife", "Others"))
Education = factor(Education, labels = c("Secondary.school", "Undergraduate", "High.school", "Postgraduate", "Others"))
Income = factor(Income, labels = c("<5millions", "5-10millions", "10-15millions", ">15millions"))
} )
str(SEM)
## 'data.frame': 854 obs. of 93 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ PSW1 : int 4 2 4 5 3 2 1 2 3 4 ...
## $ PSW2 : int 5 5 6 5 2 5 1 6 4 4 ...
## $ PSW3 : int 6 3 6 5 4 6 3 6 4 7 ...
## $ PSW4 : int 4 2 4 2 4 5 1 3 2 4 ...
## $ PSW5 : int 6 4 1 6 2 4 5 2 3 7 ...
## $ PSW6 : int 4 5 4 4 6 4 6 2 5 4 ...
## $ PSW7 : int 5 3 2 2 5 6 4 6 3 7 ...
## $ PSS1 : int 6 2 2 6 3 3 1 6 2 1 ...
## $ PSS2 : int 6 3 6 6 3 4 1 6 3 4 ...
## $ PSS3 : int 6 4 6 4 5 6 5 6 4 7 ...
## $ PSS4 : int 6 2 4 1 2 2 1 3 3 7 ...
## $ PSS5 : int 4 2 2 4 1 1 5 1 2 1 ...
## $ PSS6 : int 6 2 2 4 2 1 1 1 2 1 ...
## $ PSS7 : int 4 2 2 6 2 2 3 5 3 1 ...
## $ PSB1 : int 6 3 2 5 2 2 1 6 2 4 ...
## $ PSB2 : int 6 3 6 6 2 5 1 6 4 4 ...
## $ PSB3 : int 4 4 6 6 5 4 5 6 4 7 ...
## $ PSB4 : int 6 4 4 5 5 4 1 6 4 4 ...
## $ PSB5 : int 5 6 6 5 5 4 5 1 7 7 ...
## $ PSB6 : int 6 6 6 6 6 6 6 6 6 7 ...
## $ PSB7 : int 6 6 4 7 4 4 6 6 6 7 ...
## $ PSB8 : int 6 6 2 6 3 2 6 5 6 7 ...
## $ PQT1 : int 6 4 2 6 6 4 2 5 5 7 ...
## $ PQT2 : int 6 6 2 5 3 4 5 6 4 7 ...
## $ PQT3 : int 4 5 2 4 6 5 5 4 5 7 ...
## $ PQT4 : int 4 4 2 5 3 4 2 4 3 7 ...
## $ PQC1 : int 6 4 2 5 6 5 2 6 3 7 ...
## $ PQC2 : int 4 5 4 5 6 5 2 6 4 7 ...
## $ PQC3 : int 4 6 1 5 4 4 2 3 4 7 ...
## $ PQC4 : int 4 4 2 4 3 3 2 4 4 4 ...
## $ PQR5 : int 6 6 1 4 6 3 2 3 3 4 ...
## $ PQP1 : int 6 6 1 5 4 4 4 4 3 4 ...
## $ PQP2 : int 6 4 1 5 4 4 4 4 4 4 ...
## $ PQP3 : int 5 4 6 5 4 4 3 4 5 7 ...
## $ PQP4 : int 6 5 6 5 5 5 4 4 6 7 ...
## $ PQR1 : int 4 4 2 4 5 3 2 5 3 4 ...
## $ PQR2 : int 4 3 6 5 3 3 1 3 4 7 ...
## $ PQR3 : int 6 4 2 5 5 3 1 3 5 4 ...
## $ PQR4 : int 4 3 5 5 3 3 2 2 4 7 ...
## $ PQC5 : int 2 6 2 5 5 4 4 6 4 7 ...
## $ SAT1 : int 6 5 2 5 4 4 2 7 5 7 ...
## $ SAT2 : int 6 5 2 5 4 5 2 7 6 7 ...
## $ SAT3 : int 6 4 2 5 4 5 3 6 4 7 ...
## $ LOY1 : int 4 4 2 5 4 4 2 6 6 6 ...
## $ LOY2 : int 6 5 6 5 5 3 1 6 5 6 ...
## $ LOY3 : int 5 4 6 5 5 2 1 6 6 6 ...
## $ LOY4 : int 7 4 4 5 4 5 2 7 5 6 ...
## $ LOY5 : int 6 4 4 5 4 5 2 7 5 4 ...
## $ LOY6 : int 6 4 2 5 4 6 1 7 5 6 ...
## $ LOY7 : int 6 5 2 5 6 6 2 7 5 7 ...
## $ IMA1 : int 6 4 4 5 5 4 2 6 5 6 ...
## $ IMA2 : int 6 5 2 5 4 3 3 6 6 7 ...
## $ IMA3 : int 6 6 5 5 5 2 2 5 6 7 ...
## $ IMA4 : int 4 5 2 5 4 2 2 6 6 7 ...
## $ IMA5 : int 6 4 2 5 5 4 2 6 6 7 ...
## $ PHB1 : int 6 3 5 5 5 4 3 6 6 7 ...
## $ PHB2 : int 7 4 2 5 6 6 3 7 5 7 ...
## $ PHB3 : int 6 3 6 5 6 7 1 4 3 7 ...
## $ PHB4 : int 7 4 6 5 6 6 4 6 7 7 ...
## $ PHB5 : int 7 6 6 5 5 4 4 6 7 7 ...
## $ PEB1 : int 4 5 6 5 6 7 4 6 7 7 ...
## $ PEB2 : int 4 6 5 5 6 7 2 7 7 7 ...
## $ PEB3 : int 4 6 6 5 6 5 2 6 6 7 ...
## $ PEB4 : int 4 4 6 5 6 2 2 6 6 7 ...
## $ PDE1 : int 3 3 2 5 3 1 4 4 5 4 ...
## $ PDE2 : int 5 5 6 5 4 4 4 4 5 5 ...
## $ PDE3 : int 6 4 4 5 2 5 2 4 4 4 ...
## $ PDE4 : int 4 4 2 5 2 2 2 3 4 4 ...
## $ PDE5 : int 2 4 2 5 5 1 2 5 4 6 ...
## $ PDE6 : int 4 4 4 5 4 4 2 4 4 4 ...
## $ PDE7 : int 6 5 2 5 3 2 1 4 3 4 ...
## $ PSO1 : int 6 4 4 5 2 5 2 6 1 2 ...
## $ PSO2 : int 6 4 2 5 3 2 1 6 1 4 ...
## $ PSO3 : int 6 4 2 5 4 2 1 6 4 4 ...
## $ PVA1 : int 6 5 6 5 6 6 6 6 6 6 ...
## $ PVA2 : int 6 5 2 5 2 5 4 5 4 6 ...
## $ PVA3 : int 6 3 4 5 3 5 5 6 5 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
dim(SEM)
## [1] 854 93
# 2.2. Descritive Table
library(tableone)
require(tableone)
library(magrittr)
summary(SEM)
## AGE CITY FRE TripPurpose
## 16-25:414 DaNang :406 >=3 days/week :497 Working :304
## 26-35:168 HoChiMinh:448 2days/month-2days/week:162 Studying :294
## 36-45:100 2days/year-1day/month : 96 Shopping : 58
## 46-55: 78 <2 days/year : 99 Entertaining: 95
## >55 : 94 Others :103
##
##
## Departure TimeUseonBus TravelTime PSW1
## Normal :215 Using.telephone:197 Min. : 0.000 Min. :1.000
## Peak-Hour:639 Reading : 53 1st Qu.: 0.500 1st Qu.:4.000
## Listening :136 Median : 1.000 Median :5.000
## Nothing :416 Mean : 1.276 Mean :4.763
## Talking : 33 3rd Qu.: 2.000 3rd Qu.:6.000
## Others : 19 Max. :20.000 Max. :7.000
##
## PSW2 PSW3 PSW4 PSW5
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:3.000 1st Qu.:4.000
## Median :6.000 Median :6.000 Median :5.000 Median :5.000
## Mean :4.968 Mean :5.371 Mean :4.241 Mean :4.835
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PSW6 PSW7 PSS1 PSS2
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.000 1st Qu.:5.000 1st Qu.:3.000 1st Qu.:4.000
## Median :4.000 Median :6.000 Median :5.000 Median :6.000
## Mean :3.907 Mean :5.149 Mean :4.493 Mean :4.941
## 3rd Qu.:5.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PSS3 PSS4 PSS5 PSS6
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:3.000 1st Qu.:2.000 1st Qu.:2.000
## Median :6.000 Median :4.000 Median :4.000 Median :4.000
## Mean :5.334 Mean :4.205 Mean :3.765 Mean :3.636
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:5.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PSS7 PSB1 PSB2 PSB3 PSB4
## Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:3.000 1st Qu.:4.00 1st Qu.:5.000 1st Qu.:4.000
## Median :5.000 Median :5.000 Median :6.00 Median :6.000 Median :5.000
## Mean :4.869 Mean :4.643 Mean :5.08 Mean :5.502 Mean :4.816
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.00 Max. :7.000 Max. :7.000
##
## PSB5 PSB6 PSB7 PSB8
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:6.000 1st Qu.:6.000 1st Qu.:5.000
## Median :6.000 Median :6.000 Median :6.000 Median :6.000
## Mean :5.566 Mean :5.982 Mean :5.813 Mean :5.694
## 3rd Qu.:6.000 3rd Qu.:7.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PQT1 PQT2 PQT3 PQT4
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :6.000 Median :6.000 Median :6.000 Median :6.000
## Mean :5.354 Mean :5.392 Mean :5.206 Mean :5.184
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PQC1 PQC2 PQC3 PQC4 PQR5
## Min. :1.000 Min. :1.00 Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:4.250 1st Qu.:5.00 1st Qu.:4.000 1st Qu.:4.00 1st Qu.:4.000
## Median :6.000 Median :6.00 Median :6.000 Median :5.00 Median :5.000
## Mean :5.142 Mean :5.58 Mean :5.123 Mean :4.77 Mean :5.033
## 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.000
## Max. :7.000 Max. :7.00 Max. :7.000 Max. :7.00 Max. :7.000
##
## PQP1 PQP2 PQP3 PQP4
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :6.000 Median :6.000 Median :6.000 Median :6.000
## Mean :5.324 Mean :5.313 Mean :5.383 Mean :5.556
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PQR1 PQR2 PQR3 PQR4 PQC5
## Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:4.00 1st Qu.:4.000 1st Qu.:5.000
## Median :5.000 Median :6.000 Median :5.00 Median :5.000 Median :6.000
## Mean :4.953 Mean :5.233 Mean :5.02 Mean :4.852 Mean :5.535
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.00 Max. :7.000 Max. :7.000
##
## SAT1 SAT2 SAT3 LOY1
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :6.000 Median :6.000 Median :6.000 Median :6.000
## Mean :5.341 Mean :5.508 Mean :5.502 Mean :5.495
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## LOY2 LOY3 LOY4 LOY5
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :6.000 Median :6.000 Median :6.000 Median :6.000
## Mean :5.519 Mean :5.596 Mean :5.328 Mean :5.379
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## LOY6 LOY7 IMA1 IMA2
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :5.000 Median :6.000 Median :5.000 Median :6.000
## Mean :5.078 Mean :5.631 Mean :5.212 Mean :5.221
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## IMA3 IMA4 IMA5 PHB1
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :6.000 Median :6.000 Median :6.000 Median :6.000
## Mean :5.368 Mean :5.369 Mean :5.416 Mean :5.303
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PHB2 PHB3 PHB4 PHB5 PEB1
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.00
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:6.000 1st Qu.:6.000 1st Qu.:5.00
## Median :6.000 Median :6.000 Median :6.000 Median :6.000 Median :6.00
## Mean :5.602 Mean :5.443 Mean :5.877 Mean :5.808 Mean :5.77
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:7.000 3rd Qu.:7.000 3rd Qu.:7.00
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.00
##
## PEB2 PEB3 PEB4 PDE1
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:4.000
## Median :6.000 Median :6.000 Median :6.000 Median :5.000
## Mean :5.587 Mean :5.535 Mean :5.485 Mean :4.737
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PDE2 PDE3 PDE4 PDE5 PDE6
## Min. :1.000 Min. :1.0 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:4.0 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:4.000
## Median :6.000 Median :5.0 Median :5.000 Median :6.000 Median :5.000
## Mean :5.351 Mean :4.9 Mean :4.752 Mean :5.193 Mean :4.936
## 3rd Qu.:6.000 3rd Qu.:6.0 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.0 Max. :7.000 Max. :7.000 Max. :7.000
##
## PDE7 PSO1 PSO2 PSO3
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:3.000 1st Qu.:4.000
## Median :5.000 Median :4.000 Median :4.000 Median :5.000
## Mean :4.804 Mean :4.315 Mean :4.235 Mean :4.535
## 3rd Qu.:6.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
##
## PVA1 PVA2 PVA3 EC_Stop WC_Stop
## Min. :1.000 Min. :1.000 Min. :1.000 Never:818 Never:734
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 Ever : 36 Ever :120
## Median :6.000 Median :6.000 Median :6.000
## Mean :5.851 Mean :5.446 Mean :5.718
## 3rd Qu.:7.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000
##
## EC_Bus WC_Bus Gender MarriedStatus Occupation
## Never:814 Never:739 Female:498 Married:332 Students/Pupils:357
## Ever : 40 Ever :115 Male :356 Single :522 Full.time.job :304
## Part.time.job : 65
## Retirement : 46
## No.job : 4
## Housewife : 52
## Others : 26
## Education Income
## Secondary.school: 59 <5millions :455
## Undergraduate :277 5-10millions :247
## High.school :359 10-15millions:116
## Postgraduate :103 >15millions : 36
## Others : 56
##
##
library(table1)
##
## Attaching package: 'table1'
## The following objects are masked from 'package:base':
##
## units, units<-
Tab1_SEM <- table1(~ PSW1 + PSW2 + PSW3 + PSW4 + PSW5 + PSW6 + PSW7 + PSS1 + PSS2 + PSS3 + PSS4 + PSS5 + PSS6 + PSS7 + PSB1 + PSB2 + PSB3 + PSB4 + PSB5 + PSB6 + PSB7 + PSB8 + PQT1 + PQT2 + PQT3 + PQT4 + PQC1 + PQC2 + PQC3 + PQC4 + PQC5 + PQP1 + PQP2 + PQP3 + PQP4 + PQR1 + PQR2 + PQR3 + PQR4 + PQR5 + SAT1 + SAT2 + SAT3 + LOY1 + LOY2 + LOY3 + LOY4 + LOY5 + LOY6 + LOY7 + IMA1 + IMA2 + IMA3 + IMA4 + IMA5 + PHB1 + PHB2 + PHB3 + PHB4 + PHB5 + PEB1 + PEB2 + PEB3 + PEB4 + PDE1 + PDE2 + PDE3 + PDE4 + PDE5 + PDE6 + PDE7 + PSO1 + PSO2 + PSO3 + PVA1 + PVA2 + PVA3 + EC_Stop + WC_Stop + EC_Bus + WC_Bus + Gender + MarriedStatus + Occupation + Education + Income + AGE + CITY + FRE + TripPurpose + Departure + TimeUseonBus + TravelTime| CITY , data = SEM)
Tab1_SEM
| DaNang (N=406) |
HoChiMinh (N=448) |
Overall (N=854) |
|
|---|---|---|---|
| PSW1 | |||
| Mean (SD) | 5.51 (1.26) | 4.09 (1.86) | 4.76 (1.75) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 4.50 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSW2 | |||
| Mean (SD) | 5.56 (1.28) | 4.43 (1.84) | 4.97 (1.69) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSW3 | |||
| Mean (SD) | 5.74 (1.08) | 5.03 (1.64) | 5.37 (1.44) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSW4 | |||
| Mean (SD) | 4.78 (1.38) | 3.75 (1.78) | 4.24 (1.68) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSW5 | |||
| Mean (SD) | 5.18 (1.28) | 4.52 (1.81) | 4.83 (1.61) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSW6 | |||
| Mean (SD) | 3.95 (1.58) | 3.87 (1.66) | 3.91 (1.62) |
| Median [Min, Max] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] |
| PSW7 | |||
| Mean (SD) | 5.41 (1.11) | 4.91 (1.59) | 5.15 (1.40) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSS1 | |||
| Mean (SD) | 5.28 (1.28) | 3.78 (1.85) | 4.49 (1.77) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSS2 | |||
| Mean (SD) | 5.40 (1.22) | 4.52 (1.84) | 4.94 (1.63) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSS3 | |||
| Mean (SD) | 5.64 (1.05) | 5.06 (1.57) | 5.33 (1.38) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSS4 | |||
| Mean (SD) | 4.82 (1.44) | 3.65 (1.70) | 4.20 (1.69) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] |
| PSS5 | |||
| Mean (SD) | 3.83 (1.87) | 3.71 (1.93) | 3.76 (1.90) |
| Median [Min, Max] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] |
| PSS6 | |||
| Mean (SD) | 3.86 (1.85) | 3.43 (1.85) | 3.64 (1.86) |
| Median [Min, Max] | 4.00 [1.00, 7.00] | 3.00 [1.00, 7.00] | 4.00 [1.00, 7.00] |
| PSS7 | |||
| Mean (SD) | 5.15 (1.41) | 4.62 (1.74) | 4.87 (1.62) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSB1 | |||
| Mean (SD) | 5.59 (1.23) | 3.79 (1.90) | 4.64 (1.85) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSB2 | |||
| Mean (SD) | 5.63 (1.17) | 4.58 (1.77) | 5.08 (1.60) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSB3 | |||
| Mean (SD) | 5.78 (0.955) | 5.25 (1.39) | 5.50 (1.23) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSB4 | |||
| Mean (SD) | 5.40 (1.21) | 4.28 (1.70) | 4.82 (1.59) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSB5 | |||
| Mean (SD) | 5.96 (1.02) | 5.21 (1.54) | 5.57 (1.37) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSB6 | |||
| Mean (SD) | 6.13 (0.884) | 5.85 (1.09) | 5.98 (1.01) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSB7 | |||
| Mean (SD) | 6.01 (0.893) | 5.63 (1.22) | 5.81 (1.09) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PSB8 | |||
| Mean (SD) | 5.94 (1.04) | 5.47 (1.39) | 5.69 (1.26) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQT1 | |||
| Mean (SD) | 5.75 (1.06) | 5.00 (1.44) | 5.35 (1.32) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQT2 | |||
| Mean (SD) | 5.92 (1.07) | 4.91 (1.56) | 5.39 (1.44) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQT3 | |||
| Mean (SD) | 5.74 (1.17) | 4.72 (1.63) | 5.21 (1.52) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQT4 | |||
| Mean (SD) | 5.51 (1.14) | 4.89 (1.51) | 5.18 (1.38) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQC1 | |||
| Mean (SD) | 5.22 (1.26) | 5.07 (1.49) | 5.14 (1.39) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQC2 | |||
| Mean (SD) | 5.77 (1.00) | 5.41 (1.40) | 5.58 (1.24) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQC3 | |||
| Mean (SD) | 5.11 (1.40) | 5.14 (1.38) | 5.12 (1.39) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQC4 | |||
| Mean (SD) | 4.81 (1.34) | 4.73 (1.40) | 4.77 (1.38) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PQC5 | |||
| Mean (SD) | 5.58 (1.19) | 5.49 (1.28) | 5.54 (1.24) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQP1 | |||
| Mean (SD) | 5.71 (0.975) | 4.97 (1.45) | 5.32 (1.30) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQP2 | |||
| Mean (SD) | 5.73 (0.962) | 4.94 (1.46) | 5.31 (1.31) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQP3 | |||
| Mean (SD) | 5.73 (0.878) | 5.07 (1.38) | 5.38 (1.22) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQP4 | |||
| Mean (SD) | 5.85 (0.804) | 5.29 (1.32) | 5.56 (1.14) |
| Median [Min, Max] | 6.00 [3.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQR1 | |||
| Mean (SD) | 5.06 (1.40) | 4.85 (1.46) | 4.95 (1.44) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PQR2 | |||
| Mean (SD) | 5.68 (1.02) | 4.83 (1.45) | 5.23 (1.33) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PQR3 | |||
| Mean (SD) | 5.19 (1.30) | 4.86 (1.46) | 5.02 (1.40) |
| Median [Min, Max] | 5.50 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PQR4 | |||
| Mean (SD) | 5.30 (1.29) | 4.45 (1.72) | 4.85 (1.58) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PQR5 | |||
| Mean (SD) | 5.17 (1.29) | 4.91 (1.46) | 5.03 (1.39) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| SAT1 | |||
| Mean (SD) | 5.55 (1.03) | 5.15 (1.35) | 5.34 (1.22) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| SAT2 | |||
| Mean (SD) | 5.70 (0.974) | 5.33 (1.25) | 5.51 (1.14) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| SAT3 | |||
| Mean (SD) | 5.76 (0.928) | 5.27 (1.28) | 5.50 (1.15) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| LOY1 | |||
| Mean (SD) | 5.76 (0.873) | 5.26 (1.24) | 5.50 (1.11) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| LOY2 | |||
| Mean (SD) | 5.80 (0.850) | 5.26 (1.31) | 5.52 (1.14) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| LOY3 | |||
| Mean (SD) | 5.82 (0.877) | 5.39 (1.21) | 5.60 (1.09) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| LOY4 | |||
| Mean (SD) | 5.55 (1.03) | 5.13 (1.38) | 5.33 (1.25) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| LOY5 | |||
| Mean (SD) | 5.64 (1.03) | 5.14 (1.39) | 5.38 (1.25) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| LOY6 | |||
| Mean (SD) | 5.35 (1.32) | 4.83 (1.59) | 5.08 (1.49) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| LOY7 | |||
| Mean (SD) | 5.92 (0.895) | 5.37 (1.38) | 5.63 (1.21) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| IMA1 | |||
| Mean (SD) | 5.37 (0.949) | 5.07 (1.27) | 5.21 (1.14) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| IMA2 | |||
| Mean (SD) | 5.52 (0.871) | 4.95 (1.34) | 5.22 (1.18) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| IMA3 | |||
| Mean (SD) | 5.62 (0.846) | 5.14 (1.28) | 5.37 (1.12) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| IMA4 | |||
| Mean (SD) | 5.69 (0.835) | 5.07 (1.34) | 5.37 (1.17) |
| Median [Min, Max] | 6.00 [3.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| IMA5 | |||
| Mean (SD) | 5.74 (0.806) | 5.13 (1.27) | 5.42 (1.12) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PHB1 | |||
| Mean (SD) | 5.43 (1.06) | 5.19 (1.53) | 5.30 (1.33) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PHB2 | |||
| Mean (SD) | 5.82 (1.01) | 5.40 (1.45) | 5.60 (1.28) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PHB3 | |||
| Mean (SD) | 5.46 (1.19) | 5.42 (1.38) | 5.44 (1.29) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PHB4 | |||
| Mean (SD) | 6.08 (0.830) | 5.69 (1.33) | 5.88 (1.14) |
| Median [Min, Max] | 6.00 [3.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PHB5 | |||
| Mean (SD) | 6.05 (0.819) | 5.59 (1.46) | 5.81 (1.22) |
| Median [Min, Max] | 6.00 [3.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PEB1 | |||
| Mean (SD) | 5.98 (0.827) | 5.58 (1.55) | 5.77 (1.28) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PEB2 | |||
| Mean (SD) | 5.79 (0.997) | 5.40 (1.60) | 5.59 (1.36) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PEB3 | |||
| Mean (SD) | 5.72 (1.05) | 5.36 (1.59) | 5.54 (1.37) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PEB4 | |||
| Mean (SD) | 5.69 (1.05) | 5.29 (1.57) | 5.48 (1.36) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PDE1 | |||
| Mean (SD) | 5.11 (1.37) | 4.40 (1.71) | 4.74 (1.60) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PDE2 | |||
| Mean (SD) | 5.67 (1.04) | 5.06 (1.47) | 5.35 (1.32) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PDE3 | |||
| Mean (SD) | 5.35 (1.16) | 4.49 (1.45) | 4.90 (1.39) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PDE4 | |||
| Mean (SD) | 5.26 (1.20) | 4.29 (1.46) | 4.75 (1.43) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PDE5 | |||
| Mean (SD) | 5.63 (1.07) | 4.80 (1.55) | 5.19 (1.40) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PDE6 | |||
| Mean (SD) | 5.33 (1.23) | 4.57 (1.42) | 4.94 (1.38) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 5.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PDE7 | |||
| Mean (SD) | 5.27 (1.25) | 4.38 (1.47) | 4.80 (1.44) |
| Median [Min, Max] | 6.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PSO1 | |||
| Mean (SD) | 4.68 (1.32) | 3.98 (1.59) | 4.31 (1.51) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] |
| PSO2 | |||
| Mean (SD) | 4.66 (1.41) | 3.85 (1.56) | 4.24 (1.54) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 4.00 [1.00, 7.00] |
| PSO3 | |||
| Mean (SD) | 5.05 (1.28) | 4.07 (1.62) | 4.54 (1.54) |
| Median [Min, Max] | 5.00 [1.00, 7.00] | 4.00 [1.00, 7.00] | 5.00 [1.00, 7.00] |
| PVA1 | |||
| Mean (SD) | 5.95 (0.913) | 5.76 (1.19) | 5.85 (1.07) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PVA2 | |||
| Mean (SD) | 5.55 (1.16) | 5.35 (1.29) | 5.45 (1.24) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| PVA3 | |||
| Mean (SD) | 5.91 (0.810) | 5.54 (1.25) | 5.72 (1.08) |
| Median [Min, Max] | 6.00 [2.00, 7.00] | 6.00 [1.00, 7.00] | 6.00 [1.00, 7.00] |
| EC_Stop | |||
| Never | 402 (99.0%) | 416 (92.9%) | 818 (95.8%) |
| Ever | 4 (1.0%) | 32 (7.1%) | 36 (4.2%) |
| WC_Stop | |||
| Never | 385 (94.8%) | 349 (77.9%) | 734 (85.9%) |
| Ever | 21 (5.2%) | 99 (22.1%) | 120 (14.1%) |
| EC_Bus | |||
| Never | 403 (99.3%) | 411 (91.7%) | 814 (95.3%) |
| Ever | 3 (0.7%) | 37 (8.3%) | 40 (4.7%) |
| WC_Bus | |||
| Never | 389 (95.8%) | 350 (78.1%) | 739 (86.5%) |
| Ever | 17 (4.2%) | 98 (21.9%) | 115 (13.5%) |
| Gender | |||
| Female | 226 (55.7%) | 272 (60.7%) | 498 (58.3%) |
| Male | 180 (44.3%) | 176 (39.3%) | 356 (41.7%) |
| MarriedStatus | |||
| Married | 148 (36.5%) | 184 (41.1%) | 332 (38.9%) |
| Single | 258 (63.5%) | 264 (58.9%) | 522 (61.1%) |
| Occupation | |||
| Students/Pupils | 197 (48.5%) | 160 (35.7%) | 357 (41.8%) |
| Full.time.job | 115 (28.3%) | 189 (42.2%) | 304 (35.6%) |
| Part.time.job | 25 (6.2%) | 40 (8.9%) | 65 (7.6%) |
| Retirement | 33 (8.1%) | 13 (2.9%) | 46 (5.4%) |
| No.job | 3 (0.7%) | 1 (0.2%) | 4 (0.5%) |
| Housewife | 27 (6.7%) | 25 (5.6%) | 52 (6.1%) |
| Others | 6 (1.5%) | 20 (4.5%) | 26 (3.0%) |
| Education | |||
| Secondary.school | 30 (7.4%) | 29 (6.5%) | 59 (6.9%) |
| Undergraduate | 129 (31.8%) | 148 (33.0%) | 277 (32.4%) |
| High.school | 167 (41.1%) | 192 (42.9%) | 359 (42.0%) |
| Postgraduate | 61 (15.0%) | 42 (9.4%) | 103 (12.1%) |
| Others | 19 (4.7%) | 37 (8.3%) | 56 (6.6%) |
| Income | |||
| <5millions | 267 (65.8%) | 188 (42.0%) | 455 (53.3%) |
| 5-10millions | 82 (20.2%) | 165 (36.8%) | 247 (28.9%) |
| 10-15millions | 49 (12.1%) | 67 (15.0%) | 116 (13.6%) |
| >15millions | 8 (2.0%) | 28 (6.2%) | 36 (4.2%) |
| AGE | |||
| 16-25 | 214 (52.7%) | 200 (44.6%) | 414 (48.5%) |
| 26-35 | 75 (18.5%) | 93 (20.8%) | 168 (19.7%) |
| 36-45 | 34 (8.4%) | 66 (14.7%) | 100 (11.7%) |
| 46-55 | 36 (8.9%) | 42 (9.4%) | 78 (9.1%) |
| >55 | 47 (11.6%) | 47 (10.5%) | 94 (11.0%) |
| CITY | |||
| DaNang | 406 (100%) | 0 (0%) | 406 (47.5%) |
| HoChiMinh | 0 (0%) | 448 (100%) | 448 (52.5%) |
| FRE | |||
| >=3 days/week | 260 (64.0%) | 237 (52.9%) | 497 (58.2%) |
| 2days/month-2days/week | 82 (20.2%) | 80 (17.9%) | 162 (19.0%) |
| 2days/year-1day/month | 26 (6.4%) | 70 (15.6%) | 96 (11.2%) |
| <2 days/year | 38 (9.4%) | 61 (13.6%) | 99 (11.6%) |
| TripPurpose | |||
| Working | 115 (28.3%) | 189 (42.2%) | 304 (35.6%) |
| Studying | 160 (39.4%) | 134 (29.9%) | 294 (34.4%) |
| Shopping | 45 (11.1%) | 13 (2.9%) | 58 (6.8%) |
| Entertaining | 48 (11.8%) | 47 (10.5%) | 95 (11.1%) |
| Others | 38 (9.4%) | 65 (14.5%) | 103 (12.1%) |
| Departure | |||
| Normal | 143 (35.2%) | 72 (16.1%) | 215 (25.2%) |
| Peak-Hour | 263 (64.8%) | 376 (83.9%) | 639 (74.8%) |
| TimeUseonBus | |||
| Using.telephone | 103 (25.4%) | 94 (21.0%) | 197 (23.1%) |
| Reading | 22 (5.4%) | 31 (6.9%) | 53 (6.2%) |
| Listening | 53 (13.1%) | 83 (18.5%) | 136 (15.9%) |
| Nothing | 200 (49.3%) | 216 (48.2%) | 416 (48.7%) |
| Talking | 24 (5.9%) | 9 (2.0%) | 33 (3.9%) |
| Others | 4 (1.0%) | 15 (3.3%) | 19 (2.2%) |
| TravelTime | |||
| Mean (SD) | 1.12 (0.831) | 1.41 (1.81) | 1.28 (1.44) |
| Median [Min, Max] | 1.00 [0, 6.00] | 1.00 [0, 20.0] | 1.00 [0, 20.0] |
## Loại phân bố dữ liệu không thuộc phân bố chuẩn
3. Perception of bus user 3.1. Tạo dữ liệu biểu đồ likert
# Create data for Likert graph by BS (remove ID and TM =7-Bus)
head(SEM)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6
## 1 3.00 4 5 6 4 6 4 5 6 6 6 6 4 6
## 2 2.00 2 5 3 2 4 5 3 2 3 4 2 2 2
## 3 0.17 4 6 6 4 1 4 2 2 6 6 4 2 2
## 4 4.00 5 5 5 2 6 4 2 6 6 4 1 4 4
## 5 2.00 3 2 4 4 2 6 5 3 3 5 2 1 2
## 6 2.00 2 5 6 5 4 4 6 3 4 6 2 1 1
## PSS7 PSB1 PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2
## 1 4 6 6 4 6 5 6 6 6 6 6 4 4 6 4
## 2 2 3 3 4 4 6 6 6 6 4 6 5 4 4 5
## 3 2 2 6 6 4 6 6 4 2 2 2 2 2 2 4
## 4 6 5 6 6 5 5 6 7 6 6 5 4 5 5 5
## 5 2 2 2 5 5 5 6 4 3 6 3 6 3 6 6
## 6 2 2 5 4 4 4 6 4 2 4 4 5 4 5 5
## PQC3 PQC4 PQR5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQC5 SAT1 SAT2 SAT3
## 1 4 4 6 6 6 5 6 4 4 6 4 2 6 6 6
## 2 6 4 6 6 4 4 5 4 3 4 3 6 5 5 4
## 3 1 2 1 1 1 6 6 2 6 2 5 2 2 2 2
## 4 5 4 4 5 5 5 5 4 5 5 5 5 5 5 5
## 5 4 3 6 4 4 4 5 5 3 5 3 5 4 4 4
## 6 4 3 3 4 4 4 5 3 3 3 3 4 4 5 5
## LOY1 LOY2 LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3
## 1 4 6 5 7 6 6 6 6 6 6 4 6 6 7 6
## 2 4 5 4 4 4 4 5 4 5 6 5 4 3 4 3
## 3 2 6 6 4 4 2 2 4 2 5 2 2 5 2 6
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## 5 4 5 5 4 4 4 6 5 4 5 4 5 5 6 6
## 6 4 3 2 5 5 6 6 4 3 2 2 4 4 6 7
## PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2
## 1 7 7 4 4 4 4 3 5 6 4 2 4 6 6 6
## 2 4 6 5 6 6 4 3 5 4 4 4 4 5 4 4
## 3 6 6 6 5 6 6 2 6 4 2 2 4 2 4 2
## 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## 5 6 5 6 6 6 6 3 4 2 2 5 4 3 2 3
## 6 6 4 7 7 5 2 1 4 5 2 1 4 2 5 2
## PSO3 PVA1 PVA2 PVA3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 6 6 6 6 Never Ever Never Ever Female Single
## 2 4 5 5 3 Never Never Ever Never Female Single
## 3 2 6 2 4 Never Never Never Never Male Single
## 4 5 5 5 5 Never Ever Never Ever Male Single
## 5 4 6 2 3 Never Ever Never Ever Male Single
## 6 2 6 5 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
str(SEM)
## 'data.frame': 854 obs. of 93 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ PSW1 : int 4 2 4 5 3 2 1 2 3 4 ...
## $ PSW2 : int 5 5 6 5 2 5 1 6 4 4 ...
## $ PSW3 : int 6 3 6 5 4 6 3 6 4 7 ...
## $ PSW4 : int 4 2 4 2 4 5 1 3 2 4 ...
## $ PSW5 : int 6 4 1 6 2 4 5 2 3 7 ...
## $ PSW6 : int 4 5 4 4 6 4 6 2 5 4 ...
## $ PSW7 : int 5 3 2 2 5 6 4 6 3 7 ...
## $ PSS1 : int 6 2 2 6 3 3 1 6 2 1 ...
## $ PSS2 : int 6 3 6 6 3 4 1 6 3 4 ...
## $ PSS3 : int 6 4 6 4 5 6 5 6 4 7 ...
## $ PSS4 : int 6 2 4 1 2 2 1 3 3 7 ...
## $ PSS5 : int 4 2 2 4 1 1 5 1 2 1 ...
## $ PSS6 : int 6 2 2 4 2 1 1 1 2 1 ...
## $ PSS7 : int 4 2 2 6 2 2 3 5 3 1 ...
## $ PSB1 : int 6 3 2 5 2 2 1 6 2 4 ...
## $ PSB2 : int 6 3 6 6 2 5 1 6 4 4 ...
## $ PSB3 : int 4 4 6 6 5 4 5 6 4 7 ...
## $ PSB4 : int 6 4 4 5 5 4 1 6 4 4 ...
## $ PSB5 : int 5 6 6 5 5 4 5 1 7 7 ...
## $ PSB6 : int 6 6 6 6 6 6 6 6 6 7 ...
## $ PSB7 : int 6 6 4 7 4 4 6 6 6 7 ...
## $ PSB8 : int 6 6 2 6 3 2 6 5 6 7 ...
## $ PQT1 : int 6 4 2 6 6 4 2 5 5 7 ...
## $ PQT2 : int 6 6 2 5 3 4 5 6 4 7 ...
## $ PQT3 : int 4 5 2 4 6 5 5 4 5 7 ...
## $ PQT4 : int 4 4 2 5 3 4 2 4 3 7 ...
## $ PQC1 : int 6 4 2 5 6 5 2 6 3 7 ...
## $ PQC2 : int 4 5 4 5 6 5 2 6 4 7 ...
## $ PQC3 : int 4 6 1 5 4 4 2 3 4 7 ...
## $ PQC4 : int 4 4 2 4 3 3 2 4 4 4 ...
## $ PQR5 : int 6 6 1 4 6 3 2 3 3 4 ...
## $ PQP1 : int 6 6 1 5 4 4 4 4 3 4 ...
## $ PQP2 : int 6 4 1 5 4 4 4 4 4 4 ...
## $ PQP3 : int 5 4 6 5 4 4 3 4 5 7 ...
## $ PQP4 : int 6 5 6 5 5 5 4 4 6 7 ...
## $ PQR1 : int 4 4 2 4 5 3 2 5 3 4 ...
## $ PQR2 : int 4 3 6 5 3 3 1 3 4 7 ...
## $ PQR3 : int 6 4 2 5 5 3 1 3 5 4 ...
## $ PQR4 : int 4 3 5 5 3 3 2 2 4 7 ...
## $ PQC5 : int 2 6 2 5 5 4 4 6 4 7 ...
## $ SAT1 : int 6 5 2 5 4 4 2 7 5 7 ...
## $ SAT2 : int 6 5 2 5 4 5 2 7 6 7 ...
## $ SAT3 : int 6 4 2 5 4 5 3 6 4 7 ...
## $ LOY1 : int 4 4 2 5 4 4 2 6 6 6 ...
## $ LOY2 : int 6 5 6 5 5 3 1 6 5 6 ...
## $ LOY3 : int 5 4 6 5 5 2 1 6 6 6 ...
## $ LOY4 : int 7 4 4 5 4 5 2 7 5 6 ...
## $ LOY5 : int 6 4 4 5 4 5 2 7 5 4 ...
## $ LOY6 : int 6 4 2 5 4 6 1 7 5 6 ...
## $ LOY7 : int 6 5 2 5 6 6 2 7 5 7 ...
## $ IMA1 : int 6 4 4 5 5 4 2 6 5 6 ...
## $ IMA2 : int 6 5 2 5 4 3 3 6 6 7 ...
## $ IMA3 : int 6 6 5 5 5 2 2 5 6 7 ...
## $ IMA4 : int 4 5 2 5 4 2 2 6 6 7 ...
## $ IMA5 : int 6 4 2 5 5 4 2 6 6 7 ...
## $ PHB1 : int 6 3 5 5 5 4 3 6 6 7 ...
## $ PHB2 : int 7 4 2 5 6 6 3 7 5 7 ...
## $ PHB3 : int 6 3 6 5 6 7 1 4 3 7 ...
## $ PHB4 : int 7 4 6 5 6 6 4 6 7 7 ...
## $ PHB5 : int 7 6 6 5 5 4 4 6 7 7 ...
## $ PEB1 : int 4 5 6 5 6 7 4 6 7 7 ...
## $ PEB2 : int 4 6 5 5 6 7 2 7 7 7 ...
## $ PEB3 : int 4 6 6 5 6 5 2 6 6 7 ...
## $ PEB4 : int 4 4 6 5 6 2 2 6 6 7 ...
## $ PDE1 : int 3 3 2 5 3 1 4 4 5 4 ...
## $ PDE2 : int 5 5 6 5 4 4 4 4 5 5 ...
## $ PDE3 : int 6 4 4 5 2 5 2 4 4 4 ...
## $ PDE4 : int 4 4 2 5 2 2 2 3 4 4 ...
## $ PDE5 : int 2 4 2 5 5 1 2 5 4 6 ...
## $ PDE6 : int 4 4 4 5 4 4 2 4 4 4 ...
## $ PDE7 : int 6 5 2 5 3 2 1 4 3 4 ...
## $ PSO1 : int 6 4 4 5 2 5 2 6 1 2 ...
## $ PSO2 : int 6 4 2 5 3 2 1 6 1 4 ...
## $ PSO3 : int 6 4 2 5 4 2 1 6 4 4 ...
## $ PVA1 : int 6 5 6 5 6 6 6 6 6 6 ...
## $ PVA2 : int 6 5 2 5 2 5 4 5 4 6 ...
## $ PVA3 : int 6 3 4 5 3 5 5 6 5 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
dim(SEM)
## [1] 854 93
names(SEM)
## [1] "AGE" "CITY" "FRE" "TripPurpose"
## [5] "Departure" "TimeUseonBus" "TravelTime" "PSW1"
## [9] "PSW2" "PSW3" "PSW4" "PSW5"
## [13] "PSW6" "PSW7" "PSS1" "PSS2"
## [17] "PSS3" "PSS4" "PSS5" "PSS6"
## [21] "PSS7" "PSB1" "PSB2" "PSB3"
## [25] "PSB4" "PSB5" "PSB6" "PSB7"
## [29] "PSB8" "PQT1" "PQT2" "PQT3"
## [33] "PQT4" "PQC1" "PQC2" "PQC3"
## [37] "PQC4" "PQR5" "PQP1" "PQP2"
## [41] "PQP3" "PQP4" "PQR1" "PQR2"
## [45] "PQR3" "PQR4" "PQC5" "SAT1"
## [49] "SAT2" "SAT3" "LOY1" "LOY2"
## [53] "LOY3" "LOY4" "LOY5" "LOY6"
## [57] "LOY7" "IMA1" "IMA2" "IMA3"
## [61] "IMA4" "IMA5" "PHB1" "PHB2"
## [65] "PHB3" "PHB4" "PHB5" "PEB1"
## [69] "PEB2" "PEB3" "PEB4" "PDE1"
## [73] "PDE2" "PDE3" "PDE4" "PDE5"
## [77] "PDE6" "PDE7" "PSO1" "PSO2"
## [81] "PSO3" "PVA1" "PVA2" "PVA3"
## [85] "EC_Stop" "WC_Stop" "EC_Bus" "WC_Bus"
## [89] "Gender" "MarriedStatus" "Occupation" "Education"
## [93] "Income"
## Creat dat_PSW1 - cot 3 cua SEM
dat_PSW1 <- SEM [, c(1,2,3,4,5,6,7,8,85,86,87,88,89,90,91,92,93)]
head(dat_PSW1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW1)
## [1] 854 17
size <- 854
dat_PSW1$BPE <- rep("PSW1", size = size) # Tạo biến mới BPE
names(dat_PSW1)[names(dat_PSW1) == "PSW1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW1
## 2 Students/Pupils Undergraduate <5millions PSW1
## 3 Students/Pupils Undergraduate <5millions PSW1
## 4 Students/Pupils Undergraduate <5millions PSW1
## 5 Students/Pupils Undergraduate <5millions PSW1
## 6 Students/Pupils High.school <5millions PSW1
## Creat dat_PSW2 - cot 3 cua SEM
dat_PSW2 <- SEM [, c(1,2,3,4,5,6,7,9,85,86,87,88,89,90,91,92,93)]
head(dat_PSW2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW2)
## [1] 854 17
size <- 854
dat_PSW2$BPE <- rep("PSW2", size = size) # Tạo biến mới BPE
names(dat_PSW2)[names(dat_PSW2) == "PSW2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW2
## 2 Students/Pupils Undergraduate <5millions PSW2
## 3 Students/Pupils Undergraduate <5millions PSW2
## 4 Students/Pupils Undergraduate <5millions PSW2
## 5 Students/Pupils Undergraduate <5millions PSW2
## 6 Students/Pupils High.school <5millions PSW2
# Creat dat_PSW3 - cot 3 cua SEM
dat_PSW3 <- SEM [, c(1,2,3,4,5,6,7,10,85,86,87,88,89,90,91,92,93)]
head(dat_PSW3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW3)
## [1] 854 17
size <- 854
dat_PSW3$BPE <- rep("PSW3", size = size) # Tạo biến mới BPE
names(dat_PSW3)[names(dat_PSW3) == "PSW3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW3
## 2 Students/Pupils Undergraduate <5millions PSW3
## 3 Students/Pupils Undergraduate <5millions PSW3
## 4 Students/Pupils Undergraduate <5millions PSW3
## 5 Students/Pupils Undergraduate <5millions PSW3
## 6 Students/Pupils High.school <5millions PSW3
# Creat dat_PSW4 - cot 3 cua SEM
dat_PSW4 <- SEM [, c(1,2,3,4,5,6,7,11,85,86,87,88,89,90,91,92,93)]
head(dat_PSW4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 2 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW4)
## [1] 854 17
size <- 854
dat_PSW4$BPE <- rep("PSW4", size = size) # Tạo biến mới BPE
names(dat_PSW4)[names(dat_PSW4) == "PSW4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 2 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW4
## 2 Students/Pupils Undergraduate <5millions PSW4
## 3 Students/Pupils Undergraduate <5millions PSW4
## 4 Students/Pupils Undergraduate <5millions PSW4
## 5 Students/Pupils Undergraduate <5millions PSW4
## 6 Students/Pupils High.school <5millions PSW4
# Creat dat_PSW5 - cot 3 cua SEM
dat_PSW5 <- SEM [, c(1,2,3,4,5,6,7,12,85,86,87,88,89,90,91,92,93)]
head(dat_PSW5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW5)
## [1] 854 17
size <- 854
dat_PSW5$BPE <- rep("PSW5", size = size) # Tạo biến mới BPE
names(dat_PSW5)[names(dat_PSW5) == "PSW5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW5
## 2 Students/Pupils Undergraduate <5millions PSW5
## 3 Students/Pupils Undergraduate <5millions PSW5
## 4 Students/Pupils Undergraduate <5millions PSW5
## 5 Students/Pupils Undergraduate <5millions PSW5
## 6 Students/Pupils High.school <5millions PSW5
# Creat dat_PSW6 - cot 3 cua SEM
dat_PSW6 <- SEM [, c(1,2,3,4,5,6,7,13,85,86,87,88,89,90,91,92,93)]
head(dat_PSW6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW6 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW6)
## [1] 854 17
size <- 854
dat_PSW6$BPE <- rep("PSW6", size = size) # Tạo biến mới BPE
names(dat_PSW6)[names(dat_PSW6) == "PSW6"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW6
## 2 Students/Pupils Undergraduate <5millions PSW6
## 3 Students/Pupils Undergraduate <5millions PSW6
## 4 Students/Pupils Undergraduate <5millions PSW6
## 5 Students/Pupils Undergraduate <5millions PSW6
## 6 Students/Pupils High.school <5millions PSW6
# Creat dat_PSW7 - cot 3 cua SEM
dat_PSW7 <- SEM [, c(1,2,3,4,5,6,7,14,85,86,87,88,89,90,91,92,93)]
head(dat_PSW7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSW7 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 2 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSW7)
## [1] 854 17
size <- 854
dat_PSW7$BPE <- rep("PSW7", size = size) # Tạo biến mới BPE
names(dat_PSW7)[names(dat_PSW7) == "PSW7"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSW7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 2 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW7
## 2 Students/Pupils Undergraduate <5millions PSW7
## 3 Students/Pupils Undergraduate <5millions PSW7
## 4 Students/Pupils Undergraduate <5millions PSW7
## 5 Students/Pupils Undergraduate <5millions PSW7
## 6 Students/Pupils High.school <5millions PSW7
## Creat dat_PSS1 - cot 3 cua SEM
dat_PSS1 <- SEM [, c(1,2,3,4,5,6,7,15,85,86,87,88,89,90,91,92,93)]
head(dat_PSS1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS1)
## [1] 854 17
size <- 854
dat_PSS1$BPE <- rep("PSS1", size = size) # Tạo biến mới BPE
names(dat_PSS1)[names(dat_PSS1) == "PSS1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS1
## 2 Students/Pupils Undergraduate <5millions PSS1
## 3 Students/Pupils Undergraduate <5millions PSS1
## 4 Students/Pupils Undergraduate <5millions PSS1
## 5 Students/Pupils Undergraduate <5millions PSS1
## 6 Students/Pupils High.school <5millions PSS1
## Creat dat_PSS2 - cot 3 cua SEM
dat_PSS2 <- SEM [, c(1,2,3,4,5,6,7,16,85,86,87,88,89,90,91,92,93)]
head(dat_PSS2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS2)
## [1] 854 17
size <- 854
dat_PSS2$BPE <- rep("PSS2", size = size) # Tạo biến mới BPE
names(dat_PSS2)[names(dat_PSS2) == "PSS2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS2
## 2 Students/Pupils Undergraduate <5millions PSS2
## 3 Students/Pupils Undergraduate <5millions PSS2
## 4 Students/Pupils Undergraduate <5millions PSS2
## 5 Students/Pupils Undergraduate <5millions PSS2
## 6 Students/Pupils High.school <5millions PSS2
# Creat dat_PSS3 - cot 3 cua SEM
dat_PSS3 <- SEM [, c(1,2,3,4,5,6,7,17,85,86,87,88,89,90,91,92,93)]
head(dat_PSS3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS3)
## [1] 854 17
size <- 854
dat_PSS3$BPE <- rep("PSS3", size = size) # Tạo biến mới BPE
names(dat_PSS3)[names(dat_PSS3) == "PSS3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS3
## 2 Students/Pupils Undergraduate <5millions PSS3
## 3 Students/Pupils Undergraduate <5millions PSS3
## 4 Students/Pupils Undergraduate <5millions PSS3
## 5 Students/Pupils Undergraduate <5millions PSS3
## 6 Students/Pupils High.school <5millions PSS3
# Creat dat_PSS4 - cot 3 cua SEM
dat_PSS4 <- SEM [, c(1,2,3,4,5,6,7,18,85,86,87,88,89,90,91,92,93)]
head(dat_PSS4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 1 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS4)
## [1] 854 17
size <- 854
dat_PSS4$BPE <- rep("PSS4", size = size) # Tạo biến mới BPE
names(dat_PSS4)[names(dat_PSS4) == "PSS4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 1 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS4
## 2 Students/Pupils Undergraduate <5millions PSS4
## 3 Students/Pupils Undergraduate <5millions PSS4
## 4 Students/Pupils Undergraduate <5millions PSS4
## 5 Students/Pupils Undergraduate <5millions PSS4
## 6 Students/Pupils High.school <5millions PSS4
# Creat dat_PSS5 - cot 3 cua SEM
dat_PSS5 <- SEM [, c(1,2,3,4,5,6,7,19,85,86,87,88,89,90,91,92,93)]
head(dat_PSS5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 1 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS5)
## [1] 854 17
size <- 854
dat_PSS5$BPE <- rep("PSS5", size = size) # Tạo biến mới BPE
names(dat_PSS5)[names(dat_PSS5) == "PSS5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 1 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS5
## 2 Students/Pupils Undergraduate <5millions PSS5
## 3 Students/Pupils Undergraduate <5millions PSS5
## 4 Students/Pupils Undergraduate <5millions PSS5
## 5 Students/Pupils Undergraduate <5millions PSS5
## 6 Students/Pupils High.school <5millions PSS5
# Creat dat_PSS6 - cot 3 cua SEM
dat_PSS6 <- SEM [, c(1,2,3,4,5,6,7,20,85,86,87,88,89,90,91,92,93)]
head(dat_PSS6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS6 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS6)
## [1] 854 17
size <- 854
dat_PSS6$BPE <- rep("PSS6", size = size) # Tạo biến mới BPE
names(dat_PSS6)[names(dat_PSS6) == "PSS6"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS6
## 2 Students/Pupils Undergraduate <5millions PSS6
## 3 Students/Pupils Undergraduate <5millions PSS6
## 4 Students/Pupils Undergraduate <5millions PSS6
## 5 Students/Pupils Undergraduate <5millions PSS6
## 6 Students/Pupils High.school <5millions PSS6
# Creat dat_PSS7 - cot 3 cua SEM
dat_PSS7 <- SEM [, c(1,2,3,4,5,6,7,21,85,86,87,88,89,90,91,92,93)]
head(dat_PSS7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSS7 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSS7)
## [1] 854 17
size <- 854
dat_PSS7$BPE <- rep("PSS7", size = size) # Tạo biến mới BPE
names(dat_PSS7)[names(dat_PSS7) == "PSS7"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSS7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSS7
## 2 Students/Pupils Undergraduate <5millions PSS7
## 3 Students/Pupils Undergraduate <5millions PSS7
## 4 Students/Pupils Undergraduate <5millions PSS7
## 5 Students/Pupils Undergraduate <5millions PSS7
## 6 Students/Pupils High.school <5millions PSS7
## Creat dat_PSB1 - cot 3 cua SEM
dat_PSB1 <- SEM [, c(1,2,3,4,5,6,7,22,85,86,87,88,89,90,91,92,93)]
head(dat_PSB1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB1)
## [1] 854 17
size <- 854
dat_PSB1$BPE <- rep("PSB1", size = size) # Tạo biến mới BPE
names(dat_PSB1)[names(dat_PSB1) == "PSB1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB1
## 2 Students/Pupils Undergraduate <5millions PSB1
## 3 Students/Pupils Undergraduate <5millions PSB1
## 4 Students/Pupils Undergraduate <5millions PSB1
## 5 Students/Pupils Undergraduate <5millions PSB1
## 6 Students/Pupils High.school <5millions PSB1
## Creat dat_PSB2 - cot 3 cua SEM
dat_PSB2 <- SEM [, c(1,2,3,4,5,6,7,23,85,86,87,88,89,90,91,92,93)]
head(dat_PSB2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB2)
## [1] 854 17
size <- 854
dat_PSB2$BPE <- rep("PSB2", size = size) # Tạo biến mới BPE
names(dat_PSB2)[names(dat_PSB2) == "PSB2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB2
## 2 Students/Pupils Undergraduate <5millions PSB2
## 3 Students/Pupils Undergraduate <5millions PSB2
## 4 Students/Pupils Undergraduate <5millions PSB2
## 5 Students/Pupils Undergraduate <5millions PSB2
## 6 Students/Pupils High.school <5millions PSB2
# Creat dat_PSB3 - cot 3 cua SEM
dat_PSB3 <- SEM [, c(1,2,3,4,5,6,7,24,85,86,87,88,89,90,91,92,93)]
head(dat_PSB3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB3)
## [1] 854 17
size <- 854
dat_PSB3$BPE <- rep("PSB3", size = size) # Tạo biến mới BPE
names(dat_PSB3)[names(dat_PSB3) == "PSB3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB3
## 2 Students/Pupils Undergraduate <5millions PSB3
## 3 Students/Pupils Undergraduate <5millions PSB3
## 4 Students/Pupils Undergraduate <5millions PSB3
## 5 Students/Pupils Undergraduate <5millions PSB3
## 6 Students/Pupils High.school <5millions PSB3
# Creat dat_PSB4 - cot 3 cua SEM
dat_PSB4 <- SEM [, c(1,2,3,4,5,6,7,25,85,86,87,88,89,90,91,92,93)]
head(dat_PSB4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB4)
## [1] 854 17
size <- 854
dat_PSB4$BPE <- rep("PSB4", size = size) # Tạo biến mới BPE
names(dat_PSB4)[names(dat_PSB4) == "PSB4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB4
## 2 Students/Pupils Undergraduate <5millions PSB4
## 3 Students/Pupils Undergraduate <5millions PSB4
## 4 Students/Pupils Undergraduate <5millions PSB4
## 5 Students/Pupils Undergraduate <5millions PSB4
## 6 Students/Pupils High.school <5millions PSB4
# Creat dat_PSB5 - cot 3 cua SEM
dat_PSB5 <- SEM [, c(1,2,3,4,5,6,7,26,85,86,87,88,89,90,91,92,93)]
head(dat_PSB5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB5)
## [1] 854 17
size <- 854
dat_PSB5$BPE <- rep("PSB5", size = size) # Tạo biến mới BPE
names(dat_PSB5)[names(dat_PSB5) == "PSB5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB5
## 2 Students/Pupils Undergraduate <5millions PSB5
## 3 Students/Pupils Undergraduate <5millions PSB5
## 4 Students/Pupils Undergraduate <5millions PSB5
## 5 Students/Pupils Undergraduate <5millions PSB5
## 6 Students/Pupils High.school <5millions PSB5
# Creat dat_PSB6 - cot 3 cua SEM
dat_PSB6 <- SEM [, c(1,2,3,4,5,6,7,27,85,86,87,88,89,90,91,92,93)]
head(dat_PSB6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB6 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB6)
## [1] 854 17
size <- 854
dat_PSB6$BPE <- rep("PSB6", size = size) # Tạo biến mới BPE
names(dat_PSB6)[names(dat_PSB6) == "PSB6"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB6
## 2 Students/Pupils Undergraduate <5millions PSB6
## 3 Students/Pupils Undergraduate <5millions PSB6
## 4 Students/Pupils Undergraduate <5millions PSB6
## 5 Students/Pupils Undergraduate <5millions PSB6
## 6 Students/Pupils High.school <5millions PSB6
# Creat dat_PSB7 - cot 3 cua SEM
dat_PSB7 <- SEM [, c(1,2,3,4,5,6,7,28,85,86,87,88,89,90,91,92,93)]
head(dat_PSB7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB7 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 7 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB7)
## [1] 854 17
size <- 854
dat_PSB7$BPE <- rep("PSB7", size = size) # Tạo biến mới BPE
names(dat_PSB7)[names(dat_PSB7) == "PSB7"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 7 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB7
## 2 Students/Pupils Undergraduate <5millions PSB7
## 3 Students/Pupils Undergraduate <5millions PSB7
## 4 Students/Pupils Undergraduate <5millions PSB7
## 5 Students/Pupils Undergraduate <5millions PSB7
## 6 Students/Pupils High.school <5millions PSB7
# Creat dat_PSB8 - cot 3 cua SEM
dat_PSB8 <- SEM [, c(1,2,3,4,5,6,7,29,85,86,87,88,89,90,91,92,93)]
head(dat_PSB8)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSB8 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSB8)
## [1] 854 17
size <- 854
dat_PSB8$BPE <- rep("PSB8", size = size) # Tạo biến mới BPE
names(dat_PSB8)[names(dat_PSB8) == "PSB8"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSB8)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSB8
## 2 Students/Pupils Undergraduate <5millions PSB8
## 3 Students/Pupils Undergraduate <5millions PSB8
## 4 Students/Pupils Undergraduate <5millions PSB8
## 5 Students/Pupils Undergraduate <5millions PSB8
## 6 Students/Pupils High.school <5millions PSB8
## Creat dat_PQT1 - cot 3 cua SEM
dat_PQT1 <- SEM [, c(1,2,3,4,5,6,7,30,85,86,87,88,89,90,91,92,93)]
head(dat_PQT1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQT1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQT1)
## [1] 854 17
size <- 854
dat_PQT1$BPE <- rep("PQT1", size = size) # Tạo biến mới BPE
names(dat_PQT1)[names(dat_PQT1) == "PQT1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQT1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQT1
## 2 Students/Pupils Undergraduate <5millions PQT1
## 3 Students/Pupils Undergraduate <5millions PQT1
## 4 Students/Pupils Undergraduate <5millions PQT1
## 5 Students/Pupils Undergraduate <5millions PQT1
## 6 Students/Pupils High.school <5millions PQT1
## Creat dat_PQT2 - cot 3 cua SEM
dat_PQT2 <- SEM [, c(1,2,3,4,5,6,7,31,85,86,87,88,89,90,91,92,93)]
head(dat_PQT2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQT2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQT2)
## [1] 854 17
size <- 854
dat_PQT2$BPE <- rep("PQT2", size = size) # Tạo biến mới BPE
names(dat_PQT2)[names(dat_PQT2) == "PQT2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQT2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQT2
## 2 Students/Pupils Undergraduate <5millions PQT2
## 3 Students/Pupils Undergraduate <5millions PQT2
## 4 Students/Pupils Undergraduate <5millions PQT2
## 5 Students/Pupils Undergraduate <5millions PQT2
## 6 Students/Pupils High.school <5millions PQT2
# Creat dat_PQT3 - cot 3 cua SEM
dat_PQT3 <- SEM [, c(1,2,3,4,5,6,7,32,85,86,87,88,89,90,91,92,93)]
head(dat_PQT3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQT3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQT3)
## [1] 854 17
size <- 854
dat_PQT3$BPE <- rep("PQT3", size = size) # Tạo biến mới BPE
names(dat_PQT3)[names(dat_PQT3) == "PQT3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQT3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQT3
## 2 Students/Pupils Undergraduate <5millions PQT3
## 3 Students/Pupils Undergraduate <5millions PQT3
## 4 Students/Pupils Undergraduate <5millions PQT3
## 5 Students/Pupils Undergraduate <5millions PQT3
## 6 Students/Pupils High.school <5millions PQT3
# Creat dat_PQT4 - cot 3 cua SEM
dat_PQT4 <- SEM [, c(1,2,3,4,5,6,7,33,85,86,87,88,89,90,91,92,93)]
head(dat_PQT4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQT4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQT4)
## [1] 854 17
size <- 854
dat_PQT4$BPE <- rep("PQT4", size = size) # Tạo biến mới BPE
names(dat_PQT4)[names(dat_PQT4) == "PQT4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQT4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQT4
## 2 Students/Pupils Undergraduate <5millions PQT4
## 3 Students/Pupils Undergraduate <5millions PQT4
## 4 Students/Pupils Undergraduate <5millions PQT4
## 5 Students/Pupils Undergraduate <5millions PQT4
## 6 Students/Pupils High.school <5millions PQT4
## Creat dat_PQC1 - cot 3 cua SEM
dat_PQC1 <- SEM [, c(1,2,3,4,5,6,7,34,85,86,87,88,89,90,91,92,93)]
head(dat_PQC1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQC1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQC1)
## [1] 854 17
size <- 854
dat_PQC1$BPE <- rep("PQC1", size = size) # Tạo biến mới BPE
names(dat_PQC1)[names(dat_PQC1) == "PQC1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQC1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQC1
## 2 Students/Pupils Undergraduate <5millions PQC1
## 3 Students/Pupils Undergraduate <5millions PQC1
## 4 Students/Pupils Undergraduate <5millions PQC1
## 5 Students/Pupils Undergraduate <5millions PQC1
## 6 Students/Pupils High.school <5millions PQC1
## Creat dat_PQC2 - cot 3 cua SEM
dat_PQC2 <- SEM [, c(1,2,3,4,5,6,7,35,85,86,87,88,89,90,91,92,93)]
head(dat_PQC2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQC2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQC2)
## [1] 854 17
size <- 854
dat_PQC2$BPE <- rep("PQC2", size = size) # Tạo biến mới BPE
names(dat_PQC2)[names(dat_PQC2) == "PQC2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQC2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQC2
## 2 Students/Pupils Undergraduate <5millions PQC2
## 3 Students/Pupils Undergraduate <5millions PQC2
## 4 Students/Pupils Undergraduate <5millions PQC2
## 5 Students/Pupils Undergraduate <5millions PQC2
## 6 Students/Pupils High.school <5millions PQC2
# Creat dat_PQC3 - cot 3 cua SEM
dat_PQC3 <- SEM [, c(1,2,3,4,5,6,7,36,85,86,87,88,89,90,91,92,93)]
head(dat_PQC3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQC3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQC3)
## [1] 854 17
size <- 854
dat_PQC3$BPE <- rep("PQC3", size = size) # Tạo biến mới BPE
names(dat_PQC3)[names(dat_PQC3) == "PQC3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQC3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQC3
## 2 Students/Pupils Undergraduate <5millions PQC3
## 3 Students/Pupils Undergraduate <5millions PQC3
## 4 Students/Pupils Undergraduate <5millions PQC3
## 5 Students/Pupils Undergraduate <5millions PQC3
## 6 Students/Pupils High.school <5millions PQC3
# Creat dat_PQC4 - cot 3 cua SEM
dat_PQC4 <- SEM [, c(1,2,3,4,5,6,7,37,85,86,87,88,89,90,91,92,93)]
head(dat_PQC4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQC4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQC4)
## [1] 854 17
size <- 854
dat_PQC4$BPE <- rep("PQC4", size = size) # Tạo biến mới BPE
names(dat_PQC4)[names(dat_PQC4) == "PQC4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQC4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQC4
## 2 Students/Pupils Undergraduate <5millions PQC4
## 3 Students/Pupils Undergraduate <5millions PQC4
## 4 Students/Pupils Undergraduate <5millions PQC4
## 5 Students/Pupils Undergraduate <5millions PQC4
## 6 Students/Pupils High.school <5millions PQC4
# Creat dat_PQC5 - cot 3 cua SEM
dat_PQC5 <- SEM [, c(1,2,3,4,5,6,7,47,85,86,87,88,89,90,91,92,93)]
head(dat_PQC5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQC5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 2 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQC5)
## [1] 854 17
size <- 854
dat_PQC5$BPE <- rep("PQC5", size = size) # Tạo biến mới BPE
names(dat_PQC5)[names(dat_PQC5) == "PQC5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQC5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 2 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQC5
## 2 Students/Pupils Undergraduate <5millions PQC5
## 3 Students/Pupils Undergraduate <5millions PQC5
## 4 Students/Pupils Undergraduate <5millions PQC5
## 5 Students/Pupils Undergraduate <5millions PQC5
## 6 Students/Pupils High.school <5millions PQC5
## Creat dat_PQP1 - cot 3 cua SEM
dat_PQP1 <- SEM [, c(1,2,3,4,5,6,7,39,85,86,87,88,89,90,91,92,93)]
head(dat_PQP1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQP1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQP1)
## [1] 854 17
size <- 854
dat_PQP1$BPE <- rep("PQP1", size = size) # Tạo biến mới BPE
names(dat_PQP1)[names(dat_PQP1) == "PQP1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQP1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQP1
## 2 Students/Pupils Undergraduate <5millions PQP1
## 3 Students/Pupils Undergraduate <5millions PQP1
## 4 Students/Pupils Undergraduate <5millions PQP1
## 5 Students/Pupils Undergraduate <5millions PQP1
## 6 Students/Pupils High.school <5millions PQP1
## Creat dat_PQP2 - cot 3 cua SEM
dat_PQP2 <- SEM [, c(1,2,3,4,5,6,7,40,85,86,87,88,89,90,91,92,93)]
head(dat_PQP2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQP2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQP2)
## [1] 854 17
size <- 854
dat_PQP2$BPE <- rep("PQP2", size = size) # Tạo biến mới BPE
names(dat_PQP2)[names(dat_PQP2) == "PQP2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQP2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQP2
## 2 Students/Pupils Undergraduate <5millions PQP2
## 3 Students/Pupils Undergraduate <5millions PQP2
## 4 Students/Pupils Undergraduate <5millions PQP2
## 5 Students/Pupils Undergraduate <5millions PQP2
## 6 Students/Pupils High.school <5millions PQP2
# Creat dat_PQP3 - cot 3 cua SEM
dat_PQP3 <- SEM [, c(1,2,3,4,5,6,7,41,85,86,87,88,89,90,91,92,93)]
head(dat_PQP3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQP3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQP3)
## [1] 854 17
size <- 854
dat_PQP3$BPE <- rep("PQP3", size = size) # Tạo biến mới BPE
names(dat_PQP3)[names(dat_PQP3) == "PQP3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQP3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQP3
## 2 Students/Pupils Undergraduate <5millions PQP3
## 3 Students/Pupils Undergraduate <5millions PQP3
## 4 Students/Pupils Undergraduate <5millions PQP3
## 5 Students/Pupils Undergraduate <5millions PQP3
## 6 Students/Pupils High.school <5millions PQP3
# Creat dat_PQP4 - cot 3 cua SEM
dat_PQP4 <- SEM [, c(1,2,3,4,5,6,7,42,85,86,87,88,89,90,91,92,93)]
head(dat_PQP4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQP4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQP4)
## [1] 854 17
size <- 854
dat_PQP4$BPE <- rep("PQP4", size = size) # Tạo biến mới BPE
names(dat_PQP4)[names(dat_PQP4) == "PQP4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQP4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQP4
## 2 Students/Pupils Undergraduate <5millions PQP4
## 3 Students/Pupils Undergraduate <5millions PQP4
## 4 Students/Pupils Undergraduate <5millions PQP4
## 5 Students/Pupils Undergraduate <5millions PQP4
## 6 Students/Pupils High.school <5millions PQP4
## Creat dat_PQR1 - cot 3 cua SEM
dat_PQR1 <- SEM [, c(1,2,3,4,5,6,7,43,85,86,87,88,89,90,91,92,93)]
head(dat_PQR1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQR1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQR1)
## [1] 854 17
size <- 854
dat_PQR1$BPE <- rep("PQR1", size = size) # Tạo biến mới BPE
names(dat_PQR1)[names(dat_PQR1) == "PQR1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQR1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQR1
## 2 Students/Pupils Undergraduate <5millions PQR1
## 3 Students/Pupils Undergraduate <5millions PQR1
## 4 Students/Pupils Undergraduate <5millions PQR1
## 5 Students/Pupils Undergraduate <5millions PQR1
## 6 Students/Pupils High.school <5millions PQR1
## Creat dat_PQR2 - cot 3 cua SEM
dat_PQR2 <- SEM [, c(1,2,3,4,5,6,7,44,85,86,87,88,89,90,91,92,93)]
head(dat_PQR2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQR2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQR2)
## [1] 854 17
size <- 854
dat_PQR2$BPE <- rep("PQR2", size = size) # Tạo biến mới BPE
names(dat_PQR2)[names(dat_PQR2) == "PQR2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQR2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQR2
## 2 Students/Pupils Undergraduate <5millions PQR2
## 3 Students/Pupils Undergraduate <5millions PQR2
## 4 Students/Pupils Undergraduate <5millions PQR2
## 5 Students/Pupils Undergraduate <5millions PQR2
## 6 Students/Pupils High.school <5millions PQR2
# Creat dat_PQR3 - cot 3 cua SEM
dat_PQR3 <- SEM [, c(1,2,3,4,5,6,7,45,85,86,87,88,89,90,91,92,93)]
head(dat_PQR3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQR3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQR3)
## [1] 854 17
size <- 854
dat_PQR3$BPE <- rep("PQR3", size = size) # Tạo biến mới BPE
names(dat_PQR3)[names(dat_PQR3) == "PQR3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQR3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQR3
## 2 Students/Pupils Undergraduate <5millions PQR3
## 3 Students/Pupils Undergraduate <5millions PQR3
## 4 Students/Pupils Undergraduate <5millions PQR3
## 5 Students/Pupils Undergraduate <5millions PQR3
## 6 Students/Pupils High.school <5millions PQR3
# Creat dat_PQR4 - cot 3 cua SEM
dat_PQR4 <- SEM [, c(1,2,3,4,5,6,7,46,85,86,87,88,89,90,91,92,93)]
head(dat_PQR4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQR4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQR4)
## [1] 854 17
size <- 854
dat_PQR4$BPE <- rep("PQR4", size = size) # Tạo biến mới BPE
names(dat_PQR4)[names(dat_PQR4) == "PQR4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQR4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQR4
## 2 Students/Pupils Undergraduate <5millions PQR4
## 3 Students/Pupils Undergraduate <5millions PQR4
## 4 Students/Pupils Undergraduate <5millions PQR4
## 5 Students/Pupils Undergraduate <5millions PQR4
## 6 Students/Pupils High.school <5millions PQR4
# Creat dat_PQR5 - cot 3 cua SEM
dat_PQR5 <- SEM [, c(1,2,3,4,5,6,7,38,85,86,87,88,89,90,91,92,93)]
head(dat_PQR5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PQR5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PQR5)
## [1] 854 17
size <- 854
dat_PQR5$BPE <- rep("PQR5", size = size) # Tạo biến mới BPE
names(dat_PQR5)[names(dat_PQR5) == "PQR5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PQR5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 1 Never Never Never Never Male Single
## 4 4.00 4 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQR5
## 2 Students/Pupils Undergraduate <5millions PQR5
## 3 Students/Pupils Undergraduate <5millions PQR5
## 4 Students/Pupils Undergraduate <5millions PQR5
## 5 Students/Pupils Undergraduate <5millions PQR5
## 6 Students/Pupils High.school <5millions PQR5
## Creat dat_SAT1 - cot 3 cua SEM
dat_SAT1 <- SEM [, c(1,2,3,4,5,6,7,48,85,86,87,88,89,90,91,92,93)]
head(dat_SAT1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime SAT1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_SAT1)
## [1] 854 17
size <- 854
dat_SAT1$BPE <- rep("SAT1", size = size) # Tạo biến mới BPE
names(dat_SAT1)[names(dat_SAT1) == "SAT1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_SAT1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions SAT1
## 2 Students/Pupils Undergraduate <5millions SAT1
## 3 Students/Pupils Undergraduate <5millions SAT1
## 4 Students/Pupils Undergraduate <5millions SAT1
## 5 Students/Pupils Undergraduate <5millions SAT1
## 6 Students/Pupils High.school <5millions SAT1
## Creat dat_SAT2 - cot 3 cua SEM
dat_SAT2 <- SEM [, c(1,2,3,4,5,6,7,49,85,86,87,88,89,90,91,92,93)]
head(dat_SAT2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime SAT2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_SAT2)
## [1] 854 17
size <- 854
dat_SAT2$BPE <- rep("SAT2", size = size) # Tạo biến mới BPE
names(dat_SAT2)[names(dat_SAT2) == "SAT2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_SAT2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions SAT2
## 2 Students/Pupils Undergraduate <5millions SAT2
## 3 Students/Pupils Undergraduate <5millions SAT2
## 4 Students/Pupils Undergraduate <5millions SAT2
## 5 Students/Pupils Undergraduate <5millions SAT2
## 6 Students/Pupils High.school <5millions SAT2
# Creat dat_SAT3 - cot 3 cua SEM
dat_SAT3 <- SEM [, c(1,2,3,4,5,6,7,50,85,86,87,88,89,90,91,92,93)]
head(dat_SAT3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime SAT3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_SAT3)
## [1] 854 17
size <- 854
dat_SAT3$BPE <- rep("SAT3", size = size) # Tạo biến mới BPE
names(dat_SAT3)[names(dat_SAT3) == "SAT3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_SAT3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions SAT3
## 2 Students/Pupils Undergraduate <5millions SAT3
## 3 Students/Pupils Undergraduate <5millions SAT3
## 4 Students/Pupils Undergraduate <5millions SAT3
## 5 Students/Pupils Undergraduate <5millions SAT3
## 6 Students/Pupils High.school <5millions SAT3
## Creat dat_LOY1 - cot 7 cua SEM
dat_LOY1 <- SEM [, c(1,2,3,4,5,6,7,51,85,86,87,88,89,90,91,92,93)]
head(dat_LOY1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY1)
## [1] 854 17
size <- 854
dat_LOY1$BPE <- rep("LOY1", size = size) # Tạo biến mới BPE
names(dat_LOY1)[names(dat_LOY1) == "LOY1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY1
## 2 Students/Pupils Undergraduate <5millions LOY1
## 3 Students/Pupils Undergraduate <5millions LOY1
## 4 Students/Pupils Undergraduate <5millions LOY1
## 5 Students/Pupils Undergraduate <5millions LOY1
## 6 Students/Pupils High.school <5millions LOY1
## Creat dat_LOY2 - cot 8 cua SEM
dat_LOY2 <- SEM [, c(1,2,3,4,5,6,7,52,85,86,87,88,89,90,91,92,93)]
head(dat_LOY2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY2)
## [1] 854 17
size <- 854
dat_LOY2$BPE <- rep("LOY2", size = size) # Tạo biến mới BPE
names(dat_LOY2)[names(dat_LOY2) == "LOY2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY2
## 2 Students/Pupils Undergraduate <5millions LOY2
## 3 Students/Pupils Undergraduate <5millions LOY2
## 4 Students/Pupils Undergraduate <5millions LOY2
## 5 Students/Pupils Undergraduate <5millions LOY2
## 6 Students/Pupils High.school <5millions LOY2
## Creat dat_LOY3 - cot 9 cua SEM
dat_LOY3 <- SEM [, c(1,2,3,4,5,6,7,53,85,86,87,88,89,90,91,92,93)]
head(dat_LOY3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY3)
## [1] 854 17
size <- 854
dat_LOY3$BPE <- rep("LOY3", size = size) # Tạo biến mới BPE
names(dat_LOY3)[names(dat_LOY3) == "LOY3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY3
## 2 Students/Pupils Undergraduate <5millions LOY3
## 3 Students/Pupils Undergraduate <5millions LOY3
## 4 Students/Pupils Undergraduate <5millions LOY3
## 5 Students/Pupils Undergraduate <5millions LOY3
## 6 Students/Pupils High.school <5millions LOY3
## Creat dat_LOY4 - cot 10 cua SEM
dat_LOY4 <- SEM [, c(1,2,3,4,5,6,7,54,85,86,87,88,89,90,91,92,93)]
head(dat_LOY4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY4)
## [1] 854 17
size <- 854
dat_LOY4$BPE <- rep("LOY4", size = size) # Tạo biến mới BPE
names(dat_LOY4)[names(dat_LOY4) == "LOY4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY4
## 2 Students/Pupils Undergraduate <5millions LOY4
## 3 Students/Pupils Undergraduate <5millions LOY4
## 4 Students/Pupils Undergraduate <5millions LOY4
## 5 Students/Pupils Undergraduate <5millions LOY4
## 6 Students/Pupils High.school <5millions LOY4
## Creat dat_LOY5 - cot 11 cua SEM
dat_LOY5 <- SEM [, c(1,2,3,4,5,6,7,55,85,86,87,88,89,90,91,92,93)]
head(dat_LOY5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY5)
## [1] 854 17
size <- 854
dat_LOY5$BPE <- rep("LOY5", size = size) # Tạo biến mới BPE
names(dat_LOY5)[names(dat_LOY5) == "LOY5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY5
## 2 Students/Pupils Undergraduate <5millions LOY5
## 3 Students/Pupils Undergraduate <5millions LOY5
## 4 Students/Pupils Undergraduate <5millions LOY5
## 5 Students/Pupils Undergraduate <5millions LOY5
## 6 Students/Pupils High.school <5millions LOY5
## Creat dat_LOY6 - cot 12 cua SEM
dat_LOY6 <- SEM [, c(1,2,3,4,5,6,7,56,85,86,87,88,89,90,91,92,93)]
head(dat_LOY6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY6 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY6)
## [1] 854 17
size <- 854
dat_LOY6$BPE <- rep("LOY6", size = size) # Tạo biến mới BPE
names(dat_LOY6)[names(dat_LOY6) == "LOY6"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY6
## 2 Students/Pupils Undergraduate <5millions LOY6
## 3 Students/Pupils Undergraduate <5millions LOY6
## 4 Students/Pupils Undergraduate <5millions LOY6
## 5 Students/Pupils Undergraduate <5millions LOY6
## 6 Students/Pupils High.school <5millions LOY6
## Creat dat_LOY7 - cot 13 cua SEM
dat_LOY7 <- SEM [, c(1,2,3,4,5,6,7,57,85,86,87,88,89,90,91,92,93)]
head(dat_LOY7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime LOY7 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_LOY7)
## [1] 854 17
size <- 854
dat_LOY7$BPE <- rep("LOY7", size = size) # Tạo biến mới BPE
names(dat_LOY7)[names(dat_LOY7) == "LOY7"] <- "Res" # Đổi tên biến BST thành Res
head(dat_LOY7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions LOY7
## 2 Students/Pupils Undergraduate <5millions LOY7
## 3 Students/Pupils Undergraduate <5millions LOY7
## 4 Students/Pupils Undergraduate <5millions LOY7
## 5 Students/Pupils Undergraduate <5millions LOY7
## 6 Students/Pupils High.school <5millions LOY7
## Creat dat_IMA1 - cot 7 cua SEM
dat_IMA1 <- SEM [, c(1,2,3,4,5,6,7,58,85,86,87,88,89,90,91,92,93)]
head(dat_IMA1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime IMA1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_IMA1)
## [1] 854 17
size <- 854
dat_IMA1$BPE <- rep("IMA1", size = size) # Tạo biến mới BPE
names(dat_IMA1)[names(dat_IMA1) == "IMA1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_IMA1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA1
## 2 Students/Pupils Undergraduate <5millions IMA1
## 3 Students/Pupils Undergraduate <5millions IMA1
## 4 Students/Pupils Undergraduate <5millions IMA1
## 5 Students/Pupils Undergraduate <5millions IMA1
## 6 Students/Pupils High.school <5millions IMA1
## Creat dat_IMA2 - cot 8 cua SEM
dat_IMA2 <- SEM [, c(1,2,3,4,5,6,7,59,85,86,87,88,89,90,91,92,93)]
head(dat_IMA2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime IMA2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_IMA2)
## [1] 854 17
size <- 854
dat_IMA2$BPE <- rep("IMA2", size = size) # Tạo biến mới BPE
names(dat_IMA2)[names(dat_IMA2) == "IMA2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_IMA2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 3 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA2
## 2 Students/Pupils Undergraduate <5millions IMA2
## 3 Students/Pupils Undergraduate <5millions IMA2
## 4 Students/Pupils Undergraduate <5millions IMA2
## 5 Students/Pupils Undergraduate <5millions IMA2
## 6 Students/Pupils High.school <5millions IMA2
## Creat dat_IMA3 - cot 9 cua SEM
dat_IMA3 <- SEM [, c(1,2,3,4,5,6,7,60,85,86,87,88,89,90,91,92,93)]
head(dat_IMA3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime IMA3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_IMA3)
## [1] 854 17
size <- 854
dat_IMA3$BPE <- rep("IMA3", size = size) # Tạo biến mới BPE
names(dat_IMA3)[names(dat_IMA3) == "IMA3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_IMA3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA3
## 2 Students/Pupils Undergraduate <5millions IMA3
## 3 Students/Pupils Undergraduate <5millions IMA3
## 4 Students/Pupils Undergraduate <5millions IMA3
## 5 Students/Pupils Undergraduate <5millions IMA3
## 6 Students/Pupils High.school <5millions IMA3
## Creat dat_IMA4 - cot 10 cua SEM
dat_IMA4 <- SEM [, c(1,2,3,4,5,6,7,61,85,86,87,88,89,90,91,92,93)]
head(dat_IMA4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime IMA4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_IMA4)
## [1] 854 17
size <- 854
dat_IMA4$BPE <- rep("IMA4", size = size) # Tạo biến mới BPE
names(dat_IMA4)[names(dat_IMA4) == "IMA4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_IMA4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA4
## 2 Students/Pupils Undergraduate <5millions IMA4
## 3 Students/Pupils Undergraduate <5millions IMA4
## 4 Students/Pupils Undergraduate <5millions IMA4
## 5 Students/Pupils Undergraduate <5millions IMA4
## 6 Students/Pupils High.school <5millions IMA4
## Creat dat_IMA5 - cot 11 cua SEM
dat_IMA5 <- SEM [, c(1,2,3,4,5,6,7,62,85,86,87,88,89,90,91,92,93)]
head(dat_IMA5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime IMA5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_IMA5)
## [1] 854 17
size <- 854
dat_IMA5$BPE <- rep("IMA5", size = size) # Tạo biến mới BPE
names(dat_IMA5)[names(dat_IMA5) == "IMA5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_IMA5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA5
## 2 Students/Pupils Undergraduate <5millions IMA5
## 3 Students/Pupils Undergraduate <5millions IMA5
## 4 Students/Pupils Undergraduate <5millions IMA5
## 5 Students/Pupils Undergraduate <5millions IMA5
## 6 Students/Pupils High.school <5millions IMA5
## Creat dat_PHB1 - cot 7 cua SEM
dat_PHB1 <- SEM [, c(1,2,3,4,5,6,7,63,85,86,87,88,89,90,91,92,93)]
head(dat_PHB1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PHB1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PHB1)
## [1] 854 17
size <- 854
dat_PHB1$BPE <- rep("PHB1", size = size) # Tạo biến mới BPE
names(dat_PHB1)[names(dat_PHB1) == "PHB1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PHB1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB1
## 2 Students/Pupils Undergraduate <5millions PHB1
## 3 Students/Pupils Undergraduate <5millions PHB1
## 4 Students/Pupils Undergraduate <5millions PHB1
## 5 Students/Pupils Undergraduate <5millions PHB1
## 6 Students/Pupils High.school <5millions PHB1
## Creat dat_PHB2 - cot 8 cua SEM
dat_PHB2 <- SEM [, c(1,2,3,4,5,6,7,64,85,86,87,88,89,90,91,92,93)]
head(dat_PHB2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PHB2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PHB2)
## [1] 854 17
size <- 854
dat_PHB2$BPE <- rep("PHB2", size = size) # Tạo biến mới BPE
names(dat_PHB2)[names(dat_PHB2) == "PHB2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PHB2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB2
## 2 Students/Pupils Undergraduate <5millions PHB2
## 3 Students/Pupils Undergraduate <5millions PHB2
## 4 Students/Pupils Undergraduate <5millions PHB2
## 5 Students/Pupils Undergraduate <5millions PHB2
## 6 Students/Pupils High.school <5millions PHB2
## Creat dat_PHB3 - cot 9 cua SEM
dat_PHB3 <- SEM [, c(1,2,3,4,5,6,7,65,85,86,87,88,89,90,91,92,93)]
head(dat_PHB3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PHB3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 7 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PHB3)
## [1] 854 17
size <- 854
dat_PHB3$BPE <- rep("PHB3", size = size) # Tạo biến mới BPE
names(dat_PHB3)[names(dat_PHB3) == "PHB3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PHB3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 7 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB3
## 2 Students/Pupils Undergraduate <5millions PHB3
## 3 Students/Pupils Undergraduate <5millions PHB3
## 4 Students/Pupils Undergraduate <5millions PHB3
## 5 Students/Pupils Undergraduate <5millions PHB3
## 6 Students/Pupils High.school <5millions PHB3
## Creat dat_PHB4 - cot 10 cua SEM
dat_PHB4 <- SEM [, c(1,2,3,4,5,6,7,66,85,86,87,88,89,90,91,92,93)]
head(dat_PHB4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PHB4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PHB4)
## [1] 854 17
size <- 854
dat_PHB4$BPE <- rep("PHB4", size = size) # Tạo biến mới BPE
names(dat_PHB4)[names(dat_PHB4) == "PHB4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PHB4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB4
## 2 Students/Pupils Undergraduate <5millions PHB4
## 3 Students/Pupils Undergraduate <5millions PHB4
## 4 Students/Pupils Undergraduate <5millions PHB4
## 5 Students/Pupils Undergraduate <5millions PHB4
## 6 Students/Pupils High.school <5millions PHB4
## Creat dat_PHB5 - cot 11 cua SEM
dat_PHB5 <- SEM [, c(1,2,3,4,5,6,7,67,85,86,87,88,89,90,91,92,93)]
head(dat_PHB5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PHB5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PHB5)
## [1] 854 17
size <- 854
dat_PHB5$BPE <- rep("PHB5", size = size) # Tạo biến mới BPE
names(dat_PHB5)[names(dat_PHB5) == "PHB5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PHB5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 7 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB5
## 2 Students/Pupils Undergraduate <5millions PHB5
## 3 Students/Pupils Undergraduate <5millions PHB5
## 4 Students/Pupils Undergraduate <5millions PHB5
## 5 Students/Pupils Undergraduate <5millions PHB5
## 6 Students/Pupils High.school <5millions PHB5
## Creat dat_PEB1 - cot 7 cua SEM
dat_PEB1 <- SEM [, c(1,2,3,4,5,6,7,68,85,86,87,88,89,90,91,92,93)]
head(dat_PEB1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PEB1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 7 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PEB1)
## [1] 854 17
size <- 854
dat_PEB1$BPE <- rep("PEB1", size = size) # Tạo biến mới BPE
names(dat_PEB1)[names(dat_PEB1) == "PEB1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PEB1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 7 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PEB1
## 2 Students/Pupils Undergraduate <5millions PEB1
## 3 Students/Pupils Undergraduate <5millions PEB1
## 4 Students/Pupils Undergraduate <5millions PEB1
## 5 Students/Pupils Undergraduate <5millions PEB1
## 6 Students/Pupils High.school <5millions PEB1
## Creat dat_PEB2 - cot 8 cua SEM
dat_PEB2 <- SEM [, c(1,2,3,4,5,6,7,69,85,86,87,88,89,90,91,92,93)]
head(dat_PEB2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PEB2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 7 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PEB2)
## [1] 854 17
size <- 854
dat_PEB2$BPE <- rep("PEB2", size = size) # Tạo biến mới BPE
names(dat_PEB2)[names(dat_PEB2) == "PEB2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PEB2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 7 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PEB2
## 2 Students/Pupils Undergraduate <5millions PEB2
## 3 Students/Pupils Undergraduate <5millions PEB2
## 4 Students/Pupils Undergraduate <5millions PEB2
## 5 Students/Pupils Undergraduate <5millions PEB2
## 6 Students/Pupils High.school <5millions PEB2
## Creat dat_PEB3 - cot 9 cua SEM
dat_PEB3 <- SEM [, c(1,2,3,4,5,6,7,70,85,86,87,88,89,90,91,92,93)]
head(dat_PEB3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PEB3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PEB3)
## [1] 854 17
size <- 854
dat_PEB3$BPE <- rep("PEB3", size = size) # Tạo biến mới BPE
names(dat_PEB3)[names(dat_PEB3) == "PEB3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PEB3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 6 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PEB3
## 2 Students/Pupils Undergraduate <5millions PEB3
## 3 Students/Pupils Undergraduate <5millions PEB3
## 4 Students/Pupils Undergraduate <5millions PEB3
## 5 Students/Pupils Undergraduate <5millions PEB3
## 6 Students/Pupils High.school <5millions PEB3
## Creat dat_PEB4 - cot 10 cua SEM
dat_PEB4 <- SEM [, c(1,2,3,4,5,6,7,71,85,86,87,88,89,90,91,92,93)]
head(dat_PEB4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PEB4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PEB4)
## [1] 854 17
size <- 854
dat_PEB4$BPE <- rep("PEB4", size = size) # Tạo biến mới BPE
names(dat_PEB4)[names(dat_PEB4) == "PEB4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PEB4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PEB4
## 2 Students/Pupils Undergraduate <5millions PEB4
## 3 Students/Pupils Undergraduate <5millions PEB4
## 4 Students/Pupils Undergraduate <5millions PEB4
## 5 Students/Pupils Undergraduate <5millions PEB4
## 6 Students/Pupils High.school <5millions PEB4
## Creat dat_PDE1 - cot 7 cua SEM
dat_PDE1 <- SEM [, c(1,2,3,4,5,6,7,72,85,86,87,88,89,90,91,92,93)]
head(dat_PDE1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 3 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE1)
## [1] 854 17
size <- 854
dat_PDE1$BPE <- rep("PDE1", size = size) # Tạo biến mới BPE
names(dat_PDE1)[names(dat_PDE1) == "PDE1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 3 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE1
## 2 Students/Pupils Undergraduate <5millions PDE1
## 3 Students/Pupils Undergraduate <5millions PDE1
## 4 Students/Pupils Undergraduate <5millions PDE1
## 5 Students/Pupils Undergraduate <5millions PDE1
## 6 Students/Pupils High.school <5millions PDE1
## Creat dat_PDE2 - cot 8 cua SEM
dat_PDE2 <- SEM [, c(1,2,3,4,5,6,7,73,85,86,87,88,89,90,91,92,93)]
head(dat_PDE2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE2)
## [1] 854 17
size <- 854
dat_PDE2$BPE <- rep("PDE2", size = size) # Tạo biến mới BPE
names(dat_PDE2)[names(dat_PDE2) == "PDE2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 5 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE2
## 2 Students/Pupils Undergraduate <5millions PDE2
## 3 Students/Pupils Undergraduate <5millions PDE2
## 4 Students/Pupils Undergraduate <5millions PDE2
## 5 Students/Pupils Undergraduate <5millions PDE2
## 6 Students/Pupils High.school <5millions PDE2
## Creat dat_PDE3 - cot 9 cua SEM
dat_PDE3 <- SEM [, c(1,2,3,4,5,6,7,74,85,86,87,88,89,90,91,92,93)]
head(dat_PDE3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE3)
## [1] 854 17
size <- 854
dat_PDE3$BPE <- rep("PDE3", size = size) # Tạo biến mới BPE
names(dat_PDE3)[names(dat_PDE3) == "PDE3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE3
## 2 Students/Pupils Undergraduate <5millions PDE3
## 3 Students/Pupils Undergraduate <5millions PDE3
## 4 Students/Pupils Undergraduate <5millions PDE3
## 5 Students/Pupils Undergraduate <5millions PDE3
## 6 Students/Pupils High.school <5millions PDE3
## Creat dat_PDE4 - cot 10 cua SEM
dat_PDE4 <- SEM [, c(1,2,3,4,5,6,7,75,85,86,87,88,89,90,91,92,93)]
head(dat_PDE4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE4 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE4)
## [1] 854 17
size <- 854
dat_PDE4$BPE <- rep("PDE4", size = size) # Tạo biến mới BPE
names(dat_PDE4)[names(dat_PDE4) == "PDE4"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE4)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE4
## 2 Students/Pupils Undergraduate <5millions PDE4
## 3 Students/Pupils Undergraduate <5millions PDE4
## 4 Students/Pupils Undergraduate <5millions PDE4
## 5 Students/Pupils Undergraduate <5millions PDE4
## 6 Students/Pupils High.school <5millions PDE4
## Creat dat_PDE5 - cot 11 cua SEM
dat_PDE5 <- SEM [, c(1,2,3,4,5,6,7,76,85,86,87,88,89,90,91,92,93)]
head(dat_PDE5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE5 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 2 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE5)
## [1] 854 17
size <- 854
dat_PDE5$BPE <- rep("PDE5", size = size) # Tạo biến mới BPE
names(dat_PDE5)[names(dat_PDE5) == "PDE5"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE5)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 2 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 1 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE5
## 2 Students/Pupils Undergraduate <5millions PDE5
## 3 Students/Pupils Undergraduate <5millions PDE5
## 4 Students/Pupils Undergraduate <5millions PDE5
## 5 Students/Pupils Undergraduate <5millions PDE5
## 6 Students/Pupils High.school <5millions PDE5
## Creat dat_PDE6 - cot 12 cua SEM
dat_PDE6 <- SEM [, c(1,2,3,4,5,6,7,77,85,86,87,88,89,90,91,92,93)]
head(dat_PDE6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE6 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE6)
## [1] 854 17
size <- 854
dat_PDE6$BPE <- rep("PDE6", size = size) # Tạo biến mới BPE
names(dat_PDE6)[names(dat_PDE6) == "PDE6"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE6)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE6
## 2 Students/Pupils Undergraduate <5millions PDE6
## 3 Students/Pupils Undergraduate <5millions PDE6
## 4 Students/Pupils Undergraduate <5millions PDE6
## 5 Students/Pupils Undergraduate <5millions PDE6
## 6 Students/Pupils High.school <5millions PDE6
## Creat dat_PDE7 - cot 13 cua SEM
dat_PDE7 <- SEM [, c(1,2,3,4,5,6,7,78,85,86,87,88,89,90,91,92,93)]
head(dat_PDE7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PDE7 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PDE7)
## [1] 854 17
size <- 854
dat_PDE7$BPE <- rep("PDE7", size = size) # Tạo biến mới BPE
names(dat_PDE7)[names(dat_PDE7) == "PDE7"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PDE7)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PDE7
## 2 Students/Pupils Undergraduate <5millions PDE7
## 3 Students/Pupils Undergraduate <5millions PDE7
## 4 Students/Pupils Undergraduate <5millions PDE7
## 5 Students/Pupils Undergraduate <5millions PDE7
## 6 Students/Pupils High.school <5millions PDE7
## Creat dat_PSO1 - cot 7 cua SEM
dat_PSO1 <- SEM [, c(1,2,3,4,5,6,7,79,85,86,87,88,89,90,91,92,93)]
head(dat_PSO1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSO1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSO1)
## [1] 854 17
size <- 854
dat_PSO1$BPE <- rep("PSO1", size = size) # Tạo biến mới BPE
names(dat_PSO1)[names(dat_PSO1) == "PSO1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSO1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSO1
## 2 Students/Pupils Undergraduate <5millions PSO1
## 3 Students/Pupils Undergraduate <5millions PSO1
## 4 Students/Pupils Undergraduate <5millions PSO1
## 5 Students/Pupils Undergraduate <5millions PSO1
## 6 Students/Pupils High.school <5millions PSO1
## Creat dat_PSO2 - cot 8 cua SEM
dat_PSO2 <- SEM [, c(1,2,3,4,5,6,7,80,85,86,87,88,89,90,91,92,93)]
head(dat_PSO2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSO2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSO2)
## [1] 854 17
size <- 854
dat_PSO2$BPE <- rep("PSO2", size = size) # Tạo biến mới BPE
names(dat_PSO2)[names(dat_PSO2) == "PSO2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSO2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSO2
## 2 Students/Pupils Undergraduate <5millions PSO2
## 3 Students/Pupils Undergraduate <5millions PSO2
## 4 Students/Pupils Undergraduate <5millions PSO2
## 5 Students/Pupils Undergraduate <5millions PSO2
## 6 Students/Pupils High.school <5millions PSO2
## Creat dat_PSO3 - cot 9 cua SEM
dat_PSO3 <- SEM [, c(1,2,3,4,5,6,7,81,85,86,87,88,89,90,91,92,93)]
head(dat_PSO3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PSO3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PSO3)
## [1] 854 17
size <- 854
dat_PSO3$BPE <- rep("PSO3", size = size) # Tạo biến mới BPE
names(dat_PSO3)[names(dat_PSO3) == "PSO3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PSO3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 4 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSO3
## 2 Students/Pupils Undergraduate <5millions PSO3
## 3 Students/Pupils Undergraduate <5millions PSO3
## 4 Students/Pupils Undergraduate <5millions PSO3
## 5 Students/Pupils Undergraduate <5millions PSO3
## 6 Students/Pupils High.school <5millions PSO3
## Creat dat_PVA1 - cot 7 cua SEM
dat_PVA1 <- SEM [, c(1,2,3,4,5,6,7,82,85,86,87,88,89,90,91,92,93)]
head(dat_PVA1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PVA1 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PVA1)
## [1] 854 17
size <- 854
dat_PVA1$BPE <- rep("PVA1", size = size) # Tạo biến mới BPE
names(dat_PVA1)[names(dat_PVA1) == "PVA1"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PVA1)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 6 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 6 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PVA1
## 2 Students/Pupils Undergraduate <5millions PVA1
## 3 Students/Pupils Undergraduate <5millions PVA1
## 4 Students/Pupils Undergraduate <5millions PVA1
## 5 Students/Pupils Undergraduate <5millions PVA1
## 6 Students/Pupils High.school <5millions PVA1
## Creat dat_PVA2 - cot 8 cua SEM
dat_PVA2 <- SEM [, c(1,2,3,4,5,6,7,83,85,86,87,88,89,90,91,92,93)]
head(dat_PVA2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PVA2 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PVA2)
## [1] 854 17
size <- 854
dat_PVA2$BPE <- rep("PVA2", size = size) # Tạo biến mới BPE
names(dat_PVA2)[names(dat_PVA2) == "PVA2"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PVA2)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 5 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 2 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PVA2
## 2 Students/Pupils Undergraduate <5millions PVA2
## 3 Students/Pupils Undergraduate <5millions PVA2
## 4 Students/Pupils Undergraduate <5millions PVA2
## 5 Students/Pupils Undergraduate <5millions PVA2
## 6 Students/Pupils High.school <5millions PVA2
## Creat dat_PVA3 - cot 9 cua SEM
dat_PVA3 <- SEM [, c(1,2,3,4,5,6,7,84,85,86,87,88,89,90,91,92,93)]
head(dat_PVA3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime PVA3 EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income
## 1 Students/Pupils Undergraduate <5millions
## 2 Students/Pupils Undergraduate <5millions
## 3 Students/Pupils Undergraduate <5millions
## 4 Students/Pupils Undergraduate <5millions
## 5 Students/Pupils Undergraduate <5millions
## 6 Students/Pupils High.school <5millions
dim(dat_PVA3)
## [1] 854 17
size <- 854
dat_PVA3$BPE <- rep("PVA3", size = size) # Tạo biến mới BPE
names(dat_PVA3)[names(dat_PVA3) == "PVA3"] <- "Res" # Đổi tên biến BST thành Res
head(dat_PVA3)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 5 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PVA3
## 2 Students/Pupils Undergraduate <5millions PVA3
## 3 Students/Pupils Undergraduate <5millions PVA3
## 4 Students/Pupils Undergraduate <5millions PVA3
## 5 Students/Pupils Undergraduate <5millions PVA3
## 6 Students/Pupils High.school <5millions PVA3
## Tạo dữ liệu likert từ 28 dữ liệu: dat_PSW1-7, dat_PSS1-7, dat_PSB1-8, dat_PQT1-4, dat_PQC1-5, dat_PQP1-4, dat_PQR1-5, dat_SAT1-3, dat_LOY1-7, dat_IMA1-5, dat_PHB1-5, dat_PEB1-4, dat_PDE1-7, dat_PSO1-3, dat_PVA1-3
B.Per <- rbind(dat_PSW1, dat_PSW2, dat_PSW3, dat_PSW4, dat_PSW5, dat_PSW6, dat_PSW7,dat_PSS1, dat_PSS2, dat_PSS3, dat_PSS4, dat_PSS5, dat_PSS6, dat_PSS7, dat_PSB1, dat_PSB2, dat_PSB3, dat_PSB4, dat_PSB5, dat_PSB6, dat_PSB7, dat_PSB8, dat_PQT1, dat_PQT2, dat_PQT3, dat_PQT4, dat_PQC1, dat_PQC2, dat_PQC3, dat_PQC4, dat_PQC5, dat_PQP1, dat_PQP2, dat_PQP3, dat_PQP4, dat_PQR1, dat_PQR2, dat_PQR3, dat_PQR4, dat_PQR5, dat_SAT1, dat_SAT2, dat_SAT3, dat_LOY1, dat_LOY2, dat_LOY3, dat_LOY4, dat_LOY5, dat_LOY6, dat_LOY7, dat_IMA1, dat_IMA2, dat_IMA3, dat_IMA4, dat_IMA5, dat_PHB1, dat_PHB2, dat_PHB3, dat_PHB4, dat_PHB5, dat_PEB1, dat_PEB2, dat_PEB3, dat_PEB4, dat_PDE1, dat_PDE2, dat_PDE3, dat_PDE4, dat_PDE5, dat_PDE6, dat_PDE7, dat_PSO1, dat_PSO2, dat_PSO3, dat_PVA1, dat_PVA2, dat_PVA3)
head(B.Per)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW1
## 2 Students/Pupils Undergraduate <5millions PSW1
## 3 Students/Pupils Undergraduate <5millions PSW1
## 4 Students/Pupils Undergraduate <5millions PSW1
## 5 Students/Pupils Undergraduate <5millions PSW1
## 6 Students/Pupils High.school <5millions PSW1
str(B.Per)
## 'data.frame': 65758 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 4 2 4 5 3 2 1 2 3 4 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(B.Per)
## [1] 65758 18
## Tạo dữ liệu likert theo constructs
B.Per_PSA <- rbind(dat_PSW1, dat_PSW2, dat_PSW3, dat_PSW4, dat_PSW5, dat_PSW6, dat_PSW7, dat_PSS1, dat_PSS2, dat_PSS3, dat_PSS4, dat_PSS5, dat_PSS6, dat_PSS7, dat_PSB1, dat_PSB2, dat_PSB3, dat_PSB4, dat_PSB5, dat_PSB6, dat_PSB7, dat_PSB8)
head(B.Per_PSA)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW1
## 2 Students/Pupils Undergraduate <5millions PSW1
## 3 Students/Pupils Undergraduate <5millions PSW1
## 4 Students/Pupils Undergraduate <5millions PSW1
## 5 Students/Pupils Undergraduate <5millions PSW1
## 6 Students/Pupils High.school <5millions PSW1
str(B.Per_PSA)
## 'data.frame': 18788 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 4 2 4 5 3 2 1 2 3 4 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(B.Per_PSA)
## [1] 18788 18
B.Per_PSQ <- rbind(dat_PQT1, dat_PQT2, dat_PQT3, dat_PQT4, dat_PQC1, dat_PQC2, dat_PQC3, dat_PQC4, dat_PQC5, dat_PQP1, dat_PQP2, dat_PQP3, dat_PQP4, dat_PQR1, dat_PQR2, dat_PQR3, dat_PQR4, dat_PQR5)
head(B.Per_PSQ)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQT1
## 2 Students/Pupils Undergraduate <5millions PQT1
## 3 Students/Pupils Undergraduate <5millions PQT1
## 4 Students/Pupils Undergraduate <5millions PQT1
## 5 Students/Pupils Undergraduate <5millions PQT1
## 6 Students/Pupils High.school <5millions PQT1
str(B.Per_PSQ)
## 'data.frame': 15372 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 6 4 2 6 6 4 2 5 5 7 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PQT1" "PQT1" "PQT1" "PQT1" ...
dim(B.Per_PSQ)
## [1] 15372 18
B.Per_S <- rbind(dat_PHB1, dat_PHB2, dat_PHB3, dat_PHB4, dat_PHB5, dat_PEB1, dat_PEB2, dat_PEB3, dat_PEB4, dat_PDE1, dat_PDE2, dat_PDE3, dat_PDE4, dat_PDE5, dat_PDE6, dat_PDE7, dat_PSO1, dat_PSO2, dat_PSO3)
head(B.Per_S)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB1
## 2 Students/Pupils Undergraduate <5millions PHB1
## 3 Students/Pupils Undergraduate <5millions PHB1
## 4 Students/Pupils Undergraduate <5millions PHB1
## 5 Students/Pupils Undergraduate <5millions PHB1
## 6 Students/Pupils High.school <5millions PHB1
str(B.Per_S)
## 'data.frame': 16226 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 6 3 5 5 5 4 3 6 6 7 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PHB1" "PHB1" "PHB1" "PHB1" ...
dim(B.Per_S)
## [1] 16226 18
B.Per_OR <- rbind(dat_IMA1, dat_IMA2, dat_IMA3, dat_IMA4, dat_IMA5, dat_PVA1, dat_PVA2, dat_PVA3, dat_SAT1, dat_SAT2, dat_SAT3, dat_LOY1, dat_LOY2, dat_LOY3, dat_LOY4, dat_LOY5, dat_LOY6, dat_LOY7)
head(B.Per_OR)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA1
## 2 Students/Pupils Undergraduate <5millions IMA1
## 3 Students/Pupils Undergraduate <5millions IMA1
## 4 Students/Pupils Undergraduate <5millions IMA1
## 5 Students/Pupils Undergraduate <5millions IMA1
## 6 Students/Pupils High.school <5millions IMA1
str(B.Per_OR)
## 'data.frame': 15372 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 6 4 4 5 5 4 2 6 5 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "IMA1" "IMA1" "IMA1" "IMA1" ...
dim(B.Per_OR)
## [1] 15372 18
# Data Bus perception of people in Da Nang
DN_SEM = subset(B.Per, CITY == "DaNang")
head(DN_SEM)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 449 26-35 DaNang >=3 days/week Working Normal Using.telephone
## 450 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 451 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 452 26-35 DaNang 2days/month-2days/week Working Peak-Hour Using.telephone
## 453 46-55 DaNang >=3 days/week Working Peak-Hour Others
## 454 16-25 DaNang >=3 days/week Working Peak-Hour Using.telephone
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 449 2.0 6 Never Never Never Never Male Married
## 450 1.5 6 Never Never Never Never Female Married
## 451 2.0 6 Never Never Never Never Female Married
## 452 1.0 1 Never Never Never Never Female Married
## 453 2.0 6 Never Never Never Never Female Married
## 454 1.0 6 Never Never Never Never Female Single
## Occupation Education Income BPE
## 449 Full.time.job Undergraduate 5-10millions PSW1
## 450 Full.time.job Undergraduate <5millions PSW1
## 451 Full.time.job Undergraduate <5millions PSW1
## 452 Full.time.job High.school 5-10millions PSW1
## 453 Full.time.job High.school 5-10millions PSW1
## 454 Full.time.job Postgraduate 5-10millions PSW1
str(DN_SEM)
## 'data.frame': 31262 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 2 4 4 2 4 1 1 2 1 2 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 1 1 1 1 1 1 1 1 1 1 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 1 1 2 1 1 1 1 1 2 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 1 1 1 1 1 1 1 1 2 5 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 2 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 1 4 4 1 6 1 1 1 3 4 ...
## $ TravelTime : num 2 1.5 2 1 2 1 1 0.5 1 1.33 ...
## $ Res : int 6 6 6 1 6 6 6 7 6 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 1 1 1 1 1 2 2 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 1 1 1 1 1 2 2 2 2 1 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 2 2 2 2 2 2 2 2 1 2 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 3 3 4 3 4 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 2 1 1 2 2 2 2 4 1 3 ...
## $ BPE : chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(DN_SEM)
## [1] 31262 18
DN_SEM = DN_SEM[ , c(8, 18)]
dim(DN_SEM)
## [1] 31262 2
head(DN_SEM)
## Res BPE
## 449 6 PSW1
## 450 6 PSW1
## 451 6 PSW1
## 452 1 PSW1
## 453 6 PSW1
## 454 6 PSW1
DN_SEM_PSA = subset(B.Per_PSA, CITY == "DaNang")
head(DN_SEM_PSA)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 449 26-35 DaNang >=3 days/week Working Normal Using.telephone
## 450 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 451 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 452 26-35 DaNang 2days/month-2days/week Working Peak-Hour Using.telephone
## 453 46-55 DaNang >=3 days/week Working Peak-Hour Others
## 454 16-25 DaNang >=3 days/week Working Peak-Hour Using.telephone
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 449 2.0 6 Never Never Never Never Male Married
## 450 1.5 6 Never Never Never Never Female Married
## 451 2.0 6 Never Never Never Never Female Married
## 452 1.0 1 Never Never Never Never Female Married
## 453 2.0 6 Never Never Never Never Female Married
## 454 1.0 6 Never Never Never Never Female Single
## Occupation Education Income BPE
## 449 Full.time.job Undergraduate 5-10millions PSW1
## 450 Full.time.job Undergraduate <5millions PSW1
## 451 Full.time.job Undergraduate <5millions PSW1
## 452 Full.time.job High.school 5-10millions PSW1
## 453 Full.time.job High.school 5-10millions PSW1
## 454 Full.time.job Postgraduate 5-10millions PSW1
str(DN_SEM_PSA)
## 'data.frame': 8932 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 2 4 4 2 4 1 1 2 1 2 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 1 1 1 1 1 1 1 1 1 1 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 1 1 2 1 1 1 1 1 2 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 1 1 1 1 1 1 1 1 2 5 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 2 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 1 4 4 1 6 1 1 1 3 4 ...
## $ TravelTime : num 2 1.5 2 1 2 1 1 0.5 1 1.33 ...
## $ Res : int 6 6 6 1 6 6 6 7 6 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 1 1 1 1 1 2 2 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 1 1 1 1 1 2 2 2 2 1 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 2 2 2 2 2 2 2 2 1 2 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 3 3 4 3 4 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 2 1 1 2 2 2 2 4 1 3 ...
## $ BPE : chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(DN_SEM_PSA)
## [1] 8932 18
DN_SEM_PSA = DN_SEM_PSA[ , c(8, 18)]
dim(DN_SEM_PSA)
## [1] 8932 2
head(DN_SEM_PSA)
## Res BPE
## 449 6 PSW1
## 450 6 PSW1
## 451 6 PSW1
## 452 1 PSW1
## 453 6 PSW1
## 454 6 PSW1
DN_SEM_PSQ = subset(B.Per_PSQ, CITY == "DaNang")
head(DN_SEM_PSQ)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 449 26-35 DaNang >=3 days/week Working Normal Using.telephone
## 450 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 451 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 452 26-35 DaNang 2days/month-2days/week Working Peak-Hour Using.telephone
## 453 46-55 DaNang >=3 days/week Working Peak-Hour Others
## 454 16-25 DaNang >=3 days/week Working Peak-Hour Using.telephone
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 449 2.0 6 Never Never Never Never Male Married
## 450 1.5 6 Never Never Never Never Female Married
## 451 2.0 6 Never Never Never Never Female Married
## 452 1.0 6 Never Never Never Never Female Married
## 453 2.0 6 Never Never Never Never Female Married
## 454 1.0 5 Never Never Never Never Female Single
## Occupation Education Income BPE
## 449 Full.time.job Undergraduate 5-10millions PQT1
## 450 Full.time.job Undergraduate <5millions PQT1
## 451 Full.time.job Undergraduate <5millions PQT1
## 452 Full.time.job High.school 5-10millions PQT1
## 453 Full.time.job High.school 5-10millions PQT1
## 454 Full.time.job Postgraduate 5-10millions PQT1
str(DN_SEM_PSQ)
## 'data.frame': 7308 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 2 4 4 2 4 1 1 2 1 2 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 1 1 1 1 1 1 1 1 1 1 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 1 1 2 1 1 1 1 1 2 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 1 1 1 1 1 1 1 1 2 5 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 2 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 1 4 4 1 6 1 1 1 3 4 ...
## $ TravelTime : num 2 1.5 2 1 2 1 1 0.5 1 1.33 ...
## $ Res : int 6 6 6 6 6 5 6 7 6 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 1 1 1 1 1 2 2 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 1 1 1 1 1 2 2 2 2 1 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 2 2 2 2 2 2 2 2 1 2 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 3 3 4 3 4 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 2 1 1 2 2 2 2 4 1 3 ...
## $ BPE : chr "PQT1" "PQT1" "PQT1" "PQT1" ...
dim(DN_SEM_PSQ)
## [1] 7308 18
DN_SEM_PSQ = DN_SEM_PSQ[ , c(8, 18)]
dim(DN_SEM_PSQ)
## [1] 7308 2
head(DN_SEM_PSQ)
## Res BPE
## 449 6 PQT1
## 450 6 PQT1
## 451 6 PQT1
## 452 6 PQT1
## 453 6 PQT1
## 454 5 PQT1
DN_SEM_S = subset(B.Per_S, CITY == "DaNang")
head(DN_SEM_S)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 449 26-35 DaNang >=3 days/week Working Normal Using.telephone
## 450 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 451 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 452 26-35 DaNang 2days/month-2days/week Working Peak-Hour Using.telephone
## 453 46-55 DaNang >=3 days/week Working Peak-Hour Others
## 454 16-25 DaNang >=3 days/week Working Peak-Hour Using.telephone
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 449 2.0 5 Never Never Never Never Male Married
## 450 1.5 5 Never Never Never Never Female Married
## 451 2.0 5 Never Never Never Never Female Married
## 452 1.0 5 Never Never Never Never Female Married
## 453 2.0 6 Never Never Never Never Female Married
## 454 1.0 6 Never Never Never Never Female Single
## Occupation Education Income BPE
## 449 Full.time.job Undergraduate 5-10millions PHB1
## 450 Full.time.job Undergraduate <5millions PHB1
## 451 Full.time.job Undergraduate <5millions PHB1
## 452 Full.time.job High.school 5-10millions PHB1
## 453 Full.time.job High.school 5-10millions PHB1
## 454 Full.time.job Postgraduate 5-10millions PHB1
str(DN_SEM_S)
## 'data.frame': 7714 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 2 4 4 2 4 1 1 2 1 2 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 1 1 1 1 1 1 1 1 1 1 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 1 1 2 1 1 1 1 1 2 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 1 1 1 1 1 1 1 1 2 5 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 2 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 1 4 4 1 6 1 1 1 3 4 ...
## $ TravelTime : num 2 1.5 2 1 2 1 1 0.5 1 1.33 ...
## $ Res : int 5 5 5 5 6 6 5 7 5 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 1 1 1 1 1 2 2 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 1 1 1 1 1 2 2 2 2 1 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 2 2 2 2 2 2 2 2 1 2 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 3 3 4 3 4 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 2 1 1 2 2 2 2 4 1 3 ...
## $ BPE : chr "PHB1" "PHB1" "PHB1" "PHB1" ...
dim(DN_SEM_S)
## [1] 7714 18
DN_SEM_S = DN_SEM_S[ , c(8, 18)]
dim(DN_SEM_S)
## [1] 7714 2
head(DN_SEM_S)
## Res BPE
## 449 5 PHB1
## 450 5 PHB1
## 451 5 PHB1
## 452 5 PHB1
## 453 6 PHB1
## 454 6 PHB1
DN_SEM_OR = subset(B.Per_OR, CITY == "DaNang")
head(DN_SEM_OR)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 449 26-35 DaNang >=3 days/week Working Normal Using.telephone
## 450 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 451 46-55 DaNang >=3 days/week Working Peak-Hour Nothing
## 452 26-35 DaNang 2days/month-2days/week Working Peak-Hour Using.telephone
## 453 46-55 DaNang >=3 days/week Working Peak-Hour Others
## 454 16-25 DaNang >=3 days/week Working Peak-Hour Using.telephone
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 449 2.0 6 Never Never Never Never Male Married
## 450 1.5 6 Never Never Never Never Female Married
## 451 2.0 6 Never Never Never Never Female Married
## 452 1.0 5 Never Never Never Never Female Married
## 453 2.0 6 Never Never Never Never Female Married
## 454 1.0 6 Never Never Never Never Female Single
## Occupation Education Income BPE
## 449 Full.time.job Undergraduate 5-10millions IMA1
## 450 Full.time.job Undergraduate <5millions IMA1
## 451 Full.time.job Undergraduate <5millions IMA1
## 452 Full.time.job High.school 5-10millions IMA1
## 453 Full.time.job High.school 5-10millions IMA1
## 454 Full.time.job Postgraduate 5-10millions IMA1
str(DN_SEM_OR)
## 'data.frame': 7308 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 2 4 4 2 4 1 1 2 1 2 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 1 1 1 1 1 1 1 1 1 1 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 1 1 2 1 1 1 1 1 2 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 1 1 1 1 1 1 1 1 2 5 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 2 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 1 4 4 1 6 1 1 1 3 4 ...
## $ TravelTime : num 2 1.5 2 1 2 1 1 0.5 1 1.33 ...
## $ Res : int 6 6 6 5 6 6 5 6 3 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 1 1 1 1 1 2 2 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 1 1 1 1 1 2 2 2 2 1 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 2 2 2 2 2 2 2 2 1 2 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 3 3 4 3 4 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 2 1 1 2 2 2 2 4 1 3 ...
## $ BPE : chr "IMA1" "IMA1" "IMA1" "IMA1" ...
dim(DN_SEM_OR)
## [1] 7308 18
DN_SEM_OR = DN_SEM_OR[ , c(8, 18)]
dim(DN_SEM_OR)
## [1] 7308 2
head(DN_SEM_OR)
## Res BPE
## 449 6 IMA1
## 450 6 IMA1
## 451 6 IMA1
## 452 5 IMA1
## 453 6 IMA1
## 454 6 IMA1
# Data Bus perception of people in Ho Chi Minh
HCM_SEM = subset(B.Per, CITY == "HoChiMinh")
head(HCM_SEM)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW1
## 2 Students/Pupils Undergraduate <5millions PSW1
## 3 Students/Pupils Undergraduate <5millions PSW1
## 4 Students/Pupils Undergraduate <5millions PSW1
## 5 Students/Pupils Undergraduate <5millions PSW1
## 6 Students/Pupils High.school <5millions PSW1
str(HCM_SEM)
## 'data.frame': 34496 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 4 2 4 5 3 2 1 2 3 4 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(HCM_SEM)
## [1] 34496 18
HCM_SEM = HCM_SEM[ , c(8, 18)]
dim(HCM_SEM)
## [1] 34496 2
head(HCM_SEM)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
HCM_SEM_PSA = subset(B.Per_PSA, CITY == "HoChiMinh")
head(HCM_SEM_PSA)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 4 Never Ever Never Ever Female Single
## 2 2.00 2 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 3 Never Ever Never Ever Male Single
## 6 2.00 2 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PSW1
## 2 Students/Pupils Undergraduate <5millions PSW1
## 3 Students/Pupils Undergraduate <5millions PSW1
## 4 Students/Pupils Undergraduate <5millions PSW1
## 5 Students/Pupils Undergraduate <5millions PSW1
## 6 Students/Pupils High.school <5millions PSW1
str(HCM_SEM_PSA)
## 'data.frame': 9856 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 4 2 4 5 3 2 1 2 3 4 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(HCM_SEM_PSA)
## [1] 9856 18
HCM_SEM_PSA = HCM_SEM_PSA[ , c(8, 18)]
dim(HCM_SEM_PSA)
## [1] 9856 2
head(HCM_SEM_PSA)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
HCM_SEM_PSQ = subset(B.Per_PSQ, CITY == "HoChiMinh")
head(HCM_SEM_PSQ)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 2 Never Never Never Never Male Single
## 4 4.00 6 Never Ever Never Ever Male Single
## 5 2.00 6 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PQT1
## 2 Students/Pupils Undergraduate <5millions PQT1
## 3 Students/Pupils Undergraduate <5millions PQT1
## 4 Students/Pupils Undergraduate <5millions PQT1
## 5 Students/Pupils Undergraduate <5millions PQT1
## 6 Students/Pupils High.school <5millions PQT1
str(HCM_SEM_PSQ)
## 'data.frame': 8064 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 6 4 2 6 6 4 2 5 5 7 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PQT1" "PQT1" "PQT1" "PQT1" ...
dim(HCM_SEM_PSQ)
## [1] 8064 18
HCM_SEM_PSQ = HCM_SEM_PSQ[ , c(8, 18)]
dim(HCM_SEM_PSQ)
## [1] 8064 2
head(HCM_SEM_PSQ)
## Res BPE
## 1 6 PQT1
## 2 4 PQT1
## 3 2 PQT1
## 4 6 PQT1
## 5 6 PQT1
## 6 4 PQT1
HCM_SEM_S = subset(B.Per_S, CITY == "HoChiMinh")
head(HCM_SEM_S)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 3 Never Never Ever Never Female Single
## 3 0.17 5 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions PHB1
## 2 Students/Pupils Undergraduate <5millions PHB1
## 3 Students/Pupils Undergraduate <5millions PHB1
## 4 Students/Pupils Undergraduate <5millions PHB1
## 5 Students/Pupils Undergraduate <5millions PHB1
## 6 Students/Pupils High.school <5millions PHB1
str(HCM_SEM_S)
## 'data.frame': 8512 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 6 3 5 5 5 4 3 6 6 7 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "PHB1" "PHB1" "PHB1" "PHB1" ...
dim(HCM_SEM_S)
## [1] 8512 18
HCM_SEM_S = HCM_SEM_S[ , c(8, 18)]
dim(HCM_SEM_S)
## [1] 8512 2
head(HCM_SEM_S)
## Res BPE
## 1 6 PHB1
## 2 3 PHB1
## 3 5 PHB1
## 4 5 PHB1
## 5 5 PHB1
## 6 4 PHB1
HCM_SEM_OR = subset(B.Per_OR, CITY == "HoChiMinh")
head(HCM_SEM_OR)
## AGE CITY FRE TripPurpose Departure TimeUseonBus
## 1 16-25 HoChiMinh >=3 days/week Studying Normal Nothing
## 2 16-25 HoChiMinh 2days/month-2days/week Entertaining Normal Nothing
## 3 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 4 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Using.telephone
## 5 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Nothing
## 6 16-25 HoChiMinh >=3 days/week Studying Peak-Hour Others
## TravelTime Res EC_Stop WC_Stop EC_Bus WC_Bus Gender MarriedStatus
## 1 3.00 6 Never Ever Never Ever Female Single
## 2 2.00 4 Never Never Ever Never Female Single
## 3 0.17 4 Never Never Never Never Male Single
## 4 4.00 5 Never Ever Never Ever Male Single
## 5 2.00 5 Never Ever Never Ever Male Single
## 6 2.00 4 Never Ever Never Ever Female Single
## Occupation Education Income BPE
## 1 Students/Pupils Undergraduate <5millions IMA1
## 2 Students/Pupils Undergraduate <5millions IMA1
## 3 Students/Pupils Undergraduate <5millions IMA1
## 4 Students/Pupils Undergraduate <5millions IMA1
## 5 Students/Pupils Undergraduate <5millions IMA1
## 6 Students/Pupils High.school <5millions IMA1
str(HCM_SEM_OR)
## 'data.frame': 8064 obs. of 18 variables:
## $ AGE : Factor w/ 5 levels "16-25","26-35",..: 1 1 1 1 1 1 1 3 1 1 ...
## $ CITY : Factor w/ 2 levels "DaNang","HoChiMinh": 2 2 2 2 2 2 2 2 2 2 ...
## $ FRE : Factor w/ 4 levels ">=3 days/week",..: 1 2 1 1 1 1 4 1 1 1 ...
## $ TripPurpose : Factor w/ 5 levels "Working","Studying",..: 2 4 2 2 2 2 4 1 2 2 ...
## $ Departure : Factor w/ 2 levels "Normal","Peak-Hour": 1 1 2 2 2 2 2 2 2 2 ...
## $ TimeUseonBus : Factor w/ 6 levels "Using.telephone",..: 4 4 4 1 4 6 1 4 4 3 ...
## $ TravelTime : num 3 2 0.17 4 2 2 1 2 2.5 1.5 ...
## $ Res : int 6 4 4 5 5 4 2 6 5 6 ...
## $ EC_Stop : Factor w/ 2 levels "Never","Ever": 1 1 1 1 1 1 1 1 1 1 ...
## $ WC_Stop : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ EC_Bus : Factor w/ 2 levels "Never","Ever": 1 2 1 1 1 1 1 1 1 1 ...
## $ WC_Bus : Factor w/ 2 levels "Never","Ever": 2 1 1 2 2 2 1 1 2 1 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 1 1 ...
## $ MarriedStatus: Factor w/ 2 levels "Married","Single": 2 2 2 2 2 2 2 1 2 2 ...
## $ Occupation : Factor w/ 7 levels "Students/Pupils",..: 1 1 1 1 1 1 1 2 1 1 ...
## $ Education : Factor w/ 5 levels "Secondary.school",..: 2 2 2 2 2 3 5 1 2 3 ...
## $ Income : Factor w/ 4 levels "<5millions","5-10millions",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ BPE : chr "IMA1" "IMA1" "IMA1" "IMA1" ...
dim(HCM_SEM_OR)
## [1] 8064 18
HCM_SEM_OR = HCM_SEM_OR[ , c(8, 18)]
dim(HCM_SEM_OR)
## [1] 8064 2
head(HCM_SEM_OR)
## Res BPE
## 1 6 IMA1
## 2 4 IMA1
## 3 4 IMA1
## 4 5 IMA1
## 5 5 IMA1
## 6 4 IMA1
# Data Bus perception of people in both Da Nang and Ho Chi Minh cities
DN_HCM_SEM = B.Per[, c(8, 18)]
str(DN_HCM_SEM)
## 'data.frame': 65758 obs. of 2 variables:
## $ Res: int 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(DN_HCM_SEM)
## [1] 65758 2
head(DN_HCM_SEM)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
DN_HCM_SEM_PSA = B.Per_PSA[, c(8, 18)]
str(DN_HCM_SEM_PSA)
## 'data.frame': 18788 obs. of 2 variables:
## $ Res: int 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: chr "PSW1" "PSW1" "PSW1" "PSW1" ...
dim(DN_HCM_SEM_PSA)
## [1] 18788 2
head(DN_HCM_SEM_PSA)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
DN_HCM_SEM_PSQ = B.Per_PSQ[, c(8, 18)]
str(DN_HCM_SEM_PSQ)
## 'data.frame': 15372 obs. of 2 variables:
## $ Res: int 6 4 2 6 6 4 2 5 5 7 ...
## $ BPE: chr "PQT1" "PQT1" "PQT1" "PQT1" ...
dim(DN_HCM_SEM_PSQ)
## [1] 15372 2
head(DN_HCM_SEM_PSQ)
## Res BPE
## 1 6 PQT1
## 2 4 PQT1
## 3 2 PQT1
## 4 6 PQT1
## 5 6 PQT1
## 6 4 PQT1
DN_HCM_SEM_S = B.Per_S[, c(8, 18)]
str(DN_HCM_SEM_S)
## 'data.frame': 16226 obs. of 2 variables:
## $ Res: int 6 3 5 5 5 4 3 6 6 7 ...
## $ BPE: chr "PHB1" "PHB1" "PHB1" "PHB1" ...
dim(DN_HCM_SEM_S)
## [1] 16226 2
head(DN_HCM_SEM_S)
## Res BPE
## 1 6 PHB1
## 2 3 PHB1
## 3 5 PHB1
## 4 5 PHB1
## 5 5 PHB1
## 6 4 PHB1
DN_HCM_SEM_OR = B.Per_OR[, c(8, 18)]
str(DN_HCM_SEM_OR)
## 'data.frame': 15372 obs. of 2 variables:
## $ Res: int 6 4 4 5 5 4 2 6 5 6 ...
## $ BPE: chr "IMA1" "IMA1" "IMA1" "IMA1" ...
dim(DN_HCM_SEM_OR)
## [1] 15372 2
head(DN_HCM_SEM_OR)
## Res BPE
## 1 6 IMA1
## 2 4 IMA1
## 3 4 IMA1
## 4 5 IMA1
## 5 5 IMA1
## 6 4 IMA1
3.2. Vẽ biểu đồ likert với dữ liệu chung Đà Nẵng và Hồ Chí Minh - Nhãn tiếng anh
# Plot Likert graph for people in both Da Nang and Ho Chi Minh cities
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.4 v dplyr 1.0.2
## v tidyr 1.1.2 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x tidyr::extract() masks magrittr::extract()
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## x purrr::set_names() masks magrittr::set_names()
library(compareGroups)
head(DN_HCM_SEM)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
dim(DN_HCM_SEM)
## [1] 65758 2
attach(DN_HCM_SEM)
DN_HCM_SEM = within(DN_HCM_SEM, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8", "PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7", "IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3", "PVA1", "PVA2", "PVA3"))
})
str(DN_HCM_SEM)
## 'data.frame': 65758 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 77 levels "PSW1","PSW2",..: 65 65 65 65 65 65 65 65 65 65 ...
summary(DN_HCM_SEM)
## Res BPE
## Very Disagree : 1642 PSW1 : 854
## Disagree : 3990 PSW2 : 854
## Quite Disagree: 3144 PSW3 : 854
## Normal : 8403 PSW4 : 854
## Quite Agree :12986 PSW5 : 854
## Agree :27133 PSW6 : 854
## Very Agree : 8460 (Other):60634
## t <- compareGroups(Res ~ BPE, data = DN_HCM_SEM1)
## createTable(t)
DN_HCM_SEM %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
# arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4
## [31] PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQR5 SAT1 SAT2 SAT3 LOY1 LOY2
## [46] LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5
## [61] PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1
## [76] PVA2 PVA3
## 77 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PVA3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 539 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 6 0.7 0.7%
## 2 PSW1 Disagree 18 2.11 2.11%
## 3 PSW1 Quite Disagree 32 3.75 3.75%
## 4 PSW1 Normal 154 18.0 18.03%
## 5 PSW1 Quite Agree 231 27.0 27.05%
## 6 PSW1 Agree 349 40.9 40.87%
## 7 PSW1 Very Agree 64 7.49 7.49%
## 8 PSW2 Very Disagree 11 1.29 1.29%
## 9 PSW2 Disagree 19 2.22 2.22%
## 10 PSW2 Quite Disagree 24 2.81 2.81%
## # ... with 529 more rows
library(extrafont)
## Registering fonts with R
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perception of passengers towards bus systems in urban areas of Viet Nam",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 6 0.7 0.7%
## 2 PSW2 Very Disagree 11 1.29 1.29%
## 3 PSW3 Very Disagree 11 1.29 1.29%
## 4 PSW4 Very Disagree 13 1.52 1.52%
## 5 PSW5 Very Disagree 6 0.7 0.7%
## 6 PSW6 Very Disagree 4 0.47 0.47%
## 7 PSW7 Very Disagree 6 0.7 0.7%
## 8 PSS1 Very Disagree 3 0.35 0.35%
## 9 PSS2 Very Disagree 13 1.52 1.52%
## 10 PSS3 Very Disagree 12 1.41 1.41%
## # ... with 67 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Disagree 18 2.11 2.11%
## 2 PSW2 Disagree 19 2.22 2.22%
## 3 PSW3 Disagree 11 1.29 1.29%
## 4 PSW4 Disagree 14 1.64 1.64%
## 5 PSW5 Disagree 21 2.46 2.46%
## 6 PSW6 Disagree 18 2.11 2.11%
## 7 PSW7 Disagree 22 2.58 2.58%
## 8 PSS1 Disagree 16 1.87 1.87%
## 9 PSS2 Disagree 17 1.99 1.99%
## 10 PSS3 Disagree 23 2.69 2.69%
## # ... with 67 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Disagree 32 3.75 3.75%
## 2 PSW2 Quite Disagree 24 2.81 2.81%
## 3 PSW3 Quite Disagree 19 2.22 2.22%
## 4 PSW4 Quite Disagree 25 2.93 2.93%
## 5 PSW5 Quite Disagree 19 2.22 2.22%
## 6 PSW6 Quite Disagree 18 2.11 2.11%
## 7 PSW7 Quite Disagree 15 1.76 1.76%
## 8 PSS1 Quite Disagree 18 2.11 2.11%
## 9 PSS2 Quite Disagree 30 3.51 3.51%
## 10 PSS3 Quite Disagree 25 2.93 2.93%
## # ... with 67 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Normal 154 18.0 18.03%
## 2 PSW2 Normal 157 18.4 18.38%
## 3 PSW3 Normal 128 15.0 14.99%
## 4 PSW4 Normal 114 13.4 13.35%
## 5 PSW5 Normal 104 12.2 12.18%
## 6 PSW6 Normal 112 13.1 13.11%
## 7 PSW7 Normal 98 11.5 11.48%
## 8 PSS1 Normal 91 10.7 10.66%
## 9 PSS2 Normal 128 15.0 14.99%
## 10 PSS3 Normal 109 12.8 12.76%
## # ... with 67 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Agree 231 27.0 27.05%
## 2 PSW2 Quite Agree 213 24.9 24.94%
## 3 PSW3 Quite Agree 206 24.1 24.12%
## 4 PSW4 Quite Agree 199 23.3 23.3%
## 5 PSW5 Quite Agree 203 23.8 23.77%
## 6 PSW6 Quite Agree 166 19.4 19.44%
## 7 PSW7 Quite Agree 169 19.8 19.79%
## 8 PSS1 Quite Agree 160 18.7 18.74%
## 9 PSS2 Quite Agree 212 24.8 24.82%
## 10 PSS3 Quite Agree 213 24.9 24.94%
## # ... with 67 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Agree 349 40.9 40.87%
## 2 PSW2 Agree 365 42.7 42.74%
## 3 PSW3 Agree 401 47.0 46.96%
## 4 PSW4 Agree 405 47.4 47.42%
## 5 PSW5 Agree 418 49.0 48.95%
## 6 PSW6 Agree 431 50.5 50.47%
## 7 PSW7 Agree 427 50 50%
## 8 PSS1 Agree 436 51.0 51.05%
## 9 PSS2 Agree 337 39.5 39.46%
## 10 PSS3 Agree 344 40.3 40.28%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 64 7.49 7.49%
## 2 PSW2 Very Agree 65 7.61 7.61%
## 3 PSW3 Very Agree 78 9.13 9.13%
## 4 PSW4 Very Agree 84 9.84 9.84%
## 5 PSW5 Very Agree 83 9.72 9.72%
## 6 PSW6 Very Agree 105 12.3 12.3%
## 7 PSW7 Very Agree 117 13.7 13.7%
## 8 PSS1 Very Agree 130 15.2 15.22%
## 9 PSS2 Very Agree 117 13.7 13.7%
## 10 PSS3 Very Agree 128 15.0 14.99%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 64 7.49 7.49%
## 2 PSW2 Very Agree 65 7.61 7.61%
## 3 PSW3 Very Agree 78 9.13 9.13%
## 4 PSW4 Very Agree 84 9.84 9.84%
## 5 PSW5 Very Agree 83 9.72 9.72%
## 6 PSW6 Very Agree 105 12.3 12.3%
## 7 PSW7 Very Agree 117 13.7 13.7%
## 8 PSS1 Very Agree 130 15.2 15.22%
## 9 PSS2 Very Agree 117 13.7 13.7%
## 10 PSS3 Very Agree 128 15.0 14.99%
## # ... with 67 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-35, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 2, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.3. Vẽ biểu đồ likert với dữ liệu chung Đà Nẵng và Hồ Chí Minh - Nhãn tiếng việt
# Nhan tieng viet
DN_HCM_SEM_v = within(DN_HCM_SEM, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8", "PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7", "IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3", "PVA1", "PVA2", "PVA3"))
})
str(DN_HCM_SEM_v)
## 'data.frame': 65758 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 77 levels "PSW1","PSW2",..: 65 65 65 65 65 65 65 65 65 65 ...
summary(DN_HCM_SEM_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 1642 PSW1 : 854
## Không d<U+1ED3>ng ý : 3990 PSW2 : 854
## Khá không d<U+1ED3>ng ý : 3144 PSW3 : 854
## Bình thu<U+1EDD>ng : 8403 PSW4 : 854
## Khá d<U+1ED3>ng ý :12986 PSW5 : 854
## Ð<U+1ED3>ng ý :27133 PSW6 : 854
## R<U+1EA5>t d<U+1ED3>ng ý : 8460 (Other):60634
## t <- compareGroups(Res ~ BPE, data = DN_HCM_SEM1)
## createTable(t)
DN_HCM_SEM_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
# arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4
## [31] PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQR5 SAT1 SAT2 SAT3 LOY1 LOY2
## [46] LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5
## [61] PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1
## [76] PVA2 PVA3
## 77 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PVA3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 539 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 2 PSW1 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 3 PSW1 Khá không d<U+1ED3>ng ý 32 3.75 3.75%
## 4 PSW1 Bình thu<U+1EDD>ng 154 18.0 18.03%
## 5 PSW1 Khá d<U+1ED3>ng ý 231 27.0 27.05%
## 6 PSW1 Ð<U+1ED3>ng ý 349 40.9 40.87%
## 7 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 64 7.49 7.49%
## 8 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 9 PSW2 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 10 PSW2 Khá không d<U+1ED3>ng ý 24 2.81 2.81%
## # ... with 529 more rows
library(extrafont)
theme_set(theme_minimal())
gg_viet <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn c\u1EE7a h\u00E0nh kh\u00E1ch v\u1EC1 h\u1EC7 th\u1ED1ng xe bu\u00FDt \u0111\u00F4 th\u1ECB Vi\u1EC7t Nam",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_viet
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 2 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 3 PSW3 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 4 PSW4 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 5 PSW5 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 6 PSW6 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.47 0.47%
## 7 PSW7 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 8 PSS1 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.35 0.35%
## 9 PSS2 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 10 PSS3 R<U+1EA5>t không d<U+1ED3>ng ý 12 1.41 1.41%
## # ... with 67 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 2 PSW2 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 3 PSW3 Không d<U+1ED3>ng ý 11 1.29 1.29%
## 4 PSW4 Không d<U+1ED3>ng ý 14 1.64 1.64%
## 5 PSW5 Không d<U+1ED3>ng ý 21 2.46 2.46%
## 6 PSW6 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 7 PSW7 Không d<U+1ED3>ng ý 22 2.58 2.58%
## 8 PSS1 Không d<U+1ED3>ng ý 16 1.87 1.87%
## 9 PSS2 Không d<U+1ED3>ng ý 17 1.99 1.99%
## 10 PSS3 Không d<U+1ED3>ng ý 23 2.69 2.69%
## # ... with 67 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá không d<U+1ED3>ng ý 32 3.75 3.75%
## 2 PSW2 Khá không d<U+1ED3>ng ý 24 2.81 2.81%
## 3 PSW3 Khá không d<U+1ED3>ng ý 19 2.22 2.22%
## 4 PSW4 Khá không d<U+1ED3>ng ý 25 2.93 2.93%
## 5 PSW5 Khá không d<U+1ED3>ng ý 19 2.22 2.22%
## 6 PSW6 Khá không d<U+1ED3>ng ý 18 2.11 2.11%
## 7 PSW7 Khá không d<U+1ED3>ng ý 15 1.76 1.76%
## 8 PSS1 Khá không d<U+1ED3>ng ý 18 2.11 2.11%
## 9 PSS2 Khá không d<U+1ED3>ng ý 30 3.51 3.51%
## 10 PSS3 Khá không d<U+1ED3>ng ý 25 2.93 2.93%
## # ... with 67 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Bình thu<U+1EDD>ng 154 18.0 18.03%
## 2 PSW2 Bình thu<U+1EDD>ng 157 18.4 18.38%
## 3 PSW3 Bình thu<U+1EDD>ng 128 15.0 14.99%
## 4 PSW4 Bình thu<U+1EDD>ng 114 13.4 13.35%
## 5 PSW5 Bình thu<U+1EDD>ng 104 12.2 12.18%
## 6 PSW6 Bình thu<U+1EDD>ng 112 13.1 13.11%
## 7 PSW7 Bình thu<U+1EDD>ng 98 11.5 11.48%
## 8 PSS1 Bình thu<U+1EDD>ng 91 10.7 10.66%
## 9 PSS2 Bình thu<U+1EDD>ng 128 15.0 14.99%
## 10 PSS3 Bình thu<U+1EDD>ng 109 12.8 12.76%
## # ... with 67 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá d<U+1ED3>ng ý 231 27.0 27.05%
## 2 PSW2 Khá d<U+1ED3>ng ý 213 24.9 24.94%
## 3 PSW3 Khá d<U+1ED3>ng ý 206 24.1 24.12%
## 4 PSW4 Khá d<U+1ED3>ng ý 199 23.3 23.3%
## 5 PSW5 Khá d<U+1ED3>ng ý 203 23.8 23.77%
## 6 PSW6 Khá d<U+1ED3>ng ý 166 19.4 19.44%
## 7 PSW7 Khá d<U+1ED3>ng ý 169 19.8 19.79%
## 8 PSS1 Khá d<U+1ED3>ng ý 160 18.7 18.74%
## 9 PSS2 Khá d<U+1ED3>ng ý 212 24.8 24.82%
## 10 PSS3 Khá d<U+1ED3>ng ý 213 24.9 24.94%
## # ... with 67 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Ð<U+1ED3>ng ý 349 40.9 40.87%
## 2 PSW2 Ð<U+1ED3>ng ý 365 42.7 42.74%
## 3 PSW3 Ð<U+1ED3>ng ý 401 47.0 46.96%
## 4 PSW4 Ð<U+1ED3>ng ý 405 47.4 47.42%
## 5 PSW5 Ð<U+1ED3>ng ý 418 49.0 48.95%
## 6 PSW6 Ð<U+1ED3>ng ý 431 50.5 50.47%
## 7 PSW7 Ð<U+1ED3>ng ý 427 50 50%
## 8 PSS1 Ð<U+1ED3>ng ý 436 51.0 51.05%
## 9 PSS2 Ð<U+1ED3>ng ý 337 39.5 39.46%
## 10 PSS3 Ð<U+1ED3>ng ý 344 40.3 40.28%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 64 7.49 7.49%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 65 7.61 7.61%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 78 9.13 9.13%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 84 9.84 9.84%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 83 9.72 9.72%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 105 12.3 12.3%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 130 15.2 15.22%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 128 15.0 14.99%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 64 7.49 7.49%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 65 7.61 7.61%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 78 9.13 9.13%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 84 9.84 9.84%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 83 9.72 9.72%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 105 12.3 12.3%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 130 15.2 15.22%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 128 15.0 14.99%
## # ... with 67 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_viet +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-35, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 2, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.4. Vẽ biểu đồ likert cho dữ liệu Đà Nẵng - Nhãn tiếng anh
# Plot Likert graph for people in Da Nang
library(tidyverse)
library(compareGroups)
head(DN_SEM)
## Res BPE
## 449 6 PSW1
## 450 6 PSW1
## 451 6 PSW1
## 452 1 PSW1
## 453 6 PSW1
## 454 6 PSW1
dim(DN_SEM)
## [1] 31262 2
attach(DN_SEM)
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_SEM = within(DN_SEM, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8", "PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7", "IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3", "PVA1", "PVA2", "PVA3"))
})
str(DN_SEM)
## 'data.frame': 31262 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 6 6 1 6 6 6 7 6 6 ...
## $ BPE: Factor w/ 77 levels "PSW1","PSW2",..: 65 65 65 65 65 65 65 65 65 65 ...
summary(DN_SEM)
## Res BPE
## Very Disagree : 290 PSW1 : 406
## Disagree : 879 PSW2 : 406
## Quite Disagree: 1302 PSW3 : 406
## Normal : 2657 PSW4 : 406
## Quite Agree : 7207 PSW5 : 406
## Agree :13915 PSW6 : 406
## Very Agree : 5012 (Other):28826
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
# arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4
## [31] PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQR5 SAT1 SAT2 SAT3 LOY1 LOY2
## [46] LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5
## [61] PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1
## [76] PVA2 PVA3
## 77 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PVA3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 513 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 1 0.25 0.25%
## 2 PSW1 Disagree 1 0.25 0.25%
## 3 PSW1 Quite Disagree 11 2.71 2.71%
## 4 PSW1 Normal 54 13.3 13.3%
## 5 PSW1 Quite Agree 138 34.0 33.99%
## 6 PSW1 Agree 169 41.6 41.63%
## 7 PSW1 Very Agree 32 7.88 7.88%
## 8 PSW2 Disagree 1 0.25 0.25%
## 9 PSW2 Quite Disagree 6 1.48 1.48%
## 10 PSW2 Normal 46 11.3 11.33%
## # ... with 503 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perception of passengers towards bus systems in Da Nang",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 58 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 1 0.25 0.25%
## 2 PSS2 Very Disagree 1 0.25 0.25%
## 3 PSS3 Very Disagree 1 0.25 0.25%
## 4 PSS4 Very Disagree 1 0.25 0.25%
## 5 PSS5 Very Disagree 1 0.25 0.25%
## 6 PSS6 Very Disagree 6 1.48 1.48%
## 7 PSS7 Very Disagree 1 0.25 0.25%
## 8 PSB1 Very Disagree 3 0.74 0.74%
## 9 PSB2 Very Disagree 1 0.25 0.25%
## 10 PSB3 Very Disagree 2 0.49 0.49%
## # ... with 48 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 70 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Disagree 1 0.25 0.25%
## 2 PSW2 Disagree 1 0.25 0.25%
## 3 PSW3 Disagree 1 0.25 0.25%
## 4 PSW5 Disagree 1 0.25 0.25%
## 5 PSW6 Disagree 2 0.49 0.49%
## 6 PSW7 Disagree 1 0.25 0.25%
## 7 PSS1 Disagree 1 0.25 0.25%
## 8 PSS3 Disagree 2 0.49 0.49%
## 9 PSS4 Disagree 14 3.45 3.45%
## 10 PSS5 Disagree 1 0.25 0.25%
## # ... with 60 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Disagree 11 2.71 2.71%
## 2 PSW2 Quite Disagree 6 1.48 1.48%
## 3 PSW3 Quite Disagree 3 0.74 0.74%
## 4 PSW4 Quite Disagree 7 1.72 1.72%
## 5 PSW5 Quite Disagree 4 0.99 0.99%
## 6 PSW6 Quite Disagree 5 1.23 1.23%
## 7 PSW7 Quite Disagree 5 1.23 1.23%
## 8 PSS1 Quite Disagree 4 0.99 0.99%
## 9 PSS2 Quite Disagree 16 3.94 3.94%
## 10 PSS3 Quite Disagree 12 2.96 2.96%
## # ... with 67 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Normal 54 13.3 13.3%
## 2 PSW2 Normal 46 11.3 11.33%
## 3 PSW3 Normal 39 9.61 9.61%
## 4 PSW4 Normal 26 6.4 6.4%
## 5 PSW5 Normal 23 5.67 5.67%
## 6 PSW6 Normal 25 6.16 6.16%
## 7 PSW7 Normal 23 5.67 5.67%
## 8 PSS1 Normal 30 7.39 7.39%
## 9 PSS2 Normal 38 9.36 9.36%
## 10 PSS3 Normal 31 7.64 7.64%
## # ... with 67 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Agree 138 34.0 33.99%
## 2 PSW2 Quite Agree 113 27.8 27.83%
## 3 PSW3 Quite Agree 106 26.1 26.11%
## 4 PSW4 Quite Agree 102 25.1 25.12%
## 5 PSW5 Quite Agree 96 23.6 23.65%
## 6 PSW6 Quite Agree 90 22.2 22.17%
## 7 PSW7 Quite Agree 86 21.2 21.18%
## 8 PSS1 Quite Agree 74 18.2 18.23%
## 9 PSS2 Quite Agree 122 30.0 30.05%
## 10 PSS3 Quite Agree 114 28.1 28.08%
## # ... with 67 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Agree 169 41.6 41.63%
## 2 PSW2 Agree 207 51.0 50.99%
## 3 PSW3 Agree 214 52.7 52.71%
## 4 PSW4 Agree 220 54.2 54.19%
## 5 PSW5 Agree 231 56.9 56.9%
## 6 PSW6 Agree 219 53.9 53.94%
## 7 PSW7 Agree 221 54.4 54.43%
## 8 PSS1 Agree 219 53.9 53.94%
## 9 PSS2 Agree 160 39.4 39.41%
## 10 PSS3 Agree 167 41.1 41.13%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 32 7.88 7.88%
## 2 PSW2 Very Agree 33 8.13 8.13%
## 3 PSW3 Very Agree 43 10.6 10.59%
## 4 PSW4 Very Agree 51 12.6 12.56%
## 5 PSW5 Very Agree 51 12.6 12.56%
## 6 PSW6 Very Agree 65 16.0 16.01%
## 7 PSW7 Very Agree 70 17.2 17.24%
## 8 PSS1 Very Agree 78 19.2 19.21%
## 9 PSS2 Very Agree 69 17 17%
## 10 PSS3 Very Agree 79 19.5 19.46%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 32 7.88 7.88%
## 2 PSW2 Very Agree 33 8.13 8.13%
## 3 PSW3 Very Agree 43 10.6 10.59%
## 4 PSW4 Very Agree 51 12.6 12.56%
## 5 PSW5 Very Agree 51 12.6 12.56%
## 6 PSW6 Very Agree 65 16.0 16.01%
## 7 PSW7 Very Agree 70 17.2 17.24%
## 8 PSS1 Very Agree 78 19.2 19.21%
## 9 PSS2 Very Agree 69 17 17%
## 10 PSS3 Very Agree 79 19.5 19.46%
## # ... with 67 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 2, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.5. Vẽ biểu đồ likert cho dữ liệu Đà Nẵng - Nhãn tiếng việt
# Nhãm tiếng việt
DN_SEM_viet = within(DN_SEM, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8", "PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7", "IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3", "PVA1", "PVA2", "PVA3"))
})
str(DN_SEM_viet)
## 'data.frame': 31262 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 6 6 1 6 6 6 7 6 6 ...
## $ BPE: Factor w/ 77 levels "PSW1","PSW2",..: 65 65 65 65 65 65 65 65 65 65 ...
summary(DN_SEM_viet)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 290 PSW1 : 406
## Không d<U+1ED3>ng ý : 879 PSW2 : 406
## Khá không d<U+1ED3>ng ý : 1302 PSW3 : 406
## Bình thu<U+1EDD>ng : 2657 PSW4 : 406
## Khá d<U+1ED3>ng ý : 7207 PSW5 : 406
## Ð<U+1ED3>ng ý :13915 PSW6 : 406
## R<U+1EA5>t d<U+1ED3>ng ý : 5012 (Other):28826
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_viet %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
# arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4
## [31] PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQR5 SAT1 SAT2 SAT3 LOY1 LOY2
## [46] LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5
## [61] PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1
## [76] PVA2 PVA3
## 77 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PVA3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 513 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 2 PSW1 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 PSW1 Khá không d<U+1ED3>ng ý 11 2.71 2.71%
## 4 PSW1 Bình thu<U+1EDD>ng 54 13.3 13.3%
## 5 PSW1 Khá d<U+1ED3>ng ý 138 34.0 33.99%
## 6 PSW1 Ð<U+1ED3>ng ý 169 41.6 41.63%
## 7 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.88 7.88%
## 8 PSW2 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 9 PSW2 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 10 PSW2 Bình thu<U+1EDD>ng 46 11.3 11.33%
## # ... with 503 more rows
library(extrafont)
theme_set(theme_minimal())
gg_viet <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn c\u1EE7a h\u00E0nh kh\u00E1ch v\u1EC1 h\u1EC7 th\u1ED1ng xe bu\u00FDt \u0111\u00F4 th\u1ECB \u0110\u00E0 N\u1EB5ng",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_viet
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 58 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 2 PSS2 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 PSS3 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 4 PSS4 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 5 PSS5 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 6 PSS6 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.48 1.48%
## 7 PSS7 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 8 PSB1 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 9 PSB2 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 10 PSB3 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## # ... with 48 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 70 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 2 PSW2 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 PSW3 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 4 PSW5 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 5 PSW6 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 6 PSW7 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 7 PSS1 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 8 PSS3 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 9 PSS4 Không d<U+1ED3>ng ý 14 3.45 3.45%
## 10 PSS5 Không d<U+1ED3>ng ý 1 0.25 0.25%
## # ... with 60 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá không d<U+1ED3>ng ý 11 2.71 2.71%
## 2 PSW2 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 3 PSW3 Khá không d<U+1ED3>ng ý 3 0.74 0.74%
## 4 PSW4 Khá không d<U+1ED3>ng ý 7 1.72 1.72%
## 5 PSW5 Khá không d<U+1ED3>ng ý 4 0.99 0.99%
## 6 PSW6 Khá không d<U+1ED3>ng ý 5 1.23 1.23%
## 7 PSW7 Khá không d<U+1ED3>ng ý 5 1.23 1.23%
## 8 PSS1 Khá không d<U+1ED3>ng ý 4 0.99 0.99%
## 9 PSS2 Khá không d<U+1ED3>ng ý 16 3.94 3.94%
## 10 PSS3 Khá không d<U+1ED3>ng ý 12 2.96 2.96%
## # ... with 67 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Bình thu<U+1EDD>ng 54 13.3 13.3%
## 2 PSW2 Bình thu<U+1EDD>ng 46 11.3 11.33%
## 3 PSW3 Bình thu<U+1EDD>ng 39 9.61 9.61%
## 4 PSW4 Bình thu<U+1EDD>ng 26 6.4 6.4%
## 5 PSW5 Bình thu<U+1EDD>ng 23 5.67 5.67%
## 6 PSW6 Bình thu<U+1EDD>ng 25 6.16 6.16%
## 7 PSW7 Bình thu<U+1EDD>ng 23 5.67 5.67%
## 8 PSS1 Bình thu<U+1EDD>ng 30 7.39 7.39%
## 9 PSS2 Bình thu<U+1EDD>ng 38 9.36 9.36%
## 10 PSS3 Bình thu<U+1EDD>ng 31 7.64 7.64%
## # ... with 67 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá d<U+1ED3>ng ý 138 34.0 33.99%
## 2 PSW2 Khá d<U+1ED3>ng ý 113 27.8 27.83%
## 3 PSW3 Khá d<U+1ED3>ng ý 106 26.1 26.11%
## 4 PSW4 Khá d<U+1ED3>ng ý 102 25.1 25.12%
## 5 PSW5 Khá d<U+1ED3>ng ý 96 23.6 23.65%
## 6 PSW6 Khá d<U+1ED3>ng ý 90 22.2 22.17%
## 7 PSW7 Khá d<U+1ED3>ng ý 86 21.2 21.18%
## 8 PSS1 Khá d<U+1ED3>ng ý 74 18.2 18.23%
## 9 PSS2 Khá d<U+1ED3>ng ý 122 30.0 30.05%
## 10 PSS3 Khá d<U+1ED3>ng ý 114 28.1 28.08%
## # ... with 67 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Ð<U+1ED3>ng ý 169 41.6 41.63%
## 2 PSW2 Ð<U+1ED3>ng ý 207 51.0 50.99%
## 3 PSW3 Ð<U+1ED3>ng ý 214 52.7 52.71%
## 4 PSW4 Ð<U+1ED3>ng ý 220 54.2 54.19%
## 5 PSW5 Ð<U+1ED3>ng ý 231 56.9 56.9%
## 6 PSW6 Ð<U+1ED3>ng ý 219 53.9 53.94%
## 7 PSW7 Ð<U+1ED3>ng ý 221 54.4 54.43%
## 8 PSS1 Ð<U+1ED3>ng ý 219 53.9 53.94%
## 9 PSS2 Ð<U+1ED3>ng ý 160 39.4 39.41%
## 10 PSS3 Ð<U+1ED3>ng ý 167 41.1 41.13%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.88 7.88%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 33 8.13 8.13%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 43 10.6 10.59%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 70 17.2 17.24%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 78 19.2 19.21%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 69 17 17%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 79 19.5 19.46%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.88 7.88%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 33 8.13 8.13%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 43 10.6 10.59%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 70 17.2 17.24%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 78 19.2 19.21%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 69 17 17%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 79 19.5 19.46%
## # ... with 67 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_viet +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 2, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.6. Vẽ biểu đồ likert cho dữ liệu Hồ Chí Minh-Nhãn tiếng anh
# Plot Likert graph for people in Ho Chi Minh
library(tidyverse)
library(compareGroups)
head(HCM_SEM)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
dim(HCM_SEM)
## [1] 34496 2
attach(HCM_SEM)
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
HCM_SEM = within(HCM_SEM, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8", "PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7", "IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3", "PVA1", "PVA2", "PVA3"))
})
str(HCM_SEM)
## 'data.frame': 34496 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 77 levels "PSW1","PSW2",..: 65 65 65 65 65 65 65 65 65 65 ...
summary(HCM_SEM)
## Res BPE
## Very Disagree : 1352 PSW1 : 448
## Disagree : 3111 PSW2 : 448
## Quite Disagree: 1842 PSW3 : 448
## Normal : 5746 PSW4 : 448
## Quite Agree : 5779 PSW5 : 448
## Agree :13218 PSW6 : 448
## Very Agree : 3448 (Other):31808
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
# arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4
## [31] PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQR5 SAT1 SAT2 SAT3 LOY1 LOY2
## [46] LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5
## [61] PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1
## [76] PVA2 PVA3
## 77 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PVA3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 539 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 5 1.12 1.12%
## 2 PSW1 Disagree 17 3.79 3.79%
## 3 PSW1 Quite Disagree 21 4.69 4.69%
## 4 PSW1 Normal 100 22.3 22.32%
## 5 PSW1 Quite Agree 93 20.8 20.76%
## 6 PSW1 Agree 180 40.2 40.18%
## 7 PSW1 Very Agree 32 7.14 7.14%
## 8 PSW2 Very Disagree 11 2.46 2.46%
## 9 PSW2 Disagree 18 4.02 4.02%
## 10 PSW2 Quite Disagree 18 4.02 4.02%
## # ... with 529 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perception of passengers towards bus systems in Ho Chi Minh",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 5 1.12 1.12%
## 2 PSW2 Very Disagree 11 2.46 2.46%
## 3 PSW3 Very Disagree 11 2.46 2.46%
## 4 PSW4 Very Disagree 13 2.9 2.9%
## 5 PSW5 Very Disagree 6 1.34 1.34%
## 6 PSW6 Very Disagree 4 0.89 0.89%
## 7 PSW7 Very Disagree 6 1.34 1.34%
## 8 PSS1 Very Disagree 3 0.67 0.67%
## 9 PSS2 Very Disagree 12 2.68 2.68%
## 10 PSS3 Very Disagree 11 2.46 2.46%
## # ... with 67 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Disagree 17 3.79 3.79%
## 2 PSW2 Disagree 18 4.02 4.02%
## 3 PSW3 Disagree 10 2.23 2.23%
## 4 PSW4 Disagree 14 3.12 3.12%
## 5 PSW5 Disagree 20 4.46 4.46%
## 6 PSW6 Disagree 16 3.57 3.57%
## 7 PSW7 Disagree 21 4.69 4.69%
## 8 PSS1 Disagree 15 3.35 3.35%
## 9 PSS2 Disagree 17 3.79 3.79%
## 10 PSS3 Disagree 21 4.69 4.69%
## # ... with 67 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Disagree 21 4.69 4.69%
## 2 PSW2 Quite Disagree 18 4.02 4.02%
## 3 PSW3 Quite Disagree 16 3.57 3.57%
## 4 PSW4 Quite Disagree 18 4.02 4.02%
## 5 PSW5 Quite Disagree 15 3.35 3.35%
## 6 PSW6 Quite Disagree 13 2.9 2.9%
## 7 PSW7 Quite Disagree 10 2.23 2.23%
## 8 PSS1 Quite Disagree 14 3.12 3.12%
## 9 PSS2 Quite Disagree 14 3.12 3.12%
## 10 PSS3 Quite Disagree 13 2.9 2.9%
## # ... with 67 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Normal 100 22.3 22.32%
## 2 PSW2 Normal 111 24.8 24.78%
## 3 PSW3 Normal 89 19.9 19.87%
## 4 PSW4 Normal 88 19.6 19.64%
## 5 PSW5 Normal 81 18.1 18.08%
## 6 PSW6 Normal 87 19.4 19.42%
## 7 PSW7 Normal 75 16.7 16.74%
## 8 PSS1 Normal 61 13.6 13.62%
## 9 PSS2 Normal 90 20.1 20.09%
## 10 PSS3 Normal 78 17.4 17.41%
## # ... with 67 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Agree 93 20.8 20.76%
## 2 PSW2 Quite Agree 100 22.3 22.32%
## 3 PSW3 Quite Agree 100 22.3 22.32%
## 4 PSW4 Quite Agree 97 21.6 21.65%
## 5 PSW5 Quite Agree 107 23.9 23.88%
## 6 PSW6 Quite Agree 76 17.0 16.96%
## 7 PSW7 Quite Agree 83 18.5 18.53%
## 8 PSS1 Quite Agree 86 19.2 19.2%
## 9 PSS2 Quite Agree 90 20.1 20.09%
## 10 PSS3 Quite Agree 99 22.1 22.1%
## # ... with 67 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Agree 180 40.2 40.18%
## 2 PSW2 Agree 158 35.3 35.27%
## 3 PSW3 Agree 187 41.7 41.74%
## 4 PSW4 Agree 185 41.3 41.29%
## 5 PSW5 Agree 187 41.7 41.74%
## 6 PSW6 Agree 212 47.3 47.32%
## 7 PSW7 Agree 206 46.0 45.98%
## 8 PSS1 Agree 217 48.4 48.44%
## 9 PSS2 Agree 177 39.5 39.51%
## 10 PSS3 Agree 177 39.5 39.51%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 32 7.14 7.14%
## 2 PSW2 Very Agree 32 7.14 7.14%
## 3 PSW3 Very Agree 35 7.81 7.81%
## 4 PSW4 Very Agree 33 7.37 7.37%
## 5 PSW5 Very Agree 32 7.14 7.14%
## 6 PSW6 Very Agree 40 8.93 8.93%
## 7 PSW7 Very Agree 47 10.5 10.49%
## 8 PSS1 Very Agree 52 11.6 11.61%
## 9 PSS2 Very Agree 48 10.7 10.71%
## 10 PSS3 Very Agree 49 10.9 10.94%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 32 7.14 7.14%
## 2 PSW2 Very Agree 32 7.14 7.14%
## 3 PSW3 Very Agree 35 7.81 7.81%
## 4 PSW4 Very Agree 33 7.37 7.37%
## 5 PSW5 Very Agree 32 7.14 7.14%
## 6 PSW6 Very Agree 40 8.93 8.93%
## 7 PSW7 Very Agree 47 10.5 10.49%
## 8 PSS1 Very Agree 52 11.6 11.61%
## 9 PSS2 Very Agree 48 10.7 10.71%
## 10 PSS3 Very Agree 49 10.9 10.94%
## # ... with 67 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 4, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 2, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.7. Vẽ biểu đồ likert cho dữ liệu Hồ Chí Minh-Nhãn tiếng việt
HCM_SEM_viet = within(HCM_SEM, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8", "PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7", "IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3", "PVA1", "PVA2", "PVA3"))
})
str(HCM_SEM_viet)
## 'data.frame': 34496 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 77 levels "PSW1","PSW2",..: 65 65 65 65 65 65 65 65 65 65 ...
summary(HCM_SEM_viet)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 1352 PSW1 : 448
## Không d<U+1ED3>ng ý : 3111 PSW2 : 448
## Khá không d<U+1ED3>ng ý : 1842 PSW3 : 448
## Bình thu<U+1EDD>ng : 5746 PSW4 : 448
## Khá d<U+1ED3>ng ý : 5779 PSW5 : 448
## Ð<U+1ED3>ng ý :13218 PSW6 : 448
## R<U+1EA5>t d<U+1ED3>ng ý : 3448 (Other):31808
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_viet %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
# arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8 PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4
## [31] PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2 PQR3 PQR4 PQR5 SAT1 SAT2 SAT3 LOY1 LOY2
## [46] LOY3 LOY4 LOY5 LOY6 LOY7 IMA1 IMA2 IMA3 IMA4 IMA5 PHB1 PHB2 PHB3 PHB4 PHB5
## [61] PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6 PDE7 PSO1 PSO2 PSO3 PVA1
## [76] PVA2 PVA3
## 77 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PVA3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 539 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.12 1.12%
## 2 PSW1 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 3 PSW1 Khá không d<U+1ED3>ng ý 21 4.69 4.69%
## 4 PSW1 Bình thu<U+1EDD>ng 100 22.3 22.32%
## 5 PSW1 Khá d<U+1ED3>ng ý 93 20.8 20.76%
## 6 PSW1 Ð<U+1ED3>ng ý 180 40.2 40.18%
## 7 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 8 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 9 PSW2 Không d<U+1ED3>ng ý 18 4.02 4.02%
## 10 PSW2 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## # ... with 529 more rows
library(extrafont)
theme_set(theme_minimal())
gg_viet <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn c\u1EE7a h\u00E0nh kh\u00E1ch v\u1EC1 h\u1EC7 th\u1ED1ng xe bu\u00FDt \u0111\u00F4 th\u1ECB Th\u00E0nh ph\u1ED1 H\u1ED3 Ch\u00ED Minh",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_viet
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.12 1.12%
## 2 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 3 PSW3 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 4 PSW4 R<U+1EA5>t không d<U+1ED3>ng ý 13 2.9 2.9%
## 5 PSW5 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.34 1.34%
## 6 PSW6 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.89 0.89%
## 7 PSW7 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.34 1.34%
## 8 PSS1 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.67 0.67%
## 9 PSS2 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 10 PSS3 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## # ... with 67 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 2 PSW2 Không d<U+1ED3>ng ý 18 4.02 4.02%
## 3 PSW3 Không d<U+1ED3>ng ý 10 2.23 2.23%
## 4 PSW4 Không d<U+1ED3>ng ý 14 3.12 3.12%
## 5 PSW5 Không d<U+1ED3>ng ý 20 4.46 4.46%
## 6 PSW6 Không d<U+1ED3>ng ý 16 3.57 3.57%
## 7 PSW7 Không d<U+1ED3>ng ý 21 4.69 4.69%
## 8 PSS1 Không d<U+1ED3>ng ý 15 3.35 3.35%
## 9 PSS2 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 10 PSS3 Không d<U+1ED3>ng ý 21 4.69 4.69%
## # ... with 67 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá không d<U+1ED3>ng ý 21 4.69 4.69%
## 2 PSW2 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## 3 PSW3 Khá không d<U+1ED3>ng ý 16 3.57 3.57%
## 4 PSW4 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## 5 PSW5 Khá không d<U+1ED3>ng ý 15 3.35 3.35%
## 6 PSW6 Khá không d<U+1ED3>ng ý 13 2.9 2.9%
## 7 PSW7 Khá không d<U+1ED3>ng ý 10 2.23 2.23%
## 8 PSS1 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 9 PSS2 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 10 PSS3 Khá không d<U+1ED3>ng ý 13 2.9 2.9%
## # ... with 67 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Bình thu<U+1EDD>ng 100 22.3 22.32%
## 2 PSW2 Bình thu<U+1EDD>ng 111 24.8 24.78%
## 3 PSW3 Bình thu<U+1EDD>ng 89 19.9 19.87%
## 4 PSW4 Bình thu<U+1EDD>ng 88 19.6 19.64%
## 5 PSW5 Bình thu<U+1EDD>ng 81 18.1 18.08%
## 6 PSW6 Bình thu<U+1EDD>ng 87 19.4 19.42%
## 7 PSW7 Bình thu<U+1EDD>ng 75 16.7 16.74%
## 8 PSS1 Bình thu<U+1EDD>ng 61 13.6 13.62%
## 9 PSS2 Bình thu<U+1EDD>ng 90 20.1 20.09%
## 10 PSS3 Bình thu<U+1EDD>ng 78 17.4 17.41%
## # ... with 67 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá d<U+1ED3>ng ý 93 20.8 20.76%
## 2 PSW2 Khá d<U+1ED3>ng ý 100 22.3 22.32%
## 3 PSW3 Khá d<U+1ED3>ng ý 100 22.3 22.32%
## 4 PSW4 Khá d<U+1ED3>ng ý 97 21.6 21.65%
## 5 PSW5 Khá d<U+1ED3>ng ý 107 23.9 23.88%
## 6 PSW6 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 7 PSW7 Khá d<U+1ED3>ng ý 83 18.5 18.53%
## 8 PSS1 Khá d<U+1ED3>ng ý 86 19.2 19.2%
## 9 PSS2 Khá d<U+1ED3>ng ý 90 20.1 20.09%
## 10 PSS3 Khá d<U+1ED3>ng ý 99 22.1 22.1%
## # ... with 67 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Ð<U+1ED3>ng ý 180 40.2 40.18%
## 2 PSW2 Ð<U+1ED3>ng ý 158 35.3 35.27%
## 3 PSW3 Ð<U+1ED3>ng ý 187 41.7 41.74%
## 4 PSW4 Ð<U+1ED3>ng ý 185 41.3 41.29%
## 5 PSW5 Ð<U+1ED3>ng ý 187 41.7 41.74%
## 6 PSW6 Ð<U+1ED3>ng ý 212 47.3 47.32%
## 7 PSW7 Ð<U+1ED3>ng ý 206 46.0 45.98%
## 8 PSS1 Ð<U+1ED3>ng ý 217 48.4 48.44%
## 9 PSS2 Ð<U+1ED3>ng ý 177 39.5 39.51%
## 10 PSS3 Ð<U+1ED3>ng ý 177 39.5 39.51%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 35 7.81 7.81%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 33 7.37 7.37%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 40 8.93 8.93%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 47 10.5 10.49%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 52 11.6 11.61%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 48 10.7 10.71%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 49 10.9 10.94%
## # ... with 67 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 77 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 35 7.81 7.81%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 33 7.37 7.37%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 40 8.93 8.93%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 47 10.5 10.49%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 52 11.6 11.61%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 48 10.7 10.71%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 49 10.9 10.94%
## # ... with 67 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_viet +
geom_text(data = df_for_text1, aes(x = BPE, y = 4, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 2, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 2, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.8. Vẽ biểu đồ likert cho dữ liệu của 2 thành phố theo từng nhóm constructs-Nhãn tiếng anh 3.8.1. Construct PSA - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSA
library(tidyverse)
library(compareGroups)
head(DN_HCM_SEM_PSA)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
dim(DN_HCM_SEM_PSA)
## [1] 18788 2
attach(DN_HCM_SEM_PSA)
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_HCM_SEM_PSA = within(DN_HCM_SEM_PSA, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8"))
})
str(DN_HCM_SEM_PSA)
## 'data.frame': 18788 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 22 levels "PSW1","PSW2",..: 16 16 16 16 16 16 16 16 16 16 ...
summary(DN_HCM_SEM_PSA)
## Res BPE
## Very Disagree : 787 PSW1 : 854
## Disagree :2107 PSW2 : 854
## Quite Disagree:1133 PSW3 : 854
## Normal :2094 PSW4 : 854
## Quite Agree :2916 PSW5 : 854
## Agree :7745 PSW6 : 854
## Very Agree :2006 (Other):13664
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_PSA %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8
## 22 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PSB8
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 154 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 57 6.67 6.67%
## 2 PSW1 Disagree 129 15.1 15.11%
## 3 PSW1 Quite Disagree 52 6.09 6.09%
## 4 PSW1 Normal 79 9.25 9.25%
## 5 PSW1 Quite Agree 126 14.8 14.75%
## 6 PSW1 Agree 329 38.5 38.52%
## 7 PSW1 Very Agree 82 9.6 9.6%
## 8 PSW2 Very Disagree 35 4.1 4.1%
## 9 PSW2 Disagree 64 7.49 7.49%
## 10 PSW2 Quite Disagree 50 5.85 5.85%
## # ... with 144 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived safety (PSA) of bus users in urban areas of Viet Nam",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 57 6.67 6.67%
## 2 PSW2 Very Disagree 35 4.1 4.1%
## 3 PSW3 Very Disagree 15 1.76 1.76%
## 4 PSW4 Very Disagree 31 3.63 3.63%
## 5 PSW5 Very Disagree 20 2.34 2.34%
## 6 PSW6 Very Disagree 10 1.17 1.17%
## 7 PSW7 Very Disagree 13 1.52 1.52%
## 8 PSS1 Very Disagree 10 1.17 1.17%
## 9 PSS2 Very Disagree 47 5.5 5.5%
## 10 PSS3 Very Disagree 36 4.22 4.22%
## # ... with 12 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Disagree 129 15.1 15.11%
## 2 PSW2 Disagree 64 7.49 7.49%
## 3 PSW4 Disagree 78 9.13 9.13%
## 4 PSW5 Disagree 31 3.63 3.63%
## 5 PSS2 Disagree 140 16.4 16.39%
## 6 PSS3 Disagree 84 9.84 9.84%
## 7 PSS4 Disagree 35 4.1 4.1%
## 8 PSS5 Disagree 140 16.4 16.39%
## 9 PSS6 Disagree 249 29.2 29.16%
## 10 PSS7 Disagree 270 31.6 31.62%
## 11 PSB1 Disagree 100 11.7 11.71%
## 12 PSB2 Disagree 113 13.2 13.23%
## 13 PSB3 Disagree 83 9.72 9.72%
## 14 PSB4 Disagree 38 4.45 4.45%
## 15 PSB5 Disagree 139 16.3 16.28%
## 16 PSB6 Disagree 92 10.8 10.77%
## 17 PSB7 Disagree 215 25.2 25.18%
## 18 PSB8 Disagree 50 5.85 5.85%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Disagree 52 6.09 6.09%
## 2 PSW2 Quite Disagree 50 5.85 5.85%
## 3 PSW3 Quite Disagree 29 3.4 3.4%
## 4 PSW4 Quite Disagree 57 6.67 6.67%
## 5 PSW5 Quite Disagree 22 2.58 2.58%
## 6 PSW6 Quite Disagree 9 1.05 1.05%
## 7 PSW7 Quite Disagree 18 2.11 2.11%
## 8 PSS1 Quite Disagree 29 3.4 3.4%
## 9 PSS2 Quite Disagree 67 7.85 7.85%
## 10 PSS3 Quite Disagree 48 5.62 5.62%
## # ... with 12 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Normal 79 9.25 9.25%
## 2 PSW2 Normal 86 10.1 10.07%
## 3 PSW3 Normal 65 7.61 7.61%
## 4 PSW4 Normal 144 16.9 16.86%
## 5 PSW5 Normal 75 8.78 8.78%
## 6 PSW6 Normal 39 4.57 4.57%
## 7 PSW7 Normal 50 5.85 5.85%
## 8 PSS1 Normal 60 7.03 7.03%
## 9 PSS2 Normal 97 11.4 11.36%
## 10 PSS3 Normal 84 9.84 9.84%
## # ... with 12 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Agree 126 14.8 14.75%
## 2 PSW2 Quite Agree 126 14.8 14.75%
## 3 PSW3 Quite Agree 148 17.3 17.33%
## 4 PSW4 Quite Agree 161 18.8 18.85%
## 5 PSW5 Quite Agree 101 11.8 11.83%
## 6 PSW6 Quite Agree 68 7.96 7.96%
## 7 PSW7 Quite Agree 92 10.8 10.77%
## 8 PSS1 Quite Agree 102 11.9 11.94%
## 9 PSS2 Quite Agree 153 17.9 17.92%
## 10 PSS3 Quite Agree 149 17.4 17.45%
## # ... with 12 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Agree 329 38.5 38.52%
## 2 PSW2 Agree 400 46.8 46.84%
## 3 PSW3 Agree 472 55.3 55.27%
## 4 PSW4 Agree 307 36.0 35.95%
## 5 PSW5 Agree 435 50.9 50.94%
## 6 PSW6 Agree 495 58.0 57.96%
## 7 PSW7 Agree 500 58.6 58.55%
## 8 PSS1 Agree 435 50.9 50.94%
## 9 PSS2 Agree 294 34.4 34.43%
## 10 PSS3 Agree 380 44.5 44.5%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 82 9.6 9.6%
## 2 PSW2 Very Agree 93 10.9 10.89%
## 3 PSW3 Very Agree 103 12.1 12.06%
## 4 PSW4 Very Agree 76 8.9 8.9%
## 5 PSW5 Very Agree 170 19.9 19.91%
## 6 PSW6 Very Agree 228 26.7 26.7%
## 7 PSW7 Very Agree 175 20.5 20.49%
## 8 PSS1 Very Agree 194 22.7 22.72%
## 9 PSS2 Very Agree 56 6.56 6.56%
## 10 PSS3 Very Agree 73 8.55 8.55%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 82 9.6 9.6%
## 2 PSW2 Very Agree 93 10.9 10.89%
## 3 PSW3 Very Agree 103 12.1 12.06%
## 4 PSW4 Very Agree 76 8.9 8.9%
## 5 PSW5 Very Agree 170 19.9 19.91%
## 6 PSW6 Very Agree 228 26.7 26.7%
## 7 PSW7 Very Agree 175 20.5 20.49%
## 8 PSS1 Very Agree 194 22.7 22.72%
## 9 PSS2 Very Agree 56 6.56 6.56%
## 10 PSS3 Very Agree 73 8.55 8.55%
## # ... with 12 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.8.2. Construct PSQ - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSA
library(tidyverse)
library(compareGroups)
head(DN_HCM_SEM_PSQ)
## Res BPE
## 1 6 PQT1
## 2 4 PQT1
## 3 2 PQT1
## 4 6 PQT1
## 5 6 PQT1
## 6 4 PQT1
dim(DN_HCM_SEM_PSQ)
## [1] 15372 2
attach(DN_HCM_SEM_PSQ)
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_HCM_SEM_PSQ = within(DN_HCM_SEM_PSQ, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5"))
})
str(DN_HCM_SEM_PSQ)
## 'data.frame': 15372 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 4 2 6 6 4 2 5 5 7 ...
## $ BPE: Factor w/ 18 levels "PQT1","PQT2",..: 15 15 15 15 15 15 15 15 15 15 ...
summary(DN_HCM_SEM_PSQ)
## Res BPE
## Very Disagree : 290 PQT1 : 854
## Disagree : 702 PQT2 : 854
## Quite Disagree: 808 PQT3 : 854
## Normal :1917 PQT4 : 854
## Quite Agree :3304 PQC1 : 854
## Agree :6527 PQC2 : 854
## Very Agree :1824 (Other):10248
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_PSQ %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2
## [16] PQR3 PQR4 PQR5
## 18 Levels: PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 ... PQR5
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Disagree 17 1.99 1.99%
## 2 PQT1 Disagree 39 4.57 4.57%
## 3 PQT1 Quite Disagree 59 6.91 6.91%
## 4 PQT1 Normal 99 11.6 11.59%
## 5 PQT1 Quite Agree 204 23.9 23.89%
## 6 PQT1 Agree 349 40.9 40.87%
## 7 PQT1 Very Agree 87 10.2 10.19%
## 8 PQT2 Very Disagree 10 1.17 1.17%
## 9 PQT2 Disagree 33 3.86 3.86%
## 10 PQT2 Quite Disagree 15 1.76 1.76%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived service quality (PSQ) of bus passengers in urban areas of Viet Nam",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Disagree 17 1.99 1.99%
## 2 PQT2 Very Disagree 10 1.17 1.17%
## 3 PQT3 Very Disagree 16 1.87 1.87%
## 4 PQT4 Very Disagree 16 1.87 1.87%
## 5 PQC1 Very Disagree 10 1.17 1.17%
## 6 PQC2 Very Disagree 14 1.64 1.64%
## 7 PQC3 Very Disagree 13 1.52 1.52%
## 8 PQC4 Very Disagree 11 1.29 1.29%
## 9 PQC5 Very Disagree 9 1.05 1.05%
## 10 PQP1 Very Disagree 23 2.69 2.69%
## 11 PQP2 Very Disagree 12 1.41 1.41%
## 12 PQP3 Very Disagree 19 2.22 2.22%
## 13 PQP4 Very Disagree 29 3.4 3.4%
## 14 PQR1 Very Disagree 14 1.64 1.64%
## 15 PQR2 Very Disagree 13 1.52 1.52%
## 16 PQR3 Very Disagree 18 2.11 2.11%
## 17 PQR4 Very Disagree 30 3.51 3.51%
## 18 PQR5 Very Disagree 16 1.87 1.87%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 16 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Disagree 39 4.57 4.57%
## 2 PQT2 Disagree 33 3.86 3.86%
## 3 PQT3 Disagree 43 5.04 5.04%
## 4 PQT4 Disagree 50 5.85 5.85%
## 5 PQC2 Disagree 27 3.16 3.16%
## 6 PQC3 Disagree 31 3.63 3.63%
## 7 PQC4 Disagree 26 3.04 3.04%
## 8 PQP1 Disagree 47 5.5 5.5%
## 9 PQP2 Disagree 31 3.63 3.63%
## 10 PQP3 Disagree 42 4.92 4.92%
## 11 PQP4 Disagree 75 8.78 8.78%
## 12 PQR1 Disagree 48 5.62 5.62%
## 13 PQR2 Disagree 32 3.75 3.75%
## 14 PQR3 Disagree 45 5.27 5.27%
## 15 PQR4 Disagree 44 5.15 5.15%
## 16 PQR5 Disagree 44 5.15 5.15%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Quite Disagree 59 6.91 6.91%
## 2 PQT2 Quite Disagree 15 1.76 1.76%
## 3 PQT3 Quite Disagree 59 6.91 6.91%
## 4 PQT4 Quite Disagree 53 6.21 6.21%
## 5 PQC1 Quite Disagree 31 3.63 3.63%
## 6 PQC2 Quite Disagree 40 4.68 4.68%
## 7 PQC3 Quite Disagree 40 4.68 4.68%
## 8 PQC4 Quite Disagree 25 2.93 2.93%
## 9 PQC5 Quite Disagree 12 1.41 1.41%
## 10 PQP1 Quite Disagree 75 8.78 8.78%
## 11 PQP2 Quite Disagree 56 6.56 6.56%
## 12 PQP3 Quite Disagree 61 7.14 7.14%
## 13 PQP4 Quite Disagree 75 8.78 8.78%
## 14 PQR1 Quite Disagree 42 4.92 4.92%
## 15 PQR2 Quite Disagree 37 4.33 4.33%
## 16 PQR3 Quite Disagree 31 3.63 3.63%
## 17 PQR4 Quite Disagree 50 5.85 5.85%
## 18 PQR5 Quite Disagree 47 5.5 5.5%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Normal 99 11.6 11.59%
## 2 PQT2 Normal 68 7.96 7.96%
## 3 PQT3 Normal 101 11.8 11.83%
## 4 PQT4 Normal 252 29.5 29.51%
## 5 PQC1 Normal 66 7.73 7.73%
## 6 PQC2 Normal 107 12.5 12.53%
## 7 PQC3 Normal 98 11.5 11.48%
## 8 PQC4 Normal 98 11.5 11.48%
## 9 PQC5 Normal 85 9.95 9.95%
## 10 PQP1 Normal 97 11.4 11.36%
## 11 PQP2 Normal 107 12.5 12.53%
## 12 PQP3 Normal 124 14.5 14.52%
## 13 PQP4 Normal 98 11.5 11.48%
## 14 PQR1 Normal 180 21.1 21.08%
## 15 PQR2 Normal 91 10.7 10.66%
## 16 PQR3 Normal 85 9.95 9.95%
## 17 PQR4 Normal 75 8.78 8.78%
## 18 PQR5 Normal 86 10.1 10.07%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Quite Agree 204 23.9 23.89%
## 2 PQT2 Quite Agree 139 16.3 16.28%
## 3 PQT3 Quite Agree 203 23.8 23.77%
## 4 PQT4 Quite Agree 163 19.1 19.09%
## 5 PQC1 Quite Agree 169 19.8 19.79%
## 6 PQC2 Quite Agree 166 19.4 19.44%
## 7 PQC3 Quite Agree 188 22.0 22.01%
## 8 PQC4 Quite Agree 187 21.9 21.9%
## 9 PQC5 Quite Agree 158 18.5 18.5%
## 10 PQP1 Quite Agree 240 28.1 28.1%
## 11 PQP2 Quite Agree 187 21.9 21.9%
## 12 PQP3 Quite Agree 216 25.3 25.29%
## 13 PQP4 Quite Agree 194 22.7 22.72%
## 14 PQR1 Quite Agree 150 17.6 17.56%
## 15 PQR2 Quite Agree 193 22.6 22.6%
## 16 PQR3 Quite Agree 143 16.7 16.74%
## 17 PQR4 Quite Agree 180 21.1 21.08%
## 18 PQR5 Quite Agree 224 26.2 26.23%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Agree 349 40.9 40.87%
## 2 PQT2 Agree 446 52.2 52.22%
## 3 PQT3 Agree 347 40.6 40.63%
## 4 PQT4 Agree 264 30.9 30.91%
## 5 PQC1 Agree 411 48.1 48.13%
## 6 PQC2 Agree 399 46.7 46.72%
## 7 PQC3 Agree 378 44.3 44.26%
## 8 PQC4 Agree 417 48.8 48.83%
## 9 PQC5 Agree 455 53.3 53.28%
## 10 PQP1 Agree 304 35.6 35.6%
## 11 PQP2 Agree 363 42.5 42.51%
## 12 PQP3 Agree 319 37.4 37.35%
## 13 PQP4 Agree 303 35.5 35.48%
## 14 PQR1 Agree 348 40.8 40.75%
## 15 PQR2 Agree 361 42.3 42.27%
## 16 PQR3 Agree 375 43.9 43.91%
## 17 PQR4 Agree 347 40.6 40.63%
## 18 PQR5 Agree 341 39.9 39.93%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Agree 87 10.2 10.19%
## 2 PQT2 Very Agree 143 16.7 16.74%
## 3 PQT3 Very Agree 85 9.95 9.95%
## 4 PQT4 Very Agree 56 6.56 6.56%
## 5 PQC1 Very Agree 143 16.7 16.74%
## 6 PQC2 Very Agree 101 11.8 11.83%
## 7 PQC3 Very Agree 106 12.4 12.41%
## 8 PQC4 Very Agree 90 10.5 10.54%
## 9 PQC5 Very Agree 114 13.4 13.35%
## 10 PQP1 Very Agree 68 7.96 7.96%
## 11 PQP2 Very Agree 98 11.5 11.48%
## 12 PQP3 Very Agree 73 8.55 8.55%
## 13 PQP4 Very Agree 80 9.37 9.37%
## 14 PQR1 Very Agree 72 8.43 8.43%
## 15 PQR2 Very Agree 127 14.9 14.87%
## 16 PQR3 Very Agree 157 18.4 18.38%
## 17 PQR4 Very Agree 128 15.0 14.99%
## 18 PQR5 Very Agree 96 11.2 11.24%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Agree 87 10.2 10.19%
## 2 PQT2 Very Agree 143 16.7 16.74%
## 3 PQT3 Very Agree 85 9.95 9.95%
## 4 PQT4 Very Agree 56 6.56 6.56%
## 5 PQC1 Very Agree 143 16.7 16.74%
## 6 PQC2 Very Agree 101 11.8 11.83%
## 7 PQC3 Very Agree 106 12.4 12.41%
## 8 PQC4 Very Agree 90 10.5 10.54%
## 9 PQC5 Very Agree 114 13.4 13.35%
## 10 PQP1 Very Agree 68 7.96 7.96%
## 11 PQP2 Very Agree 98 11.5 11.48%
## 12 PQP3 Very Agree 73 8.55 8.55%
## 13 PQP4 Very Agree 80 9.37 9.37%
## 14 PQR1 Very Agree 72 8.43 8.43%
## 15 PQR2 Very Agree 127 14.9 14.87%
## 16 PQR3 Very Agree 157 18.4 18.38%
## 17 PQR4 Very Agree 128 15.0 14.99%
## 18 PQR5 Very Agree 96 11.2 11.24%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.8.3. Nhom các contructs thuộc stimulus - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSA
library(tidyverse)
library(compareGroups)
head(DN_HCM_SEM_S)
## Res BPE
## 1 6 PHB1
## 2 3 PHB1
## 3 5 PHB1
## 4 5 PHB1
## 5 5 PHB1
## 6 4 PHB1
dim(DN_HCM_SEM_S)
## [1] 16226 2
attach(DN_HCM_SEM_S)
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_HCM_SEM_S = within(DN_HCM_SEM_S, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3"))
})
str(DN_HCM_SEM_S)
## 'data.frame': 16226 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 3 5 5 5 4 3 6 6 7 ...
## $ BPE: Factor w/ 19 levels "PHB1","PHB2",..: 12 12 12 12 12 12 12 12 12 12 ...
summary(DN_HCM_SEM_S)
## Res BPE
## Very Disagree : 419 PHB1 : 854
## Disagree : 830 PHB2 : 854
## Quite Disagree: 750 PHB3 : 854
## Normal :2467 PHB4 : 854
## Quite Agree :3366 PHB5 : 854
## Agree :5949 PEB1 : 854
## Very Agree :2445 (Other):11102
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_S %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6
## [16] PDE7 PSO1 PSO2 PSO3
## 19 Levels: PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 ... PSO3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 133 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Very Disagree 39 4.57 4.57%
## 2 PHB1 Disagree 65 7.61 7.61%
## 3 PHB1 Quite Disagree 81 9.48 9.48%
## 4 PHB1 Normal 134 15.7 15.69%
## 5 PHB1 Quite Agree 188 22.0 22.01%
## 6 PHB1 Agree 272 31.8 31.85%
## 7 PHB1 Very Agree 75 8.78 8.78%
## 8 PHB2 Very Disagree 18 2.11 2.11%
## 9 PHB2 Disagree 26 3.04 3.04%
## 10 PHB2 Quite Disagree 35 4.1 4.1%
## # ... with 123 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived health (PHB), perceived environmental benefits (BEB), perceived social benefits (PSO), perceived design (PDE) of bus passengers in urban areas of Viet Nam",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Very Disagree 39 4.57 4.57%
## 2 PHB2 Very Disagree 18 2.11 2.11%
## 3 PHB3 Very Disagree 17 1.99 1.99%
## 4 PHB4 Very Disagree 17 1.99 1.99%
## 5 PHB5 Very Disagree 21 2.46 2.46%
## 6 PEB1 Very Disagree 16 1.87 1.87%
## 7 PEB2 Very Disagree 20 2.34 2.34%
## 8 PEB3 Very Disagree 24 2.81 2.81%
## 9 PEB4 Very Disagree 25 2.93 2.93%
## 10 PDE1 Very Disagree 25 2.93 2.93%
## 11 PDE2 Very Disagree 24 2.81 2.81%
## 12 PDE3 Very Disagree 24 2.81 2.81%
## 13 PDE4 Very Disagree 13 1.52 1.52%
## 14 PDE5 Very Disagree 15 1.76 1.76%
## 15 PDE6 Very Disagree 13 1.52 1.52%
## 16 PDE7 Very Disagree 22 2.58 2.58%
## 17 PSO1 Very Disagree 28 3.28 3.28%
## 18 PSO2 Very Disagree 29 3.4 3.4%
## 19 PSO3 Very Disagree 29 3.4 3.4%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 10 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Disagree 65 7.61 7.61%
## 2 PHB2 Disagree 26 3.04 3.04%
## 3 PHB3 Disagree 50 5.85 5.85%
## 4 PHB4 Disagree 63 7.38 7.38%
## 5 PHB5 Disagree 46 5.39 5.39%
## 6 PEB1 Disagree 44 5.15 5.15%
## 7 PEB2 Disagree 56 6.56 6.56%
## 8 PSO1 Disagree 119 13.9 13.93%
## 9 PSO2 Disagree 133 15.6 15.57%
## 10 PSO3 Disagree 92 10.8 10.77%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Quite Disagree 81 9.48 9.48%
## 2 PHB2 Quite Disagree 35 4.1 4.1%
## 3 PHB3 Quite Disagree 42 4.92 4.92%
## 4 PHB4 Quite Disagree 58 6.79 6.79%
## 5 PHB5 Quite Disagree 34 3.98 3.98%
## 6 PEB1 Quite Disagree 49 5.74 5.74%
## 7 PEB2 Quite Disagree 59 6.91 6.91%
## 8 PEB3 Quite Disagree 12 1.41 1.41%
## 9 PEB4 Quite Disagree 20 2.34 2.34%
## 10 PDE1 Quite Disagree 22 2.58 2.58%
## 11 PDE2 Quite Disagree 22 2.58 2.58%
## 12 PDE3 Quite Disagree 35 4.1 4.1%
## 13 PDE4 Quite Disagree 25 2.93 2.93%
## 14 PDE5 Quite Disagree 39 4.57 4.57%
## 15 PDE6 Quite Disagree 9 1.05 1.05%
## 16 PDE7 Quite Disagree 5 0.59 0.59%
## 17 PSO1 Quite Disagree 64 7.49 7.49%
## 18 PSO2 Quite Disagree 76 8.9 8.9%
## 19 PSO3 Quite Disagree 63 7.38 7.38%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Normal 134 15.7 15.69%
## 2 PHB2 Normal 96 11.2 11.24%
## 3 PHB3 Normal 200 23.4 23.42%
## 4 PHB4 Normal 214 25.1 25.06%
## 5 PHB5 Normal 99 11.6 11.59%
## 6 PEB1 Normal 192 22.5 22.48%
## 7 PEB2 Normal 196 23.0 22.95%
## 8 PEB3 Normal 59 6.91 6.91%
## 9 PEB4 Normal 67 7.85 7.85%
## 10 PDE1 Normal 77 9.02 9.02%
## 11 PDE2 Normal 93 10.9 10.89%
## 12 PDE3 Normal 98 11.5 11.48%
## 13 PDE4 Normal 68 7.96 7.96%
## 14 PDE5 Normal 87 10.2 10.19%
## 15 PDE6 Normal 53 6.21 6.21%
## 16 PDE7 Normal 62 7.26 7.26%
## 17 PSO1 Normal 227 26.6 26.58%
## 18 PSO2 Normal 227 26.6 26.58%
## 19 PSO3 Normal 218 25.5 25.53%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Quite Agree 188 22.0 22.01%
## 2 PHB2 Quite Agree 173 20.3 20.26%
## 3 PHB3 Quite Agree 200 23.4 23.42%
## 4 PHB4 Quite Agree 194 22.7 22.72%
## 5 PHB5 Quite Agree 187 21.9 21.9%
## 6 PEB1 Quite Agree 206 24.1 24.12%
## 7 PEB2 Quite Agree 200 23.4 23.42%
## 8 PEB3 Quite Agree 126 14.8 14.75%
## 9 PEB4 Quite Agree 170 19.9 19.91%
## 10 PDE1 Quite Agree 167 19.6 19.56%
## 11 PDE2 Quite Agree 166 19.4 19.44%
## 12 PDE3 Quite Agree 215 25.2 25.18%
## 13 PDE4 Quite Agree 163 19.1 19.09%
## 14 PDE5 Quite Agree 173 20.3 20.26%
## 15 PDE6 Quite Agree 131 15.3 15.34%
## 16 PDE7 Quite Agree 116 13.6 13.58%
## 17 PSO1 Quite Agree 223 26.1 26.11%
## 18 PSO2 Quite Agree 197 23.1 23.07%
## 19 PSO3 Quite Agree 171 20.0 20.02%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Agree 272 31.8 31.85%
## 2 PHB2 Agree 396 46.4 46.37%
## 3 PHB3 Agree 273 32.0 31.97%
## 4 PHB4 Agree 241 28.2 28.22%
## 5 PHB5 Agree 380 44.5 44.5%
## 6 PEB1 Agree 263 30.8 30.8%
## 7 PEB2 Agree 251 29.4 29.39%
## 8 PEB3 Agree 389 45.6 45.55%
## 9 PEB4 Agree 351 41.1 41.1%
## 10 PDE1 Agree 353 41.3 41.33%
## 11 PDE2 Agree 356 41.7 41.69%
## 12 PDE3 Agree 351 41.1 41.1%
## 13 PDE4 Agree 376 44.0 44.03%
## 14 PDE5 Agree 382 44.7 44.73%
## 15 PDE6 Agree 389 45.6 45.55%
## 16 PDE7 Agree 413 48.4 48.36%
## 17 PSO1 Agree 147 17.2 17.21%
## 18 PSO2 Agree 143 16.7 16.74%
## 19 PSO3 Agree 223 26.1 26.11%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Very Agree 75 8.78 8.78%
## 2 PHB2 Very Agree 110 12.9 12.88%
## 3 PHB3 Very Agree 72 8.43 8.43%
## 4 PHB4 Very Agree 67 7.85 7.85%
## 5 PHB5 Very Agree 87 10.2 10.19%
## 6 PEB1 Very Agree 84 9.84 9.84%
## 7 PEB2 Very Agree 72 8.43 8.43%
## 8 PEB3 Very Agree 236 27.6 27.63%
## 9 PEB4 Very Agree 204 23.9 23.89%
## 10 PDE1 Very Agree 191 22.4 22.37%
## 11 PDE2 Very Agree 174 20.4 20.37%
## 12 PDE3 Very Agree 113 13.2 13.23%
## 13 PDE4 Very Agree 187 21.9 21.9%
## 14 PDE5 Very Agree 139 16.3 16.28%
## 15 PDE6 Very Agree 252 29.5 29.51%
## 16 PDE7 Very Agree 229 26.8 26.81%
## 17 PSO1 Very Agree 46 5.39 5.39%
## 18 PSO2 Very Agree 49 5.74 5.74%
## 19 PSO3 Very Agree 58 6.79 6.79%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Very Agree 75 8.78 8.78%
## 2 PHB2 Very Agree 110 12.9 12.88%
## 3 PHB3 Very Agree 72 8.43 8.43%
## 4 PHB4 Very Agree 67 7.85 7.85%
## 5 PHB5 Very Agree 87 10.2 10.19%
## 6 PEB1 Very Agree 84 9.84 9.84%
## 7 PEB2 Very Agree 72 8.43 8.43%
## 8 PEB3 Very Agree 236 27.6 27.63%
## 9 PEB4 Very Agree 204 23.9 23.89%
## 10 PDE1 Very Agree 191 22.4 22.37%
## 11 PDE2 Very Agree 174 20.4 20.37%
## 12 PDE3 Very Agree 113 13.2 13.23%
## 13 PDE4 Very Agree 187 21.9 21.9%
## 14 PDE5 Very Agree 139 16.3 16.28%
## 15 PDE6 Very Agree 252 29.5 29.51%
## 16 PDE7 Very Agree 229 26.8 26.81%
## 17 PSO1 Very Agree 46 5.39 5.39%
## 18 PSO2 Very Agree 49 5.74 5.74%
## 19 PSO3 Very Agree 58 6.79 6.79%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.8.4. Nhóm các Constructs thuộc Organism and response - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSA
library(tidyverse)
library(compareGroups)
head(DN_HCM_SEM_OR)
## Res BPE
## 1 6 IMA1
## 2 4 IMA1
## 3 4 IMA1
## 4 5 IMA1
## 5 5 IMA1
## 6 4 IMA1
dim(DN_HCM_SEM_OR)
## [1] 15372 2
attach(DN_HCM_SEM_OR)
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_HCM_SEM_OR = within(DN_HCM_SEM_OR, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PVA1", "PVA2", "PVA3", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7"))
})
str(DN_HCM_SEM_OR)
## 'data.frame': 15372 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 4 4 5 5 4 2 6 5 6 ...
## $ BPE: Factor w/ 18 levels "IMA1","IMA2",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(DN_HCM_SEM_OR)
## Res BPE
## Very Disagree : 146 IMA1 : 854
## Disagree : 351 IMA2 : 854
## Quite Disagree: 453 IMA3 : 854
## Normal :1925 IMA4 : 854
## Quite Agree :3400 IMA5 : 854
## Agree :6912 PVA1 : 854
## Very Agree :2185 (Other):10248
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_OR %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4
## [16] LOY5 LOY6 LOY7
## 18 Levels: IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 ... LOY7
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Disagree 6 0.7 0.7%
## 2 IMA1 Disagree 18 2.11 2.11%
## 3 IMA1 Quite Disagree 32 3.75 3.75%
## 4 IMA1 Normal 154 18.0 18.03%
## 5 IMA1 Quite Agree 231 27.0 27.05%
## 6 IMA1 Agree 349 40.9 40.87%
## 7 IMA1 Very Agree 64 7.49 7.49%
## 8 IMA2 Very Disagree 11 1.29 1.29%
## 9 IMA2 Disagree 19 2.22 2.22%
## 10 IMA2 Quite Disagree 24 2.81 2.81%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived image (IMA), perceived value (PVA), satisfation (SAT), loyalty (LOY) towards urban bus systems in Viet Nam",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Disagree 6 0.7 0.7%
## 2 IMA2 Very Disagree 11 1.29 1.29%
## 3 IMA3 Very Disagree 11 1.29 1.29%
## 4 IMA4 Very Disagree 13 1.52 1.52%
## 5 IMA5 Very Disagree 6 0.7 0.7%
## 6 PVA1 Very Disagree 4 0.47 0.47%
## 7 PVA2 Very Disagree 6 0.7 0.7%
## 8 PVA3 Very Disagree 3 0.35 0.35%
## 9 SAT1 Very Disagree 13 1.52 1.52%
## 10 SAT2 Very Disagree 12 1.41 1.41%
## 11 SAT3 Very Disagree 15 1.76 1.76%
## 12 LOY1 Very Disagree 13 1.52 1.52%
## 13 LOY2 Very Disagree 5 0.59 0.59%
## 14 LOY3 Very Disagree 3 0.35 0.35%
## 15 LOY4 Very Disagree 2 0.23 0.23%
## 16 LOY5 Very Disagree 9 1.05 1.05%
## 17 LOY6 Very Disagree 6 0.7 0.7%
## 18 LOY7 Very Disagree 8 0.94 0.94%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 1 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 SAT3 Disagree 58 6.79 6.79%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Quite Disagree 32 3.75 3.75%
## 2 IMA2 Quite Disagree 24 2.81 2.81%
## 3 IMA3 Quite Disagree 19 2.22 2.22%
## 4 IMA4 Quite Disagree 25 2.93 2.93%
## 5 IMA5 Quite Disagree 19 2.22 2.22%
## 6 PVA1 Quite Disagree 18 2.11 2.11%
## 7 PVA2 Quite Disagree 15 1.76 1.76%
## 8 PVA3 Quite Disagree 18 2.11 2.11%
## 9 SAT1 Quite Disagree 30 3.51 3.51%
## 10 SAT2 Quite Disagree 25 2.93 2.93%
## 11 SAT3 Quite Disagree 51 5.97 5.97%
## 12 LOY1 Quite Disagree 15 1.76 1.76%
## 13 LOY2 Quite Disagree 18 2.11 2.11%
## 14 LOY3 Quite Disagree 39 4.57 4.57%
## 15 LOY4 Quite Disagree 21 2.46 2.46%
## 16 LOY5 Quite Disagree 34 3.98 3.98%
## 17 LOY6 Quite Disagree 24 2.81 2.81%
## 18 LOY7 Quite Disagree 26 3.04 3.04%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Normal 154 18.0 18.03%
## 2 IMA2 Normal 157 18.4 18.38%
## 3 IMA3 Normal 128 15.0 14.99%
## 4 IMA4 Normal 114 13.4 13.35%
## 5 IMA5 Normal 104 12.2 12.18%
## 6 PVA1 Normal 112 13.1 13.11%
## 7 PVA2 Normal 98 11.5 11.48%
## 8 PVA3 Normal 91 10.7 10.66%
## 9 SAT1 Normal 128 15.0 14.99%
## 10 SAT2 Normal 109 12.8 12.76%
## 11 SAT3 Normal 140 16.4 16.39%
## 12 LOY1 Normal 79 9.25 9.25%
## 13 LOY2 Normal 56 6.56 6.56%
## 14 LOY3 Normal 99 11.6 11.59%
## 15 LOY4 Normal 69 8.08 8.08%
## 16 LOY5 Normal 110 12.9 12.88%
## 17 LOY6 Normal 99 11.6 11.59%
## 18 LOY7 Normal 78 9.13 9.13%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Quite Agree 231 27.0 27.05%
## 2 IMA2 Quite Agree 213 24.9 24.94%
## 3 IMA3 Quite Agree 206 24.1 24.12%
## 4 IMA4 Quite Agree 199 23.3 23.3%
## 5 IMA5 Quite Agree 203 23.8 23.77%
## 6 PVA1 Quite Agree 166 19.4 19.44%
## 7 PVA2 Quite Agree 169 19.8 19.79%
## 8 PVA3 Quite Agree 160 18.7 18.74%
## 9 SAT1 Quite Agree 212 24.8 24.82%
## 10 SAT2 Quite Agree 213 24.9 24.94%
## 11 SAT3 Quite Agree 172 20.1 20.14%
## 12 LOY1 Quite Agree 156 18.3 18.27%
## 13 LOY2 Quite Agree 129 15.1 15.11%
## 14 LOY3 Quite Agree 194 22.7 22.72%
## 15 LOY4 Quite Agree 157 18.4 18.38%
## 16 LOY5 Quite Agree 213 24.9 24.94%
## 17 LOY6 Quite Agree 196 23.0 22.95%
## 18 LOY7 Quite Agree 211 24.7 24.71%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Agree 349 40.9 40.87%
## 2 IMA2 Agree 365 42.7 42.74%
## 3 IMA3 Agree 401 47.0 46.96%
## 4 IMA4 Agree 405 47.4 47.42%
## 5 IMA5 Agree 418 49.0 48.95%
## 6 PVA1 Agree 431 50.5 50.47%
## 7 PVA2 Agree 427 50 50%
## 8 PVA3 Agree 436 51.0 51.05%
## 9 SAT1 Agree 337 39.5 39.46%
## 10 SAT2 Agree 344 40.3 40.28%
## 11 SAT3 Agree 293 34.3 34.31%
## 12 LOY1 Agree 402 47.1 47.07%
## 13 LOY2 Agree 413 48.4 48.36%
## 14 LOY3 Agree 343 40.2 40.16%
## 15 LOY4 Agree 413 48.4 48.36%
## 16 LOY5 Agree 361 42.3 42.27%
## 17 LOY6 Agree 383 44.8 44.85%
## 18 LOY7 Agree 391 45.8 45.78%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Agree 64 7.49 7.49%
## 2 IMA2 Very Agree 65 7.61 7.61%
## 3 IMA3 Very Agree 78 9.13 9.13%
## 4 IMA4 Very Agree 84 9.84 9.84%
## 5 IMA5 Very Agree 83 9.72 9.72%
## 6 PVA1 Very Agree 105 12.3 12.3%
## 7 PVA2 Very Agree 117 13.7 13.7%
## 8 PVA3 Very Agree 130 15.2 15.22%
## 9 SAT1 Very Agree 117 13.7 13.7%
## 10 SAT2 Very Agree 128 15.0 14.99%
## 11 SAT3 Very Agree 125 14.6 14.64%
## 12 LOY1 Very Agree 173 20.3 20.26%
## 13 LOY2 Very Agree 225 26.4 26.35%
## 14 LOY3 Very Agree 151 17.7 17.68%
## 15 LOY4 Very Agree 179 21.0 20.96%
## 16 LOY5 Very Agree 105 12.3 12.3%
## 17 LOY6 Very Agree 132 15.5 15.46%
## 18 LOY7 Very Agree 124 14.5 14.52%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Agree 64 7.49 7.49%
## 2 IMA2 Very Agree 65 7.61 7.61%
## 3 IMA3 Very Agree 78 9.13 9.13%
## 4 IMA4 Very Agree 84 9.84 9.84%
## 5 IMA5 Very Agree 83 9.72 9.72%
## 6 PVA1 Very Agree 105 12.3 12.3%
## 7 PVA2 Very Agree 117 13.7 13.7%
## 8 PVA3 Very Agree 130 15.2 15.22%
## 9 SAT1 Very Agree 117 13.7 13.7%
## 10 SAT2 Very Agree 128 15.0 14.99%
## 11 SAT3 Very Agree 125 14.6 14.64%
## 12 LOY1 Very Agree 173 20.3 20.26%
## 13 LOY2 Very Agree 225 26.4 26.35%
## 14 LOY3 Very Agree 151 17.7 17.68%
## 15 LOY4 Very Agree 179 21.0 20.96%
## 16 LOY5 Very Agree 105 12.3 12.3%
## 17 LOY6 Very Agree 132 15.5 15.46%
## 18 LOY7 Very Agree 124 14.5 14.52%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.9. Vẽ biểu đồ likert cho dữ liệu của 2 thành phố theo từng nhóm constructs-Nhãn tiếng việt 3.9.1. Construct PSA - Nhãn tiếng việt
DN_HCM_SEM_PSA_v = within(DN_HCM_SEM_PSA, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8"))
})
str(DN_HCM_SEM_PSA_v)
## 'data.frame': 18788 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 22 levels "PSW1","PSW2",..: 16 16 16 16 16 16 16 16 16 16 ...
summary(DN_HCM_SEM_PSA_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 787 PSW1 : 854
## Không d<U+1ED3>ng ý :2107 PSW2 : 854
## Khá không d<U+1ED3>ng ý :1133 PSW3 : 854
## Bình thu<U+1EDD>ng :2094 PSW4 : 854
## Khá d<U+1ED3>ng ý :2916 PSW5 : 854
## Ð<U+1ED3>ng ý :7745 PSW6 : 854
## R<U+1EA5>t d<U+1ED3>ng ý :2006 (Other):13664
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_PSA_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8
## 22 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PSB8
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 154 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 57 6.67 6.67%
## 2 PSW1 Không d<U+1ED3>ng ý 129 15.1 15.11%
## 3 PSW1 Khá không d<U+1ED3>ng ý 52 6.09 6.09%
## 4 PSW1 Bình thu<U+1EDD>ng 79 9.25 9.25%
## 5 PSW1 Khá d<U+1ED3>ng ý 126 14.8 14.75%
## 6 PSW1 Ð<U+1ED3>ng ý 329 38.5 38.52%
## 7 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 82 9.6 9.6%
## 8 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 35 4.1 4.1%
## 9 PSW2 Không d<U+1ED3>ng ý 64 7.49 7.49%
## 10 PSW2 Khá không d<U+1ED3>ng ý 50 5.85 5.85%
## # ... with 144 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn v\u1EC1 an to\u00E0n (PSA) c\u1EE7a h\u00E0nh kh\u00E1ch \u0111\u1ED1i v\u1EDBi h\u1EC7 th\u1ED1ng xe bu\u00FDt \u0111\u00F4 thi Vi\u1EC7t Nam ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 57 6.67 6.67%
## 2 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 35 4.1 4.1%
## 3 PSW3 R<U+1EA5>t không d<U+1ED3>ng ý 15 1.76 1.76%
## 4 PSW4 R<U+1EA5>t không d<U+1ED3>ng ý 31 3.63 3.63%
## 5 PSW5 R<U+1EA5>t không d<U+1ED3>ng ý 20 2.34 2.34%
## 6 PSW6 R<U+1EA5>t không d<U+1ED3>ng ý 10 1.17 1.17%
## 7 PSW7 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 8 PSS1 R<U+1EA5>t không d<U+1ED3>ng ý 10 1.17 1.17%
## 9 PSS2 R<U+1EA5>t không d<U+1ED3>ng ý 47 5.5 5.5%
## 10 PSS3 R<U+1EA5>t không d<U+1ED3>ng ý 36 4.22 4.22%
## # ... with 12 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Không d<U+1ED3>ng ý 129 15.1 15.11%
## 2 PSW2 Không d<U+1ED3>ng ý 64 7.49 7.49%
## 3 PSW3 Không d<U+1ED3>ng ý 22 2.58 2.58%
## 4 PSW4 Không d<U+1ED3>ng ý 78 9.13 9.13%
## 5 PSW5 Không d<U+1ED3>ng ý 31 3.63 3.63%
## 6 PSW6 Không d<U+1ED3>ng ý 5 0.59 0.59%
## 7 PSW7 Không d<U+1ED3>ng ý 6 0.7 0.7%
## 8 PSS1 Không d<U+1ED3>ng ý 24 2.81 2.81%
## 9 PSS2 Không d<U+1ED3>ng ý 140 16.4 16.39%
## 10 PSS3 Không d<U+1ED3>ng ý 84 9.84 9.84%
## # ... with 12 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá không d<U+1ED3>ng ý 52 6.09 6.09%
## 2 PSW2 Khá không d<U+1ED3>ng ý 50 5.85 5.85%
## 3 PSW3 Khá không d<U+1ED3>ng ý 29 3.4 3.4%
## 4 PSW4 Khá không d<U+1ED3>ng ý 57 6.67 6.67%
## 5 PSW5 Khá không d<U+1ED3>ng ý 22 2.58 2.58%
## 6 PSW6 Khá không d<U+1ED3>ng ý 9 1.05 1.05%
## 7 PSW7 Khá không d<U+1ED3>ng ý 18 2.11 2.11%
## 8 PSS1 Khá không d<U+1ED3>ng ý 29 3.4 3.4%
## 9 PSS2 Khá không d<U+1ED3>ng ý 67 7.85 7.85%
## 10 PSS3 Khá không d<U+1ED3>ng ý 48 5.62 5.62%
## # ... with 12 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Bình thu<U+1EDD>ng 79 9.25 9.25%
## 2 PSW2 Bình thu<U+1EDD>ng 86 10.1 10.07%
## 3 PSW3 Bình thu<U+1EDD>ng 65 7.61 7.61%
## 4 PSW4 Bình thu<U+1EDD>ng 144 16.9 16.86%
## 5 PSW5 Bình thu<U+1EDD>ng 75 8.78 8.78%
## 6 PSW6 Bình thu<U+1EDD>ng 39 4.57 4.57%
## 7 PSW7 Bình thu<U+1EDD>ng 50 5.85 5.85%
## 8 PSS1 Bình thu<U+1EDD>ng 60 7.03 7.03%
## 9 PSS2 Bình thu<U+1EDD>ng 97 11.4 11.36%
## 10 PSS3 Bình thu<U+1EDD>ng 84 9.84 9.84%
## # ... with 12 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá d<U+1ED3>ng ý 126 14.8 14.75%
## 2 PSW2 Khá d<U+1ED3>ng ý 126 14.8 14.75%
## 3 PSW3 Khá d<U+1ED3>ng ý 148 17.3 17.33%
## 4 PSW4 Khá d<U+1ED3>ng ý 161 18.8 18.85%
## 5 PSW5 Khá d<U+1ED3>ng ý 101 11.8 11.83%
## 6 PSW6 Khá d<U+1ED3>ng ý 68 7.96 7.96%
## 7 PSW7 Khá d<U+1ED3>ng ý 92 10.8 10.77%
## 8 PSS1 Khá d<U+1ED3>ng ý 102 11.9 11.94%
## 9 PSS2 Khá d<U+1ED3>ng ý 153 17.9 17.92%
## 10 PSS3 Khá d<U+1ED3>ng ý 149 17.4 17.45%
## # ... with 12 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Ð<U+1ED3>ng ý 329 38.5 38.52%
## 2 PSW2 Ð<U+1ED3>ng ý 400 46.8 46.84%
## 3 PSW3 Ð<U+1ED3>ng ý 472 55.3 55.27%
## 4 PSW4 Ð<U+1ED3>ng ý 307 36.0 35.95%
## 5 PSW5 Ð<U+1ED3>ng ý 435 50.9 50.94%
## 6 PSW6 Ð<U+1ED3>ng ý 495 58.0 57.96%
## 7 PSW7 Ð<U+1ED3>ng ý 500 58.6 58.55%
## 8 PSS1 Ð<U+1ED3>ng ý 435 50.9 50.94%
## 9 PSS2 Ð<U+1ED3>ng ý 294 34.4 34.43%
## 10 PSS3 Ð<U+1ED3>ng ý 380 44.5 44.5%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 82 9.6 9.6%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 93 10.9 10.89%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 103 12.1 12.06%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 76 8.9 8.9%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 170 19.9 19.91%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 228 26.7 26.7%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 175 20.5 20.49%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 194 22.7 22.72%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 56 6.56 6.56%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 73 8.55 8.55%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 82 9.6 9.6%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 93 10.9 10.89%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 103 12.1 12.06%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 76 8.9 8.9%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 170 19.9 19.91%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 228 26.7 26.7%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 175 20.5 20.49%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 194 22.7 22.72%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 56 6.56 6.56%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 73 8.55 8.55%
## # ... with 12 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.9.2. Construct PSQ-Nhãn tiếng việt
DN_HCM_SEM_PSQ_v = within(DN_HCM_SEM_PSQ, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5"))
})
str(DN_HCM_SEM_PSQ_v)
## 'data.frame': 15372 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 4 2 6 6 4 2 5 5 7 ...
## $ BPE: Factor w/ 18 levels "PQT1","PQT2",..: 15 15 15 15 15 15 15 15 15 15 ...
summary(DN_HCM_SEM_PSQ_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 290 PQT1 : 854
## Không d<U+1ED3>ng ý : 702 PQT2 : 854
## Khá không d<U+1ED3>ng ý : 808 PQT3 : 854
## Bình thu<U+1EDD>ng :1917 PQT4 : 854
## Khá d<U+1ED3>ng ý :3304 PQC1 : 854
## Ð<U+1ED3>ng ý :6527 PQC2 : 854
## R<U+1EA5>t d<U+1ED3>ng ý :1824 (Other):10248
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_PSQ_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2
## [16] PQR3 PQR4 PQR5
## 18 Levels: PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 ... PQR5
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t không d<U+1ED3>ng ý 17 1.99 1.99%
## 2 PQT1 Không d<U+1ED3>ng ý 39 4.57 4.57%
## 3 PQT1 Khá không d<U+1ED3>ng ý 59 6.91 6.91%
## 4 PQT1 Bình thu<U+1EDD>ng 99 11.6 11.59%
## 5 PQT1 Khá d<U+1ED3>ng ý 204 23.9 23.89%
## 6 PQT1 Ð<U+1ED3>ng ý 349 40.9 40.87%
## 7 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 87 10.2 10.19%
## 8 PQT2 R<U+1EA5>t không d<U+1ED3>ng ý 10 1.17 1.17%
## 9 PQT2 Không d<U+1ED3>ng ý 33 3.86 3.86%
## 10 PQT2 Khá không d<U+1ED3>ng ý 15 1.76 1.76%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn v\u1EC1 ch\u1EA5t l\u01B0\u1EE3ng d\u1ECBch v\u1EE5 (PSQ) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB Vi\u1EC7t Nam",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t không d<U+1ED3>ng ý 17 1.99 1.99%
## 2 PQT2 R<U+1EA5>t không d<U+1ED3>ng ý 10 1.17 1.17%
## 3 PQT3 R<U+1EA5>t không d<U+1ED3>ng ý 16 1.87 1.87%
## 4 PQT4 R<U+1EA5>t không d<U+1ED3>ng ý 16 1.87 1.87%
## 5 PQC1 R<U+1EA5>t không d<U+1ED3>ng ý 10 1.17 1.17%
## 6 PQC2 R<U+1EA5>t không d<U+1ED3>ng ý 14 1.64 1.64%
## 7 PQC3 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 8 PQC4 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 9 PQC5 R<U+1EA5>t không d<U+1ED3>ng ý 9 1.05 1.05%
## 10 PQP1 R<U+1EA5>t không d<U+1ED3>ng ý 23 2.69 2.69%
## 11 PQP2 R<U+1EA5>t không d<U+1ED3>ng ý 12 1.41 1.41%
## 12 PQP3 R<U+1EA5>t không d<U+1ED3>ng ý 19 2.22 2.22%
## 13 PQP4 R<U+1EA5>t không d<U+1ED3>ng ý 29 3.4 3.4%
## 14 PQR1 R<U+1EA5>t không d<U+1ED3>ng ý 14 1.64 1.64%
## 15 PQR2 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 16 PQR3 R<U+1EA5>t không d<U+1ED3>ng ý 18 2.11 2.11%
## 17 PQR4 R<U+1EA5>t không d<U+1ED3>ng ý 30 3.51 3.51%
## 18 PQR5 R<U+1EA5>t không d<U+1ED3>ng ý 16 1.87 1.87%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Không d<U+1ED3>ng ý 39 4.57 4.57%
## 2 PQT2 Không d<U+1ED3>ng ý 33 3.86 3.86%
## 3 PQT3 Không d<U+1ED3>ng ý 43 5.04 5.04%
## 4 PQT4 Không d<U+1ED3>ng ý 50 5.85 5.85%
## 5 PQC1 Không d<U+1ED3>ng ý 24 2.81 2.81%
## 6 PQC2 Không d<U+1ED3>ng ý 27 3.16 3.16%
## 7 PQC3 Không d<U+1ED3>ng ý 31 3.63 3.63%
## 8 PQC4 Không d<U+1ED3>ng ý 26 3.04 3.04%
## 9 PQC5 Không d<U+1ED3>ng ý 21 2.46 2.46%
## 10 PQP1 Không d<U+1ED3>ng ý 47 5.5 5.5%
## 11 PQP2 Không d<U+1ED3>ng ý 31 3.63 3.63%
## 12 PQP3 Không d<U+1ED3>ng ý 42 4.92 4.92%
## 13 PQP4 Không d<U+1ED3>ng ý 75 8.78 8.78%
## 14 PQR1 Không d<U+1ED3>ng ý 48 5.62 5.62%
## 15 PQR2 Không d<U+1ED3>ng ý 32 3.75 3.75%
## 16 PQR3 Không d<U+1ED3>ng ý 45 5.27 5.27%
## 17 PQR4 Không d<U+1ED3>ng ý 44 5.15 5.15%
## 18 PQR5 Không d<U+1ED3>ng ý 44 5.15 5.15%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Khá không d<U+1ED3>ng ý 59 6.91 6.91%
## 2 PQT2 Khá không d<U+1ED3>ng ý 15 1.76 1.76%
## 3 PQT3 Khá không d<U+1ED3>ng ý 59 6.91 6.91%
## 4 PQT4 Khá không d<U+1ED3>ng ý 53 6.21 6.21%
## 5 PQC1 Khá không d<U+1ED3>ng ý 31 3.63 3.63%
## 6 PQC2 Khá không d<U+1ED3>ng ý 40 4.68 4.68%
## 7 PQC3 Khá không d<U+1ED3>ng ý 40 4.68 4.68%
## 8 PQC4 Khá không d<U+1ED3>ng ý 25 2.93 2.93%
## 9 PQC5 Khá không d<U+1ED3>ng ý 12 1.41 1.41%
## 10 PQP1 Khá không d<U+1ED3>ng ý 75 8.78 8.78%
## 11 PQP2 Khá không d<U+1ED3>ng ý 56 6.56 6.56%
## 12 PQP3 Khá không d<U+1ED3>ng ý 61 7.14 7.14%
## 13 PQP4 Khá không d<U+1ED3>ng ý 75 8.78 8.78%
## 14 PQR1 Khá không d<U+1ED3>ng ý 42 4.92 4.92%
## 15 PQR2 Khá không d<U+1ED3>ng ý 37 4.33 4.33%
## 16 PQR3 Khá không d<U+1ED3>ng ý 31 3.63 3.63%
## 17 PQR4 Khá không d<U+1ED3>ng ý 50 5.85 5.85%
## 18 PQR5 Khá không d<U+1ED3>ng ý 47 5.5 5.5%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Bình thu<U+1EDD>ng 99 11.6 11.59%
## 2 PQT2 Bình thu<U+1EDD>ng 68 7.96 7.96%
## 3 PQT3 Bình thu<U+1EDD>ng 101 11.8 11.83%
## 4 PQT4 Bình thu<U+1EDD>ng 252 29.5 29.51%
## 5 PQC1 Bình thu<U+1EDD>ng 66 7.73 7.73%
## 6 PQC2 Bình thu<U+1EDD>ng 107 12.5 12.53%
## 7 PQC3 Bình thu<U+1EDD>ng 98 11.5 11.48%
## 8 PQC4 Bình thu<U+1EDD>ng 98 11.5 11.48%
## 9 PQC5 Bình thu<U+1EDD>ng 85 9.95 9.95%
## 10 PQP1 Bình thu<U+1EDD>ng 97 11.4 11.36%
## 11 PQP2 Bình thu<U+1EDD>ng 107 12.5 12.53%
## 12 PQP3 Bình thu<U+1EDD>ng 124 14.5 14.52%
## 13 PQP4 Bình thu<U+1EDD>ng 98 11.5 11.48%
## 14 PQR1 Bình thu<U+1EDD>ng 180 21.1 21.08%
## 15 PQR2 Bình thu<U+1EDD>ng 91 10.7 10.66%
## 16 PQR3 Bình thu<U+1EDD>ng 85 9.95 9.95%
## 17 PQR4 Bình thu<U+1EDD>ng 75 8.78 8.78%
## 18 PQR5 Bình thu<U+1EDD>ng 86 10.1 10.07%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Khá d<U+1ED3>ng ý 204 23.9 23.89%
## 2 PQT2 Khá d<U+1ED3>ng ý 139 16.3 16.28%
## 3 PQT3 Khá d<U+1ED3>ng ý 203 23.8 23.77%
## 4 PQT4 Khá d<U+1ED3>ng ý 163 19.1 19.09%
## 5 PQC1 Khá d<U+1ED3>ng ý 169 19.8 19.79%
## 6 PQC2 Khá d<U+1ED3>ng ý 166 19.4 19.44%
## 7 PQC3 Khá d<U+1ED3>ng ý 188 22.0 22.01%
## 8 PQC4 Khá d<U+1ED3>ng ý 187 21.9 21.9%
## 9 PQC5 Khá d<U+1ED3>ng ý 158 18.5 18.5%
## 10 PQP1 Khá d<U+1ED3>ng ý 240 28.1 28.1%
## 11 PQP2 Khá d<U+1ED3>ng ý 187 21.9 21.9%
## 12 PQP3 Khá d<U+1ED3>ng ý 216 25.3 25.29%
## 13 PQP4 Khá d<U+1ED3>ng ý 194 22.7 22.72%
## 14 PQR1 Khá d<U+1ED3>ng ý 150 17.6 17.56%
## 15 PQR2 Khá d<U+1ED3>ng ý 193 22.6 22.6%
## 16 PQR3 Khá d<U+1ED3>ng ý 143 16.7 16.74%
## 17 PQR4 Khá d<U+1ED3>ng ý 180 21.1 21.08%
## 18 PQR5 Khá d<U+1ED3>ng ý 224 26.2 26.23%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Ð<U+1ED3>ng ý 349 40.9 40.87%
## 2 PQT2 Ð<U+1ED3>ng ý 446 52.2 52.22%
## 3 PQT3 Ð<U+1ED3>ng ý 347 40.6 40.63%
## 4 PQT4 Ð<U+1ED3>ng ý 264 30.9 30.91%
## 5 PQC1 Ð<U+1ED3>ng ý 411 48.1 48.13%
## 6 PQC2 Ð<U+1ED3>ng ý 399 46.7 46.72%
## 7 PQC3 Ð<U+1ED3>ng ý 378 44.3 44.26%
## 8 PQC4 Ð<U+1ED3>ng ý 417 48.8 48.83%
## 9 PQC5 Ð<U+1ED3>ng ý 455 53.3 53.28%
## 10 PQP1 Ð<U+1ED3>ng ý 304 35.6 35.6%
## 11 PQP2 Ð<U+1ED3>ng ý 363 42.5 42.51%
## 12 PQP3 Ð<U+1ED3>ng ý 319 37.4 37.35%
## 13 PQP4 Ð<U+1ED3>ng ý 303 35.5 35.48%
## 14 PQR1 Ð<U+1ED3>ng ý 348 40.8 40.75%
## 15 PQR2 Ð<U+1ED3>ng ý 361 42.3 42.27%
## 16 PQR3 Ð<U+1ED3>ng ý 375 43.9 43.91%
## 17 PQR4 Ð<U+1ED3>ng ý 347 40.6 40.63%
## 18 PQR5 Ð<U+1ED3>ng ý 341 39.9 39.93%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 87 10.2 10.19%
## 2 PQT2 R<U+1EA5>t d<U+1ED3>ng ý 143 16.7 16.74%
## 3 PQT3 R<U+1EA5>t d<U+1ED3>ng ý 85 9.95 9.95%
## 4 PQT4 R<U+1EA5>t d<U+1ED3>ng ý 56 6.56 6.56%
## 5 PQC1 R<U+1EA5>t d<U+1ED3>ng ý 143 16.7 16.74%
## 6 PQC2 R<U+1EA5>t d<U+1ED3>ng ý 101 11.8 11.83%
## 7 PQC3 R<U+1EA5>t d<U+1ED3>ng ý 106 12.4 12.41%
## 8 PQC4 R<U+1EA5>t d<U+1ED3>ng ý 90 10.5 10.54%
## 9 PQC5 R<U+1EA5>t d<U+1ED3>ng ý 114 13.4 13.35%
## 10 PQP1 R<U+1EA5>t d<U+1ED3>ng ý 68 7.96 7.96%
## 11 PQP2 R<U+1EA5>t d<U+1ED3>ng ý 98 11.5 11.48%
## 12 PQP3 R<U+1EA5>t d<U+1ED3>ng ý 73 8.55 8.55%
## 13 PQP4 R<U+1EA5>t d<U+1ED3>ng ý 80 9.37 9.37%
## 14 PQR1 R<U+1EA5>t d<U+1ED3>ng ý 72 8.43 8.43%
## 15 PQR2 R<U+1EA5>t d<U+1ED3>ng ý 127 14.9 14.87%
## 16 PQR3 R<U+1EA5>t d<U+1ED3>ng ý 157 18.4 18.38%
## 17 PQR4 R<U+1EA5>t d<U+1ED3>ng ý 128 15.0 14.99%
## 18 PQR5 R<U+1EA5>t d<U+1ED3>ng ý 96 11.2 11.24%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 87 10.2 10.19%
## 2 PQT2 R<U+1EA5>t d<U+1ED3>ng ý 143 16.7 16.74%
## 3 PQT3 R<U+1EA5>t d<U+1ED3>ng ý 85 9.95 9.95%
## 4 PQT4 R<U+1EA5>t d<U+1ED3>ng ý 56 6.56 6.56%
## 5 PQC1 R<U+1EA5>t d<U+1ED3>ng ý 143 16.7 16.74%
## 6 PQC2 R<U+1EA5>t d<U+1ED3>ng ý 101 11.8 11.83%
## 7 PQC3 R<U+1EA5>t d<U+1ED3>ng ý 106 12.4 12.41%
## 8 PQC4 R<U+1EA5>t d<U+1ED3>ng ý 90 10.5 10.54%
## 9 PQC5 R<U+1EA5>t d<U+1ED3>ng ý 114 13.4 13.35%
## 10 PQP1 R<U+1EA5>t d<U+1ED3>ng ý 68 7.96 7.96%
## 11 PQP2 R<U+1EA5>t d<U+1ED3>ng ý 98 11.5 11.48%
## 12 PQP3 R<U+1EA5>t d<U+1ED3>ng ý 73 8.55 8.55%
## 13 PQP4 R<U+1EA5>t d<U+1ED3>ng ý 80 9.37 9.37%
## 14 PQR1 R<U+1EA5>t d<U+1ED3>ng ý 72 8.43 8.43%
## 15 PQR2 R<U+1EA5>t d<U+1ED3>ng ý 127 14.9 14.87%
## 16 PQR3 R<U+1EA5>t d<U+1ED3>ng ý 157 18.4 18.38%
## 17 PQR4 R<U+1EA5>t d<U+1ED3>ng ý 128 15.0 14.99%
## 18 PQR5 R<U+1EA5>t d<U+1ED3>ng ý 96 11.2 11.24%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text2, aes(x = BPE, y = 9, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.9.3. Construct thuộc nhóm Stimulus-Nhãn tiếng việt
DN_HCM_SEM_S_v = within(DN_HCM_SEM_S, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3"))
})
str(DN_HCM_SEM_S_v)
## 'data.frame': 16226 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 3 5 5 5 4 3 6 6 7 ...
## $ BPE: Factor w/ 19 levels "PHB1","PHB2",..: 12 12 12 12 12 12 12 12 12 12 ...
summary(DN_HCM_SEM_S_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 419 PHB1 : 854
## Không d<U+1ED3>ng ý : 830 PHB2 : 854
## Khá không d<U+1ED3>ng ý : 750 PHB3 : 854
## Bình thu<U+1EDD>ng :2467 PHB4 : 854
## Khá d<U+1ED3>ng ý :3366 PHB5 : 854
## Ð<U+1ED3>ng ý :5949 PEB1 : 854
## R<U+1EA5>t d<U+1ED3>ng ý :2445 (Other):11102
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_S_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6
## [16] PDE7 PSO1 PSO2 PSO3
## 19 Levels: PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 ... PSO3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 133 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t không d<U+1ED3>ng ý 39 4.57 4.57%
## 2 PHB1 Không d<U+1ED3>ng ý 65 7.61 7.61%
## 3 PHB1 Khá không d<U+1ED3>ng ý 81 9.48 9.48%
## 4 PHB1 Bình thu<U+1EDD>ng 134 15.7 15.69%
## 5 PHB1 Khá d<U+1ED3>ng ý 188 22.0 22.01%
## 6 PHB1 Ð<U+1ED3>ng ý 272 31.8 31.85%
## 7 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 75 8.78 8.78%
## 8 PHB2 R<U+1EA5>t không d<U+1ED3>ng ý 18 2.11 2.11%
## 9 PHB2 Không d<U+1ED3>ng ý 26 3.04 3.04%
## 10 PHB2 Khá không d<U+1ED3>ng ý 35 4.1 4.1%
## # ... with 123 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn v\u1EC1 s\u1EE9c kh\u1ECFe (PHB), m\u00F4i tr\u01B0\u1EDDng (PEB), thi\u1EBFt k\u1EBF (PDE), l\u1EE3i \u00EDch x\u00E3 h\u1ED9i (PSO) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB Vi\u1EC7t Nam ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t không d<U+1ED3>ng ý 39 4.57 4.57%
## 2 PHB2 R<U+1EA5>t không d<U+1ED3>ng ý 18 2.11 2.11%
## 3 PHB3 R<U+1EA5>t không d<U+1ED3>ng ý 17 1.99 1.99%
## 4 PHB4 R<U+1EA5>t không d<U+1ED3>ng ý 17 1.99 1.99%
## 5 PHB5 R<U+1EA5>t không d<U+1ED3>ng ý 21 2.46 2.46%
## 6 PEB1 R<U+1EA5>t không d<U+1ED3>ng ý 16 1.87 1.87%
## 7 PEB2 R<U+1EA5>t không d<U+1ED3>ng ý 20 2.34 2.34%
## 8 PEB3 R<U+1EA5>t không d<U+1ED3>ng ý 24 2.81 2.81%
## 9 PEB4 R<U+1EA5>t không d<U+1ED3>ng ý 25 2.93 2.93%
## 10 PDE1 R<U+1EA5>t không d<U+1ED3>ng ý 25 2.93 2.93%
## 11 PDE2 R<U+1EA5>t không d<U+1ED3>ng ý 24 2.81 2.81%
## 12 PDE3 R<U+1EA5>t không d<U+1ED3>ng ý 24 2.81 2.81%
## 13 PDE4 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 14 PDE5 R<U+1EA5>t không d<U+1ED3>ng ý 15 1.76 1.76%
## 15 PDE6 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 16 PDE7 R<U+1EA5>t không d<U+1ED3>ng ý 22 2.58 2.58%
## 17 PSO1 R<U+1EA5>t không d<U+1ED3>ng ý 28 3.28 3.28%
## 18 PSO2 R<U+1EA5>t không d<U+1ED3>ng ý 29 3.4 3.4%
## 19 PSO3 R<U+1EA5>t không d<U+1ED3>ng ý 29 3.4 3.4%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Không d<U+1ED3>ng ý 65 7.61 7.61%
## 2 PHB2 Không d<U+1ED3>ng ý 26 3.04 3.04%
## 3 PHB3 Không d<U+1ED3>ng ý 50 5.85 5.85%
## 4 PHB4 Không d<U+1ED3>ng ý 63 7.38 7.38%
## 5 PHB5 Không d<U+1ED3>ng ý 46 5.39 5.39%
## 6 PEB1 Không d<U+1ED3>ng ý 44 5.15 5.15%
## 7 PEB2 Không d<U+1ED3>ng ý 56 6.56 6.56%
## 8 PEB3 Không d<U+1ED3>ng ý 8 0.94 0.94%
## 9 PEB4 Không d<U+1ED3>ng ý 17 1.99 1.99%
## 10 PDE1 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 11 PDE2 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 12 PDE3 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 13 PDE4 Không d<U+1ED3>ng ý 22 2.58 2.58%
## 14 PDE5 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 15 PDE6 Không d<U+1ED3>ng ý 7 0.82 0.82%
## 16 PDE7 Không d<U+1ED3>ng ý 7 0.82 0.82%
## 17 PSO1 Không d<U+1ED3>ng ý 119 13.9 13.93%
## 18 PSO2 Không d<U+1ED3>ng ý 133 15.6 15.57%
## 19 PSO3 Không d<U+1ED3>ng ý 92 10.8 10.77%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Khá không d<U+1ED3>ng ý 81 9.48 9.48%
## 2 PHB2 Khá không d<U+1ED3>ng ý 35 4.1 4.1%
## 3 PHB3 Khá không d<U+1ED3>ng ý 42 4.92 4.92%
## 4 PHB4 Khá không d<U+1ED3>ng ý 58 6.79 6.79%
## 5 PHB5 Khá không d<U+1ED3>ng ý 34 3.98 3.98%
## 6 PEB1 Khá không d<U+1ED3>ng ý 49 5.74 5.74%
## 7 PEB2 Khá không d<U+1ED3>ng ý 59 6.91 6.91%
## 8 PEB3 Khá không d<U+1ED3>ng ý 12 1.41 1.41%
## 9 PEB4 Khá không d<U+1ED3>ng ý 20 2.34 2.34%
## 10 PDE1 Khá không d<U+1ED3>ng ý 22 2.58 2.58%
## 11 PDE2 Khá không d<U+1ED3>ng ý 22 2.58 2.58%
## 12 PDE3 Khá không d<U+1ED3>ng ý 35 4.1 4.1%
## 13 PDE4 Khá không d<U+1ED3>ng ý 25 2.93 2.93%
## 14 PDE5 Khá không d<U+1ED3>ng ý 39 4.57 4.57%
## 15 PDE6 Khá không d<U+1ED3>ng ý 9 1.05 1.05%
## 16 PDE7 Khá không d<U+1ED3>ng ý 5 0.59 0.59%
## 17 PSO1 Khá không d<U+1ED3>ng ý 64 7.49 7.49%
## 18 PSO2 Khá không d<U+1ED3>ng ý 76 8.9 8.9%
## 19 PSO3 Khá không d<U+1ED3>ng ý 63 7.38 7.38%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Bình thu<U+1EDD>ng 134 15.7 15.69%
## 2 PHB2 Bình thu<U+1EDD>ng 96 11.2 11.24%
## 3 PHB3 Bình thu<U+1EDD>ng 200 23.4 23.42%
## 4 PHB4 Bình thu<U+1EDD>ng 214 25.1 25.06%
## 5 PHB5 Bình thu<U+1EDD>ng 99 11.6 11.59%
## 6 PEB1 Bình thu<U+1EDD>ng 192 22.5 22.48%
## 7 PEB2 Bình thu<U+1EDD>ng 196 23.0 22.95%
## 8 PEB3 Bình thu<U+1EDD>ng 59 6.91 6.91%
## 9 PEB4 Bình thu<U+1EDD>ng 67 7.85 7.85%
## 10 PDE1 Bình thu<U+1EDD>ng 77 9.02 9.02%
## 11 PDE2 Bình thu<U+1EDD>ng 93 10.9 10.89%
## 12 PDE3 Bình thu<U+1EDD>ng 98 11.5 11.48%
## 13 PDE4 Bình thu<U+1EDD>ng 68 7.96 7.96%
## 14 PDE5 Bình thu<U+1EDD>ng 87 10.2 10.19%
## 15 PDE6 Bình thu<U+1EDD>ng 53 6.21 6.21%
## 16 PDE7 Bình thu<U+1EDD>ng 62 7.26 7.26%
## 17 PSO1 Bình thu<U+1EDD>ng 227 26.6 26.58%
## 18 PSO2 Bình thu<U+1EDD>ng 227 26.6 26.58%
## 19 PSO3 Bình thu<U+1EDD>ng 218 25.5 25.53%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Khá d<U+1ED3>ng ý 188 22.0 22.01%
## 2 PHB2 Khá d<U+1ED3>ng ý 173 20.3 20.26%
## 3 PHB3 Khá d<U+1ED3>ng ý 200 23.4 23.42%
## 4 PHB4 Khá d<U+1ED3>ng ý 194 22.7 22.72%
## 5 PHB5 Khá d<U+1ED3>ng ý 187 21.9 21.9%
## 6 PEB1 Khá d<U+1ED3>ng ý 206 24.1 24.12%
## 7 PEB2 Khá d<U+1ED3>ng ý 200 23.4 23.42%
## 8 PEB3 Khá d<U+1ED3>ng ý 126 14.8 14.75%
## 9 PEB4 Khá d<U+1ED3>ng ý 170 19.9 19.91%
## 10 PDE1 Khá d<U+1ED3>ng ý 167 19.6 19.56%
## 11 PDE2 Khá d<U+1ED3>ng ý 166 19.4 19.44%
## 12 PDE3 Khá d<U+1ED3>ng ý 215 25.2 25.18%
## 13 PDE4 Khá d<U+1ED3>ng ý 163 19.1 19.09%
## 14 PDE5 Khá d<U+1ED3>ng ý 173 20.3 20.26%
## 15 PDE6 Khá d<U+1ED3>ng ý 131 15.3 15.34%
## 16 PDE7 Khá d<U+1ED3>ng ý 116 13.6 13.58%
## 17 PSO1 Khá d<U+1ED3>ng ý 223 26.1 26.11%
## 18 PSO2 Khá d<U+1ED3>ng ý 197 23.1 23.07%
## 19 PSO3 Khá d<U+1ED3>ng ý 171 20.0 20.02%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Ð<U+1ED3>ng ý 272 31.8 31.85%
## 2 PHB2 Ð<U+1ED3>ng ý 396 46.4 46.37%
## 3 PHB3 Ð<U+1ED3>ng ý 273 32.0 31.97%
## 4 PHB4 Ð<U+1ED3>ng ý 241 28.2 28.22%
## 5 PHB5 Ð<U+1ED3>ng ý 380 44.5 44.5%
## 6 PEB1 Ð<U+1ED3>ng ý 263 30.8 30.8%
## 7 PEB2 Ð<U+1ED3>ng ý 251 29.4 29.39%
## 8 PEB3 Ð<U+1ED3>ng ý 389 45.6 45.55%
## 9 PEB4 Ð<U+1ED3>ng ý 351 41.1 41.1%
## 10 PDE1 Ð<U+1ED3>ng ý 353 41.3 41.33%
## 11 PDE2 Ð<U+1ED3>ng ý 356 41.7 41.69%
## 12 PDE3 Ð<U+1ED3>ng ý 351 41.1 41.1%
## 13 PDE4 Ð<U+1ED3>ng ý 376 44.0 44.03%
## 14 PDE5 Ð<U+1ED3>ng ý 382 44.7 44.73%
## 15 PDE6 Ð<U+1ED3>ng ý 389 45.6 45.55%
## 16 PDE7 Ð<U+1ED3>ng ý 413 48.4 48.36%
## 17 PSO1 Ð<U+1ED3>ng ý 147 17.2 17.21%
## 18 PSO2 Ð<U+1ED3>ng ý 143 16.7 16.74%
## 19 PSO3 Ð<U+1ED3>ng ý 223 26.1 26.11%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 75 8.78 8.78%
## 2 PHB2 R<U+1EA5>t d<U+1ED3>ng ý 110 12.9 12.88%
## 3 PHB3 R<U+1EA5>t d<U+1ED3>ng ý 72 8.43 8.43%
## 4 PHB4 R<U+1EA5>t d<U+1ED3>ng ý 67 7.85 7.85%
## 5 PHB5 R<U+1EA5>t d<U+1ED3>ng ý 87 10.2 10.19%
## 6 PEB1 R<U+1EA5>t d<U+1ED3>ng ý 84 9.84 9.84%
## 7 PEB2 R<U+1EA5>t d<U+1ED3>ng ý 72 8.43 8.43%
## 8 PEB3 R<U+1EA5>t d<U+1ED3>ng ý 236 27.6 27.63%
## 9 PEB4 R<U+1EA5>t d<U+1ED3>ng ý 204 23.9 23.89%
## 10 PDE1 R<U+1EA5>t d<U+1ED3>ng ý 191 22.4 22.37%
## 11 PDE2 R<U+1EA5>t d<U+1ED3>ng ý 174 20.4 20.37%
## 12 PDE3 R<U+1EA5>t d<U+1ED3>ng ý 113 13.2 13.23%
## 13 PDE4 R<U+1EA5>t d<U+1ED3>ng ý 187 21.9 21.9%
## 14 PDE5 R<U+1EA5>t d<U+1ED3>ng ý 139 16.3 16.28%
## 15 PDE6 R<U+1EA5>t d<U+1ED3>ng ý 252 29.5 29.51%
## 16 PDE7 R<U+1EA5>t d<U+1ED3>ng ý 229 26.8 26.81%
## 17 PSO1 R<U+1EA5>t d<U+1ED3>ng ý 46 5.39 5.39%
## 18 PSO2 R<U+1EA5>t d<U+1ED3>ng ý 49 5.74 5.74%
## 19 PSO3 R<U+1EA5>t d<U+1ED3>ng ý 58 6.79 6.79%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 75 8.78 8.78%
## 2 PHB2 R<U+1EA5>t d<U+1ED3>ng ý 110 12.9 12.88%
## 3 PHB3 R<U+1EA5>t d<U+1ED3>ng ý 72 8.43 8.43%
## 4 PHB4 R<U+1EA5>t d<U+1ED3>ng ý 67 7.85 7.85%
## 5 PHB5 R<U+1EA5>t d<U+1ED3>ng ý 87 10.2 10.19%
## 6 PEB1 R<U+1EA5>t d<U+1ED3>ng ý 84 9.84 9.84%
## 7 PEB2 R<U+1EA5>t d<U+1ED3>ng ý 72 8.43 8.43%
## 8 PEB3 R<U+1EA5>t d<U+1ED3>ng ý 236 27.6 27.63%
## 9 PEB4 R<U+1EA5>t d<U+1ED3>ng ý 204 23.9 23.89%
## 10 PDE1 R<U+1EA5>t d<U+1ED3>ng ý 191 22.4 22.37%
## 11 PDE2 R<U+1EA5>t d<U+1ED3>ng ý 174 20.4 20.37%
## 12 PDE3 R<U+1EA5>t d<U+1ED3>ng ý 113 13.2 13.23%
## 13 PDE4 R<U+1EA5>t d<U+1ED3>ng ý 187 21.9 21.9%
## 14 PDE5 R<U+1EA5>t d<U+1ED3>ng ý 139 16.3 16.28%
## 15 PDE6 R<U+1EA5>t d<U+1ED3>ng ý 252 29.5 29.51%
## 16 PDE7 R<U+1EA5>t d<U+1ED3>ng ý 229 26.8 26.81%
## 17 PSO1 R<U+1EA5>t d<U+1ED3>ng ý 46 5.39 5.39%
## 18 PSO2 R<U+1EA5>t d<U+1ED3>ng ý 49 5.74 5.74%
## 19 PSO3 R<U+1EA5>t d<U+1ED3>ng ý 58 6.79 6.79%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text4, aes(x = BPE, y = 13, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.9.4. Construct thuộc nhóm Organism-Response - Nhãn tiếng việt
# Plot Likert graph for people in both cities for construct PHB
DN_HCM_SEM_OR_v = within(DN_HCM_SEM_OR, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PVA1", "PVA2", "PVA3", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7"))
})
str(DN_HCM_SEM_OR_v)
## 'data.frame': 15372 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 4 4 5 5 4 2 6 5 6 ...
## $ BPE: Factor w/ 18 levels "IMA1","IMA2",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(DN_HCM_SEM_OR_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 146 IMA1 : 854
## Không d<U+1ED3>ng ý : 351 IMA2 : 854
## Khá không d<U+1ED3>ng ý : 453 IMA3 : 854
## Bình thu<U+1EDD>ng :1925 IMA4 : 854
## Khá d<U+1ED3>ng ý :3400 IMA5 : 854
## Ð<U+1ED3>ng ý :6912 PVA1 : 854
## R<U+1EA5>t d<U+1ED3>ng ý :2185 (Other):10248
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_HCM_SEM_OR_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4
## [16] LOY5 LOY6 LOY7
## 18 Levels: IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 ... LOY7
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 2 IMA1 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 3 IMA1 Khá không d<U+1ED3>ng ý 32 3.75 3.75%
## 4 IMA1 Bình thu<U+1EDD>ng 154 18.0 18.03%
## 5 IMA1 Khá d<U+1ED3>ng ý 231 27.0 27.05%
## 6 IMA1 Ð<U+1ED3>ng ý 349 40.9 40.87%
## 7 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 64 7.49 7.49%
## 8 IMA2 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 9 IMA2 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 10 IMA2 Khá không d<U+1ED3>ng ý 24 2.81 2.81%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn gi\u00E1 tr\u1ECB (PVA), h\u00ECnh \u1EA3nh (IMA), s\u1EF1 h\u00E0i l\u00F2ng (SAT) v\u00E0 l\u00F2ng trung th\u00E0nh (LOY) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB Vi\u1EC7t Nam",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 2 IMA2 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 3 IMA3 R<U+1EA5>t không d<U+1ED3>ng ý 11 1.29 1.29%
## 4 IMA4 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 5 IMA5 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 6 PVA1 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.47 0.47%
## 7 PVA2 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 8 PVA3 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.35 0.35%
## 9 SAT1 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 10 SAT2 R<U+1EA5>t không d<U+1ED3>ng ý 12 1.41 1.41%
## 11 SAT3 R<U+1EA5>t không d<U+1ED3>ng ý 15 1.76 1.76%
## 12 LOY1 R<U+1EA5>t không d<U+1ED3>ng ý 13 1.52 1.52%
## 13 LOY2 R<U+1EA5>t không d<U+1ED3>ng ý 5 0.59 0.59%
## 14 LOY3 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.35 0.35%
## 15 LOY4 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.23 0.23%
## 16 LOY5 R<U+1EA5>t không d<U+1ED3>ng ý 9 1.05 1.05%
## 17 LOY6 R<U+1EA5>t không d<U+1ED3>ng ý 6 0.7 0.7%
## 18 LOY7 R<U+1EA5>t không d<U+1ED3>ng ý 8 0.94 0.94%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 2 IMA2 Không d<U+1ED3>ng ý 19 2.22 2.22%
## 3 IMA3 Không d<U+1ED3>ng ý 11 1.29 1.29%
## 4 IMA4 Không d<U+1ED3>ng ý 14 1.64 1.64%
## 5 IMA5 Không d<U+1ED3>ng ý 21 2.46 2.46%
## 6 PVA1 Không d<U+1ED3>ng ý 18 2.11 2.11%
## 7 PVA2 Không d<U+1ED3>ng ý 22 2.58 2.58%
## 8 PVA3 Không d<U+1ED3>ng ý 16 1.87 1.87%
## 9 SAT1 Không d<U+1ED3>ng ý 17 1.99 1.99%
## 10 SAT2 Không d<U+1ED3>ng ý 23 2.69 2.69%
## 11 SAT3 Không d<U+1ED3>ng ý 58 6.79 6.79%
## 12 LOY1 Không d<U+1ED3>ng ý 16 1.87 1.87%
## 13 LOY2 Không d<U+1ED3>ng ý 8 0.94 0.94%
## 14 LOY3 Không d<U+1ED3>ng ý 25 2.93 2.93%
## 15 LOY4 Không d<U+1ED3>ng ý 13 1.52 1.52%
## 16 LOY5 Không d<U+1ED3>ng ý 22 2.58 2.58%
## 17 LOY6 Không d<U+1ED3>ng ý 14 1.64 1.64%
## 18 LOY7 Không d<U+1ED3>ng ý 16 1.87 1.87%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Khá không d<U+1ED3>ng ý 32 3.75 3.75%
## 2 IMA2 Khá không d<U+1ED3>ng ý 24 2.81 2.81%
## 3 IMA3 Khá không d<U+1ED3>ng ý 19 2.22 2.22%
## 4 IMA4 Khá không d<U+1ED3>ng ý 25 2.93 2.93%
## 5 IMA5 Khá không d<U+1ED3>ng ý 19 2.22 2.22%
## 6 PVA1 Khá không d<U+1ED3>ng ý 18 2.11 2.11%
## 7 PVA2 Khá không d<U+1ED3>ng ý 15 1.76 1.76%
## 8 PVA3 Khá không d<U+1ED3>ng ý 18 2.11 2.11%
## 9 SAT1 Khá không d<U+1ED3>ng ý 30 3.51 3.51%
## 10 SAT2 Khá không d<U+1ED3>ng ý 25 2.93 2.93%
## 11 SAT3 Khá không d<U+1ED3>ng ý 51 5.97 5.97%
## 12 LOY1 Khá không d<U+1ED3>ng ý 15 1.76 1.76%
## 13 LOY2 Khá không d<U+1ED3>ng ý 18 2.11 2.11%
## 14 LOY3 Khá không d<U+1ED3>ng ý 39 4.57 4.57%
## 15 LOY4 Khá không d<U+1ED3>ng ý 21 2.46 2.46%
## 16 LOY5 Khá không d<U+1ED3>ng ý 34 3.98 3.98%
## 17 LOY6 Khá không d<U+1ED3>ng ý 24 2.81 2.81%
## 18 LOY7 Khá không d<U+1ED3>ng ý 26 3.04 3.04%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Bình thu<U+1EDD>ng 154 18.0 18.03%
## 2 IMA2 Bình thu<U+1EDD>ng 157 18.4 18.38%
## 3 IMA3 Bình thu<U+1EDD>ng 128 15.0 14.99%
## 4 IMA4 Bình thu<U+1EDD>ng 114 13.4 13.35%
## 5 IMA5 Bình thu<U+1EDD>ng 104 12.2 12.18%
## 6 PVA1 Bình thu<U+1EDD>ng 112 13.1 13.11%
## 7 PVA2 Bình thu<U+1EDD>ng 98 11.5 11.48%
## 8 PVA3 Bình thu<U+1EDD>ng 91 10.7 10.66%
## 9 SAT1 Bình thu<U+1EDD>ng 128 15.0 14.99%
## 10 SAT2 Bình thu<U+1EDD>ng 109 12.8 12.76%
## 11 SAT3 Bình thu<U+1EDD>ng 140 16.4 16.39%
## 12 LOY1 Bình thu<U+1EDD>ng 79 9.25 9.25%
## 13 LOY2 Bình thu<U+1EDD>ng 56 6.56 6.56%
## 14 LOY3 Bình thu<U+1EDD>ng 99 11.6 11.59%
## 15 LOY4 Bình thu<U+1EDD>ng 69 8.08 8.08%
## 16 LOY5 Bình thu<U+1EDD>ng 110 12.9 12.88%
## 17 LOY6 Bình thu<U+1EDD>ng 99 11.6 11.59%
## 18 LOY7 Bình thu<U+1EDD>ng 78 9.13 9.13%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Khá d<U+1ED3>ng ý 231 27.0 27.05%
## 2 IMA2 Khá d<U+1ED3>ng ý 213 24.9 24.94%
## 3 IMA3 Khá d<U+1ED3>ng ý 206 24.1 24.12%
## 4 IMA4 Khá d<U+1ED3>ng ý 199 23.3 23.3%
## 5 IMA5 Khá d<U+1ED3>ng ý 203 23.8 23.77%
## 6 PVA1 Khá d<U+1ED3>ng ý 166 19.4 19.44%
## 7 PVA2 Khá d<U+1ED3>ng ý 169 19.8 19.79%
## 8 PVA3 Khá d<U+1ED3>ng ý 160 18.7 18.74%
## 9 SAT1 Khá d<U+1ED3>ng ý 212 24.8 24.82%
## 10 SAT2 Khá d<U+1ED3>ng ý 213 24.9 24.94%
## 11 SAT3 Khá d<U+1ED3>ng ý 172 20.1 20.14%
## 12 LOY1 Khá d<U+1ED3>ng ý 156 18.3 18.27%
## 13 LOY2 Khá d<U+1ED3>ng ý 129 15.1 15.11%
## 14 LOY3 Khá d<U+1ED3>ng ý 194 22.7 22.72%
## 15 LOY4 Khá d<U+1ED3>ng ý 157 18.4 18.38%
## 16 LOY5 Khá d<U+1ED3>ng ý 213 24.9 24.94%
## 17 LOY6 Khá d<U+1ED3>ng ý 196 23.0 22.95%
## 18 LOY7 Khá d<U+1ED3>ng ý 211 24.7 24.71%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Ð<U+1ED3>ng ý 349 40.9 40.87%
## 2 IMA2 Ð<U+1ED3>ng ý 365 42.7 42.74%
## 3 IMA3 Ð<U+1ED3>ng ý 401 47.0 46.96%
## 4 IMA4 Ð<U+1ED3>ng ý 405 47.4 47.42%
## 5 IMA5 Ð<U+1ED3>ng ý 418 49.0 48.95%
## 6 PVA1 Ð<U+1ED3>ng ý 431 50.5 50.47%
## 7 PVA2 Ð<U+1ED3>ng ý 427 50 50%
## 8 PVA3 Ð<U+1ED3>ng ý 436 51.0 51.05%
## 9 SAT1 Ð<U+1ED3>ng ý 337 39.5 39.46%
## 10 SAT2 Ð<U+1ED3>ng ý 344 40.3 40.28%
## 11 SAT3 Ð<U+1ED3>ng ý 293 34.3 34.31%
## 12 LOY1 Ð<U+1ED3>ng ý 402 47.1 47.07%
## 13 LOY2 Ð<U+1ED3>ng ý 413 48.4 48.36%
## 14 LOY3 Ð<U+1ED3>ng ý 343 40.2 40.16%
## 15 LOY4 Ð<U+1ED3>ng ý 413 48.4 48.36%
## 16 LOY5 Ð<U+1ED3>ng ý 361 42.3 42.27%
## 17 LOY6 Ð<U+1ED3>ng ý 383 44.8 44.85%
## 18 LOY7 Ð<U+1ED3>ng ý 391 45.8 45.78%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 64 7.49 7.49%
## 2 IMA2 R<U+1EA5>t d<U+1ED3>ng ý 65 7.61 7.61%
## 3 IMA3 R<U+1EA5>t d<U+1ED3>ng ý 78 9.13 9.13%
## 4 IMA4 R<U+1EA5>t d<U+1ED3>ng ý 84 9.84 9.84%
## 5 IMA5 R<U+1EA5>t d<U+1ED3>ng ý 83 9.72 9.72%
## 6 PVA1 R<U+1EA5>t d<U+1ED3>ng ý 105 12.3 12.3%
## 7 PVA2 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 8 PVA3 R<U+1EA5>t d<U+1ED3>ng ý 130 15.2 15.22%
## 9 SAT1 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 10 SAT2 R<U+1EA5>t d<U+1ED3>ng ý 128 15.0 14.99%
## 11 SAT3 R<U+1EA5>t d<U+1ED3>ng ý 125 14.6 14.64%
## 12 LOY1 R<U+1EA5>t d<U+1ED3>ng ý 173 20.3 20.26%
## 13 LOY2 R<U+1EA5>t d<U+1ED3>ng ý 225 26.4 26.35%
## 14 LOY3 R<U+1EA5>t d<U+1ED3>ng ý 151 17.7 17.68%
## 15 LOY4 R<U+1EA5>t d<U+1ED3>ng ý 179 21.0 20.96%
## 16 LOY5 R<U+1EA5>t d<U+1ED3>ng ý 105 12.3 12.3%
## 17 LOY6 R<U+1EA5>t d<U+1ED3>ng ý 132 15.5 15.46%
## 18 LOY7 R<U+1EA5>t d<U+1ED3>ng ý 124 14.5 14.52%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 64 7.49 7.49%
## 2 IMA2 R<U+1EA5>t d<U+1ED3>ng ý 65 7.61 7.61%
## 3 IMA3 R<U+1EA5>t d<U+1ED3>ng ý 78 9.13 9.13%
## 4 IMA4 R<U+1EA5>t d<U+1ED3>ng ý 84 9.84 9.84%
## 5 IMA5 R<U+1EA5>t d<U+1ED3>ng ý 83 9.72 9.72%
## 6 PVA1 R<U+1EA5>t d<U+1ED3>ng ý 105 12.3 12.3%
## 7 PVA2 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 8 PVA3 R<U+1EA5>t d<U+1ED3>ng ý 130 15.2 15.22%
## 9 SAT1 R<U+1EA5>t d<U+1ED3>ng ý 117 13.7 13.7%
## 10 SAT2 R<U+1EA5>t d<U+1ED3>ng ý 128 15.0 14.99%
## 11 SAT3 R<U+1EA5>t d<U+1ED3>ng ý 125 14.6 14.64%
## 12 LOY1 R<U+1EA5>t d<U+1ED3>ng ý 173 20.3 20.26%
## 13 LOY2 R<U+1EA5>t d<U+1ED3>ng ý 225 26.4 26.35%
## 14 LOY3 R<U+1EA5>t d<U+1ED3>ng ý 151 17.7 17.68%
## 15 LOY4 R<U+1EA5>t d<U+1ED3>ng ý 179 21.0 20.96%
## 16 LOY5 R<U+1EA5>t d<U+1ED3>ng ý 105 12.3 12.3%
## 17 LOY6 R<U+1EA5>t d<U+1ED3>ng ý 132 15.5 15.46%
## 18 LOY7 R<U+1EA5>t d<U+1ED3>ng ý 124 14.5 14.52%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text4, aes(x = BPE, y = 13, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.10. Vẽ biểu đồ likert cho dữ liệu của Đà Nẵng theo từng nhóm constructs-Nhãn tiếng anh 3.10.1. Construct PSA - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PEV
library(tidyverse)
library(compareGroups)
head(DN_SEM_PSA)
## Res BPE
## 449 6 PSW1
## 450 6 PSW1
## 451 6 PSW1
## 452 1 PSW1
## 453 6 PSW1
## 454 6 PSW1
dim(DN_SEM_PSA)
## [1] 8932 2
attach(DN_SEM_PSA)
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_SEM_PSA = within(DN_SEM_PSA, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8"))
})
str(DN_SEM_PSA)
## 'data.frame': 8932 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 6 6 1 6 6 6 7 6 6 ...
## $ BPE: Factor w/ 22 levels "PSW1","PSW2",..: 16 16 16 16 16 16 16 16 16 16 ...
summary(DN_SEM_PSA)
## Res BPE
## Very Disagree : 182 PSW1 : 406
## Disagree : 497 PSW2 : 406
## Quite Disagree: 440 PSW3 : 406
## Normal : 813 PSW4 : 406
## Quite Agree :1745 PSW5 : 406
## Agree :3936 PSW6 : 406
## Very Agree :1319 (Other):6496
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_PSA %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8
## 22 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PSB8
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 154 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 7 1.72 1.72%
## 2 PSW1 Disagree 8 1.97 1.97%
## 3 PSW1 Quite Disagree 15 3.69 3.69%
## 4 PSW1 Normal 26 6.4 6.4%
## 5 PSW1 Quite Agree 71 17.5 17.49%
## 6 PSW1 Agree 212 52.2 52.22%
## 7 PSW1 Very Agree 67 16.5 16.5%
## 8 PSW2 Very Disagree 4 0.99 0.99%
## 9 PSW2 Disagree 9 2.22 2.22%
## 10 PSW2 Quite Disagree 14 3.45 3.45%
## # ... with 144 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived safety (PSA) of bus passengers in Da Nang",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 7 1.72 1.72%
## 2 PSW2 Very Disagree 4 0.99 0.99%
## 3 PSW3 Very Disagree 1 0.25 0.25%
## 4 PSW4 Very Disagree 3 0.74 0.74%
## 5 PSW5 Very Disagree 2 0.49 0.49%
## 6 PSW6 Very Disagree 3 0.74 0.74%
## 7 PSW7 Very Disagree 2 0.49 0.49%
## 8 PSS1 Very Disagree 2 0.49 0.49%
## 9 PSS2 Very Disagree 6 1.48 1.48%
## 10 PSS3 Very Disagree 5 1.23 1.23%
## # ... with 12 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 7 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSS5 Disagree 25 6.16 6.16%
## 2 PSS6 Disagree 117 28.8 28.82%
## 3 PSS7 Disagree 102 25.1 25.12%
## 4 PSB1 Disagree 21 5.17 5.17%
## 5 PSB5 Disagree 27 6.65 6.65%
## 6 PSB6 Disagree 15 3.69 3.69%
## 7 PSB7 Disagree 92 22.7 22.66%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Disagree 15 3.69 3.69%
## 2 PSW2 Quite Disagree 14 3.45 3.45%
## 3 PSW3 Quite Disagree 8 1.97 1.97%
## 4 PSW4 Quite Disagree 17 4.19 4.19%
## 5 PSW5 Quite Disagree 6 1.48 1.48%
## 6 PSW6 Quite Disagree 2 0.49 0.49%
## 7 PSW7 Quite Disagree 4 0.99 0.99%
## 8 PSS1 Quite Disagree 8 1.97 1.97%
## 9 PSS2 Quite Disagree 28 6.9 6.9%
## 10 PSS3 Quite Disagree 20 4.93 4.93%
## # ... with 12 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Normal 26 6.4 6.4%
## 2 PSW2 Normal 26 6.4 6.4%
## 3 PSW3 Normal 19 4.68 4.68%
## 4 PSW4 Normal 48 11.8 11.82%
## 5 PSW5 Normal 21 5.17 5.17%
## 6 PSW6 Normal 10 2.46 2.46%
## 7 PSW7 Normal 15 3.69 3.69%
## 8 PSS1 Normal 20 4.93 4.93%
## 9 PSS2 Normal 40 9.85 9.85%
## 10 PSS3 Normal 31 7.64 7.64%
## # ... with 12 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Agree 71 17.5 17.49%
## 2 PSW2 Quite Agree 69 17 17%
## 3 PSW3 Quite Agree 69 17 17%
## 4 PSW4 Quite Agree 97 23.9 23.89%
## 5 PSW5 Quite Agree 50 12.3 12.32%
## 6 PSW6 Quite Agree 38 9.36 9.36%
## 7 PSW7 Quite Agree 50 12.3 12.32%
## 8 PSS1 Quite Agree 53 13.0 13.05%
## 9 PSS2 Quite Agree 95 23.4 23.4%
## 10 PSS3 Quite Agree 97 23.9 23.89%
## # ... with 12 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Agree 212 52.2 52.22%
## 2 PSW2 Agree 215 53.0 52.96%
## 3 PSW3 Agree 237 58.4 58.37%
## 4 PSW4 Agree 174 42.9 42.86%
## 5 PSW5 Agree 204 50.2 50.25%
## 6 PSW6 Agree 215 53.0 52.96%
## 7 PSW7 Agree 223 54.9 54.93%
## 8 PSS1 Agree 200 49.3 49.26%
## 9 PSS2 Agree 185 45.6 45.57%
## 10 PSS3 Agree 197 48.5 48.52%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 67 16.5 16.5%
## 2 PSW2 Very Agree 69 17 17%
## 3 PSW3 Very Agree 67 16.5 16.5%
## 4 PSW4 Very Agree 57 14.0 14.04%
## 5 PSW5 Very Agree 119 29.3 29.31%
## 6 PSW6 Very Agree 137 33.7 33.74%
## 7 PSW7 Very Agree 111 27.3 27.34%
## 8 PSS1 Very Agree 119 29.3 29.31%
## 9 PSS2 Very Agree 41 10.1 10.1%
## 10 PSS3 Very Agree 45 11.1 11.08%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 67 16.5 16.5%
## 2 PSW2 Very Agree 69 17 17%
## 3 PSW3 Very Agree 67 16.5 16.5%
## 4 PSW4 Very Agree 57 14.0 14.04%
## 5 PSW5 Very Agree 119 29.3 29.31%
## 6 PSW6 Very Agree 137 33.7 33.74%
## 7 PSW7 Very Agree 111 27.3 27.34%
## 8 PSS1 Very Agree 119 29.3 29.31%
## 9 PSS2 Very Agree 41 10.1 10.1%
## 10 PSS3 Very Agree 45 11.1 11.08%
## # ... with 12 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 22, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.10.2. Construct PSQ - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSQ
library(tidyverse)
library(compareGroups)
head(DN_SEM_PSQ)
## Res BPE
## 449 6 PQT1
## 450 6 PQT1
## 451 6 PQT1
## 452 6 PQT1
## 453 6 PQT1
## 454 5 PQT1
dim(DN_SEM_PSQ)
## [1] 7308 2
attach(DN_SEM_PSQ)
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_SEM_PSQ = within(DN_SEM_PSQ, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5"))
})
str(DN_SEM_PSQ)
## 'data.frame': 7308 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 6 6 6 6 5 6 7 6 6 ...
## $ BPE: Factor w/ 18 levels "PQT1","PQT2",..: 15 15 15 15 15 15 15 15 15 15 ...
summary(DN_SEM_PSQ)
## Res BPE
## Very Disagree : 68 PQT1 : 406
## Disagree : 141 PQT2 : 406
## Quite Disagree: 331 PQT3 : 406
## Normal : 643 PQT4 : 406
## Quite Agree :1706 PQC1 : 406
## Agree :3253 PQC2 : 406
## Very Agree :1166 (Other):4872
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_PSQ %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2
## [16] PQR3 PQR4 PQR5
## 18 Levels: PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 ... PQR5
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 122 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Disagree 4 0.99 0.99%
## 2 PQT1 Disagree 10 2.46 2.46%
## 3 PQT1 Quite Disagree 35 8.62 8.62%
## 4 PQT1 Normal 38 9.36 9.36%
## 5 PQT1 Quite Agree 123 30.3 30.3%
## 6 PQT1 Agree 150 37.0 36.95%
## 7 PQT1 Very Agree 46 11.3 11.33%
## 8 PQT2 Very Disagree 3 0.74 0.74%
## 9 PQT2 Disagree 2 0.49 0.49%
## 10 PQT2 Quite Disagree 7 1.72 1.72%
## # ... with 112 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived service quality (PSQ) of bus users in Danang city",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 16 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Disagree 4 0.99 0.99%
## 2 PQT2 Very Disagree 3 0.74 0.74%
## 3 PQT3 Very Disagree 9 2.22 2.22%
## 4 PQT4 Very Disagree 5 1.23 1.23%
## 5 PQC1 Very Disagree 2 0.49 0.49%
## 6 PQC2 Very Disagree 2 0.49 0.49%
## 7 PQC3 Very Disagree 1 0.25 0.25%
## 8 PQC4 Very Disagree 1 0.25 0.25%
## 9 PQP1 Very Disagree 11 2.71 2.71%
## 10 PQP3 Very Disagree 7 1.72 1.72%
## 11 PQP4 Very Disagree 1 0.25 0.25%
## 12 PQR1 Very Disagree 6 1.48 1.48%
## 13 PQR2 Very Disagree 4 0.99 0.99%
## 14 PQR3 Very Disagree 4 0.99 0.99%
## 15 PQR4 Very Disagree 4 0.99 0.99%
## 16 PQR5 Very Disagree 4 0.99 0.99%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 6 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT3 Disagree 17 4.19 4.19%
## 2 PQT4 Disagree 21 5.17 5.17%
## 3 PQP1 Disagree 16 3.94 3.94%
## 4 PQP3 Disagree 13 3.2 3.2%
## 5 PQP4 Disagree 18 4.43 4.43%
## 6 PQR1 Disagree 16 3.94 3.94%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Quite Disagree 35 8.62 8.62%
## 2 PQT2 Quite Disagree 7 1.72 1.72%
## 3 PQT3 Quite Disagree 36 8.87 8.87%
## 4 PQT4 Quite Disagree 27 6.65 6.65%
## 5 PQC1 Quite Disagree 18 4.43 4.43%
## 6 PQC2 Quite Disagree 8 1.97 1.97%
## 7 PQC3 Quite Disagree 10 2.46 2.46%
## 8 PQC4 Quite Disagree 6 1.48 1.48%
## 9 PQC5 Quite Disagree 3 0.74 0.74%
## 10 PQP1 Quite Disagree 38 9.36 9.36%
## 11 PQP2 Quite Disagree 17 4.19 4.19%
## 12 PQP3 Quite Disagree 27 6.65 6.65%
## 13 PQP4 Quite Disagree 30 7.39 7.39%
## 14 PQR1 Quite Disagree 16 3.94 3.94%
## 15 PQR2 Quite Disagree 10 2.46 2.46%
## 16 PQR3 Quite Disagree 7 1.72 1.72%
## 17 PQR4 Quite Disagree 16 3.94 3.94%
## 18 PQR5 Quite Disagree 20 4.93 4.93%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Normal 38 9.36 9.36%
## 2 PQT2 Normal 31 7.64 7.64%
## 3 PQT3 Normal 38 9.36 9.36%
## 4 PQT4 Normal 120 29.6 29.56%
## 5 PQC1 Normal 28 6.9 6.9%
## 6 PQC2 Normal 28 6.9 6.9%
## 7 PQC3 Normal 23 5.67 5.67%
## 8 PQC4 Normal 31 7.64 7.64%
## 9 PQC5 Normal 24 5.91 5.91%
## 10 PQP1 Normal 29 7.14 7.14%
## 11 PQP2 Normal 24 5.91 5.91%
## 12 PQP3 Normal 42 10.3 10.34%
## 13 PQP4 Normal 29 7.14 7.14%
## 14 PQR1 Normal 69 17 17%
## 15 PQR2 Normal 24 5.91 5.91%
## 16 PQR3 Normal 20 4.93 4.93%
## 17 PQR4 Normal 23 5.67 5.67%
## 18 PQR5 Normal 22 5.42 5.42%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Quite Agree 123 30.3 30.3%
## 2 PQT2 Quite Agree 62 15.3 15.27%
## 3 PQT3 Quite Agree 106 26.1 26.11%
## 4 PQT4 Quite Agree 87 21.4 21.43%
## 5 PQC1 Quite Agree 94 23.2 23.15%
## 6 PQC2 Quite Agree 85 20.9 20.94%
## 7 PQC3 Quite Agree 94 23.2 23.15%
## 8 PQC4 Quite Agree 82 20.2 20.2%
## 9 PQC5 Quite Agree 76 18.7 18.72%
## 10 PQP1 Quite Agree 126 31.0 31.03%
## 11 PQP2 Quite Agree 94 23.2 23.15%
## 12 PQP3 Quite Agree 114 28.1 28.08%
## 13 PQP4 Quite Agree 117 28.8 28.82%
## 14 PQR1 Quite Agree 93 22.9 22.91%
## 15 PQR2 Quite Agree 91 22.4 22.41%
## 16 PQR3 Quite Agree 59 14.5 14.53%
## 17 PQR4 Quite Agree 79 19.5 19.46%
## 18 PQR5 Quite Agree 124 30.5 30.54%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Agree 150 37.0 36.95%
## 2 PQT2 Agree 227 55.9 55.91%
## 3 PQT3 Agree 159 39.2 39.16%
## 4 PQT4 Agree 112 27.6 27.59%
## 5 PQC1 Agree 175 43.1 43.1%
## 6 PQC2 Agree 214 52.7 52.71%
## 7 PQC3 Agree 204 50.2 50.25%
## 8 PQC4 Agree 229 56.4 56.4%
## 9 PQC5 Agree 231 56.9 56.9%
## 10 PQP1 Agree 149 36.7 36.7%
## 11 PQP2 Agree 194 47.8 47.78%
## 12 PQP3 Agree 164 40.4 40.39%
## 13 PQP4 Agree 154 37.9 37.93%
## 14 PQR1 Agree 170 41.9 41.87%
## 15 PQR2 Agree 186 45.8 45.81%
## 16 PQR3 Agree 193 47.5 47.54%
## 17 PQR4 Agree 175 43.1 43.1%
## 18 PQR5 Agree 167 41.1 41.13%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Agree 46 11.3 11.33%
## 2 PQT2 Very Agree 74 18.2 18.23%
## 3 PQT3 Very Agree 41 10.1 10.1%
## 4 PQT4 Very Agree 34 8.37 8.37%
## 5 PQC1 Very Agree 80 19.7 19.7%
## 6 PQC2 Very Agree 67 16.5 16.5%
## 7 PQC3 Very Agree 72 17.7 17.73%
## 8 PQC4 Very Agree 57 14.0 14.04%
## 9 PQC5 Very Agree 72 17.7 17.73%
## 10 PQP1 Very Agree 37 9.11 9.11%
## 11 PQP2 Very Agree 74 18.2 18.23%
## 12 PQP3 Very Agree 39 9.61 9.61%
## 13 PQP4 Very Agree 57 14.0 14.04%
## 14 PQR1 Very Agree 36 8.87 8.87%
## 15 PQR2 Very Agree 90 22.2 22.17%
## 16 PQR3 Very Agree 120 29.6 29.56%
## 17 PQR4 Very Agree 105 25.9 25.86%
## 18 PQR5 Very Agree 65 16.0 16.01%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Agree 46 11.3 11.33%
## 2 PQT2 Very Agree 74 18.2 18.23%
## 3 PQT3 Very Agree 41 10.1 10.1%
## 4 PQT4 Very Agree 34 8.37 8.37%
## 5 PQC1 Very Agree 80 19.7 19.7%
## 6 PQC2 Very Agree 67 16.5 16.5%
## 7 PQC3 Very Agree 72 17.7 17.73%
## 8 PQC4 Very Agree 57 14.0 14.04%
## 9 PQC5 Very Agree 72 17.7 17.73%
## 10 PQP1 Very Agree 37 9.11 9.11%
## 11 PQP2 Very Agree 74 18.2 18.23%
## 12 PQP3 Very Agree 39 9.61 9.61%
## 13 PQP4 Very Agree 57 14.0 14.04%
## 14 PQR1 Very Agree 36 8.87 8.87%
## 15 PQR2 Very Agree 90 22.2 22.17%
## 16 PQR3 Very Agree 120 29.6 29.56%
## 17 PQR4 Very Agree 105 25.9 25.86%
## 18 PQR5 Very Agree 65 16.0 16.01%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 23, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.10.3. Construct thuộc nhóm Stimulus - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSQ
library(tidyverse)
library(compareGroups)
head(DN_SEM_S)
## Res BPE
## 449 5 PHB1
## 450 5 PHB1
## 451 5 PHB1
## 452 5 PHB1
## 453 6 PHB1
## 454 6 PHB1
dim(DN_SEM_S)
## [1] 7714 2
attach(DN_SEM_S)
## The following objects are masked from DN_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_SEM_S = within(DN_SEM_S, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PBH1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3"))
})
str(DN_SEM_S)
## 'data.frame': 7714 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 5 5 5 5 6 6 5 7 5 6 ...
## $ BPE: Factor w/ 19 levels "PBH1","PHB2",..: 12 12 12 12 12 12 12 12 12 12 ...
summary(DN_SEM_S)
## Res BPE
## Very Disagree : 33 PBH1 : 406
## Disagree : 198 PHB2 : 406
## Quite Disagree: 344 PHB3 : 406
## Normal : 691 PHB4 : 406
## Quite Agree :1971 PHB5 : 406
## Agree :3169 PEB1 : 406
## Very Agree :1308 (Other):5278
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_S %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PBH1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6
## [16] PDE7 PSO1 PSO2 PSO3
## 19 Levels: PBH1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 ... PSO3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 124 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Disagree 6 1.48 1.48%
## 2 PBH1 Disagree 14 3.45 3.45%
## 3 PBH1 Quite Disagree 40 9.85 9.85%
## 4 PBH1 Normal 47 11.6 11.58%
## 5 PBH1 Quite Agree 112 27.6 27.59%
## 6 PBH1 Agree 137 33.7 33.74%
## 7 PBH1 Very Agree 50 12.3 12.32%
## 8 PHB2 Very Disagree 1 0.25 0.25%
## 9 PHB2 Disagree 4 0.99 0.99%
## 10 PHB2 Quite Disagree 12 2.96 2.96%
## # ... with 114 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived health (PHB), perceived environmental benefits (BEB), perceived social benefits (PSO), perceived design (PDE) of bus passengers in Da Nang",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 13 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Disagree 6 1.48 1.48%
## 2 PHB2 Very Disagree 1 0.25 0.25%
## 3 PHB3 Very Disagree 3 0.74 0.74%
## 4 PHB4 Very Disagree 1 0.25 0.25%
## 5 PHB5 Very Disagree 2 0.49 0.49%
## 6 PEB1 Very Disagree 2 0.49 0.49%
## 7 PEB2 Very Disagree 6 1.48 1.48%
## 8 PEB3 Very Disagree 1 0.25 0.25%
## 9 PEB4 Very Disagree 1 0.25 0.25%
## 10 PDE3 Very Disagree 1 0.25 0.25%
## 11 PSO1 Very Disagree 3 0.74 0.74%
## 12 PSO2 Very Disagree 4 0.99 0.99%
## 13 PSO3 Very Disagree 2 0.49 0.49%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 4 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Disagree 14 3.45 3.45%
## 2 PSO1 Disagree 39 9.61 9.61%
## 3 PSO2 Disagree 44 10.8 10.84%
## 4 PSO3 Disagree 20 4.93 4.93%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Quite Disagree 40 9.85 9.85%
## 2 PHB2 Quite Disagree 12 2.96 2.96%
## 3 PHB3 Quite Disagree 19 4.68 4.68%
## 4 PHB4 Quite Disagree 25 6.16 6.16%
## 5 PHB5 Quite Disagree 16 3.94 3.94%
## 6 PEB1 Quite Disagree 30 7.39 7.39%
## 7 PEB2 Quite Disagree 23 5.67 5.67%
## 8 PEB3 Quite Disagree 2 0.49 0.49%
## 9 PEB4 Quite Disagree 8 1.97 1.97%
## 10 PDE1 Quite Disagree 14 3.45 3.45%
## 11 PDE2 Quite Disagree 15 3.69 3.69%
## 12 PDE3 Quite Disagree 15 3.69 3.69%
## 13 PDE4 Quite Disagree 7 1.72 1.72%
## 14 PDE5 Quite Disagree 25 6.16 6.16%
## 15 PDE6 Quite Disagree 2 0.49 0.49%
## 16 PDE7 Quite Disagree 1 0.25 0.25%
## 17 PSO1 Quite Disagree 25 6.16 6.16%
## 18 PSO2 Quite Disagree 36 8.87 8.87%
## 19 PSO3 Quite Disagree 29 7.14 7.14%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Normal 47 11.6 11.58%
## 2 PHB2 Normal 31 7.64 7.64%
## 3 PHB3 Normal 49 12.1 12.07%
## 4 PHB4 Normal 53 13.0 13.05%
## 5 PHB5 Normal 28 6.9 6.9%
## 6 PEB1 Normal 38 9.36 9.36%
## 7 PEB2 Normal 46 11.3 11.33%
## 8 PEB3 Normal 13 3.2 3.2%
## 9 PEB4 Normal 17 4.19 4.19%
## 10 PDE1 Normal 25 6.16 6.16%
## 11 PDE2 Normal 26 6.4 6.4%
## 12 PDE3 Normal 35 8.62 8.62%
## 13 PDE4 Normal 17 4.19 4.19%
## 14 PDE5 Normal 30 7.39 7.39%
## 15 PDE6 Normal 13 3.2 3.2%
## 16 PDE7 Normal 17 4.19 4.19%
## 17 PSO1 Normal 78 19.2 19.21%
## 18 PSO2 Normal 62 15.3 15.27%
## 19 PSO3 Normal 66 16.3 16.26%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Quite Agree 112 27.6 27.59%
## 2 PHB2 Quite Agree 85 20.9 20.94%
## 3 PHB3 Quite Agree 115 28.3 28.33%
## 4 PHB4 Quite Agree 118 29.1 29.06%
## 5 PHB5 Quite Agree 87 21.4 21.43%
## 6 PEB1 Quite Agree 115 28.3 28.33%
## 7 PEB2 Quite Agree 117 28.8 28.82%
## 8 PEB3 Quite Agree 76 18.7 18.72%
## 9 PEB4 Quite Agree 98 24.1 24.14%
## 10 PDE1 Quite Agree 85 20.9 20.94%
## 11 PDE2 Quite Agree 88 21.7 21.67%
## 12 PDE3 Quite Agree 139 34.2 34.24%
## 13 PDE4 Quite Agree 95 23.4 23.4%
## 14 PDE5 Quite Agree 104 25.6 25.62%
## 15 PDE6 Quite Agree 73 18.0 17.98%
## 16 PDE7 Quite Agree 69 17 17%
## 17 PSO1 Quite Agree 152 37.4 37.44%
## 18 PSO2 Quite Agree 139 34.2 34.24%
## 19 PSO3 Quite Agree 104 25.6 25.62%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Agree 137 33.7 33.74%
## 2 PHB2 Agree 201 49.5 49.51%
## 3 PHB3 Agree 164 40.4 40.39%
## 4 PHB4 Agree 149 36.7 36.7%
## 5 PHB5 Agree 204 50.2 50.25%
## 6 PEB1 Agree 155 38.2 38.18%
## 7 PEB2 Agree 158 38.9 38.92%
## 8 PEB3 Agree 208 51.2 51.23%
## 9 PEB4 Agree 185 45.6 45.57%
## 10 PDE1 Agree 192 47.3 47.29%
## 11 PDE2 Agree 191 47.0 47.04%
## 12 PDE3 Agree 158 38.9 38.92%
## 13 PDE4 Agree 179 44.1 44.09%
## 14 PDE5 Agree 171 42.1 42.12%
## 15 PDE6 Agree 179 44.1 44.09%
## 16 PDE7 Agree 192 47.3 47.29%
## 17 PSO1 Agree 90 22.2 22.17%
## 18 PSO2 Agree 98 24.1 24.14%
## 19 PSO3 Agree 158 38.9 38.92%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Agree 50 12.3 12.32%
## 2 PHB2 Very Agree 72 17.7 17.73%
## 3 PHB3 Very Agree 49 12.1 12.07%
## 4 PHB4 Very Agree 49 12.1 12.07%
## 5 PHB5 Very Agree 65 16.0 16.01%
## 6 PEB1 Very Agree 57 14.0 14.04%
## 7 PEB2 Very Agree 47 11.6 11.58%
## 8 PEB3 Very Agree 106 26.1 26.11%
## 9 PEB4 Very Agree 93 22.9 22.91%
## 10 PDE1 Very Agree 85 20.9 20.94%
## 11 PDE2 Very Agree 81 20.0 19.95%
## 12 PDE3 Very Agree 52 12.8 12.81%
## 13 PDE4 Very Agree 102 25.1 25.12%
## 14 PDE5 Very Agree 65 16.0 16.01%
## 15 PDE6 Very Agree 139 34.2 34.24%
## 16 PDE7 Very Agree 127 31.3 31.28%
## 17 PSO1 Very Agree 19 4.68 4.68%
## 18 PSO2 Very Agree 23 5.67 5.67%
## 19 PSO3 Very Agree 27 6.65 6.65%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Agree 50 12.3 12.32%
## 2 PHB2 Very Agree 72 17.7 17.73%
## 3 PHB3 Very Agree 49 12.1 12.07%
## 4 PHB4 Very Agree 49 12.1 12.07%
## 5 PHB5 Very Agree 65 16.0 16.01%
## 6 PEB1 Very Agree 57 14.0 14.04%
## 7 PEB2 Very Agree 47 11.6 11.58%
## 8 PEB3 Very Agree 106 26.1 26.11%
## 9 PEB4 Very Agree 93 22.9 22.91%
## 10 PDE1 Very Agree 85 20.9 20.94%
## 11 PDE2 Very Agree 81 20.0 19.95%
## 12 PDE3 Very Agree 52 12.8 12.81%
## 13 PDE4 Very Agree 102 25.1 25.12%
## 14 PDE5 Very Agree 65 16.0 16.01%
## 15 PDE6 Very Agree 139 34.2 34.24%
## 16 PDE7 Very Agree 127 31.3 31.28%
## 17 PSO1 Very Agree 19 4.68 4.68%
## 18 PSO2 Very Agree 23 5.67 5.67%
## 19 PSO3 Very Agree 27 6.65 6.65%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 23, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.10.4. Construct thuộc nhóm Organism-Response - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSQ
library(tidyverse)
library(compareGroups)
head(DN_SEM_OR)
## Res BPE
## 449 6 IMA1
## 450 6 IMA1
## 451 6 IMA1
## 452 5 IMA1
## 453 6 IMA1
## 454 6 IMA1
dim(DN_SEM_OR)
## [1] 7308 2
attach(DN_SEM_OR)
## The following objects are masked from DN_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
DN_SEM_OR = within(DN_SEM_OR, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PVA1", "PVA2", "PVA3", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7"))
})
str(DN_SEM_OR)
## 'data.frame': 7308 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 6 6 5 6 6 5 6 3 6 ...
## $ BPE: Factor w/ 18 levels "IMA1","IMA2",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(DN_SEM_OR)
## Res BPE
## Very Disagree : 7 IMA1 : 406
## Disagree : 43 IMA2 : 406
## Quite Disagree: 187 IMA3 : 406
## Normal : 510 IMA4 : 406
## Quite Agree :1785 IMA5 : 406
## Agree :3557 PVA1 : 406
## Very Agree :1219 (Other):4872
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_OR %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4
## [16] LOY5 LOY6 LOY7
## 18 Levels: IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 ... LOY7
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 113 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Disagree 1 0.25 0.25%
## 2 IMA1 Disagree 1 0.25 0.25%
## 3 IMA1 Quite Disagree 11 2.71 2.71%
## 4 IMA1 Normal 54 13.3 13.3%
## 5 IMA1 Quite Agree 138 34.0 33.99%
## 6 IMA1 Agree 169 41.6 41.63%
## 7 IMA1 Very Agree 32 7.88 7.88%
## 8 IMA2 Disagree 1 0.25 0.25%
## 9 IMA2 Quite Disagree 6 1.48 1.48%
## 10 IMA2 Normal 46 11.3 11.33%
## # ... with 103 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived image (IMA), perceived value (PVA), satisfation (SAT), loyalty (LOY) towards urban bus systems in Da Nang",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 7 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Disagree 1 0.25 0.25%
## 2 SAT1 Very Disagree 1 0.25 0.25%
## 3 SAT2 Very Disagree 1 0.25 0.25%
## 4 SAT3 Very Disagree 1 0.25 0.25%
## 5 LOY1 Very Disagree 1 0.25 0.25%
## 6 LOY6 Very Disagree 1 0.25 0.25%
## 7 LOY7 Very Disagree 1 0.25 0.25%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 1 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 SAT3 Disagree 14 3.45 3.45%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Quite Disagree 11 2.71 2.71%
## 2 IMA2 Quite Disagree 6 1.48 1.48%
## 3 IMA3 Quite Disagree 3 0.74 0.74%
## 4 IMA4 Quite Disagree 7 1.72 1.72%
## 5 IMA5 Quite Disagree 4 0.99 0.99%
## 6 PVA1 Quite Disagree 5 1.23 1.23%
## 7 PVA2 Quite Disagree 5 1.23 1.23%
## 8 PVA3 Quite Disagree 4 0.99 0.99%
## 9 SAT1 Quite Disagree 16 3.94 3.94%
## 10 SAT2 Quite Disagree 12 2.96 2.96%
## 11 SAT3 Quite Disagree 32 7.88 7.88%
## 12 LOY1 Quite Disagree 6 1.48 1.48%
## 13 LOY2 Quite Disagree 10 2.46 2.46%
## 14 LOY3 Quite Disagree 22 5.42 5.42%
## 15 LOY4 Quite Disagree 6 1.48 1.48%
## 16 LOY5 Quite Disagree 19 4.68 4.68%
## 17 LOY6 Quite Disagree 10 2.46 2.46%
## 18 LOY7 Quite Disagree 9 2.22 2.22%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Normal 54 13.3 13.3%
## 2 IMA2 Normal 46 11.3 11.33%
## 3 IMA3 Normal 39 9.61 9.61%
## 4 IMA4 Normal 26 6.4 6.4%
## 5 IMA5 Normal 23 5.67 5.67%
## 6 PVA1 Normal 25 6.16 6.16%
## 7 PVA2 Normal 23 5.67 5.67%
## 8 PVA3 Normal 30 7.39 7.39%
## 9 SAT1 Normal 38 9.36 9.36%
## 10 SAT2 Normal 31 7.64 7.64%
## 11 SAT3 Normal 41 10.1 10.1%
## 12 LOY1 Normal 18 4.43 4.43%
## 13 LOY2 Normal 12 2.96 2.96%
## 14 LOY3 Normal 25 6.16 6.16%
## 15 LOY4 Normal 4 0.99 0.99%
## 16 LOY5 Normal 31 7.64 7.64%
## 17 LOY6 Normal 28 6.9 6.9%
## 18 LOY7 Normal 16 3.94 3.94%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Quite Agree 138 34.0 33.99%
## 2 IMA2 Quite Agree 113 27.8 27.83%
## 3 IMA3 Quite Agree 106 26.1 26.11%
## 4 IMA4 Quite Agree 102 25.1 25.12%
## 5 IMA5 Quite Agree 96 23.6 23.65%
## 6 PVA1 Quite Agree 90 22.2 22.17%
## 7 PVA2 Quite Agree 86 21.2 21.18%
## 8 PVA3 Quite Agree 74 18.2 18.23%
## 9 SAT1 Quite Agree 122 30.0 30.05%
## 10 SAT2 Quite Agree 114 28.1 28.08%
## 11 SAT3 Quite Agree 102 25.1 25.12%
## 12 LOY1 Quite Agree 65 16.0 16.01%
## 13 LOY2 Quite Agree 64 15.8 15.76%
## 14 LOY3 Quite Agree 100 24.6 24.63%
## 15 LOY4 Quite Agree 95 23.4 23.4%
## 16 LOY5 Quite Agree 118 29.1 29.06%
## 17 LOY6 Quite Agree 101 24.9 24.88%
## 18 LOY7 Quite Agree 99 24.4 24.38%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Agree 169 41.6 41.63%
## 2 IMA2 Agree 207 51.0 50.99%
## 3 IMA3 Agree 214 52.7 52.71%
## 4 IMA4 Agree 220 54.2 54.19%
## 5 IMA5 Agree 231 56.9 56.9%
## 6 PVA1 Agree 219 53.9 53.94%
## 7 PVA2 Agree 221 54.4 54.43%
## 8 PVA3 Agree 219 53.9 53.94%
## 9 SAT1 Agree 160 39.4 39.41%
## 10 SAT2 Agree 167 41.1 41.13%
## 11 SAT3 Agree 140 34.5 34.48%
## 12 LOY1 Agree 220 54.2 54.19%
## 13 LOY2 Agree 213 52.5 52.46%
## 14 LOY3 Agree 176 43.4 43.35%
## 15 LOY4 Agree 212 52.2 52.22%
## 16 LOY5 Agree 173 42.6 42.61%
## 17 LOY6 Agree 189 46.6 46.55%
## 18 LOY7 Agree 207 51.0 50.99%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Agree 32 7.88 7.88%
## 2 IMA2 Very Agree 33 8.13 8.13%
## 3 IMA3 Very Agree 43 10.6 10.59%
## 4 IMA4 Very Agree 51 12.6 12.56%
## 5 IMA5 Very Agree 51 12.6 12.56%
## 6 PVA1 Very Agree 65 16.0 16.01%
## 7 PVA2 Very Agree 70 17.2 17.24%
## 8 PVA3 Very Agree 78 19.2 19.21%
## 9 SAT1 Very Agree 69 17 17%
## 10 SAT2 Very Agree 79 19.5 19.46%
## 11 SAT3 Very Agree 76 18.7 18.72%
## 12 LOY1 Very Agree 95 23.4 23.4%
## 13 LOY2 Very Agree 105 25.9 25.86%
## 14 LOY3 Very Agree 73 18.0 17.98%
## 15 LOY4 Very Agree 88 21.7 21.67%
## 16 LOY5 Very Agree 63 15.5 15.52%
## 17 LOY6 Very Agree 76 18.7 18.72%
## 18 LOY7 Very Agree 72 17.7 17.73%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Agree 32 7.88 7.88%
## 2 IMA2 Very Agree 33 8.13 8.13%
## 3 IMA3 Very Agree 43 10.6 10.59%
## 4 IMA4 Very Agree 51 12.6 12.56%
## 5 IMA5 Very Agree 51 12.6 12.56%
## 6 PVA1 Very Agree 65 16.0 16.01%
## 7 PVA2 Very Agree 70 17.2 17.24%
## 8 PVA3 Very Agree 78 19.2 19.21%
## 9 SAT1 Very Agree 69 17 17%
## 10 SAT2 Very Agree 79 19.5 19.46%
## 11 SAT3 Very Agree 76 18.7 18.72%
## 12 LOY1 Very Agree 95 23.4 23.4%
## 13 LOY2 Very Agree 105 25.9 25.86%
## 14 LOY3 Very Agree 73 18.0 17.98%
## 15 LOY4 Very Agree 88 21.7 21.67%
## 16 LOY5 Very Agree 63 15.5 15.52%
## 17 LOY6 Very Agree 76 18.7 18.72%
## 18 LOY7 Very Agree 72 17.7 17.73%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 23, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.11. Vẽ biểu đồ likert cho dữ liệu của Đà Nẵng theo từng nhóm constructs-Nhãn tiếng việt 3.11.1. Construct PSA - Nhãn tiếng việt
DN_SEM_PSA_v = within(DN_SEM_PSA, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8"))
})
str(DN_SEM_PSA_v)
## 'data.frame': 8932 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 6 6 1 6 6 6 7 6 6 ...
## $ BPE: Factor w/ 22 levels "PSW1","PSW2",..: 16 16 16 16 16 16 16 16 16 16 ...
summary(DN_SEM_PSA_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 182 PSW1 : 406
## Không d<U+1ED3>ng ý : 497 PSW2 : 406
## Khá không d<U+1ED3>ng ý : 440 PSW3 : 406
## Bình thu<U+1EDD>ng : 813 PSW4 : 406
## Khá d<U+1ED3>ng ý :1745 PSW5 : 406
## Ð<U+1ED3>ng ý :3936 PSW6 : 406
## R<U+1EA5>t d<U+1ED3>ng ý :1319 (Other):6496
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_PSA_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8
## 22 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PSB8
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 154 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.72 1.72%
## 2 PSW1 Không d<U+1ED3>ng ý 8 1.97 1.97%
## 3 PSW1 Khá không d<U+1ED3>ng ý 15 3.69 3.69%
## 4 PSW1 Bình thu<U+1EDD>ng 26 6.4 6.4%
## 5 PSW1 Khá d<U+1ED3>ng ý 71 17.5 17.49%
## 6 PSW1 Ð<U+1ED3>ng ý 212 52.2 52.22%
## 7 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 8 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 9 PSW2 Không d<U+1ED3>ng ý 9 2.22 2.22%
## 10 PSW2 Khá không d<U+1ED3>ng ý 14 3.45 3.45%
## # ... with 144 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn an to\u00E0n (PSA) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB \u0110\u00E0 N\u1EB5ng\r\n",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.72 1.72%
## 2 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 3 PSW3 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 4 PSW4 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 5 PSW5 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 6 PSW6 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 7 PSW7 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 8 PSS1 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 9 PSS2 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.48 1.48%
## 10 PSS3 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.23 1.23%
## # ... with 12 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Không d<U+1ED3>ng ý 8 1.97 1.97%
## 2 PSW2 Không d<U+1ED3>ng ý 9 2.22 2.22%
## 3 PSW3 Không d<U+1ED3>ng ý 5 1.23 1.23%
## 4 PSW4 Không d<U+1ED3>ng ý 10 2.46 2.46%
## 5 PSW5 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 6 PSW6 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 7 PSW7 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 8 PSS1 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 9 PSS2 Không d<U+1ED3>ng ý 11 2.71 2.71%
## 10 PSS3 Không d<U+1ED3>ng ý 11 2.71 2.71%
## # ... with 12 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá không d<U+1ED3>ng ý 15 3.69 3.69%
## 2 PSW2 Khá không d<U+1ED3>ng ý 14 3.45 3.45%
## 3 PSW3 Khá không d<U+1ED3>ng ý 8 1.97 1.97%
## 4 PSW4 Khá không d<U+1ED3>ng ý 17 4.19 4.19%
## 5 PSW5 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 6 PSW6 Khá không d<U+1ED3>ng ý 2 0.49 0.49%
## 7 PSW7 Khá không d<U+1ED3>ng ý 4 0.99 0.99%
## 8 PSS1 Khá không d<U+1ED3>ng ý 8 1.97 1.97%
## 9 PSS2 Khá không d<U+1ED3>ng ý 28 6.9 6.9%
## 10 PSS3 Khá không d<U+1ED3>ng ý 20 4.93 4.93%
## # ... with 12 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Bình thu<U+1EDD>ng 26 6.4 6.4%
## 2 PSW2 Bình thu<U+1EDD>ng 26 6.4 6.4%
## 3 PSW3 Bình thu<U+1EDD>ng 19 4.68 4.68%
## 4 PSW4 Bình thu<U+1EDD>ng 48 11.8 11.82%
## 5 PSW5 Bình thu<U+1EDD>ng 21 5.17 5.17%
## 6 PSW6 Bình thu<U+1EDD>ng 10 2.46 2.46%
## 7 PSW7 Bình thu<U+1EDD>ng 15 3.69 3.69%
## 8 PSS1 Bình thu<U+1EDD>ng 20 4.93 4.93%
## 9 PSS2 Bình thu<U+1EDD>ng 40 9.85 9.85%
## 10 PSS3 Bình thu<U+1EDD>ng 31 7.64 7.64%
## # ... with 12 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá d<U+1ED3>ng ý 71 17.5 17.49%
## 2 PSW2 Khá d<U+1ED3>ng ý 69 17 17%
## 3 PSW3 Khá d<U+1ED3>ng ý 69 17 17%
## 4 PSW4 Khá d<U+1ED3>ng ý 97 23.9 23.89%
## 5 PSW5 Khá d<U+1ED3>ng ý 50 12.3 12.32%
## 6 PSW6 Khá d<U+1ED3>ng ý 38 9.36 9.36%
## 7 PSW7 Khá d<U+1ED3>ng ý 50 12.3 12.32%
## 8 PSS1 Khá d<U+1ED3>ng ý 53 13.0 13.05%
## 9 PSS2 Khá d<U+1ED3>ng ý 95 23.4 23.4%
## 10 PSS3 Khá d<U+1ED3>ng ý 97 23.9 23.89%
## # ... with 12 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Ð<U+1ED3>ng ý 212 52.2 52.22%
## 2 PSW2 Ð<U+1ED3>ng ý 215 53.0 52.96%
## 3 PSW3 Ð<U+1ED3>ng ý 237 58.4 58.37%
## 4 PSW4 Ð<U+1ED3>ng ý 174 42.9 42.86%
## 5 PSW5 Ð<U+1ED3>ng ý 204 50.2 50.25%
## 6 PSW6 Ð<U+1ED3>ng ý 215 53.0 52.96%
## 7 PSW7 Ð<U+1ED3>ng ý 223 54.9 54.93%
## 8 PSS1 Ð<U+1ED3>ng ý 200 49.3 49.26%
## 9 PSS2 Ð<U+1ED3>ng ý 185 45.6 45.57%
## 10 PSS3 Ð<U+1ED3>ng ý 197 48.5 48.52%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 69 17 17%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 119 29.3 29.31%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 137 33.7 33.74%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 111 27.3 27.34%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 119 29.3 29.31%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 41 10.1 10.1%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 45 11.1 11.08%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 69 17 17%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 119 29.3 29.31%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 137 33.7 33.74%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 111 27.3 27.34%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 119 29.3 29.31%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 41 10.1 10.1%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 45 11.1 11.08%
## # ... with 12 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.11.2. Construct PSQ-Nhãn tiếng việt
DN_SEM_PSQ_v = within(DN_SEM_PSQ, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5"))
})
str(DN_SEM_PSQ_v)
## 'data.frame': 7308 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 6 6 6 6 5 6 7 6 6 ...
## $ BPE: Factor w/ 18 levels "PQT1","PQT2",..: 15 15 15 15 15 15 15 15 15 15 ...
summary(DN_SEM_PSQ_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 68 PQT1 : 406
## Không d<U+1ED3>ng ý : 141 PQT2 : 406
## Khá không d<U+1ED3>ng ý : 331 PQT3 : 406
## Bình thu<U+1EDD>ng : 643 PQT4 : 406
## Khá d<U+1ED3>ng ý :1706 PQC1 : 406
## Ð<U+1ED3>ng ý :3253 PQC2 : 406
## R<U+1EA5>t d<U+1ED3>ng ý :1166 (Other):4872
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_PSQ_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2
## [16] PQR3 PQR4 PQR5
## 18 Levels: PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 ... PQR5
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 122 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 2 PQT1 Không d<U+1ED3>ng ý 10 2.46 2.46%
## 3 PQT1 Khá không d<U+1ED3>ng ý 35 8.62 8.62%
## 4 PQT1 Bình thu<U+1EDD>ng 38 9.36 9.36%
## 5 PQT1 Khá d<U+1ED3>ng ý 123 30.3 30.3%
## 6 PQT1 Ð<U+1ED3>ng ý 150 37.0 36.95%
## 7 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 46 11.3 11.33%
## 8 PQT2 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 9 PQT2 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 10 PQT2 Khá không d<U+1ED3>ng ý 7 1.72 1.72%
## # ... with 112 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn ch\u1EA5t l\u01B0\u1EE3ng d\u1ECBch v\u1EE5 (PSQ) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB \u0110\u00E0 N\u1EB5ng\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 16 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 2 PQT2 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 3 PQT3 R<U+1EA5>t không d<U+1ED3>ng ý 9 2.22 2.22%
## 4 PQT4 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.23 1.23%
## 5 PQC1 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 6 PQC2 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 7 PQC3 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 8 PQC4 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 9 PQP1 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.71 2.71%
## 10 PQP3 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.72 1.72%
## 11 PQP4 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 12 PQR1 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.48 1.48%
## 13 PQR2 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 14 PQR3 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 15 PQR4 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 16 PQR5 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 16 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Không d<U+1ED3>ng ý 10 2.46 2.46%
## 2 PQT2 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 3 PQT3 Không d<U+1ED3>ng ý 17 4.19 4.19%
## 4 PQT4 Không d<U+1ED3>ng ý 21 5.17 5.17%
## 5 PQC1 Không d<U+1ED3>ng ý 9 2.22 2.22%
## 6 PQC2 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 7 PQC3 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 8 PQP1 Không d<U+1ED3>ng ý 16 3.94 3.94%
## 9 PQP2 Không d<U+1ED3>ng ý 3 0.74 0.74%
## 10 PQP3 Không d<U+1ED3>ng ý 13 3.2 3.2%
## 11 PQP4 Không d<U+1ED3>ng ý 18 4.43 4.43%
## 12 PQR1 Không d<U+1ED3>ng ý 16 3.94 3.94%
## 13 PQR2 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 14 PQR3 Không d<U+1ED3>ng ý 3 0.74 0.74%
## 15 PQR4 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 16 PQR5 Không d<U+1ED3>ng ý 4 0.99 0.99%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Khá không d<U+1ED3>ng ý 35 8.62 8.62%
## 2 PQT2 Khá không d<U+1ED3>ng ý 7 1.72 1.72%
## 3 PQT3 Khá không d<U+1ED3>ng ý 36 8.87 8.87%
## 4 PQT4 Khá không d<U+1ED3>ng ý 27 6.65 6.65%
## 5 PQC1 Khá không d<U+1ED3>ng ý 18 4.43 4.43%
## 6 PQC2 Khá không d<U+1ED3>ng ý 8 1.97 1.97%
## 7 PQC3 Khá không d<U+1ED3>ng ý 10 2.46 2.46%
## 8 PQC4 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 9 PQC5 Khá không d<U+1ED3>ng ý 3 0.74 0.74%
## 10 PQP1 Khá không d<U+1ED3>ng ý 38 9.36 9.36%
## 11 PQP2 Khá không d<U+1ED3>ng ý 17 4.19 4.19%
## 12 PQP3 Khá không d<U+1ED3>ng ý 27 6.65 6.65%
## 13 PQP4 Khá không d<U+1ED3>ng ý 30 7.39 7.39%
## 14 PQR1 Khá không d<U+1ED3>ng ý 16 3.94 3.94%
## 15 PQR2 Khá không d<U+1ED3>ng ý 10 2.46 2.46%
## 16 PQR3 Khá không d<U+1ED3>ng ý 7 1.72 1.72%
## 17 PQR4 Khá không d<U+1ED3>ng ý 16 3.94 3.94%
## 18 PQR5 Khá không d<U+1ED3>ng ý 20 4.93 4.93%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Bình thu<U+1EDD>ng 38 9.36 9.36%
## 2 PQT2 Bình thu<U+1EDD>ng 31 7.64 7.64%
## 3 PQT3 Bình thu<U+1EDD>ng 38 9.36 9.36%
## 4 PQT4 Bình thu<U+1EDD>ng 120 29.6 29.56%
## 5 PQC1 Bình thu<U+1EDD>ng 28 6.9 6.9%
## 6 PQC2 Bình thu<U+1EDD>ng 28 6.9 6.9%
## 7 PQC3 Bình thu<U+1EDD>ng 23 5.67 5.67%
## 8 PQC4 Bình thu<U+1EDD>ng 31 7.64 7.64%
## 9 PQC5 Bình thu<U+1EDD>ng 24 5.91 5.91%
## 10 PQP1 Bình thu<U+1EDD>ng 29 7.14 7.14%
## 11 PQP2 Bình thu<U+1EDD>ng 24 5.91 5.91%
## 12 PQP3 Bình thu<U+1EDD>ng 42 10.3 10.34%
## 13 PQP4 Bình thu<U+1EDD>ng 29 7.14 7.14%
## 14 PQR1 Bình thu<U+1EDD>ng 69 17 17%
## 15 PQR2 Bình thu<U+1EDD>ng 24 5.91 5.91%
## 16 PQR3 Bình thu<U+1EDD>ng 20 4.93 4.93%
## 17 PQR4 Bình thu<U+1EDD>ng 23 5.67 5.67%
## 18 PQR5 Bình thu<U+1EDD>ng 22 5.42 5.42%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Khá d<U+1ED3>ng ý 123 30.3 30.3%
## 2 PQT2 Khá d<U+1ED3>ng ý 62 15.3 15.27%
## 3 PQT3 Khá d<U+1ED3>ng ý 106 26.1 26.11%
## 4 PQT4 Khá d<U+1ED3>ng ý 87 21.4 21.43%
## 5 PQC1 Khá d<U+1ED3>ng ý 94 23.2 23.15%
## 6 PQC2 Khá d<U+1ED3>ng ý 85 20.9 20.94%
## 7 PQC3 Khá d<U+1ED3>ng ý 94 23.2 23.15%
## 8 PQC4 Khá d<U+1ED3>ng ý 82 20.2 20.2%
## 9 PQC5 Khá d<U+1ED3>ng ý 76 18.7 18.72%
## 10 PQP1 Khá d<U+1ED3>ng ý 126 31.0 31.03%
## 11 PQP2 Khá d<U+1ED3>ng ý 94 23.2 23.15%
## 12 PQP3 Khá d<U+1ED3>ng ý 114 28.1 28.08%
## 13 PQP4 Khá d<U+1ED3>ng ý 117 28.8 28.82%
## 14 PQR1 Khá d<U+1ED3>ng ý 93 22.9 22.91%
## 15 PQR2 Khá d<U+1ED3>ng ý 91 22.4 22.41%
## 16 PQR3 Khá d<U+1ED3>ng ý 59 14.5 14.53%
## 17 PQR4 Khá d<U+1ED3>ng ý 79 19.5 19.46%
## 18 PQR5 Khá d<U+1ED3>ng ý 124 30.5 30.54%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Ð<U+1ED3>ng ý 150 37.0 36.95%
## 2 PQT2 Ð<U+1ED3>ng ý 227 55.9 55.91%
## 3 PQT3 Ð<U+1ED3>ng ý 159 39.2 39.16%
## 4 PQT4 Ð<U+1ED3>ng ý 112 27.6 27.59%
## 5 PQC1 Ð<U+1ED3>ng ý 175 43.1 43.1%
## 6 PQC2 Ð<U+1ED3>ng ý 214 52.7 52.71%
## 7 PQC3 Ð<U+1ED3>ng ý 204 50.2 50.25%
## 8 PQC4 Ð<U+1ED3>ng ý 229 56.4 56.4%
## 9 PQC5 Ð<U+1ED3>ng ý 231 56.9 56.9%
## 10 PQP1 Ð<U+1ED3>ng ý 149 36.7 36.7%
## 11 PQP2 Ð<U+1ED3>ng ý 194 47.8 47.78%
## 12 PQP3 Ð<U+1ED3>ng ý 164 40.4 40.39%
## 13 PQP4 Ð<U+1ED3>ng ý 154 37.9 37.93%
## 14 PQR1 Ð<U+1ED3>ng ý 170 41.9 41.87%
## 15 PQR2 Ð<U+1ED3>ng ý 186 45.8 45.81%
## 16 PQR3 Ð<U+1ED3>ng ý 193 47.5 47.54%
## 17 PQR4 Ð<U+1ED3>ng ý 175 43.1 43.1%
## 18 PQR5 Ð<U+1ED3>ng ý 167 41.1 41.13%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 46 11.3 11.33%
## 2 PQT2 R<U+1EA5>t d<U+1ED3>ng ý 74 18.2 18.23%
## 3 PQT3 R<U+1EA5>t d<U+1ED3>ng ý 41 10.1 10.1%
## 4 PQT4 R<U+1EA5>t d<U+1ED3>ng ý 34 8.37 8.37%
## 5 PQC1 R<U+1EA5>t d<U+1ED3>ng ý 80 19.7 19.7%
## 6 PQC2 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 7 PQC3 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
## 8 PQC4 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 9 PQC5 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
## 10 PQP1 R<U+1EA5>t d<U+1ED3>ng ý 37 9.11 9.11%
## 11 PQP2 R<U+1EA5>t d<U+1ED3>ng ý 74 18.2 18.23%
## 12 PQP3 R<U+1EA5>t d<U+1ED3>ng ý 39 9.61 9.61%
## 13 PQP4 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 14 PQR1 R<U+1EA5>t d<U+1ED3>ng ý 36 8.87 8.87%
## 15 PQR2 R<U+1EA5>t d<U+1ED3>ng ý 90 22.2 22.17%
## 16 PQR3 R<U+1EA5>t d<U+1ED3>ng ý 120 29.6 29.56%
## 17 PQR4 R<U+1EA5>t d<U+1ED3>ng ý 105 25.9 25.86%
## 18 PQR5 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 46 11.3 11.33%
## 2 PQT2 R<U+1EA5>t d<U+1ED3>ng ý 74 18.2 18.23%
## 3 PQT3 R<U+1EA5>t d<U+1ED3>ng ý 41 10.1 10.1%
## 4 PQT4 R<U+1EA5>t d<U+1ED3>ng ý 34 8.37 8.37%
## 5 PQC1 R<U+1EA5>t d<U+1ED3>ng ý 80 19.7 19.7%
## 6 PQC2 R<U+1EA5>t d<U+1ED3>ng ý 67 16.5 16.5%
## 7 PQC3 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
## 8 PQC4 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 9 PQC5 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
## 10 PQP1 R<U+1EA5>t d<U+1ED3>ng ý 37 9.11 9.11%
## 11 PQP2 R<U+1EA5>t d<U+1ED3>ng ý 74 18.2 18.23%
## 12 PQP3 R<U+1EA5>t d<U+1ED3>ng ý 39 9.61 9.61%
## 13 PQP4 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 14 PQR1 R<U+1EA5>t d<U+1ED3>ng ý 36 8.87 8.87%
## 15 PQR2 R<U+1EA5>t d<U+1ED3>ng ý 90 22.2 22.17%
## 16 PQR3 R<U+1EA5>t d<U+1ED3>ng ý 120 29.6 29.56%
## 17 PQR4 R<U+1EA5>t d<U+1ED3>ng ý 105 25.9 25.86%
## 18 PQR5 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text2, aes(x = BPE, y = 9, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.11.3. Construct thuộc nhóm Stimulus-Nhãn tiếng việt
DN_SEM_S_v = within(DN_SEM_S, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3"))
})
str(DN_SEM_S_v)
## 'data.frame': 7714 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 5 5 5 5 6 6 5 7 5 6 ...
## $ BPE: Factor w/ 19 levels "PHB1","PHB2",..: 12 12 12 12 12 12 12 12 12 12 ...
summary(DN_SEM_S_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 33 PHB1 : 406
## Không d<U+1ED3>ng ý : 198 PHB2 : 406
## Khá không d<U+1ED3>ng ý : 344 PHB3 : 406
## Bình thu<U+1EDD>ng : 691 PHB4 : 406
## Khá d<U+1ED3>ng ý :1971 PHB5 : 406
## Ð<U+1ED3>ng ý :3169 PEB1 : 406
## R<U+1EA5>t d<U+1ED3>ng ý :1308 (Other):5278
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_S_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6
## [16] PDE7 PSO1 PSO2 PSO3
## 19 Levels: PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 ... PSO3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 124 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.48 1.48%
## 2 PHB1 Không d<U+1ED3>ng ý 14 3.45 3.45%
## 3 PHB1 Khá không d<U+1ED3>ng ý 40 9.85 9.85%
## 4 PHB1 Bình thu<U+1EDD>ng 47 11.6 11.58%
## 5 PHB1 Khá d<U+1ED3>ng ý 112 27.6 27.59%
## 6 PHB1 Ð<U+1ED3>ng ý 137 33.7 33.74%
## 7 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 50 12.3 12.32%
## 8 PHB2 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 9 PHB2 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 10 PHB2 Khá không d<U+1ED3>ng ý 12 2.96 2.96%
## # ... with 114 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn l\u1EE3i \u00EDch s\u1EE9c kh\u1ECFe (PHB), m\u00F4i tr\u01B0\u1EDDng (PEB), c\u1EA3m nh\u1EADn thi\u1EBFt k\u1EBF (PDE) v\u00E0 l\u1EE3i \u00EDch x\u00E3 h\u1ED9i (PSO) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB \u0110\u00E0 N\u1EB5ng\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 13 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.48 1.48%
## 2 PHB2 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 PHB3 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 4 PHB4 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 5 PHB5 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 6 PEB1 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
## 7 PEB2 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.48 1.48%
## 8 PEB3 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 9 PEB4 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 10 PDE3 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 11 PSO1 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.74 0.74%
## 12 PSO2 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.99 0.99%
## 13 PSO3 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.49 0.49%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 16 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Không d<U+1ED3>ng ý 14 3.45 3.45%
## 2 PHB2 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 3 PHB3 Không d<U+1ED3>ng ý 7 1.72 1.72%
## 4 PHB4 Không d<U+1ED3>ng ý 11 2.71 2.71%
## 5 PHB5 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 6 PEB1 Không d<U+1ED3>ng ý 9 2.22 2.22%
## 7 PEB2 Không d<U+1ED3>ng ý 9 2.22 2.22%
## 8 PEB4 Không d<U+1ED3>ng ý 4 0.99 0.99%
## 9 PDE1 Không d<U+1ED3>ng ý 5 1.23 1.23%
## 10 PDE2 Không d<U+1ED3>ng ý 5 1.23 1.23%
## 11 PDE3 Không d<U+1ED3>ng ý 6 1.48 1.48%
## 12 PDE4 Không d<U+1ED3>ng ý 6 1.48 1.48%
## 13 PDE5 Không d<U+1ED3>ng ý 11 2.71 2.71%
## 14 PSO1 Không d<U+1ED3>ng ý 39 9.61 9.61%
## 15 PSO2 Không d<U+1ED3>ng ý 44 10.8 10.84%
## 16 PSO3 Không d<U+1ED3>ng ý 20 4.93 4.93%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Khá không d<U+1ED3>ng ý 40 9.85 9.85%
## 2 PHB2 Khá không d<U+1ED3>ng ý 12 2.96 2.96%
## 3 PHB3 Khá không d<U+1ED3>ng ý 19 4.68 4.68%
## 4 PHB4 Khá không d<U+1ED3>ng ý 25 6.16 6.16%
## 5 PHB5 Khá không d<U+1ED3>ng ý 16 3.94 3.94%
## 6 PEB1 Khá không d<U+1ED3>ng ý 30 7.39 7.39%
## 7 PEB2 Khá không d<U+1ED3>ng ý 23 5.67 5.67%
## 8 PEB3 Khá không d<U+1ED3>ng ý 2 0.49 0.49%
## 9 PEB4 Khá không d<U+1ED3>ng ý 8 1.97 1.97%
## 10 PDE1 Khá không d<U+1ED3>ng ý 14 3.45 3.45%
## 11 PDE2 Khá không d<U+1ED3>ng ý 15 3.69 3.69%
## 12 PDE3 Khá không d<U+1ED3>ng ý 15 3.69 3.69%
## 13 PDE4 Khá không d<U+1ED3>ng ý 7 1.72 1.72%
## 14 PDE5 Khá không d<U+1ED3>ng ý 25 6.16 6.16%
## 15 PDE6 Khá không d<U+1ED3>ng ý 2 0.49 0.49%
## 16 PDE7 Khá không d<U+1ED3>ng ý 1 0.25 0.25%
## 17 PSO1 Khá không d<U+1ED3>ng ý 25 6.16 6.16%
## 18 PSO2 Khá không d<U+1ED3>ng ý 36 8.87 8.87%
## 19 PSO3 Khá không d<U+1ED3>ng ý 29 7.14 7.14%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Bình thu<U+1EDD>ng 47 11.6 11.58%
## 2 PHB2 Bình thu<U+1EDD>ng 31 7.64 7.64%
## 3 PHB3 Bình thu<U+1EDD>ng 49 12.1 12.07%
## 4 PHB4 Bình thu<U+1EDD>ng 53 13.0 13.05%
## 5 PHB5 Bình thu<U+1EDD>ng 28 6.9 6.9%
## 6 PEB1 Bình thu<U+1EDD>ng 38 9.36 9.36%
## 7 PEB2 Bình thu<U+1EDD>ng 46 11.3 11.33%
## 8 PEB3 Bình thu<U+1EDD>ng 13 3.2 3.2%
## 9 PEB4 Bình thu<U+1EDD>ng 17 4.19 4.19%
## 10 PDE1 Bình thu<U+1EDD>ng 25 6.16 6.16%
## 11 PDE2 Bình thu<U+1EDD>ng 26 6.4 6.4%
## 12 PDE3 Bình thu<U+1EDD>ng 35 8.62 8.62%
## 13 PDE4 Bình thu<U+1EDD>ng 17 4.19 4.19%
## 14 PDE5 Bình thu<U+1EDD>ng 30 7.39 7.39%
## 15 PDE6 Bình thu<U+1EDD>ng 13 3.2 3.2%
## 16 PDE7 Bình thu<U+1EDD>ng 17 4.19 4.19%
## 17 PSO1 Bình thu<U+1EDD>ng 78 19.2 19.21%
## 18 PSO2 Bình thu<U+1EDD>ng 62 15.3 15.27%
## 19 PSO3 Bình thu<U+1EDD>ng 66 16.3 16.26%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Khá d<U+1ED3>ng ý 112 27.6 27.59%
## 2 PHB2 Khá d<U+1ED3>ng ý 85 20.9 20.94%
## 3 PHB3 Khá d<U+1ED3>ng ý 115 28.3 28.33%
## 4 PHB4 Khá d<U+1ED3>ng ý 118 29.1 29.06%
## 5 PHB5 Khá d<U+1ED3>ng ý 87 21.4 21.43%
## 6 PEB1 Khá d<U+1ED3>ng ý 115 28.3 28.33%
## 7 PEB2 Khá d<U+1ED3>ng ý 117 28.8 28.82%
## 8 PEB3 Khá d<U+1ED3>ng ý 76 18.7 18.72%
## 9 PEB4 Khá d<U+1ED3>ng ý 98 24.1 24.14%
## 10 PDE1 Khá d<U+1ED3>ng ý 85 20.9 20.94%
## 11 PDE2 Khá d<U+1ED3>ng ý 88 21.7 21.67%
## 12 PDE3 Khá d<U+1ED3>ng ý 139 34.2 34.24%
## 13 PDE4 Khá d<U+1ED3>ng ý 95 23.4 23.4%
## 14 PDE5 Khá d<U+1ED3>ng ý 104 25.6 25.62%
## 15 PDE6 Khá d<U+1ED3>ng ý 73 18.0 17.98%
## 16 PDE7 Khá d<U+1ED3>ng ý 69 17 17%
## 17 PSO1 Khá d<U+1ED3>ng ý 152 37.4 37.44%
## 18 PSO2 Khá d<U+1ED3>ng ý 139 34.2 34.24%
## 19 PSO3 Khá d<U+1ED3>ng ý 104 25.6 25.62%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Ð<U+1ED3>ng ý 137 33.7 33.74%
## 2 PHB2 Ð<U+1ED3>ng ý 201 49.5 49.51%
## 3 PHB3 Ð<U+1ED3>ng ý 164 40.4 40.39%
## 4 PHB4 Ð<U+1ED3>ng ý 149 36.7 36.7%
## 5 PHB5 Ð<U+1ED3>ng ý 204 50.2 50.25%
## 6 PEB1 Ð<U+1ED3>ng ý 155 38.2 38.18%
## 7 PEB2 Ð<U+1ED3>ng ý 158 38.9 38.92%
## 8 PEB3 Ð<U+1ED3>ng ý 208 51.2 51.23%
## 9 PEB4 Ð<U+1ED3>ng ý 185 45.6 45.57%
## 10 PDE1 Ð<U+1ED3>ng ý 192 47.3 47.29%
## 11 PDE2 Ð<U+1ED3>ng ý 191 47.0 47.04%
## 12 PDE3 Ð<U+1ED3>ng ý 158 38.9 38.92%
## 13 PDE4 Ð<U+1ED3>ng ý 179 44.1 44.09%
## 14 PDE5 Ð<U+1ED3>ng ý 171 42.1 42.12%
## 15 PDE6 Ð<U+1ED3>ng ý 179 44.1 44.09%
## 16 PDE7 Ð<U+1ED3>ng ý 192 47.3 47.29%
## 17 PSO1 Ð<U+1ED3>ng ý 90 22.2 22.17%
## 18 PSO2 Ð<U+1ED3>ng ý 98 24.1 24.14%
## 19 PSO3 Ð<U+1ED3>ng ý 158 38.9 38.92%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 50 12.3 12.32%
## 2 PHB2 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
## 3 PHB3 R<U+1EA5>t d<U+1ED3>ng ý 49 12.1 12.07%
## 4 PHB4 R<U+1EA5>t d<U+1ED3>ng ý 49 12.1 12.07%
## 5 PHB5 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 6 PEB1 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 7 PEB2 R<U+1EA5>t d<U+1ED3>ng ý 47 11.6 11.58%
## 8 PEB3 R<U+1EA5>t d<U+1ED3>ng ý 106 26.1 26.11%
## 9 PEB4 R<U+1EA5>t d<U+1ED3>ng ý 93 22.9 22.91%
## 10 PDE1 R<U+1EA5>t d<U+1ED3>ng ý 85 20.9 20.94%
## 11 PDE2 R<U+1EA5>t d<U+1ED3>ng ý 81 20.0 19.95%
## 12 PDE3 R<U+1EA5>t d<U+1ED3>ng ý 52 12.8 12.81%
## 13 PDE4 R<U+1EA5>t d<U+1ED3>ng ý 102 25.1 25.12%
## 14 PDE5 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 15 PDE6 R<U+1EA5>t d<U+1ED3>ng ý 139 34.2 34.24%
## 16 PDE7 R<U+1EA5>t d<U+1ED3>ng ý 127 31.3 31.28%
## 17 PSO1 R<U+1EA5>t d<U+1ED3>ng ý 19 4.68 4.68%
## 18 PSO2 R<U+1EA5>t d<U+1ED3>ng ý 23 5.67 5.67%
## 19 PSO3 R<U+1EA5>t d<U+1ED3>ng ý 27 6.65 6.65%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 50 12.3 12.32%
## 2 PHB2 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
## 3 PHB3 R<U+1EA5>t d<U+1ED3>ng ý 49 12.1 12.07%
## 4 PHB4 R<U+1EA5>t d<U+1ED3>ng ý 49 12.1 12.07%
## 5 PHB5 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 6 PEB1 R<U+1EA5>t d<U+1ED3>ng ý 57 14.0 14.04%
## 7 PEB2 R<U+1EA5>t d<U+1ED3>ng ý 47 11.6 11.58%
## 8 PEB3 R<U+1EA5>t d<U+1ED3>ng ý 106 26.1 26.11%
## 9 PEB4 R<U+1EA5>t d<U+1ED3>ng ý 93 22.9 22.91%
## 10 PDE1 R<U+1EA5>t d<U+1ED3>ng ý 85 20.9 20.94%
## 11 PDE2 R<U+1EA5>t d<U+1ED3>ng ý 81 20.0 19.95%
## 12 PDE3 R<U+1EA5>t d<U+1ED3>ng ý 52 12.8 12.81%
## 13 PDE4 R<U+1EA5>t d<U+1ED3>ng ý 102 25.1 25.12%
## 14 PDE5 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 15 PDE6 R<U+1EA5>t d<U+1ED3>ng ý 139 34.2 34.24%
## 16 PDE7 R<U+1EA5>t d<U+1ED3>ng ý 127 31.3 31.28%
## 17 PSO1 R<U+1EA5>t d<U+1ED3>ng ý 19 4.68 4.68%
## 18 PSO2 R<U+1EA5>t d<U+1ED3>ng ý 23 5.67 5.67%
## 19 PSO3 R<U+1EA5>t d<U+1ED3>ng ý 27 6.65 6.65%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text4, aes(x = BPE, y = 13, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.11.4. Construct thuộc nhóm Organism-Response - Nhãn tiếng việt
# Plot Likert graph for people in both cities for construct PHB
DN_SEM_OR_v = within(DN_SEM_OR, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PVA1", "PVA2", "PVA3", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7"))
})
str(DN_SEM_OR_v)
## 'data.frame': 7308 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 6 6 5 6 6 5 6 3 6 ...
## $ BPE: Factor w/ 18 levels "IMA1","IMA2",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(DN_SEM_OR_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 7 IMA1 : 406
## Không d<U+1ED3>ng ý : 43 IMA2 : 406
## Khá không d<U+1ED3>ng ý : 187 IMA3 : 406
## Bình thu<U+1EDD>ng : 510 IMA4 : 406
## Khá d<U+1ED3>ng ý :1785 IMA5 : 406
## Ð<U+1ED3>ng ý :3557 PVA1 : 406
## R<U+1EA5>t d<U+1ED3>ng ý :1219 (Other):4872
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
DN_SEM_OR_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4
## [16] LOY5 LOY6 LOY7
## 18 Levels: IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 ... LOY7
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 113 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 2 IMA1 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 IMA1 Khá không d<U+1ED3>ng ý 11 2.71 2.71%
## 4 IMA1 Bình thu<U+1EDD>ng 54 13.3 13.3%
## 5 IMA1 Khá d<U+1ED3>ng ý 138 34.0 33.99%
## 6 IMA1 Ð<U+1ED3>ng ý 169 41.6 41.63%
## 7 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.88 7.88%
## 8 IMA2 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 9 IMA2 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 10 IMA2 Bình thu<U+1EDD>ng 46 11.3 11.33%
## # ... with 103 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn h\u00ECnh \u1EA3nh (IMA), gi\u00E1 tr\u1ECB (PVA), s\u1EF1 h\u00E0i l\u00F2ng (SAT) v\u00E0 l\u00F2ng trung th\u00E0nh (LOY) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB \u0110\u00E0 N\u1EB5ng\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 7 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 2 SAT1 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 SAT2 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 4 SAT3 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 5 LOY1 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 6 LOY6 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
## 7 LOY7 R<U+1EA5>t không d<U+1ED3>ng ý 1 0.25 0.25%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 16 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 2 IMA2 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 3 IMA3 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 4 IMA5 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 5 PVA1 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 6 PVA2 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 7 PVA3 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 8 SAT2 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 9 SAT3 Không d<U+1ED3>ng ý 14 3.45 3.45%
## 10 LOY1 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 11 LOY2 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 12 LOY3 Không d<U+1ED3>ng ý 10 2.46 2.46%
## 13 LOY4 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 14 LOY5 Không d<U+1ED3>ng ý 2 0.49 0.49%
## 15 LOY6 Không d<U+1ED3>ng ý 1 0.25 0.25%
## 16 LOY7 Không d<U+1ED3>ng ý 2 0.49 0.49%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Khá không d<U+1ED3>ng ý 11 2.71 2.71%
## 2 IMA2 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 3 IMA3 Khá không d<U+1ED3>ng ý 3 0.74 0.74%
## 4 IMA4 Khá không d<U+1ED3>ng ý 7 1.72 1.72%
## 5 IMA5 Khá không d<U+1ED3>ng ý 4 0.99 0.99%
## 6 PVA1 Khá không d<U+1ED3>ng ý 5 1.23 1.23%
## 7 PVA2 Khá không d<U+1ED3>ng ý 5 1.23 1.23%
## 8 PVA3 Khá không d<U+1ED3>ng ý 4 0.99 0.99%
## 9 SAT1 Khá không d<U+1ED3>ng ý 16 3.94 3.94%
## 10 SAT2 Khá không d<U+1ED3>ng ý 12 2.96 2.96%
## 11 SAT3 Khá không d<U+1ED3>ng ý 32 7.88 7.88%
## 12 LOY1 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 13 LOY2 Khá không d<U+1ED3>ng ý 10 2.46 2.46%
## 14 LOY3 Khá không d<U+1ED3>ng ý 22 5.42 5.42%
## 15 LOY4 Khá không d<U+1ED3>ng ý 6 1.48 1.48%
## 16 LOY5 Khá không d<U+1ED3>ng ý 19 4.68 4.68%
## 17 LOY6 Khá không d<U+1ED3>ng ý 10 2.46 2.46%
## 18 LOY7 Khá không d<U+1ED3>ng ý 9 2.22 2.22%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Bình thu<U+1EDD>ng 54 13.3 13.3%
## 2 IMA2 Bình thu<U+1EDD>ng 46 11.3 11.33%
## 3 IMA3 Bình thu<U+1EDD>ng 39 9.61 9.61%
## 4 IMA4 Bình thu<U+1EDD>ng 26 6.4 6.4%
## 5 IMA5 Bình thu<U+1EDD>ng 23 5.67 5.67%
## 6 PVA1 Bình thu<U+1EDD>ng 25 6.16 6.16%
## 7 PVA2 Bình thu<U+1EDD>ng 23 5.67 5.67%
## 8 PVA3 Bình thu<U+1EDD>ng 30 7.39 7.39%
## 9 SAT1 Bình thu<U+1EDD>ng 38 9.36 9.36%
## 10 SAT2 Bình thu<U+1EDD>ng 31 7.64 7.64%
## 11 SAT3 Bình thu<U+1EDD>ng 41 10.1 10.1%
## 12 LOY1 Bình thu<U+1EDD>ng 18 4.43 4.43%
## 13 LOY2 Bình thu<U+1EDD>ng 12 2.96 2.96%
## 14 LOY3 Bình thu<U+1EDD>ng 25 6.16 6.16%
## 15 LOY4 Bình thu<U+1EDD>ng 4 0.99 0.99%
## 16 LOY5 Bình thu<U+1EDD>ng 31 7.64 7.64%
## 17 LOY6 Bình thu<U+1EDD>ng 28 6.9 6.9%
## 18 LOY7 Bình thu<U+1EDD>ng 16 3.94 3.94%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Khá d<U+1ED3>ng ý 138 34.0 33.99%
## 2 IMA2 Khá d<U+1ED3>ng ý 113 27.8 27.83%
## 3 IMA3 Khá d<U+1ED3>ng ý 106 26.1 26.11%
## 4 IMA4 Khá d<U+1ED3>ng ý 102 25.1 25.12%
## 5 IMA5 Khá d<U+1ED3>ng ý 96 23.6 23.65%
## 6 PVA1 Khá d<U+1ED3>ng ý 90 22.2 22.17%
## 7 PVA2 Khá d<U+1ED3>ng ý 86 21.2 21.18%
## 8 PVA3 Khá d<U+1ED3>ng ý 74 18.2 18.23%
## 9 SAT1 Khá d<U+1ED3>ng ý 122 30.0 30.05%
## 10 SAT2 Khá d<U+1ED3>ng ý 114 28.1 28.08%
## 11 SAT3 Khá d<U+1ED3>ng ý 102 25.1 25.12%
## 12 LOY1 Khá d<U+1ED3>ng ý 65 16.0 16.01%
## 13 LOY2 Khá d<U+1ED3>ng ý 64 15.8 15.76%
## 14 LOY3 Khá d<U+1ED3>ng ý 100 24.6 24.63%
## 15 LOY4 Khá d<U+1ED3>ng ý 95 23.4 23.4%
## 16 LOY5 Khá d<U+1ED3>ng ý 118 29.1 29.06%
## 17 LOY6 Khá d<U+1ED3>ng ý 101 24.9 24.88%
## 18 LOY7 Khá d<U+1ED3>ng ý 99 24.4 24.38%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Ð<U+1ED3>ng ý 169 41.6 41.63%
## 2 IMA2 Ð<U+1ED3>ng ý 207 51.0 50.99%
## 3 IMA3 Ð<U+1ED3>ng ý 214 52.7 52.71%
## 4 IMA4 Ð<U+1ED3>ng ý 220 54.2 54.19%
## 5 IMA5 Ð<U+1ED3>ng ý 231 56.9 56.9%
## 6 PVA1 Ð<U+1ED3>ng ý 219 53.9 53.94%
## 7 PVA2 Ð<U+1ED3>ng ý 221 54.4 54.43%
## 8 PVA3 Ð<U+1ED3>ng ý 219 53.9 53.94%
## 9 SAT1 Ð<U+1ED3>ng ý 160 39.4 39.41%
## 10 SAT2 Ð<U+1ED3>ng ý 167 41.1 41.13%
## 11 SAT3 Ð<U+1ED3>ng ý 140 34.5 34.48%
## 12 LOY1 Ð<U+1ED3>ng ý 220 54.2 54.19%
## 13 LOY2 Ð<U+1ED3>ng ý 213 52.5 52.46%
## 14 LOY3 Ð<U+1ED3>ng ý 176 43.4 43.35%
## 15 LOY4 Ð<U+1ED3>ng ý 212 52.2 52.22%
## 16 LOY5 Ð<U+1ED3>ng ý 173 42.6 42.61%
## 17 LOY6 Ð<U+1ED3>ng ý 189 46.6 46.55%
## 18 LOY7 Ð<U+1ED3>ng ý 207 51.0 50.99%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.88 7.88%
## 2 IMA2 R<U+1EA5>t d<U+1ED3>ng ý 33 8.13 8.13%
## 3 IMA3 R<U+1EA5>t d<U+1ED3>ng ý 43 10.6 10.59%
## 4 IMA4 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 5 IMA5 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 6 PVA1 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 7 PVA2 R<U+1EA5>t d<U+1ED3>ng ý 70 17.2 17.24%
## 8 PVA3 R<U+1EA5>t d<U+1ED3>ng ý 78 19.2 19.21%
## 9 SAT1 R<U+1EA5>t d<U+1ED3>ng ý 69 17 17%
## 10 SAT2 R<U+1EA5>t d<U+1ED3>ng ý 79 19.5 19.46%
## 11 SAT3 R<U+1EA5>t d<U+1ED3>ng ý 76 18.7 18.72%
## 12 LOY1 R<U+1EA5>t d<U+1ED3>ng ý 95 23.4 23.4%
## 13 LOY2 R<U+1EA5>t d<U+1ED3>ng ý 105 25.9 25.86%
## 14 LOY3 R<U+1EA5>t d<U+1ED3>ng ý 73 18.0 17.98%
## 15 LOY4 R<U+1EA5>t d<U+1ED3>ng ý 88 21.7 21.67%
## 16 LOY5 R<U+1EA5>t d<U+1ED3>ng ý 63 15.5 15.52%
## 17 LOY6 R<U+1EA5>t d<U+1ED3>ng ý 76 18.7 18.72%
## 18 LOY7 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.88 7.88%
## 2 IMA2 R<U+1EA5>t d<U+1ED3>ng ý 33 8.13 8.13%
## 3 IMA3 R<U+1EA5>t d<U+1ED3>ng ý 43 10.6 10.59%
## 4 IMA4 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 5 IMA5 R<U+1EA5>t d<U+1ED3>ng ý 51 12.6 12.56%
## 6 PVA1 R<U+1EA5>t d<U+1ED3>ng ý 65 16.0 16.01%
## 7 PVA2 R<U+1EA5>t d<U+1ED3>ng ý 70 17.2 17.24%
## 8 PVA3 R<U+1EA5>t d<U+1ED3>ng ý 78 19.2 19.21%
## 9 SAT1 R<U+1EA5>t d<U+1ED3>ng ý 69 17 17%
## 10 SAT2 R<U+1EA5>t d<U+1ED3>ng ý 79 19.5 19.46%
## 11 SAT3 R<U+1EA5>t d<U+1ED3>ng ý 76 18.7 18.72%
## 12 LOY1 R<U+1EA5>t d<U+1ED3>ng ý 95 23.4 23.4%
## 13 LOY2 R<U+1EA5>t d<U+1ED3>ng ý 105 25.9 25.86%
## 14 LOY3 R<U+1EA5>t d<U+1ED3>ng ý 73 18.0 17.98%
## 15 LOY4 R<U+1EA5>t d<U+1ED3>ng ý 88 21.7 21.67%
## 16 LOY5 R<U+1EA5>t d<U+1ED3>ng ý 63 15.5 15.52%
## 17 LOY6 R<U+1EA5>t d<U+1ED3>ng ý 76 18.7 18.72%
## 18 LOY7 R<U+1EA5>t d<U+1ED3>ng ý 72 17.7 17.73%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text4, aes(x = BPE, y = 13, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.12. Vẽ biểu đồ likert cho dữ liệu của HCM theo từng nhóm constructs-Nhãn tiếng anh 3.12.1. Construct PSA - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PEV
library(tidyverse)
library(compareGroups)
head(HCM_SEM_PSA)
## Res BPE
## 1 4 PSW1
## 2 2 PSW1
## 3 4 PSW1
## 4 5 PSW1
## 5 3 PSW1
## 6 2 PSW1
dim(HCM_SEM_PSA)
## [1] 9856 2
attach(HCM_SEM_PSA)
## The following objects are masked from DN_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
HCM_SEM_PSA = within(HCM_SEM_PSA, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8"))
})
str(HCM_SEM_PSA)
## 'data.frame': 9856 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 22 levels "PSW1","PSW2",..: 16 16 16 16 16 16 16 16 16 16 ...
summary(HCM_SEM_PSA)
## Res BPE
## Very Disagree : 605 PSW1 : 448
## Disagree :1610 PSW2 : 448
## Quite Disagree: 693 PSW3 : 448
## Normal :1281 PSW4 : 448
## Quite Agree :1171 PSW5 : 448
## Agree :3809 PSW6 : 448
## Very Agree : 687 (Other):7168
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_PSA %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8
## 22 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PSB8
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 154 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 50 11.2 11.16%
## 2 PSW1 Disagree 121 27.0 27.01%
## 3 PSW1 Quite Disagree 37 8.26 8.26%
## 4 PSW1 Normal 53 11.8 11.83%
## 5 PSW1 Quite Agree 55 12.3 12.28%
## 6 PSW1 Agree 117 26.1 26.12%
## 7 PSW1 Very Agree 15 3.35 3.35%
## 8 PSW2 Very Disagree 31 6.92 6.92%
## 9 PSW2 Disagree 55 12.3 12.28%
## 10 PSW2 Quite Disagree 36 8.04 8.04%
## # ... with 144 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived safety (PSA) of bus passengers in Ho Chi Minh city",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Disagree 50 11.2 11.16%
## 2 PSW2 Very Disagree 31 6.92 6.92%
## 3 PSW3 Very Disagree 14 3.12 3.12%
## 4 PSW4 Very Disagree 28 6.25 6.25%
## 5 PSW5 Very Disagree 18 4.02 4.02%
## 6 PSW6 Very Disagree 7 1.56 1.56%
## 7 PSW7 Very Disagree 11 2.46 2.46%
## 8 PSS1 Very Disagree 8 1.79 1.79%
## 9 PSS2 Very Disagree 41 9.15 9.15%
## 10 PSS3 Very Disagree 31 6.92 6.92%
## # ... with 12 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 20 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Disagree 121 27.0 27.01%
## 2 PSW2 Disagree 55 12.3 12.28%
## 3 PSW3 Disagree 17 3.79 3.79%
## 4 PSW4 Disagree 68 15.2 15.18%
## 5 PSW5 Disagree 27 6.03 6.03%
## 6 PSS1 Disagree 20 4.46 4.46%
## 7 PSS2 Disagree 129 28.8 28.79%
## 8 PSS3 Disagree 73 16.3 16.29%
## 9 PSS4 Disagree 32 7.14 7.14%
## 10 PSS5 Disagree 115 25.7 25.67%
## 11 PSS6 Disagree 132 29.5 29.46%
## 12 PSS7 Disagree 168 37.5 37.5%
## 13 PSB1 Disagree 79 17.6 17.63%
## 14 PSB2 Disagree 104 23.2 23.21%
## 15 PSB3 Disagree 72 16.1 16.07%
## 16 PSB4 Disagree 33 7.37 7.37%
## 17 PSB5 Disagree 112 25 25%
## 18 PSB6 Disagree 77 17.2 17.19%
## 19 PSB7 Disagree 123 27.5 27.46%
## 20 PSB8 Disagree 44 9.82 9.82%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Disagree 37 8.26 8.26%
## 2 PSW2 Quite Disagree 36 8.04 8.04%
## 3 PSW3 Quite Disagree 21 4.69 4.69%
## 4 PSW4 Quite Disagree 40 8.93 8.93%
## 5 PSW5 Quite Disagree 16 3.57 3.57%
## 6 PSW6 Quite Disagree 7 1.56 1.56%
## 7 PSW7 Quite Disagree 14 3.12 3.12%
## 8 PSS1 Quite Disagree 21 4.69 4.69%
## 9 PSS2 Quite Disagree 39 8.71 8.71%
## 10 PSS3 Quite Disagree 28 6.25 6.25%
## # ... with 12 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Normal 53 11.8 11.83%
## 2 PSW2 Normal 60 13.4 13.39%
## 3 PSW3 Normal 46 10.3 10.27%
## 4 PSW4 Normal 96 21.4 21.43%
## 5 PSW5 Normal 54 12.0 12.05%
## 6 PSW6 Normal 29 6.47 6.47%
## 7 PSW7 Normal 35 7.81 7.81%
## 8 PSS1 Normal 40 8.93 8.93%
## 9 PSS2 Normal 57 12.7 12.72%
## 10 PSS3 Normal 53 11.8 11.83%
## # ... with 12 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Quite Agree 55 12.3 12.28%
## 2 PSW2 Quite Agree 57 12.7 12.72%
## 3 PSW3 Quite Agree 79 17.6 17.63%
## 4 PSW4 Quite Agree 64 14.3 14.29%
## 5 PSW5 Quite Agree 51 11.4 11.38%
## 6 PSW6 Quite Agree 30 6.7 6.7%
## 7 PSW7 Quite Agree 42 9.38 9.38%
## 8 PSS1 Quite Agree 49 10.9 10.94%
## 9 PSS2 Quite Agree 58 13.0 12.95%
## 10 PSS3 Quite Agree 52 11.6 11.61%
## # ... with 12 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Agree 117 26.1 26.12%
## 2 PSW2 Agree 185 41.3 41.29%
## 3 PSW3 Agree 235 52.5 52.46%
## 4 PSW4 Agree 133 29.7 29.69%
## 5 PSW5 Agree 231 51.6 51.56%
## 6 PSW6 Agree 280 62.5 62.5%
## 7 PSW7 Agree 277 61.8 61.83%
## 8 PSS1 Agree 235 52.5 52.46%
## 9 PSS2 Agree 109 24.3 24.33%
## 10 PSS3 Agree 183 40.8 40.85%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 15 3.35 3.35%
## 2 PSW2 Very Agree 24 5.36 5.36%
## 3 PSW3 Very Agree 36 8.04 8.04%
## 4 PSW4 Very Agree 19 4.24 4.24%
## 5 PSW5 Very Agree 51 11.4 11.38%
## 6 PSW6 Very Agree 91 20.3 20.31%
## 7 PSW7 Very Agree 64 14.3 14.29%
## 8 PSS1 Very Agree 75 16.7 16.74%
## 9 PSS2 Very Agree 15 3.35 3.35%
## 10 PSS3 Very Agree 28 6.25 6.25%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Very Agree 15 3.35 3.35%
## 2 PSW2 Very Agree 24 5.36 5.36%
## 3 PSW3 Very Agree 36 8.04 8.04%
## 4 PSW4 Very Agree 19 4.24 4.24%
## 5 PSW5 Very Agree 51 11.4 11.38%
## 6 PSW6 Very Agree 91 20.3 20.31%
## 7 PSW7 Very Agree 64 14.3 14.29%
## 8 PSS1 Very Agree 75 16.7 16.74%
## 9 PSS2 Very Agree 15 3.35 3.35%
## 10 PSS3 Very Agree 28 6.25 6.25%
## # ... with 12 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 22, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.12.2. Construct PSQ - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSQ
library(tidyverse)
library(compareGroups)
head(HCM_SEM_PSQ)
## Res BPE
## 1 6 PQT1
## 2 4 PQT1
## 3 2 PQT1
## 4 6 PQT1
## 5 6 PQT1
## 6 4 PQT1
dim(HCM_SEM_PSQ)
## [1] 8064 2
attach(HCM_SEM_PSQ)
## The following objects are masked from HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
HCM_SEM_PSQ = within(HCM_SEM_PSQ, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5"))
})
str(HCM_SEM_PSQ)
## 'data.frame': 8064 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 4 2 6 6 4 2 5 5 7 ...
## $ BPE: Factor w/ 18 levels "PQT1","PQT2",..: 15 15 15 15 15 15 15 15 15 15 ...
summary(HCM_SEM_PSQ)
## Res BPE
## Very Disagree : 222 PQT1 : 448
## Disagree : 561 PQT2 : 448
## Quite Disagree: 477 PQT3 : 448
## Normal :1274 PQT4 : 448
## Quite Agree :1598 PQC1 : 448
## Agree :3274 PQC2 : 448
## Very Agree : 658 (Other):5376
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_PSQ %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2
## [16] PQR3 PQR4 PQR5
## 18 Levels: PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 ... PQR5
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Disagree 13 2.9 2.9%
## 2 PQT1 Disagree 29 6.47 6.47%
## 3 PQT1 Quite Disagree 24 5.36 5.36%
## 4 PQT1 Normal 61 13.6 13.62%
## 5 PQT1 Quite Agree 81 18.1 18.08%
## 6 PQT1 Agree 199 44.4 44.42%
## 7 PQT1 Very Agree 41 9.15 9.15%
## 8 PQT2 Very Disagree 7 1.56 1.56%
## 9 PQT2 Disagree 31 6.92 6.92%
## 10 PQT2 Quite Disagree 8 1.79 1.79%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived service quality (PSQ) of bus pasengers in Ho Chi Minh city",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Disagree 13 2.9 2.9%
## 2 PQT2 Very Disagree 7 1.56 1.56%
## 3 PQT3 Very Disagree 7 1.56 1.56%
## 4 PQT4 Very Disagree 11 2.46 2.46%
## 5 PQC1 Very Disagree 8 1.79 1.79%
## 6 PQC2 Very Disagree 12 2.68 2.68%
## 7 PQC3 Very Disagree 12 2.68 2.68%
## 8 PQC4 Very Disagree 10 2.23 2.23%
## 9 PQC5 Very Disagree 9 2.01 2.01%
## 10 PQP1 Very Disagree 12 2.68 2.68%
## 11 PQP2 Very Disagree 12 2.68 2.68%
## 12 PQP3 Very Disagree 12 2.68 2.68%
## 13 PQP4 Very Disagree 28 6.25 6.25%
## 14 PQR1 Very Disagree 8 1.79 1.79%
## 15 PQR2 Very Disagree 9 2.01 2.01%
## 16 PQR3 Very Disagree 14 3.12 3.12%
## 17 PQR4 Very Disagree 26 5.8 5.8%
## 18 PQR5 Very Disagree 12 2.68 2.68%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Disagree 29 6.47 6.47%
## 2 PQT2 Disagree 31 6.92 6.92%
## 3 PQT3 Disagree 26 5.8 5.8%
## 4 PQT4 Disagree 29 6.47 6.47%
## 5 PQC1 Disagree 15 3.35 3.35%
## 6 PQC2 Disagree 25 5.58 5.58%
## 7 PQC3 Disagree 29 6.47 6.47%
## 8 PQC4 Disagree 26 5.8 5.8%
## 9 PQC5 Disagree 21 4.69 4.69%
## 10 PQP1 Disagree 31 6.92 6.92%
## 11 PQP2 Disagree 28 6.25 6.25%
## 12 PQP3 Disagree 29 6.47 6.47%
## 13 PQP4 Disagree 57 12.7 12.72%
## 14 PQR1 Disagree 32 7.14 7.14%
## 15 PQR2 Disagree 31 6.92 6.92%
## 16 PQR3 Disagree 42 9.38 9.38%
## 17 PQR4 Disagree 40 8.93 8.93%
## 18 PQR5 Disagree 40 8.93 8.93%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Quite Disagree 24 5.36 5.36%
## 2 PQT2 Quite Disagree 8 1.79 1.79%
## 3 PQT3 Quite Disagree 23 5.13 5.13%
## 4 PQT4 Quite Disagree 26 5.8 5.8%
## 5 PQC1 Quite Disagree 13 2.9 2.9%
## 6 PQC2 Quite Disagree 32 7.14 7.14%
## 7 PQC3 Quite Disagree 30 6.7 6.7%
## 8 PQC4 Quite Disagree 19 4.24 4.24%
## 9 PQC5 Quite Disagree 9 2.01 2.01%
## 10 PQP1 Quite Disagree 37 8.26 8.26%
## 11 PQP2 Quite Disagree 39 8.71 8.71%
## 12 PQP3 Quite Disagree 34 7.59 7.59%
## 13 PQP4 Quite Disagree 45 10.0 10.04%
## 14 PQR1 Quite Disagree 26 5.8 5.8%
## 15 PQR2 Quite Disagree 27 6.03 6.03%
## 16 PQR3 Quite Disagree 24 5.36 5.36%
## 17 PQR4 Quite Disagree 34 7.59 7.59%
## 18 PQR5 Quite Disagree 27 6.03 6.03%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Normal 61 13.6 13.62%
## 2 PQT2 Normal 37 8.26 8.26%
## 3 PQT3 Normal 63 14.1 14.06%
## 4 PQT4 Normal 132 29.5 29.46%
## 5 PQC1 Normal 38 8.48 8.48%
## 6 PQC2 Normal 79 17.6 17.63%
## 7 PQC3 Normal 75 16.7 16.74%
## 8 PQC4 Normal 67 15.0 14.96%
## 9 PQC5 Normal 61 13.6 13.62%
## 10 PQP1 Normal 68 15.2 15.18%
## 11 PQP2 Normal 83 18.5 18.53%
## 12 PQP3 Normal 82 18.3 18.3%
## 13 PQP4 Normal 69 15.4 15.4%
## 14 PQR1 Normal 111 24.8 24.78%
## 15 PQR2 Normal 67 15.0 14.96%
## 16 PQR3 Normal 65 14.5 14.51%
## 17 PQR4 Normal 52 11.6 11.61%
## 18 PQR5 Normal 64 14.3 14.29%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Quite Agree 81 18.1 18.08%
## 2 PQT2 Quite Agree 77 17.2 17.19%
## 3 PQT3 Quite Agree 97 21.6 21.65%
## 4 PQT4 Quite Agree 76 17.0 16.96%
## 5 PQC1 Quite Agree 75 16.7 16.74%
## 6 PQC2 Quite Agree 81 18.1 18.08%
## 7 PQC3 Quite Agree 94 21.0 20.98%
## 8 PQC4 Quite Agree 105 23.4 23.44%
## 9 PQC5 Quite Agree 82 18.3 18.3%
## 10 PQP1 Quite Agree 114 25.4 25.45%
## 11 PQP2 Quite Agree 93 20.8 20.76%
## 12 PQP3 Quite Agree 102 22.8 22.77%
## 13 PQP4 Quite Agree 77 17.2 17.19%
## 14 PQR1 Quite Agree 57 12.7 12.72%
## 15 PQR2 Quite Agree 102 22.8 22.77%
## 16 PQR3 Quite Agree 84 18.8 18.75%
## 17 PQR4 Quite Agree 101 22.5 22.54%
## 18 PQR5 Quite Agree 100 22.3 22.32%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Agree 199 44.4 44.42%
## 2 PQT2 Agree 219 48.9 48.88%
## 3 PQT3 Agree 188 42.0 41.96%
## 4 PQT4 Agree 152 33.9 33.93%
## 5 PQC1 Agree 236 52.7 52.68%
## 6 PQC2 Agree 185 41.3 41.29%
## 7 PQC3 Agree 174 38.8 38.84%
## 8 PQC4 Agree 188 42.0 41.96%
## 9 PQC5 Agree 224 50 50%
## 10 PQP1 Agree 155 34.6 34.6%
## 11 PQP2 Agree 169 37.7 37.72%
## 12 PQP3 Agree 155 34.6 34.6%
## 13 PQP4 Agree 149 33.3 33.26%
## 14 PQR1 Agree 178 39.7 39.73%
## 15 PQR2 Agree 175 39.1 39.06%
## 16 PQR3 Agree 182 40.6 40.62%
## 17 PQR4 Agree 172 38.4 38.39%
## 18 PQR5 Agree 174 38.8 38.84%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Agree 41 9.15 9.15%
## 2 PQT2 Very Agree 69 15.4 15.4%
## 3 PQT3 Very Agree 44 9.82 9.82%
## 4 PQT4 Very Agree 22 4.91 4.91%
## 5 PQC1 Very Agree 63 14.1 14.06%
## 6 PQC2 Very Agree 34 7.59 7.59%
## 7 PQC3 Very Agree 34 7.59 7.59%
## 8 PQC4 Very Agree 33 7.37 7.37%
## 9 PQC5 Very Agree 42 9.38 9.38%
## 10 PQP1 Very Agree 31 6.92 6.92%
## 11 PQP2 Very Agree 24 5.36 5.36%
## 12 PQP3 Very Agree 34 7.59 7.59%
## 13 PQP4 Very Agree 23 5.13 5.13%
## 14 PQR1 Very Agree 36 8.04 8.04%
## 15 PQR2 Very Agree 37 8.26 8.26%
## 16 PQR3 Very Agree 37 8.26 8.26%
## 17 PQR4 Very Agree 23 5.13 5.13%
## 18 PQR5 Very Agree 31 6.92 6.92%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Very Agree 41 9.15 9.15%
## 2 PQT2 Very Agree 69 15.4 15.4%
## 3 PQT3 Very Agree 44 9.82 9.82%
## 4 PQT4 Very Agree 22 4.91 4.91%
## 5 PQC1 Very Agree 63 14.1 14.06%
## 6 PQC2 Very Agree 34 7.59 7.59%
## 7 PQC3 Very Agree 34 7.59 7.59%
## 8 PQC4 Very Agree 33 7.37 7.37%
## 9 PQC5 Very Agree 42 9.38 9.38%
## 10 PQP1 Very Agree 31 6.92 6.92%
## 11 PQP2 Very Agree 24 5.36 5.36%
## 12 PQP3 Very Agree 34 7.59 7.59%
## 13 PQP4 Very Agree 23 5.13 5.13%
## 14 PQR1 Very Agree 36 8.04 8.04%
## 15 PQR2 Very Agree 37 8.26 8.26%
## 16 PQR3 Very Agree 37 8.26 8.26%
## 17 PQR4 Very Agree 23 5.13 5.13%
## 18 PQR5 Very Agree 31 6.92 6.92%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 23, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.12.3. Construct thuộc nhóm Stimulus - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSQ
library(tidyverse)
library(compareGroups)
head(HCM_SEM_S)
## Res BPE
## 1 6 PHB1
## 2 3 PHB1
## 3 5 PHB1
## 4 5 PHB1
## 5 5 PHB1
## 6 4 PHB1
dim(HCM_SEM_S)
## [1] 8512 2
attach(HCM_SEM_S)
## The following objects are masked from HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
HCM_SEM_S = within(HCM_SEM_S, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("PBH1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3"))
})
str(HCM_SEM_S)
## 'data.frame': 8512 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 3 5 5 5 4 3 6 6 7 ...
## $ BPE: Factor w/ 19 levels "PBH1","PHB2",..: 12 12 12 12 12 12 12 12 12 12 ...
summary(HCM_SEM_S)
## Res BPE
## Very Disagree : 386 PBH1 : 448
## Disagree : 632 PHB2 : 448
## Quite Disagree: 406 PHB3 : 448
## Normal :1776 PHB4 : 448
## Quite Agree :1395 PHB5 : 448
## Agree :2780 PEB1 : 448
## Very Agree :1137 (Other):5824
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_S %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PBH1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6
## [16] PDE7 PSO1 PSO2 PSO3
## 19 Levels: PBH1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 ... PSO3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 133 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Disagree 33 7.37 7.37%
## 2 PBH1 Disagree 51 11.4 11.38%
## 3 PBH1 Quite Disagree 41 9.15 9.15%
## 4 PBH1 Normal 87 19.4 19.42%
## 5 PBH1 Quite Agree 76 17.0 16.96%
## 6 PBH1 Agree 135 30.1 30.13%
## 7 PBH1 Very Agree 25 5.58 5.58%
## 8 PHB2 Very Disagree 17 3.79 3.79%
## 9 PHB2 Disagree 22 4.91 4.91%
## 10 PHB2 Quite Disagree 23 5.13 5.13%
## # ... with 123 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived health (PHB), perceived environmental benefits (BEB), perceived social benefits (PSO), perceived design (PDE) of bus passengers in Ho Chi Minh",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Disagree 33 7.37 7.37%
## 2 PHB2 Very Disagree 17 3.79 3.79%
## 3 PHB3 Very Disagree 14 3.12 3.12%
## 4 PHB4 Very Disagree 16 3.57 3.57%
## 5 PHB5 Very Disagree 19 4.24 4.24%
## 6 PEB1 Very Disagree 14 3.12 3.12%
## 7 PEB2 Very Disagree 14 3.12 3.12%
## 8 PEB3 Very Disagree 23 5.13 5.13%
## 9 PEB4 Very Disagree 24 5.36 5.36%
## 10 PDE1 Very Disagree 25 5.58 5.58%
## 11 PDE2 Very Disagree 24 5.36 5.36%
## 12 PDE3 Very Disagree 23 5.13 5.13%
## 13 PDE4 Very Disagree 13 2.9 2.9%
## 14 PDE5 Very Disagree 15 3.35 3.35%
## 15 PDE6 Very Disagree 13 2.9 2.9%
## 16 PDE7 Very Disagree 22 4.91 4.91%
## 17 PSO1 Very Disagree 25 5.58 5.58%
## 18 PSO2 Very Disagree 25 5.58 5.58%
## 19 PSO3 Very Disagree 27 6.03 6.03%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 13 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Disagree 51 11.4 11.38%
## 2 PHB2 Disagree 22 4.91 4.91%
## 3 PHB3 Disagree 43 9.6 9.6%
## 4 PHB4 Disagree 52 11.6 11.61%
## 5 PHB5 Disagree 42 9.38 9.38%
## 6 PEB1 Disagree 35 7.81 7.81%
## 7 PEB2 Disagree 47 10.5 10.49%
## 8 PDE1 Disagree 14 3.12 3.12%
## 9 PDE2 Disagree 14 3.12 3.12%
## 10 PDE4 Disagree 16 3.57 3.57%
## 11 PSO1 Disagree 80 17.9 17.86%
## 12 PSO2 Disagree 89 19.9 19.87%
## 13 PSO3 Disagree 72 16.1 16.07%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Quite Disagree 41 9.15 9.15%
## 2 PHB2 Quite Disagree 23 5.13 5.13%
## 3 PHB3 Quite Disagree 23 5.13 5.13%
## 4 PHB4 Quite Disagree 33 7.37 7.37%
## 5 PHB5 Quite Disagree 18 4.02 4.02%
## 6 PEB1 Quite Disagree 19 4.24 4.24%
## 7 PEB2 Quite Disagree 36 8.04 8.04%
## 8 PEB3 Quite Disagree 10 2.23 2.23%
## 9 PEB4 Quite Disagree 12 2.68 2.68%
## 10 PDE1 Quite Disagree 8 1.79 1.79%
## 11 PDE2 Quite Disagree 7 1.56 1.56%
## 12 PDE3 Quite Disagree 20 4.46 4.46%
## 13 PDE4 Quite Disagree 18 4.02 4.02%
## 14 PDE5 Quite Disagree 14 3.12 3.12%
## 15 PDE6 Quite Disagree 7 1.56 1.56%
## 16 PDE7 Quite Disagree 4 0.89 0.89%
## 17 PSO1 Quite Disagree 39 8.71 8.71%
## 18 PSO2 Quite Disagree 40 8.93 8.93%
## 19 PSO3 Quite Disagree 34 7.59 7.59%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Normal 87 19.4 19.42%
## 2 PHB2 Normal 65 14.5 14.51%
## 3 PHB3 Normal 151 33.7 33.71%
## 4 PHB4 Normal 161 35.9 35.94%
## 5 PHB5 Normal 71 15.8 15.85%
## 6 PEB1 Normal 154 34.4 34.38%
## 7 PEB2 Normal 150 33.5 33.48%
## 8 PEB3 Normal 46 10.3 10.27%
## 9 PEB4 Normal 50 11.2 11.16%
## 10 PDE1 Normal 52 11.6 11.61%
## 11 PDE2 Normal 67 15.0 14.96%
## 12 PDE3 Normal 63 14.1 14.06%
## 13 PDE4 Normal 51 11.4 11.38%
## 14 PDE5 Normal 57 12.7 12.72%
## 15 PDE6 Normal 40 8.93 8.93%
## 16 PDE7 Normal 45 10.0 10.04%
## 17 PSO1 Normal 149 33.3 33.26%
## 18 PSO2 Normal 165 36.8 36.83%
## 19 PSO3 Normal 152 33.9 33.93%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Quite Agree 76 17.0 16.96%
## 2 PHB2 Quite Agree 88 19.6 19.64%
## 3 PHB3 Quite Agree 85 19.0 18.97%
## 4 PHB4 Quite Agree 76 17.0 16.96%
## 5 PHB5 Quite Agree 100 22.3 22.32%
## 6 PEB1 Quite Agree 91 20.3 20.31%
## 7 PEB2 Quite Agree 83 18.5 18.53%
## 8 PEB3 Quite Agree 50 11.2 11.16%
## 9 PEB4 Quite Agree 72 16.1 16.07%
## 10 PDE1 Quite Agree 82 18.3 18.3%
## 11 PDE2 Quite Agree 78 17.4 17.41%
## 12 PDE3 Quite Agree 76 17.0 16.96%
## 13 PDE4 Quite Agree 68 15.2 15.18%
## 14 PDE5 Quite Agree 69 15.4 15.4%
## 15 PDE6 Quite Agree 58 13.0 12.95%
## 16 PDE7 Quite Agree 47 10.5 10.49%
## 17 PSO1 Quite Agree 71 15.8 15.85%
## 18 PSO2 Quite Agree 58 13.0 12.95%
## 19 PSO3 Quite Agree 67 15.0 14.96%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Agree 135 30.1 30.13%
## 2 PHB2 Agree 195 43.5 43.53%
## 3 PHB3 Agree 109 24.3 24.33%
## 4 PHB4 Agree 92 20.5 20.54%
## 5 PHB5 Agree 176 39.3 39.29%
## 6 PEB1 Agree 108 24.1 24.11%
## 7 PEB2 Agree 93 20.8 20.76%
## 8 PEB3 Agree 181 40.4 40.4%
## 9 PEB4 Agree 166 37.0 37.05%
## 10 PDE1 Agree 161 35.9 35.94%
## 11 PDE2 Agree 165 36.8 36.83%
## 12 PDE3 Agree 193 43.1 43.08%
## 13 PDE4 Agree 197 44.0 43.97%
## 14 PDE5 Agree 211 47.1 47.1%
## 15 PDE6 Agree 210 46.9 46.88%
## 16 PDE7 Agree 221 49.3 49.33%
## 17 PSO1 Agree 57 12.7 12.72%
## 18 PSO2 Agree 45 10.0 10.04%
## 19 PSO3 Agree 65 14.5 14.51%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Agree 25 5.58 5.58%
## 2 PHB2 Very Agree 38 8.48 8.48%
## 3 PHB3 Very Agree 23 5.13 5.13%
## 4 PHB4 Very Agree 18 4.02 4.02%
## 5 PHB5 Very Agree 22 4.91 4.91%
## 6 PEB1 Very Agree 27 6.03 6.03%
## 7 PEB2 Very Agree 25 5.58 5.58%
## 8 PEB3 Very Agree 130 29.0 29.02%
## 9 PEB4 Very Agree 111 24.8 24.78%
## 10 PDE1 Very Agree 106 23.7 23.66%
## 11 PDE2 Very Agree 93 20.8 20.76%
## 12 PDE3 Very Agree 61 13.6 13.62%
## 13 PDE4 Very Agree 85 19.0 18.97%
## 14 PDE5 Very Agree 74 16.5 16.52%
## 15 PDE6 Very Agree 113 25.2 25.22%
## 16 PDE7 Very Agree 102 22.8 22.77%
## 17 PSO1 Very Agree 27 6.03 6.03%
## 18 PSO2 Very Agree 26 5.8 5.8%
## 19 PSO3 Very Agree 31 6.92 6.92%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PBH1 Very Agree 25 5.58 5.58%
## 2 PHB2 Very Agree 38 8.48 8.48%
## 3 PHB3 Very Agree 23 5.13 5.13%
## 4 PHB4 Very Agree 18 4.02 4.02%
## 5 PHB5 Very Agree 22 4.91 4.91%
## 6 PEB1 Very Agree 27 6.03 6.03%
## 7 PEB2 Very Agree 25 5.58 5.58%
## 8 PEB3 Very Agree 130 29.0 29.02%
## 9 PEB4 Very Agree 111 24.8 24.78%
## 10 PDE1 Very Agree 106 23.7 23.66%
## 11 PDE2 Very Agree 93 20.8 20.76%
## 12 PDE3 Very Agree 61 13.6 13.62%
## 13 PDE4 Very Agree 85 19.0 18.97%
## 14 PDE5 Very Agree 74 16.5 16.52%
## 15 PDE6 Very Agree 113 25.2 25.22%
## 16 PDE7 Very Agree 102 22.8 22.77%
## 17 PSO1 Very Agree 27 6.03 6.03%
## 18 PSO2 Very Agree 26 5.8 5.8%
## 19 PSO3 Very Agree 31 6.92 6.92%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 23, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.12.4. Construct thuộc nhóm Organism-Response - Nhãn tiếng anh
# Plot Likert graph for people in both cities for construct PSQ
library(tidyverse)
library(compareGroups)
head(HCM_SEM_OR)
## Res BPE
## 1 6 IMA1
## 2 4 IMA1
## 3 4 IMA1
## 4 5 IMA1
## 5 5 IMA1
## 6 4 IMA1
dim(HCM_SEM_OR)
## [1] 8064 2
attach(HCM_SEM_OR)
## The following objects are masked from HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_SEM_PSA:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_OR:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_S:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSQ:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM_PSA:
##
## BPE, Res
## The following objects are masked from HCM_SEM:
##
## BPE, Res
## The following objects are masked from DN_SEM:
##
## BPE, Res
## The following objects are masked from DN_HCM_SEM:
##
## BPE, Res
HCM_SEM_OR = within(HCM_SEM_OR, {
Res = factor(Res, labels = c("Very Disagree", "Disagree", "Quite Disagree", "Normal", "Quite Agree", "Agree", "Very Agree"))
BPE = factor(BPE, labels = c("IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PVA1", "PVA2", "PVA3", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7"))
})
str(HCM_SEM_OR)
## 'data.frame': 8064 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "Very Disagree",..: 6 4 4 5 5 4 2 6 5 6 ...
## $ BPE: Factor w/ 18 levels "IMA1","IMA2",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(HCM_SEM_OR)
## Res BPE
## Very Disagree : 139 IMA1 : 448
## Disagree : 308 IMA2 : 448
## Quite Disagree: 266 IMA3 : 448
## Normal :1415 IMA4 : 448
## Quite Agree :1615 IMA5 : 448
## Agree :3355 PVA1 : 448
## Very Agree : 966 (Other):5376
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_OR %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4
## [16] LOY5 LOY6 LOY7
## 18 Levels: IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 ... LOY7
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Disagree 5 1.12 1.12%
## 2 IMA1 Disagree 17 3.79 3.79%
## 3 IMA1 Quite Disagree 21 4.69 4.69%
## 4 IMA1 Normal 100 22.3 22.32%
## 5 IMA1 Quite Agree 93 20.8 20.76%
## 6 IMA1 Agree 180 40.2 40.18%
## 7 IMA1 Very Agree 32 7.14 7.14%
## 8 IMA2 Very Disagree 11 2.46 2.46%
## 9 IMA2 Disagree 18 4.02 4.02%
## 10 IMA2 Quite Disagree 18 4.02 4.02%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "Perceived image (IMA), perceived value (PVA), satisfation (SAT), loyalty (LOY) towards urban bus systems in Ho Chi Minh",
subtitle = "Likert scale is a type of rating scale commonly used in surveys. When responding to a Likert type question,\nrespondents simply state their level of agreement or disagreement on a symmetric agree-disagree scale.")
gg
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "Very Disagree") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Disagree 5 1.12 1.12%
## 2 IMA2 Very Disagree 11 2.46 2.46%
## 3 IMA3 Very Disagree 11 2.46 2.46%
## 4 IMA4 Very Disagree 13 2.9 2.9%
## 5 IMA5 Very Disagree 6 1.34 1.34%
## 6 PVA1 Very Disagree 4 0.89 0.89%
## 7 PVA2 Very Disagree 6 1.34 1.34%
## 8 PVA3 Very Disagree 3 0.67 0.67%
## 9 SAT1 Very Disagree 12 2.68 2.68%
## 10 SAT2 Very Disagree 11 2.46 2.46%
## 11 SAT3 Very Disagree 14 3.12 3.12%
## 12 LOY1 Very Disagree 12 2.68 2.68%
## 13 LOY2 Very Disagree 5 1.12 1.12%
## 14 LOY3 Very Disagree 3 0.67 0.67%
## 15 LOY4 Very Disagree 2 0.45 0.45%
## 16 LOY5 Very Disagree 9 2.01 2.01%
## 17 LOY6 Very Disagree 5 1.12 1.12%
## 18 LOY7 Very Disagree 7 1.56 1.56%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Disagree") %>%
filter(percent >= 3) -> df_for_text2
df_for_text2
## # A tibble: 14 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Disagree 17 3.79 3.79%
## 2 IMA2 Disagree 18 4.02 4.02%
## 3 IMA4 Disagree 14 3.12 3.12%
## 4 IMA5 Disagree 20 4.46 4.46%
## 5 PVA1 Disagree 16 3.57 3.57%
## 6 PVA2 Disagree 21 4.69 4.69%
## 7 PVA3 Disagree 15 3.35 3.35%
## 8 SAT1 Disagree 17 3.79 3.79%
## 9 SAT2 Disagree 21 4.69 4.69%
## 10 SAT3 Disagree 44 9.82 9.82%
## 11 LOY1 Disagree 15 3.35 3.35%
## 12 LOY3 Disagree 15 3.35 3.35%
## 13 LOY5 Disagree 20 4.46 4.46%
## 14 LOY7 Disagree 14 3.12 3.12%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Quite Disagree") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Quite Disagree 21 4.69 4.69%
## 2 IMA2 Quite Disagree 18 4.02 4.02%
## 3 IMA3 Quite Disagree 16 3.57 3.57%
## 4 IMA4 Quite Disagree 18 4.02 4.02%
## 5 IMA5 Quite Disagree 15 3.35 3.35%
## 6 PVA1 Quite Disagree 13 2.9 2.9%
## 7 PVA2 Quite Disagree 10 2.23 2.23%
## 8 PVA3 Quite Disagree 14 3.12 3.12%
## 9 SAT1 Quite Disagree 14 3.12 3.12%
## 10 SAT2 Quite Disagree 13 2.9 2.9%
## 11 SAT3 Quite Disagree 19 4.24 4.24%
## 12 LOY1 Quite Disagree 9 2.01 2.01%
## 13 LOY2 Quite Disagree 8 1.79 1.79%
## 14 LOY3 Quite Disagree 17 3.79 3.79%
## 15 LOY4 Quite Disagree 15 3.35 3.35%
## 16 LOY5 Quite Disagree 15 3.35 3.35%
## 17 LOY6 Quite Disagree 14 3.12 3.12%
## 18 LOY7 Quite Disagree 17 3.79 3.79%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "Normal") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Normal 100 22.3 22.32%
## 2 IMA2 Normal 111 24.8 24.78%
## 3 IMA3 Normal 89 19.9 19.87%
## 4 IMA4 Normal 88 19.6 19.64%
## 5 IMA5 Normal 81 18.1 18.08%
## 6 PVA1 Normal 87 19.4 19.42%
## 7 PVA2 Normal 75 16.7 16.74%
## 8 PVA3 Normal 61 13.6 13.62%
## 9 SAT1 Normal 90 20.1 20.09%
## 10 SAT2 Normal 78 17.4 17.41%
## 11 SAT3 Normal 99 22.1 22.1%
## 12 LOY1 Normal 61 13.6 13.62%
## 13 LOY2 Normal 44 9.82 9.82%
## 14 LOY3 Normal 74 16.5 16.52%
## 15 LOY4 Normal 65 14.5 14.51%
## 16 LOY5 Normal 79 17.6 17.63%
## 17 LOY6 Normal 71 15.8 15.85%
## 18 LOY7 Normal 62 13.8 13.84%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Quite Agree") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Quite Agree 93 20.8 20.76%
## 2 IMA2 Quite Agree 100 22.3 22.32%
## 3 IMA3 Quite Agree 100 22.3 22.32%
## 4 IMA4 Quite Agree 97 21.6 21.65%
## 5 IMA5 Quite Agree 107 23.9 23.88%
## 6 PVA1 Quite Agree 76 17.0 16.96%
## 7 PVA2 Quite Agree 83 18.5 18.53%
## 8 PVA3 Quite Agree 86 19.2 19.2%
## 9 SAT1 Quite Agree 90 20.1 20.09%
## 10 SAT2 Quite Agree 99 22.1 22.1%
## 11 SAT3 Quite Agree 70 15.6 15.62%
## 12 LOY1 Quite Agree 91 20.3 20.31%
## 13 LOY2 Quite Agree 65 14.5 14.51%
## 14 LOY3 Quite Agree 94 21.0 20.98%
## 15 LOY4 Quite Agree 62 13.8 13.84%
## 16 LOY5 Quite Agree 95 21.2 21.21%
## 17 LOY6 Quite Agree 95 21.2 21.21%
## 18 LOY7 Quite Agree 112 25 25%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "Agree") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Agree 180 40.2 40.18%
## 2 IMA2 Agree 158 35.3 35.27%
## 3 IMA3 Agree 187 41.7 41.74%
## 4 IMA4 Agree 185 41.3 41.29%
## 5 IMA5 Agree 187 41.7 41.74%
## 6 PVA1 Agree 212 47.3 47.32%
## 7 PVA2 Agree 206 46.0 45.98%
## 8 PVA3 Agree 217 48.4 48.44%
## 9 SAT1 Agree 177 39.5 39.51%
## 10 SAT2 Agree 177 39.5 39.51%
## 11 SAT3 Agree 153 34.2 34.15%
## 12 LOY1 Agree 182 40.6 40.62%
## 13 LOY2 Agree 200 44.6 44.64%
## 14 LOY3 Agree 167 37.3 37.28%
## 15 LOY4 Agree 201 44.9 44.87%
## 16 LOY5 Agree 188 42.0 41.96%
## 17 LOY6 Agree 194 43.3 43.3%
## 18 LOY7 Agree 184 41.1 41.07%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") %>%
filter(percent >= 0) -> df_for_text7 # Chỉ thể hiện giá trị có % lựa chọn >0
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Agree 32 7.14 7.14%
## 2 IMA2 Very Agree 32 7.14 7.14%
## 3 IMA3 Very Agree 35 7.81 7.81%
## 4 IMA4 Very Agree 33 7.37 7.37%
## 5 IMA5 Very Agree 32 7.14 7.14%
## 6 PVA1 Very Agree 40 8.93 8.93%
## 7 PVA2 Very Agree 47 10.5 10.49%
## 8 PVA3 Very Agree 52 11.6 11.61%
## 9 SAT1 Very Agree 48 10.7 10.71%
## 10 SAT2 Very Agree 49 10.9 10.94%
## 11 SAT3 Very Agree 49 10.9 10.94%
## 12 LOY1 Very Agree 78 17.4 17.41%
## 13 LOY2 Very Agree 120 26.8 26.79%
## 14 LOY3 Very Agree 78 17.4 17.41%
## 15 LOY4 Very Agree 91 20.3 20.31%
## 16 LOY5 Very Agree 42 9.38 9.38%
## 17 LOY6 Very Agree 56 12.5 12.5%
## 18 LOY7 Very Agree 52 11.6 11.61%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "Very Agree") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Very Agree 32 7.14 7.14%
## 2 IMA2 Very Agree 32 7.14 7.14%
## 3 IMA3 Very Agree 35 7.81 7.81%
## 4 IMA4 Very Agree 33 7.37 7.37%
## 5 IMA5 Very Agree 32 7.14 7.14%
## 6 PVA1 Very Agree 40 8.93 8.93%
## 7 PVA2 Very Agree 47 10.5 10.49%
## 8 PVA3 Very Agree 52 11.6 11.61%
## 9 SAT1 Very Agree 48 10.7 10.71%
## 10 SAT2 Very Agree 49 10.9 10.94%
## 11 SAT3 Very Agree 49 10.9 10.94%
## 12 LOY1 Very Agree 78 17.4 17.41%
## 13 LOY2 Very Agree 120 26.8 26.79%
## 14 LOY3 Very Agree 78 17.4 17.41%
## 15 LOY4 Very Agree 91 20.3 20.31%
## 16 LOY5 Very Agree 42 9.38 9.38%
## 17 LOY6 Very Agree 56 12.5 12.5%
## 18 LOY7 Very Agree 52 11.6 11.61%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 23, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-40, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.13. Vẽ biểu đồ likert cho dữ liệu của Hồ Chí Minh theo từng nhóm constructs-Nhãn tiếng việt 3.13.1. Construct PSA - Nhãn tiếng việt
HCM_SEM_PSA_v = within(HCM_SEM_PSA, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PSW1", "PSW2", "PSW3", "PSW4", "PSW5", "PSW6", "PSW7", "PSS1", "PSS2", "PSS3", "PSS4", "PSS5", "PSS6", "PSS7", "PSB1", "PSB2", "PSB3", "PSB4", "PSB5", "PSB6", "PSB7", "PSB8"))
})
str(HCM_SEM_PSA_v)
## 'data.frame': 9856 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 4 2 4 5 3 2 1 2 3 4 ...
## $ BPE: Factor w/ 22 levels "PSW1","PSW2",..: 16 16 16 16 16 16 16 16 16 16 ...
summary(HCM_SEM_PSA_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 605 PSW1 : 448
## Không d<U+1ED3>ng ý :1610 PSW2 : 448
## Khá không d<U+1ED3>ng ý : 693 PSW3 : 448
## Bình thu<U+1EDD>ng :1281 PSW4 : 448
## Khá d<U+1ED3>ng ý :1171 PSW5 : 448
## Ð<U+1ED3>ng ý :3809 PSW6 : 448
## R<U+1EA5>t d<U+1ED3>ng ý : 687 (Other):7168
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_PSA_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 PSS6 PSS7 PSB1
## [16] PSB2 PSB3 PSB4 PSB5 PSB6 PSB7 PSB8
## 22 Levels: PSW1 PSW2 PSW3 PSW4 PSW5 PSW6 PSW7 PSS1 PSS2 PSS3 PSS4 PSS5 ... PSB8
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 154 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 50 11.2 11.16%
## 2 PSW1 Không d<U+1ED3>ng ý 121 27.0 27.01%
## 3 PSW1 Khá không d<U+1ED3>ng ý 37 8.26 8.26%
## 4 PSW1 Bình thu<U+1EDD>ng 53 11.8 11.83%
## 5 PSW1 Khá d<U+1ED3>ng ý 55 12.3 12.28%
## 6 PSW1 Ð<U+1ED3>ng ý 117 26.1 26.12%
## 7 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 15 3.35 3.35%
## 8 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 31 6.92 6.92%
## 9 PSW2 Không d<U+1ED3>ng ý 55 12.3 12.28%
## 10 PSW2 Khá không d<U+1ED3>ng ý 36 8.04 8.04%
## # ... with 144 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn an to\u00E0n (PSA) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB th\u00E0nh ph\u1ED1 H\u1ED3 Ch\u00ED Minh\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t không d<U+1ED3>ng ý 50 11.2 11.16%
## 2 PSW2 R<U+1EA5>t không d<U+1ED3>ng ý 31 6.92 6.92%
## 3 PSW3 R<U+1EA5>t không d<U+1ED3>ng ý 14 3.12 3.12%
## 4 PSW4 R<U+1EA5>t không d<U+1ED3>ng ý 28 6.25 6.25%
## 5 PSW5 R<U+1EA5>t không d<U+1ED3>ng ý 18 4.02 4.02%
## 6 PSW6 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.56 1.56%
## 7 PSW7 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 8 PSS1 R<U+1EA5>t không d<U+1ED3>ng ý 8 1.79 1.79%
## 9 PSS2 R<U+1EA5>t không d<U+1ED3>ng ý 41 9.15 9.15%
## 10 PSS3 R<U+1EA5>t không d<U+1ED3>ng ý 31 6.92 6.92%
## # ... with 12 more rows
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Không d<U+1ED3>ng ý 121 27.0 27.01%
## 2 PSW2 Không d<U+1ED3>ng ý 55 12.3 12.28%
## 3 PSW3 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 4 PSW4 Không d<U+1ED3>ng ý 68 15.2 15.18%
## 5 PSW5 Không d<U+1ED3>ng ý 27 6.03 6.03%
## 6 PSW6 Không d<U+1ED3>ng ý 4 0.89 0.89%
## 7 PSW7 Không d<U+1ED3>ng ý 5 1.12 1.12%
## 8 PSS1 Không d<U+1ED3>ng ý 20 4.46 4.46%
## 9 PSS2 Không d<U+1ED3>ng ý 129 28.8 28.79%
## 10 PSS3 Không d<U+1ED3>ng ý 73 16.3 16.29%
## # ... with 12 more rows
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá không d<U+1ED3>ng ý 37 8.26 8.26%
## 2 PSW2 Khá không d<U+1ED3>ng ý 36 8.04 8.04%
## 3 PSW3 Khá không d<U+1ED3>ng ý 21 4.69 4.69%
## 4 PSW4 Khá không d<U+1ED3>ng ý 40 8.93 8.93%
## 5 PSW5 Khá không d<U+1ED3>ng ý 16 3.57 3.57%
## 6 PSW6 Khá không d<U+1ED3>ng ý 7 1.56 1.56%
## 7 PSW7 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 8 PSS1 Khá không d<U+1ED3>ng ý 21 4.69 4.69%
## 9 PSS2 Khá không d<U+1ED3>ng ý 39 8.71 8.71%
## 10 PSS3 Khá không d<U+1ED3>ng ý 28 6.25 6.25%
## # ... with 12 more rows
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Bình thu<U+1EDD>ng 53 11.8 11.83%
## 2 PSW2 Bình thu<U+1EDD>ng 60 13.4 13.39%
## 3 PSW3 Bình thu<U+1EDD>ng 46 10.3 10.27%
## 4 PSW4 Bình thu<U+1EDD>ng 96 21.4 21.43%
## 5 PSW5 Bình thu<U+1EDD>ng 54 12.0 12.05%
## 6 PSW6 Bình thu<U+1EDD>ng 29 6.47 6.47%
## 7 PSW7 Bình thu<U+1EDD>ng 35 7.81 7.81%
## 8 PSS1 Bình thu<U+1EDD>ng 40 8.93 8.93%
## 9 PSS2 Bình thu<U+1EDD>ng 57 12.7 12.72%
## 10 PSS3 Bình thu<U+1EDD>ng 53 11.8 11.83%
## # ... with 12 more rows
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Khá d<U+1ED3>ng ý 55 12.3 12.28%
## 2 PSW2 Khá d<U+1ED3>ng ý 57 12.7 12.72%
## 3 PSW3 Khá d<U+1ED3>ng ý 79 17.6 17.63%
## 4 PSW4 Khá d<U+1ED3>ng ý 64 14.3 14.29%
## 5 PSW5 Khá d<U+1ED3>ng ý 51 11.4 11.38%
## 6 PSW6 Khá d<U+1ED3>ng ý 30 6.7 6.7%
## 7 PSW7 Khá d<U+1ED3>ng ý 42 9.38 9.38%
## 8 PSS1 Khá d<U+1ED3>ng ý 49 10.9 10.94%
## 9 PSS2 Khá d<U+1ED3>ng ý 58 13.0 12.95%
## 10 PSS3 Khá d<U+1ED3>ng ý 52 11.6 11.61%
## # ... with 12 more rows
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 Ð<U+1ED3>ng ý 117 26.1 26.12%
## 2 PSW2 Ð<U+1ED3>ng ý 185 41.3 41.29%
## 3 PSW3 Ð<U+1ED3>ng ý 235 52.5 52.46%
## 4 PSW4 Ð<U+1ED3>ng ý 133 29.7 29.69%
## 5 PSW5 Ð<U+1ED3>ng ý 231 51.6 51.56%
## 6 PSW6 Ð<U+1ED3>ng ý 280 62.5 62.5%
## 7 PSW7 Ð<U+1ED3>ng ý 277 61.8 61.83%
## 8 PSS1 Ð<U+1ED3>ng ý 235 52.5 52.46%
## 9 PSS2 Ð<U+1ED3>ng ý 109 24.3 24.33%
## 10 PSS3 Ð<U+1ED3>ng ý 183 40.8 40.85%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 15 3.35 3.35%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 24 5.36 5.36%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 36 8.04 8.04%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 19 4.24 4.24%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 51 11.4 11.38%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 91 20.3 20.31%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 64 14.3 14.29%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 75 16.7 16.74%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 15 3.35 3.35%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 28 6.25 6.25%
## # ... with 12 more rows
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 22 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PSW1 R<U+1EA5>t d<U+1ED3>ng ý 15 3.35 3.35%
## 2 PSW2 R<U+1EA5>t d<U+1ED3>ng ý 24 5.36 5.36%
## 3 PSW3 R<U+1EA5>t d<U+1ED3>ng ý 36 8.04 8.04%
## 4 PSW4 R<U+1EA5>t d<U+1ED3>ng ý 19 4.24 4.24%
## 5 PSW5 R<U+1EA5>t d<U+1ED3>ng ý 51 11.4 11.38%
## 6 PSW6 R<U+1EA5>t d<U+1ED3>ng ý 91 20.3 20.31%
## 7 PSW7 R<U+1EA5>t d<U+1ED3>ng ý 64 14.3 14.29%
## 8 PSS1 R<U+1EA5>t d<U+1ED3>ng ý 75 16.7 16.74%
## 9 PSS2 R<U+1EA5>t d<U+1ED3>ng ý 15 3.35 3.35%
## 10 PSS3 R<U+1EA5>t d<U+1ED3>ng ý 28 6.25 6.25%
## # ... with 12 more rows
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 2, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-2, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.13.2. Construct PSQ-Nhãn tiếng việt
HCM_SEM_PSQ_v = within(HCM_SEM_PSQ, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PQT1", "PQT2", "PQT3", "PQT4", "PQC1", "PQC2", "PQC3", "PQC4", "PQC5", "PQP1", "PQP2", "PQP3", "PQP4", "PQR1", "PQR2", "PQR3", "PQR4", "PQR5"))
})
str(HCM_SEM_PSQ_v)
## 'data.frame': 8064 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 4 2 6 6 4 2 5 5 7 ...
## $ BPE: Factor w/ 18 levels "PQT1","PQT2",..: 15 15 15 15 15 15 15 15 15 15 ...
summary(HCM_SEM_PSQ_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 222 PQT1 : 448
## Không d<U+1ED3>ng ý : 561 PQT2 : 448
## Khá không d<U+1ED3>ng ý : 477 PQT3 : 448
## Bình thu<U+1EDD>ng :1274 PQT4 : 448
## Khá d<U+1ED3>ng ý :1598 PQC1 : 448
## Ð<U+1ED3>ng ý :3274 PQC2 : 448
## R<U+1EA5>t d<U+1ED3>ng ý : 658 (Other):5376
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_PSQ_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 PQP4 PQR1 PQR2
## [16] PQR3 PQR4 PQR5
## 18 Levels: PQT1 PQT2 PQT3 PQT4 PQC1 PQC2 PQC3 PQC4 PQC5 PQP1 PQP2 PQP3 ... PQR5
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t không d<U+1ED3>ng ý 13 2.9 2.9%
## 2 PQT1 Không d<U+1ED3>ng ý 29 6.47 6.47%
## 3 PQT1 Khá không d<U+1ED3>ng ý 24 5.36 5.36%
## 4 PQT1 Bình thu<U+1EDD>ng 61 13.6 13.62%
## 5 PQT1 Khá d<U+1ED3>ng ý 81 18.1 18.08%
## 6 PQT1 Ð<U+1ED3>ng ý 199 44.4 44.42%
## 7 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 41 9.15 9.15%
## 8 PQT2 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.56 1.56%
## 9 PQT2 Không d<U+1ED3>ng ý 31 6.92 6.92%
## 10 PQT2 Khá không d<U+1ED3>ng ý 8 1.79 1.79%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn ch\u1EA5t l\u01B0\u1EE3ng d\u1ECBch v\u1EE5 (PSQ) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB th\u00E0nh ph\u1ED1 H\u1ED3 Ch\u00ED Minh\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t không d<U+1ED3>ng ý 13 2.9 2.9%
## 2 PQT2 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.56 1.56%
## 3 PQT3 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.56 1.56%
## 4 PQT4 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 5 PQC1 R<U+1EA5>t không d<U+1ED3>ng ý 8 1.79 1.79%
## 6 PQC2 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 7 PQC3 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 8 PQC4 R<U+1EA5>t không d<U+1ED3>ng ý 10 2.23 2.23%
## 9 PQC5 R<U+1EA5>t không d<U+1ED3>ng ý 9 2.01 2.01%
## 10 PQP1 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 11 PQP2 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 12 PQP3 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 13 PQP4 R<U+1EA5>t không d<U+1ED3>ng ý 28 6.25 6.25%
## 14 PQR1 R<U+1EA5>t không d<U+1ED3>ng ý 8 1.79 1.79%
## 15 PQR2 R<U+1EA5>t không d<U+1ED3>ng ý 9 2.01 2.01%
## 16 PQR3 R<U+1EA5>t không d<U+1ED3>ng ý 14 3.12 3.12%
## 17 PQR4 R<U+1EA5>t không d<U+1ED3>ng ý 26 5.8 5.8%
## 18 PQR5 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Không d<U+1ED3>ng ý 29 6.47 6.47%
## 2 PQT2 Không d<U+1ED3>ng ý 31 6.92 6.92%
## 3 PQT3 Không d<U+1ED3>ng ý 26 5.8 5.8%
## 4 PQT4 Không d<U+1ED3>ng ý 29 6.47 6.47%
## 5 PQC1 Không d<U+1ED3>ng ý 15 3.35 3.35%
## 6 PQC2 Không d<U+1ED3>ng ý 25 5.58 5.58%
## 7 PQC3 Không d<U+1ED3>ng ý 29 6.47 6.47%
## 8 PQC4 Không d<U+1ED3>ng ý 26 5.8 5.8%
## 9 PQC5 Không d<U+1ED3>ng ý 21 4.69 4.69%
## 10 PQP1 Không d<U+1ED3>ng ý 31 6.92 6.92%
## 11 PQP2 Không d<U+1ED3>ng ý 28 6.25 6.25%
## 12 PQP3 Không d<U+1ED3>ng ý 29 6.47 6.47%
## 13 PQP4 Không d<U+1ED3>ng ý 57 12.7 12.72%
## 14 PQR1 Không d<U+1ED3>ng ý 32 7.14 7.14%
## 15 PQR2 Không d<U+1ED3>ng ý 31 6.92 6.92%
## 16 PQR3 Không d<U+1ED3>ng ý 42 9.38 9.38%
## 17 PQR4 Không d<U+1ED3>ng ý 40 8.93 8.93%
## 18 PQR5 Không d<U+1ED3>ng ý 40 8.93 8.93%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Khá không d<U+1ED3>ng ý 24 5.36 5.36%
## 2 PQT2 Khá không d<U+1ED3>ng ý 8 1.79 1.79%
## 3 PQT3 Khá không d<U+1ED3>ng ý 23 5.13 5.13%
## 4 PQT4 Khá không d<U+1ED3>ng ý 26 5.8 5.8%
## 5 PQC1 Khá không d<U+1ED3>ng ý 13 2.9 2.9%
## 6 PQC2 Khá không d<U+1ED3>ng ý 32 7.14 7.14%
## 7 PQC3 Khá không d<U+1ED3>ng ý 30 6.7 6.7%
## 8 PQC4 Khá không d<U+1ED3>ng ý 19 4.24 4.24%
## 9 PQC5 Khá không d<U+1ED3>ng ý 9 2.01 2.01%
## 10 PQP1 Khá không d<U+1ED3>ng ý 37 8.26 8.26%
## 11 PQP2 Khá không d<U+1ED3>ng ý 39 8.71 8.71%
## 12 PQP3 Khá không d<U+1ED3>ng ý 34 7.59 7.59%
## 13 PQP4 Khá không d<U+1ED3>ng ý 45 10.0 10.04%
## 14 PQR1 Khá không d<U+1ED3>ng ý 26 5.8 5.8%
## 15 PQR2 Khá không d<U+1ED3>ng ý 27 6.03 6.03%
## 16 PQR3 Khá không d<U+1ED3>ng ý 24 5.36 5.36%
## 17 PQR4 Khá không d<U+1ED3>ng ý 34 7.59 7.59%
## 18 PQR5 Khá không d<U+1ED3>ng ý 27 6.03 6.03%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Bình thu<U+1EDD>ng 61 13.6 13.62%
## 2 PQT2 Bình thu<U+1EDD>ng 37 8.26 8.26%
## 3 PQT3 Bình thu<U+1EDD>ng 63 14.1 14.06%
## 4 PQT4 Bình thu<U+1EDD>ng 132 29.5 29.46%
## 5 PQC1 Bình thu<U+1EDD>ng 38 8.48 8.48%
## 6 PQC2 Bình thu<U+1EDD>ng 79 17.6 17.63%
## 7 PQC3 Bình thu<U+1EDD>ng 75 16.7 16.74%
## 8 PQC4 Bình thu<U+1EDD>ng 67 15.0 14.96%
## 9 PQC5 Bình thu<U+1EDD>ng 61 13.6 13.62%
## 10 PQP1 Bình thu<U+1EDD>ng 68 15.2 15.18%
## 11 PQP2 Bình thu<U+1EDD>ng 83 18.5 18.53%
## 12 PQP3 Bình thu<U+1EDD>ng 82 18.3 18.3%
## 13 PQP4 Bình thu<U+1EDD>ng 69 15.4 15.4%
## 14 PQR1 Bình thu<U+1EDD>ng 111 24.8 24.78%
## 15 PQR2 Bình thu<U+1EDD>ng 67 15.0 14.96%
## 16 PQR3 Bình thu<U+1EDD>ng 65 14.5 14.51%
## 17 PQR4 Bình thu<U+1EDD>ng 52 11.6 11.61%
## 18 PQR5 Bình thu<U+1EDD>ng 64 14.3 14.29%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Khá d<U+1ED3>ng ý 81 18.1 18.08%
## 2 PQT2 Khá d<U+1ED3>ng ý 77 17.2 17.19%
## 3 PQT3 Khá d<U+1ED3>ng ý 97 21.6 21.65%
## 4 PQT4 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 5 PQC1 Khá d<U+1ED3>ng ý 75 16.7 16.74%
## 6 PQC2 Khá d<U+1ED3>ng ý 81 18.1 18.08%
## 7 PQC3 Khá d<U+1ED3>ng ý 94 21.0 20.98%
## 8 PQC4 Khá d<U+1ED3>ng ý 105 23.4 23.44%
## 9 PQC5 Khá d<U+1ED3>ng ý 82 18.3 18.3%
## 10 PQP1 Khá d<U+1ED3>ng ý 114 25.4 25.45%
## 11 PQP2 Khá d<U+1ED3>ng ý 93 20.8 20.76%
## 12 PQP3 Khá d<U+1ED3>ng ý 102 22.8 22.77%
## 13 PQP4 Khá d<U+1ED3>ng ý 77 17.2 17.19%
## 14 PQR1 Khá d<U+1ED3>ng ý 57 12.7 12.72%
## 15 PQR2 Khá d<U+1ED3>ng ý 102 22.8 22.77%
## 16 PQR3 Khá d<U+1ED3>ng ý 84 18.8 18.75%
## 17 PQR4 Khá d<U+1ED3>ng ý 101 22.5 22.54%
## 18 PQR5 Khá d<U+1ED3>ng ý 100 22.3 22.32%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 Ð<U+1ED3>ng ý 199 44.4 44.42%
## 2 PQT2 Ð<U+1ED3>ng ý 219 48.9 48.88%
## 3 PQT3 Ð<U+1ED3>ng ý 188 42.0 41.96%
## 4 PQT4 Ð<U+1ED3>ng ý 152 33.9 33.93%
## 5 PQC1 Ð<U+1ED3>ng ý 236 52.7 52.68%
## 6 PQC2 Ð<U+1ED3>ng ý 185 41.3 41.29%
## 7 PQC3 Ð<U+1ED3>ng ý 174 38.8 38.84%
## 8 PQC4 Ð<U+1ED3>ng ý 188 42.0 41.96%
## 9 PQC5 Ð<U+1ED3>ng ý 224 50 50%
## 10 PQP1 Ð<U+1ED3>ng ý 155 34.6 34.6%
## 11 PQP2 Ð<U+1ED3>ng ý 169 37.7 37.72%
## 12 PQP3 Ð<U+1ED3>ng ý 155 34.6 34.6%
## 13 PQP4 Ð<U+1ED3>ng ý 149 33.3 33.26%
## 14 PQR1 Ð<U+1ED3>ng ý 178 39.7 39.73%
## 15 PQR2 Ð<U+1ED3>ng ý 175 39.1 39.06%
## 16 PQR3 Ð<U+1ED3>ng ý 182 40.6 40.62%
## 17 PQR4 Ð<U+1ED3>ng ý 172 38.4 38.39%
## 18 PQR5 Ð<U+1ED3>ng ý 174 38.8 38.84%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 41 9.15 9.15%
## 2 PQT2 R<U+1EA5>t d<U+1ED3>ng ý 69 15.4 15.4%
## 3 PQT3 R<U+1EA5>t d<U+1ED3>ng ý 44 9.82 9.82%
## 4 PQT4 R<U+1EA5>t d<U+1ED3>ng ý 22 4.91 4.91%
## 5 PQC1 R<U+1EA5>t d<U+1ED3>ng ý 63 14.1 14.06%
## 6 PQC2 R<U+1EA5>t d<U+1ED3>ng ý 34 7.59 7.59%
## 7 PQC3 R<U+1EA5>t d<U+1ED3>ng ý 34 7.59 7.59%
## 8 PQC4 R<U+1EA5>t d<U+1ED3>ng ý 33 7.37 7.37%
## 9 PQC5 R<U+1EA5>t d<U+1ED3>ng ý 42 9.38 9.38%
## 10 PQP1 R<U+1EA5>t d<U+1ED3>ng ý 31 6.92 6.92%
## 11 PQP2 R<U+1EA5>t d<U+1ED3>ng ý 24 5.36 5.36%
## 12 PQP3 R<U+1EA5>t d<U+1ED3>ng ý 34 7.59 7.59%
## 13 PQP4 R<U+1EA5>t d<U+1ED3>ng ý 23 5.13 5.13%
## 14 PQR1 R<U+1EA5>t d<U+1ED3>ng ý 36 8.04 8.04%
## 15 PQR2 R<U+1EA5>t d<U+1ED3>ng ý 37 8.26 8.26%
## 16 PQR3 R<U+1EA5>t d<U+1ED3>ng ý 37 8.26 8.26%
## 17 PQR4 R<U+1EA5>t d<U+1ED3>ng ý 23 5.13 5.13%
## 18 PQR5 R<U+1EA5>t d<U+1ED3>ng ý 31 6.92 6.92%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PQT1 R<U+1EA5>t d<U+1ED3>ng ý 41 9.15 9.15%
## 2 PQT2 R<U+1EA5>t d<U+1ED3>ng ý 69 15.4 15.4%
## 3 PQT3 R<U+1EA5>t d<U+1ED3>ng ý 44 9.82 9.82%
## 4 PQT4 R<U+1EA5>t d<U+1ED3>ng ý 22 4.91 4.91%
## 5 PQC1 R<U+1EA5>t d<U+1ED3>ng ý 63 14.1 14.06%
## 6 PQC2 R<U+1EA5>t d<U+1ED3>ng ý 34 7.59 7.59%
## 7 PQC3 R<U+1EA5>t d<U+1ED3>ng ý 34 7.59 7.59%
## 8 PQC4 R<U+1EA5>t d<U+1ED3>ng ý 33 7.37 7.37%
## 9 PQC5 R<U+1EA5>t d<U+1ED3>ng ý 42 9.38 9.38%
## 10 PQP1 R<U+1EA5>t d<U+1ED3>ng ý 31 6.92 6.92%
## 11 PQP2 R<U+1EA5>t d<U+1ED3>ng ý 24 5.36 5.36%
## 12 PQP3 R<U+1EA5>t d<U+1ED3>ng ý 34 7.59 7.59%
## 13 PQP4 R<U+1EA5>t d<U+1ED3>ng ý 23 5.13 5.13%
## 14 PQR1 R<U+1EA5>t d<U+1ED3>ng ý 36 8.04 8.04%
## 15 PQR2 R<U+1EA5>t d<U+1ED3>ng ý 37 8.26 8.26%
## 16 PQR3 R<U+1EA5>t d<U+1ED3>ng ý 37 8.26 8.26%
## 17 PQR4 R<U+1EA5>t d<U+1ED3>ng ý 23 5.13 5.13%
## 18 PQR5 R<U+1EA5>t d<U+1ED3>ng ý 31 6.92 6.92%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text2, aes(x = BPE, y = 9, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.13.3. Construct thuộc nhóm Stimulus-Nhãn tiếng việt
HCM_SEM_S_v = within(HCM_SEM_S, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("PHB1", "PHB2", "PHB3", "PHB4", "PHB5", "PEB1", "PEB2", "PEB3", "PEB4", "PDE1", "PDE2", "PDE3", "PDE4", "PDE5", "PDE6", "PDE7", "PSO1", "PSO2", "PSO3"))
})
str(HCM_SEM_S_v)
## 'data.frame': 8512 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 3 5 5 5 4 3 6 6 7 ...
## $ BPE: Factor w/ 19 levels "PHB1","PHB2",..: 12 12 12 12 12 12 12 12 12 12 ...
summary(HCM_SEM_S_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 386 PHB1 : 448
## Không d<U+1ED3>ng ý : 632 PHB2 : 448
## Khá không d<U+1ED3>ng ý : 406 PHB3 : 448
## Bình thu<U+1EDD>ng :1776 PHB4 : 448
## Khá d<U+1ED3>ng ý :1395 PHB5 : 448
## Ð<U+1ED3>ng ý :2780 PEB1 : 448
## R<U+1EA5>t d<U+1ED3>ng ý :1137 (Other):5824
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_S_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 PDE4 PDE5 PDE6
## [16] PDE7 PSO1 PSO2 PSO3
## 19 Levels: PHB1 PHB2 PHB3 PHB4 PHB5 PEB1 PEB2 PEB3 PEB4 PDE1 PDE2 PDE3 ... PSO3
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 133 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t không d<U+1ED3>ng ý 33 7.37 7.37%
## 2 PHB1 Không d<U+1ED3>ng ý 51 11.4 11.38%
## 3 PHB1 Khá không d<U+1ED3>ng ý 41 9.15 9.15%
## 4 PHB1 Bình thu<U+1EDD>ng 87 19.4 19.42%
## 5 PHB1 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 6 PHB1 Ð<U+1ED3>ng ý 135 30.1 30.13%
## 7 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 25 5.58 5.58%
## 8 PHB2 R<U+1EA5>t không d<U+1ED3>ng ý 17 3.79 3.79%
## 9 PHB2 Không d<U+1ED3>ng ý 22 4.91 4.91%
## 10 PHB2 Khá không d<U+1ED3>ng ý 23 5.13 5.13%
## # ... with 123 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn l\u1EE3i \u00EDch s\u1EE9c kh\u1ECFe (PHB), m\u00F4i tr\u01B0\u1EDDng (PEB), c\u1EA3m nh\u1EADn thi\u1EBFt k\u1EBF (PDE) v\u00E0 l\u1EE3i \u00EDch x\u00E3 h\u1ED9i (PSO) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB th\u00E0nh ph\u1ED1 H\u1ED3 Ch\u00ED Minh\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t không d<U+1ED3>ng ý 33 7.37 7.37%
## 2 PHB2 R<U+1EA5>t không d<U+1ED3>ng ý 17 3.79 3.79%
## 3 PHB3 R<U+1EA5>t không d<U+1ED3>ng ý 14 3.12 3.12%
## 4 PHB4 R<U+1EA5>t không d<U+1ED3>ng ý 16 3.57 3.57%
## 5 PHB5 R<U+1EA5>t không d<U+1ED3>ng ý 19 4.24 4.24%
## 6 PEB1 R<U+1EA5>t không d<U+1ED3>ng ý 14 3.12 3.12%
## 7 PEB2 R<U+1EA5>t không d<U+1ED3>ng ý 14 3.12 3.12%
## 8 PEB3 R<U+1EA5>t không d<U+1ED3>ng ý 23 5.13 5.13%
## 9 PEB4 R<U+1EA5>t không d<U+1ED3>ng ý 24 5.36 5.36%
## 10 PDE1 R<U+1EA5>t không d<U+1ED3>ng ý 25 5.58 5.58%
## 11 PDE2 R<U+1EA5>t không d<U+1ED3>ng ý 24 5.36 5.36%
## 12 PDE3 R<U+1EA5>t không d<U+1ED3>ng ý 23 5.13 5.13%
## 13 PDE4 R<U+1EA5>t không d<U+1ED3>ng ý 13 2.9 2.9%
## 14 PDE5 R<U+1EA5>t không d<U+1ED3>ng ý 15 3.35 3.35%
## 15 PDE6 R<U+1EA5>t không d<U+1ED3>ng ý 13 2.9 2.9%
## 16 PDE7 R<U+1EA5>t không d<U+1ED3>ng ý 22 4.91 4.91%
## 17 PSO1 R<U+1EA5>t không d<U+1ED3>ng ý 25 5.58 5.58%
## 18 PSO2 R<U+1EA5>t không d<U+1ED3>ng ý 25 5.58 5.58%
## 19 PSO3 R<U+1EA5>t không d<U+1ED3>ng ý 27 6.03 6.03%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Không d<U+1ED3>ng ý 51 11.4 11.38%
## 2 PHB2 Không d<U+1ED3>ng ý 22 4.91 4.91%
## 3 PHB3 Không d<U+1ED3>ng ý 43 9.6 9.6%
## 4 PHB4 Không d<U+1ED3>ng ý 52 11.6 11.61%
## 5 PHB5 Không d<U+1ED3>ng ý 42 9.38 9.38%
## 6 PEB1 Không d<U+1ED3>ng ý 35 7.81 7.81%
## 7 PEB2 Không d<U+1ED3>ng ý 47 10.5 10.49%
## 8 PEB3 Không d<U+1ED3>ng ý 8 1.79 1.79%
## 9 PEB4 Không d<U+1ED3>ng ý 13 2.9 2.9%
## 10 PDE1 Không d<U+1ED3>ng ý 14 3.12 3.12%
## 11 PDE2 Không d<U+1ED3>ng ý 14 3.12 3.12%
## 12 PDE3 Không d<U+1ED3>ng ý 12 2.68 2.68%
## 13 PDE4 Không d<U+1ED3>ng ý 16 3.57 3.57%
## 14 PDE5 Không d<U+1ED3>ng ý 8 1.79 1.79%
## 15 PDE6 Không d<U+1ED3>ng ý 7 1.56 1.56%
## 16 PDE7 Không d<U+1ED3>ng ý 7 1.56 1.56%
## 17 PSO1 Không d<U+1ED3>ng ý 80 17.9 17.86%
## 18 PSO2 Không d<U+1ED3>ng ý 89 19.9 19.87%
## 19 PSO3 Không d<U+1ED3>ng ý 72 16.1 16.07%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Khá không d<U+1ED3>ng ý 41 9.15 9.15%
## 2 PHB2 Khá không d<U+1ED3>ng ý 23 5.13 5.13%
## 3 PHB3 Khá không d<U+1ED3>ng ý 23 5.13 5.13%
## 4 PHB4 Khá không d<U+1ED3>ng ý 33 7.37 7.37%
## 5 PHB5 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## 6 PEB1 Khá không d<U+1ED3>ng ý 19 4.24 4.24%
## 7 PEB2 Khá không d<U+1ED3>ng ý 36 8.04 8.04%
## 8 PEB3 Khá không d<U+1ED3>ng ý 10 2.23 2.23%
## 9 PEB4 Khá không d<U+1ED3>ng ý 12 2.68 2.68%
## 10 PDE1 Khá không d<U+1ED3>ng ý 8 1.79 1.79%
## 11 PDE2 Khá không d<U+1ED3>ng ý 7 1.56 1.56%
## 12 PDE3 Khá không d<U+1ED3>ng ý 20 4.46 4.46%
## 13 PDE4 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## 14 PDE5 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 15 PDE6 Khá không d<U+1ED3>ng ý 7 1.56 1.56%
## 16 PDE7 Khá không d<U+1ED3>ng ý 4 0.89 0.89%
## 17 PSO1 Khá không d<U+1ED3>ng ý 39 8.71 8.71%
## 18 PSO2 Khá không d<U+1ED3>ng ý 40 8.93 8.93%
## 19 PSO3 Khá không d<U+1ED3>ng ý 34 7.59 7.59%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Bình thu<U+1EDD>ng 87 19.4 19.42%
## 2 PHB2 Bình thu<U+1EDD>ng 65 14.5 14.51%
## 3 PHB3 Bình thu<U+1EDD>ng 151 33.7 33.71%
## 4 PHB4 Bình thu<U+1EDD>ng 161 35.9 35.94%
## 5 PHB5 Bình thu<U+1EDD>ng 71 15.8 15.85%
## 6 PEB1 Bình thu<U+1EDD>ng 154 34.4 34.38%
## 7 PEB2 Bình thu<U+1EDD>ng 150 33.5 33.48%
## 8 PEB3 Bình thu<U+1EDD>ng 46 10.3 10.27%
## 9 PEB4 Bình thu<U+1EDD>ng 50 11.2 11.16%
## 10 PDE1 Bình thu<U+1EDD>ng 52 11.6 11.61%
## 11 PDE2 Bình thu<U+1EDD>ng 67 15.0 14.96%
## 12 PDE3 Bình thu<U+1EDD>ng 63 14.1 14.06%
## 13 PDE4 Bình thu<U+1EDD>ng 51 11.4 11.38%
## 14 PDE5 Bình thu<U+1EDD>ng 57 12.7 12.72%
## 15 PDE6 Bình thu<U+1EDD>ng 40 8.93 8.93%
## 16 PDE7 Bình thu<U+1EDD>ng 45 10.0 10.04%
## 17 PSO1 Bình thu<U+1EDD>ng 149 33.3 33.26%
## 18 PSO2 Bình thu<U+1EDD>ng 165 36.8 36.83%
## 19 PSO3 Bình thu<U+1EDD>ng 152 33.9 33.93%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 2 PHB2 Khá d<U+1ED3>ng ý 88 19.6 19.64%
## 3 PHB3 Khá d<U+1ED3>ng ý 85 19.0 18.97%
## 4 PHB4 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 5 PHB5 Khá d<U+1ED3>ng ý 100 22.3 22.32%
## 6 PEB1 Khá d<U+1ED3>ng ý 91 20.3 20.31%
## 7 PEB2 Khá d<U+1ED3>ng ý 83 18.5 18.53%
## 8 PEB3 Khá d<U+1ED3>ng ý 50 11.2 11.16%
## 9 PEB4 Khá d<U+1ED3>ng ý 72 16.1 16.07%
## 10 PDE1 Khá d<U+1ED3>ng ý 82 18.3 18.3%
## 11 PDE2 Khá d<U+1ED3>ng ý 78 17.4 17.41%
## 12 PDE3 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 13 PDE4 Khá d<U+1ED3>ng ý 68 15.2 15.18%
## 14 PDE5 Khá d<U+1ED3>ng ý 69 15.4 15.4%
## 15 PDE6 Khá d<U+1ED3>ng ý 58 13.0 12.95%
## 16 PDE7 Khá d<U+1ED3>ng ý 47 10.5 10.49%
## 17 PSO1 Khá d<U+1ED3>ng ý 71 15.8 15.85%
## 18 PSO2 Khá d<U+1ED3>ng ý 58 13.0 12.95%
## 19 PSO3 Khá d<U+1ED3>ng ý 67 15.0 14.96%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 Ð<U+1ED3>ng ý 135 30.1 30.13%
## 2 PHB2 Ð<U+1ED3>ng ý 195 43.5 43.53%
## 3 PHB3 Ð<U+1ED3>ng ý 109 24.3 24.33%
## 4 PHB4 Ð<U+1ED3>ng ý 92 20.5 20.54%
## 5 PHB5 Ð<U+1ED3>ng ý 176 39.3 39.29%
## 6 PEB1 Ð<U+1ED3>ng ý 108 24.1 24.11%
## 7 PEB2 Ð<U+1ED3>ng ý 93 20.8 20.76%
## 8 PEB3 Ð<U+1ED3>ng ý 181 40.4 40.4%
## 9 PEB4 Ð<U+1ED3>ng ý 166 37.0 37.05%
## 10 PDE1 Ð<U+1ED3>ng ý 161 35.9 35.94%
## 11 PDE2 Ð<U+1ED3>ng ý 165 36.8 36.83%
## 12 PDE3 Ð<U+1ED3>ng ý 193 43.1 43.08%
## 13 PDE4 Ð<U+1ED3>ng ý 197 44.0 43.97%
## 14 PDE5 Ð<U+1ED3>ng ý 211 47.1 47.1%
## 15 PDE6 Ð<U+1ED3>ng ý 210 46.9 46.88%
## 16 PDE7 Ð<U+1ED3>ng ý 221 49.3 49.33%
## 17 PSO1 Ð<U+1ED3>ng ý 57 12.7 12.72%
## 18 PSO2 Ð<U+1ED3>ng ý 45 10.0 10.04%
## 19 PSO3 Ð<U+1ED3>ng ý 65 14.5 14.51%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 25 5.58 5.58%
## 2 PHB2 R<U+1EA5>t d<U+1ED3>ng ý 38 8.48 8.48%
## 3 PHB3 R<U+1EA5>t d<U+1ED3>ng ý 23 5.13 5.13%
## 4 PHB4 R<U+1EA5>t d<U+1ED3>ng ý 18 4.02 4.02%
## 5 PHB5 R<U+1EA5>t d<U+1ED3>ng ý 22 4.91 4.91%
## 6 PEB1 R<U+1EA5>t d<U+1ED3>ng ý 27 6.03 6.03%
## 7 PEB2 R<U+1EA5>t d<U+1ED3>ng ý 25 5.58 5.58%
## 8 PEB3 R<U+1EA5>t d<U+1ED3>ng ý 130 29.0 29.02%
## 9 PEB4 R<U+1EA5>t d<U+1ED3>ng ý 111 24.8 24.78%
## 10 PDE1 R<U+1EA5>t d<U+1ED3>ng ý 106 23.7 23.66%
## 11 PDE2 R<U+1EA5>t d<U+1ED3>ng ý 93 20.8 20.76%
## 12 PDE3 R<U+1EA5>t d<U+1ED3>ng ý 61 13.6 13.62%
## 13 PDE4 R<U+1EA5>t d<U+1ED3>ng ý 85 19.0 18.97%
## 14 PDE5 R<U+1EA5>t d<U+1ED3>ng ý 74 16.5 16.52%
## 15 PDE6 R<U+1EA5>t d<U+1ED3>ng ý 113 25.2 25.22%
## 16 PDE7 R<U+1EA5>t d<U+1ED3>ng ý 102 22.8 22.77%
## 17 PSO1 R<U+1EA5>t d<U+1ED3>ng ý 27 6.03 6.03%
## 18 PSO2 R<U+1EA5>t d<U+1ED3>ng ý 26 5.8 5.8%
## 19 PSO3 R<U+1EA5>t d<U+1ED3>ng ý 31 6.92 6.92%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 19 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 PHB1 R<U+1EA5>t d<U+1ED3>ng ý 25 5.58 5.58%
## 2 PHB2 R<U+1EA5>t d<U+1ED3>ng ý 38 8.48 8.48%
## 3 PHB3 R<U+1EA5>t d<U+1ED3>ng ý 23 5.13 5.13%
## 4 PHB4 R<U+1EA5>t d<U+1ED3>ng ý 18 4.02 4.02%
## 5 PHB5 R<U+1EA5>t d<U+1ED3>ng ý 22 4.91 4.91%
## 6 PEB1 R<U+1EA5>t d<U+1ED3>ng ý 27 6.03 6.03%
## 7 PEB2 R<U+1EA5>t d<U+1ED3>ng ý 25 5.58 5.58%
## 8 PEB3 R<U+1EA5>t d<U+1ED3>ng ý 130 29.0 29.02%
## 9 PEB4 R<U+1EA5>t d<U+1ED3>ng ý 111 24.8 24.78%
## 10 PDE1 R<U+1EA5>t d<U+1ED3>ng ý 106 23.7 23.66%
## 11 PDE2 R<U+1EA5>t d<U+1ED3>ng ý 93 20.8 20.76%
## 12 PDE3 R<U+1EA5>t d<U+1ED3>ng ý 61 13.6 13.62%
## 13 PDE4 R<U+1EA5>t d<U+1ED3>ng ý 85 19.0 18.97%
## 14 PDE5 R<U+1EA5>t d<U+1ED3>ng ý 74 16.5 16.52%
## 15 PDE6 R<U+1EA5>t d<U+1ED3>ng ý 113 25.2 25.22%
## 16 PDE7 R<U+1EA5>t d<U+1ED3>ng ý 102 22.8 22.77%
## 17 PSO1 R<U+1EA5>t d<U+1ED3>ng ý 27 6.03 6.03%
## 18 PSO2 R<U+1EA5>t d<U+1ED3>ng ý 26 5.8 5.8%
## 19 PSO3 R<U+1EA5>t d<U+1ED3>ng ý 31 6.92 6.92%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text4, aes(x = BPE, y = 13, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
3.13.4. Construct thuộc nhóm Organism-Response - Nhãn tiếng việt
# Plot Likert graph for people in both cities for construct PHB
HCM_SEM_OR_v = within(HCM_SEM_OR, {
Res = factor(Res, labels = c("R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00F4ng \u0111\u1ED3ng \u00FD", "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD", "B\u00ECnh th\u01B0\u1EDDng", "Kh\u00E1 \u0111\u1ED3ng \u00FD", "\u0110\u1ED3ng \u00FD", "R\u1EA5t \u0111\u1ED3ng \u00FD"))
BPE = factor(BPE, labels = c("IMA1", "IMA2", "IMA3", "IMA4", "IMA5", "PVA1", "PVA2", "PVA3", "SAT1", "SAT2", "SAT3", "LOY1", "LOY2", "LOY3", "LOY4", "LOY5", "LOY6", "LOY7"))
})
str(HCM_SEM_OR_v)
## 'data.frame': 8064 obs. of 2 variables:
## $ Res: Factor w/ 7 levels "R<U+1EA5>t không d<U+1ED3>ng ý",..: 6 4 4 5 5 4 2 6 5 6 ...
## $ BPE: Factor w/ 18 levels "IMA1","IMA2",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(HCM_SEM_OR_v)
## Res BPE
## R<U+1EA5>t không d<U+1ED3>ng ý: 139 IMA1 : 448
## Không d<U+1ED3>ng ý : 308 IMA2 : 448
## Khá không d<U+1ED3>ng ý : 266 IMA3 : 448
## Bình thu<U+1EDD>ng :1415 IMA4 : 448
## Khá d<U+1ED3>ng ý :1615 IMA5 : 448
## Ð<U+1ED3>ng ý :3355 PVA1 : 448
## R<U+1EA5>t d<U+1ED3>ng ý : 966 (Other):5376
## t <- compareGroups(Res ~ BPE, data = DN_SEM1)
## createTable(t)
HCM_SEM_OR_v %>%
group_by(BPE, Res) %>%
count() %>%
ungroup() %>%
group_by(BPE) %>%
mutate(percent = 100*n / sum(n)) %>%
mutate(percent = round(percent, 2)) %>%
mutate(bar_text = paste0(percent, "%")) %>%
ungroup() -> df_for_ploting
df_for_ploting %>%
filter(Res == Res[7]) %>%
#arrange(percent) %>% # sắp xếp theo %
pull(BPE) -> order_x
order_x
## [1] IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 LOY2 LOY3 LOY4
## [16] LOY5 LOY6 LOY7
## 18 Levels: IMA1 IMA2 IMA3 IMA4 IMA5 PVA1 PVA2 PVA3 SAT1 SAT2 SAT3 LOY1 ... LOY7
# Make a draft plot:
my_colors <- c("#3e6487", "#829cb2", "pink", "pink3", "palevioletred", "rosybrown2", "rosybrown3")
my_font <- "Roboto Condensed"
df_for_ploting %>%
mutate(BPE = factor(BPE, levels = order_x), Res = factor(Res, levels = Res[7:1])) -> df_odered
df_odered
## # A tibble: 126 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.12 1.12%
## 2 IMA1 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 3 IMA1 Khá không d<U+1ED3>ng ý 21 4.69 4.69%
## 4 IMA1 Bình thu<U+1EDD>ng 100 22.3 22.32%
## 5 IMA1 Khá d<U+1ED3>ng ý 93 20.8 20.76%
## 6 IMA1 Ð<U+1ED3>ng ý 180 40.2 40.18%
## 7 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 8 IMA2 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 9 IMA2 Không d<U+1ED3>ng ý 18 4.02 4.02%
## 10 IMA2 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## # ... with 116 more rows
library(extrafont)
theme_set(theme_minimal())
gg_v <- df_odered %>%
ggplot(aes(x = BPE, y = percent, fill = Res)) +
geom_col(width = 0.8) +
coord_flip() +
scale_fill_manual(values = my_colors[7:1], name = "") +
theme(legend.position = "top") +
theme(text = element_text(family = my_font)) +
guides(fill = guide_legend(reverse = TRUE)) +
scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0, 0)) +
theme(plot.title = element_text(size = 18), plot.subtitle = element_text(size = 11, color = "grey20")) +
theme(axis.text = element_text(color = "grey20", size = 10.2)) +
theme(plot.margin = unit(rep(0.7, 4), "cm")) +
theme(panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank()) +
theme(legend.key.height = unit(0.15, "mm")) +
labs(x = NULL, y = NULL,
title = "C\u1EA3m nh\u1EADn h\u00ECnh \u1EA3nh (IMA), gi\u00E1 tr\u1ECB (PVA), s\u1EF1 h\u00E0i l\u00F2ng (SAT) v\u00E0 l\u00F2ng trung th\u00E0nh (LOY) c\u1EE7a h\u00E0nh kh\u00E1ch s\u1EED d\u1EE5ng xe bu\u00FDt \u0111\u00F4 th\u1ECB th\u00E0nh ph\u1ED1 H\u1ED3 Ch\u00ED Minh\r\n ",
subtitle = "Thang \u0111o Likert l\u00E0 lo\u1EA1i thang \u0111o \u0111i\u1EC3m \u0111\u00E1nh gi\u00E1 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng ph\u1ED5 bi\u1EBFn trong kh\u1EA3o s\u00E1t. Nghi\u00EAn c\u1EE9u s\u1EED d\u1EE5ng thang \u0111o 7 m\u1EE9c \u0111\u1ED9 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi 1 - R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD \u0111\u1EBFn 7 - R\u1EA5t \u0111\u1ED3ng \u00FD.")
gg_v
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
# For displaying percent of "Very Disagree": Điều chỉnh percent để thể hiện giá trị của %
df_odered %>%
filter(Res == "R\u1EA5t kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text1
df_for_text1
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.12 1.12%
## 2 IMA2 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 3 IMA3 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 4 IMA4 R<U+1EA5>t không d<U+1ED3>ng ý 13 2.9 2.9%
## 5 IMA5 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.34 1.34%
## 6 PVA1 R<U+1EA5>t không d<U+1ED3>ng ý 4 0.89 0.89%
## 7 PVA2 R<U+1EA5>t không d<U+1ED3>ng ý 6 1.34 1.34%
## 8 PVA3 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.67 0.67%
## 9 SAT1 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 10 SAT2 R<U+1EA5>t không d<U+1ED3>ng ý 11 2.46 2.46%
## 11 SAT3 R<U+1EA5>t không d<U+1ED3>ng ý 14 3.12 3.12%
## 12 LOY1 R<U+1EA5>t không d<U+1ED3>ng ý 12 2.68 2.68%
## 13 LOY2 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.12 1.12%
## 14 LOY3 R<U+1EA5>t không d<U+1ED3>ng ý 3 0.67 0.67%
## 15 LOY4 R<U+1EA5>t không d<U+1ED3>ng ý 2 0.45 0.45%
## 16 LOY5 R<U+1EA5>t không d<U+1ED3>ng ý 9 2.01 2.01%
## 17 LOY6 R<U+1EA5>t không d<U+1ED3>ng ý 5 1.12 1.12%
## 18 LOY7 R<U+1EA5>t không d<U+1ED3>ng ý 7 1.56 1.56%
# For displaying percent of "Disagree":
df_odered %>%
filter(Res == "Kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text2
df_for_text2
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 2 IMA2 Không d<U+1ED3>ng ý 18 4.02 4.02%
## 3 IMA3 Không d<U+1ED3>ng ý 10 2.23 2.23%
## 4 IMA4 Không d<U+1ED3>ng ý 14 3.12 3.12%
## 5 IMA5 Không d<U+1ED3>ng ý 20 4.46 4.46%
## 6 PVA1 Không d<U+1ED3>ng ý 16 3.57 3.57%
## 7 PVA2 Không d<U+1ED3>ng ý 21 4.69 4.69%
## 8 PVA3 Không d<U+1ED3>ng ý 15 3.35 3.35%
## 9 SAT1 Không d<U+1ED3>ng ý 17 3.79 3.79%
## 10 SAT2 Không d<U+1ED3>ng ý 21 4.69 4.69%
## 11 SAT3 Không d<U+1ED3>ng ý 44 9.82 9.82%
## 12 LOY1 Không d<U+1ED3>ng ý 15 3.35 3.35%
## 13 LOY2 Không d<U+1ED3>ng ý 6 1.34 1.34%
## 14 LOY3 Không d<U+1ED3>ng ý 15 3.35 3.35%
## 15 LOY4 Không d<U+1ED3>ng ý 12 2.68 2.68%
## 16 LOY5 Không d<U+1ED3>ng ý 20 4.46 4.46%
## 17 LOY6 Không d<U+1ED3>ng ý 13 2.9 2.9%
## 18 LOY7 Không d<U+1ED3>ng ý 14 3.12 3.12%
# For displaying percent of "Quite Disagree":
df_odered %>%
filter(Res == "Kh\u00E1 kh\u00F4ng \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text3
df_for_text3
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Khá không d<U+1ED3>ng ý 21 4.69 4.69%
## 2 IMA2 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## 3 IMA3 Khá không d<U+1ED3>ng ý 16 3.57 3.57%
## 4 IMA4 Khá không d<U+1ED3>ng ý 18 4.02 4.02%
## 5 IMA5 Khá không d<U+1ED3>ng ý 15 3.35 3.35%
## 6 PVA1 Khá không d<U+1ED3>ng ý 13 2.9 2.9%
## 7 PVA2 Khá không d<U+1ED3>ng ý 10 2.23 2.23%
## 8 PVA3 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 9 SAT1 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 10 SAT2 Khá không d<U+1ED3>ng ý 13 2.9 2.9%
## 11 SAT3 Khá không d<U+1ED3>ng ý 19 4.24 4.24%
## 12 LOY1 Khá không d<U+1ED3>ng ý 9 2.01 2.01%
## 13 LOY2 Khá không d<U+1ED3>ng ý 8 1.79 1.79%
## 14 LOY3 Khá không d<U+1ED3>ng ý 17 3.79 3.79%
## 15 LOY4 Khá không d<U+1ED3>ng ý 15 3.35 3.35%
## 16 LOY5 Khá không d<U+1ED3>ng ý 15 3.35 3.35%
## 17 LOY6 Khá không d<U+1ED3>ng ý 14 3.12 3.12%
## 18 LOY7 Khá không d<U+1ED3>ng ý 17 3.79 3.79%
# For displaying percent of "Normal":
df_odered %>%
filter(Res == "B\u00ECnh th\u01B0\u1EDDng") %>%
filter(percent >= 0) -> df_for_text4
df_for_text4
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Bình thu<U+1EDD>ng 100 22.3 22.32%
## 2 IMA2 Bình thu<U+1EDD>ng 111 24.8 24.78%
## 3 IMA3 Bình thu<U+1EDD>ng 89 19.9 19.87%
## 4 IMA4 Bình thu<U+1EDD>ng 88 19.6 19.64%
## 5 IMA5 Bình thu<U+1EDD>ng 81 18.1 18.08%
## 6 PVA1 Bình thu<U+1EDD>ng 87 19.4 19.42%
## 7 PVA2 Bình thu<U+1EDD>ng 75 16.7 16.74%
## 8 PVA3 Bình thu<U+1EDD>ng 61 13.6 13.62%
## 9 SAT1 Bình thu<U+1EDD>ng 90 20.1 20.09%
## 10 SAT2 Bình thu<U+1EDD>ng 78 17.4 17.41%
## 11 SAT3 Bình thu<U+1EDD>ng 99 22.1 22.1%
## 12 LOY1 Bình thu<U+1EDD>ng 61 13.6 13.62%
## 13 LOY2 Bình thu<U+1EDD>ng 44 9.82 9.82%
## 14 LOY3 Bình thu<U+1EDD>ng 74 16.5 16.52%
## 15 LOY4 Bình thu<U+1EDD>ng 65 14.5 14.51%
## 16 LOY5 Bình thu<U+1EDD>ng 79 17.6 17.63%
## 17 LOY6 Bình thu<U+1EDD>ng 71 15.8 15.85%
## 18 LOY7 Bình thu<U+1EDD>ng 62 13.8 13.84%
# For displaying percent of "Quite Agree":
df_odered %>%
filter(Res == "Kh\u00E1 \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text5
df_for_text5
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Khá d<U+1ED3>ng ý 93 20.8 20.76%
## 2 IMA2 Khá d<U+1ED3>ng ý 100 22.3 22.32%
## 3 IMA3 Khá d<U+1ED3>ng ý 100 22.3 22.32%
## 4 IMA4 Khá d<U+1ED3>ng ý 97 21.6 21.65%
## 5 IMA5 Khá d<U+1ED3>ng ý 107 23.9 23.88%
## 6 PVA1 Khá d<U+1ED3>ng ý 76 17.0 16.96%
## 7 PVA2 Khá d<U+1ED3>ng ý 83 18.5 18.53%
## 8 PVA3 Khá d<U+1ED3>ng ý 86 19.2 19.2%
## 9 SAT1 Khá d<U+1ED3>ng ý 90 20.1 20.09%
## 10 SAT2 Khá d<U+1ED3>ng ý 99 22.1 22.1%
## 11 SAT3 Khá d<U+1ED3>ng ý 70 15.6 15.62%
## 12 LOY1 Khá d<U+1ED3>ng ý 91 20.3 20.31%
## 13 LOY2 Khá d<U+1ED3>ng ý 65 14.5 14.51%
## 14 LOY3 Khá d<U+1ED3>ng ý 94 21.0 20.98%
## 15 LOY4 Khá d<U+1ED3>ng ý 62 13.8 13.84%
## 16 LOY5 Khá d<U+1ED3>ng ý 95 21.2 21.21%
## 17 LOY6 Khá d<U+1ED3>ng ý 95 21.2 21.21%
## 18 LOY7 Khá d<U+1ED3>ng ý 112 25 25%
# For displaying percent of "Agree":
df_odered %>%
filter(Res == "\u0110\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text6
df_for_text6
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 Ð<U+1ED3>ng ý 180 40.2 40.18%
## 2 IMA2 Ð<U+1ED3>ng ý 158 35.3 35.27%
## 3 IMA3 Ð<U+1ED3>ng ý 187 41.7 41.74%
## 4 IMA4 Ð<U+1ED3>ng ý 185 41.3 41.29%
## 5 IMA5 Ð<U+1ED3>ng ý 187 41.7 41.74%
## 6 PVA1 Ð<U+1ED3>ng ý 212 47.3 47.32%
## 7 PVA2 Ð<U+1ED3>ng ý 206 46.0 45.98%
## 8 PVA3 Ð<U+1ED3>ng ý 217 48.4 48.44%
## 9 SAT1 Ð<U+1ED3>ng ý 177 39.5 39.51%
## 10 SAT2 Ð<U+1ED3>ng ý 177 39.5 39.51%
## 11 SAT3 Ð<U+1ED3>ng ý 153 34.2 34.15%
## 12 LOY1 Ð<U+1ED3>ng ý 182 40.6 40.62%
## 13 LOY2 Ð<U+1ED3>ng ý 200 44.6 44.64%
## 14 LOY3 Ð<U+1ED3>ng ý 167 37.3 37.28%
## 15 LOY4 Ð<U+1ED3>ng ý 201 44.9 44.87%
## 16 LOY5 Ð<U+1ED3>ng ý 188 42.0 41.96%
## 17 LOY6 Ð<U+1ED3>ng ý 194 43.3 43.3%
## 18 LOY7 Ð<U+1ED3>ng ý 184 41.1 41.07%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") %>%
filter(percent >= 0) -> df_for_text7
df_for_text7
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 2 IMA2 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 3 IMA3 R<U+1EA5>t d<U+1ED3>ng ý 35 7.81 7.81%
## 4 IMA4 R<U+1EA5>t d<U+1ED3>ng ý 33 7.37 7.37%
## 5 IMA5 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 6 PVA1 R<U+1EA5>t d<U+1ED3>ng ý 40 8.93 8.93%
## 7 PVA2 R<U+1EA5>t d<U+1ED3>ng ý 47 10.5 10.49%
## 8 PVA3 R<U+1EA5>t d<U+1ED3>ng ý 52 11.6 11.61%
## 9 SAT1 R<U+1EA5>t d<U+1ED3>ng ý 48 10.7 10.71%
## 10 SAT2 R<U+1EA5>t d<U+1ED3>ng ý 49 10.9 10.94%
## 11 SAT3 R<U+1EA5>t d<U+1ED3>ng ý 49 10.9 10.94%
## 12 LOY1 R<U+1EA5>t d<U+1ED3>ng ý 78 17.4 17.41%
## 13 LOY2 R<U+1EA5>t d<U+1ED3>ng ý 120 26.8 26.79%
## 14 LOY3 R<U+1EA5>t d<U+1ED3>ng ý 78 17.4 17.41%
## 15 LOY4 R<U+1EA5>t d<U+1ED3>ng ý 91 20.3 20.31%
## 16 LOY5 R<U+1EA5>t d<U+1ED3>ng ý 42 9.38 9.38%
## 17 LOY6 R<U+1EA5>t d<U+1ED3>ng ý 56 12.5 12.5%
## 18 LOY7 R<U+1EA5>t d<U+1ED3>ng ý 52 11.6 11.61%
# For displaying percent of "Very Agree":
df_odered %>%
filter(Res == "R\u1EA5t \u0111\u1ED3ng \u00FD") -> df_for_text
df_for_text
## # A tibble: 18 x 5
## BPE Res n percent bar_text
## <fct> <fct> <int> <dbl> <chr>
## 1 IMA1 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 2 IMA2 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 3 IMA3 R<U+1EA5>t d<U+1ED3>ng ý 35 7.81 7.81%
## 4 IMA4 R<U+1EA5>t d<U+1ED3>ng ý 33 7.37 7.37%
## 5 IMA5 R<U+1EA5>t d<U+1ED3>ng ý 32 7.14 7.14%
## 6 PVA1 R<U+1EA5>t d<U+1ED3>ng ý 40 8.93 8.93%
## 7 PVA2 R<U+1EA5>t d<U+1ED3>ng ý 47 10.5 10.49%
## 8 PVA3 R<U+1EA5>t d<U+1ED3>ng ý 52 11.6 11.61%
## 9 SAT1 R<U+1EA5>t d<U+1ED3>ng ý 48 10.7 10.71%
## 10 SAT2 R<U+1EA5>t d<U+1ED3>ng ý 49 10.9 10.94%
## 11 SAT3 R<U+1EA5>t d<U+1ED3>ng ý 49 10.9 10.94%
## 12 LOY1 R<U+1EA5>t d<U+1ED3>ng ý 78 17.4 17.41%
## 13 LOY2 R<U+1EA5>t d<U+1ED3>ng ý 120 26.8 26.79%
## 14 LOY3 R<U+1EA5>t d<U+1ED3>ng ý 78 17.4 17.41%
## 15 LOY4 R<U+1EA5>t d<U+1ED3>ng ý 91 20.3 20.31%
## 16 LOY5 R<U+1EA5>t d<U+1ED3>ng ý 42 9.38 9.38%
## 17 LOY6 R<U+1EA5>t d<U+1ED3>ng ý 56 12.5 12.5%
## 18 LOY7 R<U+1EA5>t d<U+1ED3>ng ý 52 11.6 11.61%
# Ad text layers-thay đổi giá trị y để thể hiện vị trí ghi text phù hợp
gg_v +
geom_text(data = df_for_text1, aes(x = BPE, y = 3, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text4, aes(x = BPE, y = 13, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text5, aes(x = BPE, y = 32, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text6, aes(x = BPE, y = 100-30, label = bar_text), size = 4, color = "white", family = my_font) +
geom_text(data = df_for_text7, aes(x = BPE, y = 100-4, label = bar_text), size = 4, color = "white", family = my_font)
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database