ntudsp / satp-zsm-stage1

Code and results accompanying paper: "Crossing the Linguistic Causeway: A Binational Approach for Translating Soundscape Attributes to Bahasa Melayu"

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Replication code for “Crossing the Linguistic Causeway: A Binational Approach for Translating Soundscape Attributes to Bahasa Melayu”

This repository contains the code accompanying the publication “Crossing the Linguistic Causeway: A Binational Approach for Translating Soundscape Attributes to Bahasa Melayu”. This paper is hosted on arXiv and the raw dataset is hosted at 10.21979/N9/0NE37R.

Environment

The code has been tested on the following platform.

R version 4.1.1 (2021-08-10)

Platform: aarch64-apple-darwin20 (64-bit)

locale: en_US.UTF-8||en_US.UTF-8||en_US.UTF-8||C||en_US.UTF-8||en_US.UTF-8

attached base packages: stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: RColorBrewer(v.1.1-3), fmsb(v.0.7.1), conover.test(v.1.1.5), muStat(v.1.7.0), rstatix(v.0.7.0), tidyr(v.1.2.0), kableExtra(v.1.3.4), stringr(v.1.4.0), dplyr(v.1.0.9), dataverse(v.0.3.10) and pander(v.0.6.5)

loaded via a namespace (and not attached): tidyselect(v.1.1.2), xfun(v.0.31), purrr(v.0.3.4), haven(v.2.4.3), carData(v.3.0-4), colorspace(v.2.0-3), vctrs(v.0.4.1), generics(v.0.1.2), htmltools(v.0.5.2), viridisLite(v.0.4.0), yaml(v.2.3.5), utf8(v.1.2.2), rlang(v.1.0.3), pillar(v.1.7.0), foreign(v.0.8-81), glue(v.1.6.2), DBI(v.1.1.1), readxl(v.1.3.1), lifecycle(v.1.0.1), cellranger(v.1.1.0), munsell(v.0.5.0), zip(v.2.2.0), rvest(v.1.0.2), evaluate(v.0.15), forcats(v.0.5.1), knitr(v.1.39), rio(v.0.5.27), fastmap(v.1.1.0), curl(v.4.3.2), fansi(v.1.0.3), broom(v.0.7.9), Rcpp(v.1.0.8.3), scales(v.1.2.0), backports(v.1.4.1), webshot(v.0.5.3), abind(v.1.4-5), systemfonts(v.1.0.4), hms(v.1.1.0), digest(v.0.6.29), openxlsx(v.4.2.4), stringi(v.1.7.6), cli(v.3.3.0), tools(v.4.1.1), magrittr(v.2.0.3), tibble(v.3.1.7), crayon(v.1.5.1), car(v.3.0-11), pkgconfig(v.2.0.3), ellipsis(v.0.3.2), data.table(v.1.14.2), xml2(v.1.3.3), assertthat(v.0.2.1), rmarkdown(v.2.14), svglite(v.2.1.0), httr(v.1.4.3), rstudioapi(v.0.13), R6(v.2.5.1) and compiler(v.4.1.1)

Data preparation

The raw data file is retrieved and cleaned.

Dataloader

The raw dataset is retrieved from the DR-NTU (Data) [https://researchdata.ntu.edu.sg] Dataverse repository at 10.21979/N9/0NE37R and processed.

#Set dataverse server
Sys.setenv("DATAVERSE_SERVER" = "https://researchdata.ntu.edu.sg")
#Retrieve raw data in csv
dataset <- get_dataframe_by_name(
  filename = "SATPQn.csv", 
  dataset = "doi:10.21979/N9/0NE37R",
  original = TRUE,
  .f = read.csv)

Data cleaning

The raw data headers are first converted to ASCII to remove UTF-8 formatting. The survey responses are subsetted to remove participant data with “country of residence” that is neither Singapore (SG) or Malaysia (MY). The resulting dataset consists of 63 participant responses after the removal of 3 participants.

This is followed by extraction of individual dataframes corresponding to the respective criteria categories for main and derived axis attributes, respectively.

#convert column names to ASCII
colnames(dataset)<-iconv(colnames(dataset),
                        from = 'UTF-8', 
                        to = 'ASCII//TRANSLIT') 

#remove non-SG/MY respondents
sgmydata <- dataset %>%
        dplyr::rename(COUNTRY=Current.country.of.residence) %>%
        mutate(COUNTRY=ifelse(COUNTRY=="Malaysia","MY", COUNTRY)) %>%
        mutate(COUNTRY=ifelse(COUNTRY=="Singapore","SG", COUNTRY)) %>%
        mutate(COUNTRY=ifelse(COUNTRY=="Europe","Others", COUNTRY)) %>%
        mutate(COUNTRY=ifelse(COUNTRY=="Asia (excl. MY and SG)",
                              "Others", COUNTRY)) %>%
        filter(!str_detect(COUNTRY, "Others"))

#define column names for main and derived axes
mainColnames<-c('COUNTRY','APPR','UNDR','ANTO','BIAS',
                'ASSOCCW','IMPCCW','ASSOCW','IMPCW','CANDIDATE')

derivedColnames<-c('COUNTRY','APPR','UNDR','ASSOCCW',
                   'IMPCCW','ASSOCW','IMPCW','CANDIDATE')

#extract responses for each PAQ attribute and rename columns with criteria
#main axes
eventdf<-sgmydata %>% 
        select(matches('that.meriah|is.meriah|COUNTRY')) %>%
        mutate(candidate="meriah") %>% setNames(mainColnames)

pleasdf<-sgmydata %>%
        select(matches('menyenangkan|COUNTRY')) %>%
        mutate(candidate="menyenangkan") %>% setNames(mainColnames)

uneventdf<-sgmydata %>%
        select(matches('tidak.meriah|COUNTRY')) %>%
        mutate(candidate="tidak meriah") %>% setNames(mainColnames)

annoydf<-rbind(sgmydata %>%
                select(matches('membingitkan|COUNTRY')) %>%
                mutate(candidate="membingitkan") %>% 
                setNames(mainColnames),
               sgmydata %>%
                select(matches('menjengkelkan|COUNTRY')) %>%
                mutate(candidate="menjengkelkan") %>% 
                setNames(mainColnames))

#dervied axes
vibrantdf<-rbind(sgmydata %>% select(matches('rancak|COUNTRY')) %>%
                         mutate(candidate="rancak") %>% 
                         setNames(derivedColnames),
                 sgmydata %>% select(matches('bersemarak|COUNTRY')) %>%
                         mutate(candidate="bersemarak") %>% 
                         setNames(derivedColnames))

calmdf<-rbind(sgmydata %>% select(matches('tenang|COUNTRY')) %>%
                         mutate(candidate="tenang") %>% 
                         setNames(derivedColnames),
                 sgmydata %>% select(matches('menenangkan|COUNTRY')) %>%
                         mutate(candidate="menenangkan") %>% 
                         setNames(derivedColnames))

monotdf<-rbind(sgmydata %>% select(matches('that.membosankan|COUNTRY')) %>%
                         mutate(candidate="membosankan") %>% 
                         setNames(derivedColnames),
                sgmydata %>% select(matches('tidak.berubah.oleh.itu.membosankan|COUNTRY')) %>%
                         mutate(candidate="tidak berubah oleh itu membosankan") %>% 
                         setNames(derivedColnames),
               sgmydata %>% select(matches('kurang.kepelbagaian.oleh.itu.membosankan|COUNTRY')) %>%
                         mutate(candidate="kurang kepelbagaian oleh itu membosankan") %>% 
                         setNames(derivedColnames))

chaoticdf<-rbind(sgmydata %>% select(matches('huru.hara|COUNTRY')) %>%
                         mutate(candidate="huru-hara") %>% 
                         setNames(derivedColnames),
                 sgmydata %>% select(matches('kelam.kabut|COUNTRY')) %>%
                         mutate(candidate="kelam-kabut") %>% 
                         setNames(derivedColnames))

Cleaning of demographic information

#column names
demoCol <- c("Prof.zsm","Prof.eng","COUNTRY","LoSOut","DISCIPLINE")

sgmydata_demo <- sgmydata %>%
        select(2:6) %>% setNames(demoCol) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Science*',DISCIPLINE, ignore.case=T),
                                 "Sciences", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Physic*',DISCIPLINE, ignore.case=T),
                                 "Sciences", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Math*',DISCIPLINE, ignore.case=T),
                                 "Sciences", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*English*',DISCIPLINE, ignore.case=T),
                                 "HASS", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Psychology*',DISCIPLINE, ignore.case=T),
                                 "HASS", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Literature*',DISCIPLINE, ignore.case=T),
                                 "HASS", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Sociology*',DISCIPLINE, ignore.case=T),
                                 "HASS", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Media*',DISCIPLINE, ignore.case=T),
                                 "HASS", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*geog*',DISCIPLINE, ignore.case=T),
                                 "HASS", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Music*',DISCIPLINE, ignore.case=T),
                                 "Audio-related", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Sound*',DISCIPLINE, ignore.case=T),
                                 "Audio-related", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Audio*',DISCIPLINE, ignore.case=T),
                                 "Audio-related", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*Acoustic*',DISCIPLINE, ignore.case=T),
                                 "Audio-related", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*engineering*',DISCIPLINE, ignore.case=T),
                                 "Engineering", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(grepl('*tech*',DISCIPLINE, ignore.case=T),
                                 "Engineering", DISCIPLINE)) %>%
        mutate(DISCIPLINE=ifelse(!grepl('Sciences|Engineering|HASS|Audio-related',
                                       DISCIPLINE, ignore.case=F),
                                 "Others", DISCIPLINE))

Formulation of criteria scores

Main Axes: APPR, UNDR, CLAR, ANTO, ORTH, NCON, IBAL Derived Axes: APPR, UNDR, CLAR, CONN, IBAL

#compute formulation across df of attributes on main axes
main.formulated<-list(eventdf,pleasdf,uneventdf,annoydf) %>%
        lapply(mainForm)

#compute formulation across df of attributes on derived axes                     
der.formulated<-list(vibrantdf,calmdf,monotdf,chaoticdf) %>%
        lapply(derForm)

eventformdf<-main.formulated[[1]]
pleasformdf<-main.formulated[[2]]
uneventformdf<-main.formulated[[3]]
annoyformdf<-main.formulated[[4]] %>%
        mutate(SPLITCANDIDATE=paste(COUNTRY,CANDIDATE))
vibrantformdf<-der.formulated[[1]] %>%
        mutate(SPLITCANDIDATE=paste(COUNTRY,CANDIDATE))
calmformdf<-der.formulated[[2]] %>%
        mutate(SPLITCANDIDATE=paste(COUNTRY,CANDIDATE))
monotformdf<-der.formulated[[3]] %>%
        mutate(SPLITCANDIDATE=paste(COUNTRY,CANDIDATE))
chaoticformdf<-der.formulated[[4]] %>%
        mutate(SPLITCANDIDATE=paste(COUNTRY,CANDIDATE))

Demographic

The demographics of the 63 participants are summarised based on “length of stay outside SG/MY”, “disiciplines”, “malay language proficiency”, and “english language proficiency”.

#LoS
sgmydata_demo %>%
  group_by(LoSOut) %>%
  summarise(Singapore=sum(COUNTRY=="SG"),Malaysia=sum(COUNTRY=="MY")) %>%       
  kbl(caption = "Length of Stay Outside SG/MY") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Length of Stay Outside SG/MY
LoSOut Singapore Malaysia
\>10 years 1 2
1-5 years 2 10
6 months 1 0
6-10 years 2 4
Less than 6 month 0 1
NA 27 13
#Disicpline
sgmydata_demo %>%
  group_by(DISCIPLINE) %>%
  summarise(Singapore=sum(COUNTRY=="SG"),Malaysia=sum(COUNTRY=="MY")) %>%       
  kbl(caption = "Discipline") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Discipline
DISCIPLINE Singapore Malaysia
Audio-related 7 3
Engineering 11 5
HASS 4 9
Others 5 11
Sciences 6 2
#Malay Language Proficiency
sgmydata_demo %>%
  group_by(Prof.zsm) %>%
  summarise(Singapore=sum(COUNTRY=="SG"),Malaysia=sum(COUNTRY=="MY")) %>%       
  kbl(caption = "Malay Language Proficiency") %>%
  kable_classic(full_width = F, html_font = "Cambria")
Malay Language Proficiency
Prof.zsm Singapore Malaysia
Full Professional Proficiency 6 4
Limited Working Proficiency 4 2
Native Proficiency 15 17
Professional Working Proficiency 8 7
#English Language Proficiency
sgmydata_demo %>%
  group_by(Prof.zsm) %>%
  summarise(Singapore=sum(COUNTRY=="SG"),Malaysia=sum(COUNTRY=="MY")) %>%       
  kbl(caption = "English Language Proficiency") %>%
  kable_classic(full_width = F, html_font = "Cambria")
English Language Proficiency
Prof.zsm Singapore Malaysia
Full Professional Proficiency 6 4
Limited Working Proficiency 4 2
Native Proficiency 15 17
Professional Working Proficiency 8 7

Exploratory analysis

Compute criteria mean scores of all PAQ attributes across the combined, SG, and MY populations.

#Combined cases

#main axes
mainAxCOMBmean <- rbind(cbind(data.frame(PAQ="eventful"),mainAxSummary(eventformdf)),
      cbind(data.frame(PAQ="pleasant"),mainAxSummary(pleasformdf)),
      cbind(data.frame(PAQ="uneventful"),mainAxSummary(uneventformdf)),
      cbind(data.frame(PAQ="annoying"),mainAxSummary(annoyformdf))) %>%
        mutate(COUNTRY="Combined")

#derived axes
derAxCOMBmean <-rbind(cbind(data.frame(PAQ="vibrant"),derAxSummary(vibrantformdf)),
      cbind(data.frame(PAQ="calm"),derAxSummary(calmformdf)),
      cbind(data.frame(PAQ="monotonous"),derAxSummary(monotformdf)),
      cbind(data.frame(PAQ="chaotic"),derAxSummary(chaoticformdf))) %>%
        mutate(COUNTRY="Combined")

#Split cases (SG/MY)
#main axes
mainAxSPLITmean <- rbind(cbind(data.frame(PAQ="eventful"),mainAxSummarySPLIT(eventformdf)),
      cbind(data.frame(PAQ="pleasant"),mainAxSummarySPLIT(pleasformdf)),
      cbind(data.frame(PAQ="uneventful"),mainAxSummarySPLIT(uneventformdf)),
      cbind(data.frame(PAQ="annoying"),mainAxSummarySPLIT(annoyformdf)))

#derived axes
derAxSPLITmean <-rbind(cbind(data.frame(PAQ="vibrant"),derAxSummarySPLIT(vibrantformdf)),
      cbind(data.frame(PAQ="calm"),derAxSummarySPLIT(calmformdf)),
      cbind(data.frame(PAQ="monotonous"),derAxSummarySPLIT(monotformdf)),
      cbind(data.frame(PAQ="chaotic"),derAxSummarySPLIT(chaoticformdf)))

#pivot dataframe for visualisation
summaryMean<-rbind(rbind(mainAxCOMBmean,mainAxSPLITmean) %>% 
        pivot_longer(cols=!c(PAQ,CANDIDATE,COUNTRY),
                                      names_to="CRITERIA",
                                      values_to="mean"),
        rbind(derAxCOMBmean,derAxSPLITmean) %>% 
        pivot_longer(cols=!c(PAQ,CANDIDATE,COUNTRY),
                                      names_to="CRITERIA",
                                      values_to="mean")) %>%
        group_by(PAQ,CRITERIA,CANDIDATE) %>%
        summarise(Combined=mean[COUNTRY=="Combined"],
                  SG=mean[COUNTRY=="SG"],
                  MY=mean[COUNTRY=="MY"])

#Plot table of mean scores
summaryMean %>%
        kbl(caption = "Mean evaluation scores for the 
            PAQ attributes for all evaluation criteria across combined, 
            SG and MY populations") %>%
        kable_classic(full_width = F, html_font = "Cambria")
Mean evaluation scores for the PAQ attributes for all evaluation criteria across combined, SG and MY populations
PAQ CRITERIA CANDIDATE Combined SG MY
annoying ANTO membingitkan 0.7158730 0.7030303 0.7300000
annoying ANTO menjengkelkan 0.7396825 0.7272727 0.7533333
annoying APPR membingitkan 0.8031746 0.8212121 0.7833333
annoying APPR menjengkelkan 0.8460317 0.8000000 0.8966667
annoying CLAR membingitkan 0.6079365 0.6075758 0.6083333
annoying CLAR menjengkelkan 0.6484127 0.6257576 0.6733333
annoying IBAL membingitkan 0.5650794 0.5030303 0.6333333
annoying IBAL menjengkelkan 0.7555556 0.7363636 0.7766667
annoying NCON membingitkan 0.5539683 0.5636364 0.5433333
annoying NCON menjengkelkan 0.6492063 0.6257576 0.6750000
annoying ORTH membingitkan 0.5904762 0.5393939 0.6466667
annoying ORTH menjengkelkan 0.5301587 0.5212121 0.5400000
annoying UNDR membingitkan 0.7730159 0.7787879 0.7666667
annoying UNDR menjengkelkan 0.7111111 0.6090909 0.8233333
calm APPR menenangkan 0.8380952 0.8575758 0.8166667
calm APPR tenang 0.9682540 0.9818182 0.9533333
calm CLAR menenangkan 0.4817460 0.4393939 0.5283333
calm CLAR tenang 0.5142857 0.5181818 0.5100000
calm CONN menenangkan 0.5888889 0.6363636 0.5366667
calm CONN tenang 0.6134921 0.6287879 0.5966667
calm IBAL menenangkan 0.5841270 0.6303030 0.5333333
calm IBAL tenang 0.5857143 0.5909091 0.5800000
calm UNDR menenangkan 0.9095238 0.9090909 0.9100000
calm UNDR tenang 0.9793651 0.9939394 0.9633333
chaotic APPR huru-hara 0.9460317 0.9212121 0.9733333
chaotic APPR kelam-kabut 0.7904762 0.7090909 0.8800000
chaotic CLAR huru-hara 0.6142857 0.5227273 0.7150000
chaotic CLAR kelam-kabut 0.6547619 0.6287879 0.6833333
chaotic CONN huru-hara 0.4674603 0.5469697 0.3800000
chaotic CONN kelam-kabut 0.4142857 0.4575758 0.3666667
chaotic IBAL huru-hara 0.7126984 0.6818182 0.7466667
chaotic IBAL kelam-kabut 0.7079365 0.6848485 0.7333333
chaotic UNDR huru-hara 0.9539683 0.9424242 0.9666667
chaotic UNDR kelam-kabut 0.9476190 0.9272727 0.9700000
eventful ANTO meriah 0.5857143 0.5696970 0.6033333
eventful APPR meriah 0.6730159 0.6696970 0.6766667
eventful CLAR meriah 0.5404762 0.5000000 0.5850000
eventful IBAL meriah 0.6079365 0.6424242 0.5700000
eventful NCON meriah 0.4055556 0.3636364 0.4516667
eventful ORTH meriah 0.4158730 0.3696970 0.4666667
eventful UNDR meriah 0.9285714 0.9000000 0.9600000
monotonous APPR kurang kepelbagaian oleh itu membosankan 0.7761905 0.7666667 0.7866667
monotonous APPR membosankan 0.7650794 0.7787879 0.7500000
monotonous APPR tidak berubah oleh itu membosankan 0.6539683 0.6878788 0.6166667
monotonous CLAR kurang kepelbagaian oleh itu membosankan 0.5365079 0.5303030 0.5433333
monotonous CLAR membosankan 0.5492063 0.5227273 0.5783333
monotonous CLAR tidak berubah oleh itu membosankan 0.5642857 0.5560606 0.5733333
monotonous CONN kurang kepelbagaian oleh itu membosankan 0.4857143 0.5075758 0.4616667
monotonous CONN membosankan 0.4960317 0.4984848 0.4933333
monotonous CONN tidak berubah oleh itu membosankan 0.4539683 0.4681818 0.4383333
monotonous IBAL kurang kepelbagaian oleh itu membosankan 0.5619048 0.4878788 0.6433333
monotonous IBAL membosankan 0.5285714 0.5181818 0.5400000
monotonous IBAL tidak berubah oleh itu membosankan 0.5460317 0.5000000 0.5966667
monotonous UNDR kurang kepelbagaian oleh itu membosankan 0.8047619 0.7787879 0.8333333
monotonous UNDR membosankan 0.9460317 0.9363636 0.9566667
monotonous UNDR tidak berubah oleh itu membosankan 0.7650794 0.7757576 0.7533333
pleasant ANTO menyenangkan 0.6238095 0.6030303 0.6466667
pleasant APPR menyenangkan 0.8396825 0.8242424 0.8566667
pleasant CLAR menyenangkan 0.5261905 0.4984848 0.5566667
pleasant IBAL menyenangkan 0.5634921 0.5000000 0.6333333
pleasant NCON menyenangkan 0.4436508 0.4075758 0.4833333
pleasant ORTH menyenangkan 0.6126984 0.5939394 0.6333333
pleasant UNDR menyenangkan 0.9095238 0.9181818 0.9000000
uneventful ANTO tidak meriah 0.6682540 0.6606061 0.6766667
uneventful APPR tidak meriah 0.7126984 0.6909091 0.7366667
uneventful CLAR tidak meriah 0.5785714 0.5318182 0.6300000
uneventful IBAL tidak meriah 0.6841270 0.6848485 0.6833333
uneventful NCON tidak meriah 0.5134921 0.4969697 0.5316667
uneventful ORTH tidak meriah 0.6952381 0.7030303 0.6866667
uneventful UNDR tidak meriah 0.9015873 0.8848485 0.9200000
vibrant APPR bersemarak 0.7904762 0.8333333 0.7433333
vibrant APPR rancak 0.7222222 0.7363636 0.7066667
vibrant CLAR bersemarak 0.4555556 0.4075758 0.5083333
vibrant CLAR rancak 0.4753968 0.4469697 0.5066667
vibrant CONN bersemarak 0.6230159 0.6378788 0.6066667
vibrant CONN rancak 0.6071429 0.6530303 0.5566667
vibrant IBAL bersemarak 0.7444444 0.7303030 0.7600000
vibrant IBAL rancak 0.7158730 0.7484848 0.6800000
vibrant UNDR bersemarak 0.6888889 0.6454545 0.7366667
vibrant UNDR rancak 0.7968254 0.7454545 0.8533333

Radar plots of mean scores (combined SG & MY)

#Plot mean scores in a radar chart

mainAXisradardf <- rbind(
  data.frame(rbind(rep(1,7),rep(0.4,7))) %>%
    setNames(c("APPR","UNDR","CLAR","ANTO","ORTH","NCON","IBAL")) %>%
    `rownames<-`(c("Max","Min")),
  mainAxCOMBmean %>% select(APPR:IBAL) %>%
    `rownames<-`(mainAxCOMBmean$CANDIDATE))

derAXisradardf <- rbind(
  data.frame(rbind(rep(1,5),rep(0.4,5))) %>%
    setNames(c("APPR","UNDR","CLAR","CONN","IBAL")) %>%
    `rownames<-`(c("Max","Min")),
  derAxCOMBmean %>% filter(!grepl('kurang|bersemarak|berubah|kelam|menenangkan', CANDIDATE)) %>% select(APPR:IBAL) %>% `rownames<-`(derAxCOMBmean %>% filter(!grepl('kurang|bersemarak|berubah|kelam|menenangkan', CANDIDATE)) %>% .$CANDIDATE)) 

#define color palette
set2 <- RColorBrewer::brewer.pal(7, "Set2")

#Main Axis
op1 <- par(mar = c(0, 0, 0, 0))
create_beautiful_radarchart(mainAXisradardf, 
                            #caxislabels = c(0, 0.25, 0.5, 0.75, 1),
                            caxislabels = c(0.4, 0.55, 0.7, 0.85, 1),
                            color = set2,
                            vlcex = .9,calcex=.7,
                            plty=c(1,2,3,4,5,6,7))

# Add an horizontal legend
legend(
  x = "bottomright", 
  legend = paste(c("eventful |","pleasant |","uneventful |",
                    "annoying |","annoying |"),
                  row.names(mainAXisradardf)[-c(2,1)]), 
  horiz = FALSE,
  bty = "n", pch = 20 , col = set2,
  text.col = "black", cex = .9, pt.cex = 1.5
  )

par(op1)

#Derived Axis
op2 <- par(mar = c(0, 0, 0, 0))
create_beautiful_radarchart(derAXisradardf, 
                            #caxislabels = c(0, 0.25, 0.5, 0.75, 1),
                            caxislabels = c(0.4, 0.55, 0.7, 0.85, 1),
                            color = set2,
                            vlcex = .9,calcex=.7,
                            plty=c(1,2,3,4,5,6,7))

# Add an horizontal legend
legend(
  x = "topright", 
  legend = paste(c("vibrant |","calm |","monotonous |",
                    "chaotic |"),
                  row.names(derAXisradardf)[-c(2,1)]), 
  horiz = FALSE,
  bty = "n", pch = 20 , col = set2,
  text.col = "black", cex = .9, pt.cex = 1.5
  )

par(op2)

Radar plots of mean scores (by population)

#Plot mean scores in a radar chart

mainAXisradardf.sg <- rbind(
  data.frame(rbind(rep(1,7),rep(0.4,7))) %>%
    setNames(c("APPR","UNDR","CLAR","ANTO","ORTH","NCON","IBAL")) %>%
    `rownames<-`(c("Max","Min")),
  mainAxSPLITmean %>% filter(COUNTRY=="SG") %>% select(APPR:IBAL) %>%
    `rownames<-`(mainAxCOMBmean$CANDIDATE))

mainAXisradardf.my <- rbind(
  data.frame(rbind(rep(1,7),rep(0.4,7))) %>%
    setNames(c("APPR","UNDR","CLAR","ANTO","ORTH","NCON","IBAL")) %>%
    `rownames<-`(c("Max","Min")),
  mainAxSPLITmean %>% filter(COUNTRY=="MY") %>% select(APPR:IBAL) %>%
    `rownames<-`(mainAxCOMBmean$CANDIDATE))

derAXisradardf.sg <- rbind(
  data.frame(rbind(rep(1,5),rep(0.4,5))) %>%
    setNames(c("APPR","UNDR","CLAR","CONN","IBAL")) %>%
    `rownames<-`(c("Max","Min")),
  derAxSPLITmean %>% filter(COUNTRY=="SG") %>% 
          filter(!grepl('kurang|bersemarak|berubah|kelam|menenangkan', CANDIDATE)) %>% 
          select(APPR:IBAL) %>% 
          `rownames<-`(derAxCOMBmean %>% 
                               filter(!grepl('kurang|bersemarak|berubah|kelam|menenangkan', CANDIDATE)) %>% 
                               .$CANDIDATE)) 
derAXisradardf.my <- rbind(
  data.frame(rbind(rep(1,5),rep(0.4,5))) %>%
    setNames(c("APPR","UNDR","CLAR","CONN","IBAL")) %>%
    `rownames<-`(c("Max","Min")),
  derAxSPLITmean %>% filter(COUNTRY=="MY") %>% 
          filter(!grepl('kurang|bersemarak|berubah|kelam|menenangkan', CANDIDATE)) %>% 
          select(APPR:IBAL) %>% 
          `rownames<-`(derAxCOMBmean %>% 
                               filter(!grepl('kurang|bersemarak|berubah|kelam|menenangkan', CANDIDATE)) %>% 
                               .$CANDIDATE)) 

#define color palette
set2 <- RColorBrewer::brewer.pal(7, "Set2")

#Main Axis
op.main.sg <- par(mar = c(0, 0, 0, 0))
create_beautiful_radarchart(mainAXisradardf.sg, 
                            #caxislabels = c(0, 0.25, 0.5, 0.75, 1),
                            caxislabels = c(0.4, 0.55, 0.7, 0.85, 1),
                            color = set2,
                            vlcex = .9,calcex=.7,
                            plty=c(1,2,3,4,5,6,7))

# Add an horizontal legend
legend(
  x = "bottomright", 
  legend = paste(c("eventful |","pleasant |","uneventful |",
                    "annoying |","annoying |"),
                  row.names(mainAXisradardf.sg)[-c(2,1)]), 
  horiz = FALSE,
  bty = "n", pch = 20 , col = set2,
  text.col = "black", cex = .9, pt.cex = 1.5
  )

par(op.main.sg)

#Derived Axis
op.der.sg <- par(mar = c(0, 0, 0, 0))
create_beautiful_radarchart(derAXisradardf.sg, 
                            #caxislabels = c(0, 0.25, 0.5, 0.75, 1),
                            caxislabels = c(0.4, 0.55, 0.7, 0.85, 1),
                            color = set2,
                            vlcex = .9,calcex=.7,
                            plty=c(1,2,3,4,5,6,7))

# Add an horizontal legend
legend(
  x = "topright", 
  legend = paste(c("vibrant |","calm |","monotonous |",
                    "chaotic |"),
                  row.names(derAXisradardf.sg)[-c(2,1)]), 
  horiz = FALSE,
  bty = "n", pch = 20 , col = set2,
  text.col = "black", cex = .9, pt.cex = 1.5
  )

par(op.der.sg)

#Main Axis
op.main.my <- par(mar = c(0, 0, 0, 0))
create_beautiful_radarchart(mainAXisradardf.my, 
                            #caxislabels = c(0, 0.25, 0.5, 0.75, 1),
                            caxislabels = c(0.4, 0.55, 0.7, 0.85, 1),
                            color = set2,
                            vlcex = .9,calcex=.7,
                            plty=c(1,2,3,4,5,6,7))

# Add an horizontal legend
legend(
  x = "bottomright", 
  legend = paste(c("eventful |","pleasant |","uneventful |",
                    "annoying |","annoying |"),
                  row.names(mainAXisradardf.my)[-c(2,1)]), 
  horiz = FALSE,
  bty = "n", pch = 20 , col = set2,
  text.col = "black", cex = .9, pt.cex = 1.5
  )

par(op.main.my)

#Derived Axis
op.der.my <- par(mar = c(0, 0, 0, 0))
create_beautiful_radarchart(derAXisradardf.my, 
                            #caxislabels = c(0, 0.25, 0.5, 0.75, 1),
                            caxislabels = c(0.4, 0.55, 0.7, 0.85, 1),
                            color = set2,
                            vlcex = .9,calcex=.7,
                            plty=c(1,2,3,4,5,6,7))

# Add an horizontal legend
legend(
  x = "topright", 
  legend = paste(c("vibrant |","calm |","monotonous |",
                    "chaotic |"),
                  row.names(derAXisradardf.my)[-c(2,1)]), 
  horiz = FALSE,
  bty = "n", pch = 20 , col = set2,
  text.col = "black", cex = .9, pt.cex = 1.5
  )

par(op.der.my)

Statistical analysis

One translation candidate

Due to differences in sample size, Kruskal-Wallis test was adopted to examine the statistical differences between SG and MY populations for PAQ attributes with only a single translation candidate, i.e. eventful, uneventful, and pleasant.

#KWT for solo translation candidates
kwtSolo<-rbind(kwTest(eventformdf,type = "main", ivar = "COUNTRY") %>% mutate(PAQ="eventful"),
               kwTest(uneventformdf,type = "main", ivar = "COUNTRY") %>% mutate(PAQ="uneventful"),
               kwTest(pleasformdf,type = "main", ivar = "COUNTRY") %>% mutate(PAQ="pleasant"))

#Display KWT results
kwtSolo %>%
        group_by(PAQ,CRITERION) %>%
        mutate(pvalue=as.numeric(pvalue),
               effect=as.numeric(effect)) %>%
        kbl(caption = "Kruskal-Wallis p-value and effect sizes for eventful, uneventful, and pleasant",
            digits = 3, booktabs=T) %>%
        kable_classic(full_width = F, html_font = "Cambria")
Kruskal-Wallis p-value and effect sizes for eventful, uneventful, and pleasant
CRITERION pvalue effect PAQ
APPR 0.588 -0.012 eventful
UNDR 0.041 0.052 eventful
CLAR 0.092 0.030 eventful
IBAL 0.288 0.002 eventful
ANTO 0.383 -0.004 eventful
ORTH 0.196 0.011 eventful
NCON 0.065 0.039 eventful
APPR 0.409 -0.005 uneventful
UNDR 0.116 0.024 uneventful
CLAR 0.157 0.016 uneventful
IBAL 0.956 -0.016 uneventful
ANTO 0.702 -0.014 uneventful
ORTH 0.691 -0.014 uneventful
NCON 0.499 -0.009 uneventful
APPR 0.352 -0.002 pleasant
UNDR 0.822 -0.016 pleasant
CLAR 0.178 0.013 pleasant
IBAL 0.089 0.031 pleasant
ANTO 0.656 -0.013 pleasant
ORTH 0.581 -0.011 pleasant
NCON 0.051 0.046 pleasant

Mulitple translation candidate

With multiple translation candidates, the data takes the form of a replicated, unbalanced completed block design. The Prentice test (PT), a generalised form of the Friedman test was adopted to evaluate the differences between the candidates (blocks) as well as the influence of country of residence (groups).

For differences detected at 5% significance level, a post-hoc Mann-Whitney-Wilcoxon rank sum test (MWWT) with Bonferroni correction was conducted for relevant pairs.

#generate p-values and effect size with prentice test
pt<-rbind(cbind(PAQ="annoying",prenticeTest(annoyformdf,type="main")),
          cbind(PAQ="vibrant",prenticeTest(vibrantformdf,"derived")),
          cbind(PAQ="calm",prenticeTest(calmformdf,"derived")),
          cbind(PAQ="monotonous",prenticeTest(monotformdf,"derived")),
          cbind(PAQ="chaotic",prenticeTest(chaoticformdf,"derived"))) %>%
  cbind(TEST="PT",.)

pt %>% 
        group_by(PAQ,CRITERION) %>%
        mutate(pvalue=as.numeric(pvalue)) %>%
        kbl(caption = "Prentice test p-value for annoying, vibrant, calm, monotonous, chaotic",
            digits = 3, booktabs=T) %>%
        kable_classic(full_width = F, html_font = "Cambria")
Prentice test p-value for annoying, vibrant, calm, monotonous, chaotic
TEST PAQ CRITERION pvalue
PT annoying APPR 0.225
PT annoying UNDR 0.034
PT annoying CLAR 0.784
PT annoying IBAL 0.105
PT annoying ANTO 0.302
PT annoying ORTH 0.296
PT annoying NCON 0.872
PT vibrant APPR 0.251
PT vibrant UNDR 0.054
PT vibrant CLAR 0.037
PT vibrant IBAL 0.897
PT vibrant CONN 0.086
PT calm APPR 0.212
PT calm UNDR 0.243
PT calm CLAR 0.324
PT calm IBAL 0.512
PT calm CONN 0.026
PT monotonous APPR 0.577
PT monotonous UNDR 0.979
PT monotonous CLAR 0.714
PT monotonous IBAL 0.057
PT monotonous CONN 0.424
PT chaotic APPR 0.007
PT chaotic UNDR 0.153
PT chaotic CLAR 0.007
PT chaotic IBAL 0.210
PT chaotic CONN 0.011
#MWW Rank Sum Test

#identify which PAQ attribute and its respective criterion are < 5% significance level
pt_sig <- pt %>%
        filter(pvalue<0.05)
pt_sig %>% select(c(PAQ,CRITERION)) %>%
        kbl(caption = "PAQ attributes and criterions with p < 0,05",
            booktabs=T) %>%
        kable_classic(full_width = F, html_font = "Cambria")
PAQ attributes and criterions with p \< 0,05
PAQ CRITERION
annoying UNDR
vibrant CLAR
calm CONN
chaotic APPR
chaotic CLAR
chaotic CONN
#Annoying
#unqiue criterion <5%
annoyCrit<-pt_sig %>% filter(PAQ=="annoying") %>% 
               select(CRITERION) %>% unique(.) %>% .$CRITERION

annoySIG<-annoyformdf %>% select(c(COUNTRY,annoyCrit, CANDIDATE,))

#calm
#unique criterion <5%
calmCrit<-pt_sig %>% filter(PAQ=="calm") %>% 
               select(CRITERION) %>% unique(.) %>% .$CRITERION

calmSIG<-calmformdf %>% select(c(COUNTRY,calmCrit, CANDIDATE,))

#monotonous
#unique criterion <5%
monotCrit<-pt_sig %>% filter(PAQ=="monotonous") %>% 
               select(CRITERION) %>% unique(.) %>% .$CRITERION

monotSIG<-monotformdf %>% select(c(COUNTRY,monotCrit, CANDIDATE,))

#chaotic
#unique criterion <5%
chaoticCrit<-pt_sig %>% filter(PAQ=="chaotic") %>% 
               select(CRITERION) %>% unique(.) %>% .$CRITERION

chaoticSIG<-chaoticformdf %>% select(c(COUNTRY,chaoticCrit, CANDIDATE,))

#combine MWWT results for all PAQ attributes
mwwtResults <- rbind(mwwTest(df=annoySIG, criterion=annoyCrit, PAQ="annoying"),
                     mwwTest(df=calmSIG, criterion=calmCrit, PAQ="calm"),
                     mwwTest(df=monotSIG, criterion=monotCrit, PAQ="monotonous"),
                     mwwTest(df=chaoticSIG, criterion=chaoticCrit, PAQ="chaotic"))

mwwtResults %>%
        kbl(caption = "Mann-Whitney-Wilcoxon test results",
            booktabs=T, digits = 3) %>%
        kable_classic(full_width = F, html_font = "Cambria")
Mann-Whitney-Wilcoxon test results
PAQ CRITERION CANDIDATE pvalue adjval
annoying UNDR membingitkan 0.859 1.000
annoying UNDR menjengkelkan 0.002 0.003
calm CONN tenang 0.385 0.771
calm CONN menenangkan 0.024 0.048
chaotic APPR huru-hara 0.192 0.384
chaotic APPR kelam-kabut 0.016 0.032
chaotic CLAR huru-hara 0.003 0.006
chaotic CLAR kelam-kabut 0.381 0.762
chaotic CONN huru-hara 0.022 0.043
chaotic CONN kelam-kabut 0.202 0.404

Intra-country differences

The Kruskal-Wallis test was employed to examine whether there are differences between translation candidates within each country (i.e. SG or MY).

A pairwise posthoc Conover-Iman test was conducted when significant differences were found at 5% significance levels.

#SG
intrakwt_SG <- rbind(annoyformdf %>% filter(COUNTRY=="SG") %>% 
        kwTest(df = .,type = "main",ivar = "CANDIDATE") %>%
        mutate(PAQ="annoying"),
        vibrantformdf %>% filter(COUNTRY=="SG") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="vibrant"),
        calmformdf %>% filter(COUNTRY=="SG") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="calm"),
        monotformdf %>% filter(COUNTRY=="SG") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="monotonous"),
        chaoticformdf %>% filter(COUNTRY=="SG") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="chaotic")) %>% mutate(COUNTRY="SG")

intrakwt_SG %>%
        mutate(pvalue=as.numeric(pvalue),effect=as.numeric(effect)) %>%
        kbl(caption = "Intra-country Kruskal-Wallis Test in SG",
            booktabs=T, digits = 3) %>%
        kable_classic(full_width = F, html_font = "Cambria")
Intra-country Kruskal-Wallis Test in SG
CRITERION pvalue effect PAQ COUNTRY
APPR 0.757 -0.014 annoying SG
UNDR 0.009 0.091 annoying SG
CLAR 0.455 -0.007 annoying SG
IBAL 0.003 0.118 annoying SG
ANTO 0.979 -0.016 annoying SG
ORTH 0.803 -0.015 annoying SG
NCON 0.315 0.000 annoying SG
APPR 0.314 0.000 vibrant SG
UNDR 0.146 0.017 vibrant SG
CLAR 0.545 -0.010 vibrant SG
IBAL 0.875 -0.015 vibrant SG
CONN 0.969 -0.016 vibrant SG
APPR 0.000 0.180 calm SG
UNDR 0.000 0.199 calm SG
CLAR 0.231 0.007 calm SG
IBAL 0.531 -0.009 calm SG
CONN 0.908 -0.015 calm SG
APPR 0.312 0.003 monotonous SG
UNDR 0.003 0.098 monotonous SG
CLAR 0.889 -0.018 monotonous SG
IBAL 0.761 -0.015 monotonous SG
CONN 0.831 -0.017 monotonous SG
APPR 0.000 0.179 chaotic SG
UNDR 0.884 -0.015 chaotic SG
CLAR 0.085 0.031 chaotic SG
IBAL 0.770 -0.014 chaotic SG
CONN 0.181 0.012 chaotic SG
#MY
intrakwt_MY <- rbind(annoyformdf %>% filter(COUNTRY=="MY") %>% 
        kwTest(df = .,type = "main",ivar = "CANDIDATE") %>%
        mutate(PAQ="annoying"),
        vibrantformdf %>% filter(COUNTRY=="MY") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="vibrant"),
        calmformdf %>% filter(COUNTRY=="MY") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="calm"),
        monotformdf %>% filter(COUNTRY=="MY") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="monotonous"),
        chaoticformdf %>% filter(COUNTRY=="MY") %>% 
        kwTest(df = .,type = "derived",ivar = "CANDIDATE") %>%
        mutate(PAQ="chaotic")) %>% mutate(COUNTRY="MY")

intrakwt_MY %>%
        mutate(pvalue=as.numeric(pvalue),effect=as.numeric(effect)) %>%
        kbl(caption = "Intra-country Kruskal-Wallis Test in MY",
            booktabs=T, digits = 3) %>%
        kable_classic(full_width = F, html_font = "Cambria")
Intra-country Kruskal-Wallis Test in MY
CRITERION pvalue effect PAQ COUNTRY
APPR 0.028 0.066 annoying MY
UNDR 0.441 -0.007 annoying MY
CLAR 0.199 0.011 annoying MY
IBAL 0.081 0.035 annoying MY
ANTO 0.577 -0.012 annoying MY
ORTH 0.261 0.005 annoying MY
NCON 0.026 0.068 annoying MY
APPR 0.580 -0.012 vibrant MY
UNDR 0.028 0.067 vibrant MY
CLAR 0.882 -0.017 vibrant MY
IBAL 0.311 0.000 vibrant MY
CONN 0.278 0.003 vibrant MY
APPR 0.001 0.171 calm MY
UNDR 0.014 0.088 calm MY
CLAR 0.846 -0.017 calm MY
IBAL 0.622 -0.013 calm MY
CONN 0.594 -0.012 calm MY
APPR 0.014 0.074 monotonous MY
UNDR 0.000 0.180 monotonous MY
CLAR 0.787 -0.017 monotonous MY
IBAL 0.409 -0.002 monotonous MY
CONN 0.469 -0.006 monotonous MY
APPR 0.007 0.106 chaotic MY
UNDR 0.944 -0.017 chaotic MY
CLAR 0.737 -0.015 chaotic MY
IBAL 0.581 -0.012 chaotic MY
CONN 0.864 -0.017 chaotic MY
#CIT

#identify which PAQ attribute and its respective criterion are < 5% significance level
intrakwtSG_sig <- intrakwt_SG %>%
        filter(pvalue<0.05)
intrakwtSG_sig %>% select(c(PAQ,CRITERION)) %>%
        kbl(caption = "PAQ attributes and criterions in SG with p < 0,05",
            booktabs=T) %>%
        kable_classic(full_width = F, html_font = "Cambria")
PAQ attributes and criterions in SG with p \< 0,05
PAQ CRITERION
annoying UNDR
annoying IBAL
calm APPR
calm UNDR
monotonous UNDR
chaotic APPR
intrakwtMY_sig <- intrakwt_MY %>%
        filter(pvalue<0.05)
intrakwtMY_sig %>% select(c(PAQ,CRITERION)) %>%
        kbl(caption = "PAQ attributes and criterions in SG with p < 0,05",
            booktabs=T) %>%
        kable_classic(full_width = F, html_font = "Cambria")
PAQ attributes and criterions in SG with p \< 0,05
PAQ CRITERION
annoying APPR
annoying NCON
vibrant UNDR
calm APPR
calm UNDR
monotonous APPR
monotonous UNDR
chaotic APPR
#monotonous
#unique criterion <5%
monotCrit_SG<-intrakwtSG_sig %>% filter(PAQ=="monotonous") %>% 
               select(CRITERION) %>% unique(.) %>% .$CRITERION

monotSIG_SG<-monotformdf %>% select(c(COUNTRY,monotCrit_SG, CANDIDATE))

monotCrit_MY<-intrakwtMY_sig %>% filter(PAQ=="monotonous") %>% 
               select(CRITERION) %>% unique(.) %>% .$CRITERION

monotSIG_MY<-monotformdf %>% select(c(COUNTRY,monotCrit_MY, CANDIDATE))


#CIT for monotonous across SG and MY
citResults<-rbind(ciTest(df=monotSIG_SG,
                         criterion = monotCrit_SG,
                         PAQ="monotonous") %>% mutate(COUNTRY="SG"),
                  ciTest(df=monotSIG_MY,
                         criterion = monotCrit_MY,
                         PAQ="monotonous") %>% mutate(COUNTRY="MY"))
## [1] "UNDR"
## 
##                            Comparison of x by group                            
##                                  (Bonferroni)                                  
## Col Mean-|
## Row Mean |   kurang k   membosan
## ---------+----------------------
## membosan |  -4.086271
##          |    0.0001*
##          |
## tidak be |   1.344389   5.430660
##          |     0.2707    0.0000*
## 
## alpha = 0.05
## Reject Ho if p <= alpha/2
## [1] "APPR"
## 
##                            Comparison of x by group                            
##                                  (Bonferroni)                                  
## Col Mean-|
## Row Mean |   kurang k   membosan
## ---------+----------------------
## membosan |  -0.299452
##          |     1.0000
##          |
## tidak be |   2.467117   2.766570
##          |    0.0218*    0.0094*
## 
## alpha = 0.05
## Reject Ho if p <= alpha/2
## [1] "UNDR"
## 
##                            Comparison of x by group                            
##                                  (Bonferroni)                                  
## Col Mean-|
## Row Mean |   kurang k   membosan
## ---------+----------------------
## membosan |  -4.086271
##          |    0.0001*
##          |
## tidak be |   1.344389   5.430660
##          |     0.2707    0.0000*
## 
## alpha = 0.05
## Reject Ho if p <= alpha/2
#Plot CIT results
citResults %>%
        mutate(pvalue=as.numeric(pvalue),adjval=as.numeric(adjval)) %>%
        kbl(caption = "Conover-Iman test results",
            booktabs=T, digits = 4) %>%
        kable_classic(full_width = F, html_font = "Cambria")
Conover-Iman test results
PAQ CRITERION comparisons pvalue adjval COUNTRY
monotonous UNDR kurang kepelbagaian oleh itu membosankan - membosankan 0.0000 0.0001 SG
monotonous UNDR kurang kepelbagaian oleh itu membosankan - tidak berubah oleh itu membosankan 0.0902 0.2707 SG
monotonous UNDR membosankan - tidak berubah oleh itu membosankan 0.0000 0.0000 SG
monotonous APPR kurang kepelbagaian oleh itu membosankan - membosankan 0.3825 1.0000 MY
monotonous APPR kurang kepelbagaian oleh itu membosankan - tidak berubah oleh itu membosankan 0.0073 0.0218 MY
monotonous APPR membosankan - tidak berubah oleh itu membosankan 0.0031 0.0094 MY
monotonous UNDR kurang kepelbagaian oleh itu membosankan - membosankan 0.0000 0.0001 MY
monotonous UNDR kurang kepelbagaian oleh itu membosankan - tidak berubah oleh itu membosankan 0.0902 0.2707 MY
monotonous UNDR membosankan - tidak berubah oleh itu membosankan 0.0000 0.0000 MY

About

Code and results accompanying paper: "Crossing the Linguistic Causeway: A Binational Approach for Translating Soundscape Attributes to Bahasa Melayu"

License:GNU Affero General Public License v3.0


Languages

Language:R 100.0%