(This HTML file is around 65 megabytes large, so it may take a while to load. Alternatively, you can view the plots in the GitLab repository at https://gitlab.com/a-bc/your-covid-19-risk and/or get the data from the GitLab repository at https://gitlab.com/a-bc/your-covid-19-risk/data)

Introduction

Introduction

This is one of the analysis files in the repository for the Your COVID-19 Risk project, a project uniting over a hundred volunteers with expertise in health promotion and behavior change.

For details, please see the GitLab repository for this project (https://gitlab.com/a-bc/your-covid-19-risk) or the OSF repo (https://osf.io/vkdyt; the DOI for the OSF repo is https://doi.org/10.17605/osf.io/vkdyt).

The links to the rendered analysis files in this project are:

The “Setup log” tab contains any messages returned while running the setup script.

Setup log

###-----------------------------------------------------------------------------
### Packages
###-----------------------------------------------------------------------------

### To install the most recent version of `ufs`,
### but only if it's not installed locally yet
if (!"ufs" %in% installed.packages()) {
  remotes::install_gitlab('r-packages/ufs');
}

ufs::checkPkgs(
  c(
    ### Easily finding files
    "here",
    
    ### Loading spreadsheets
    "openxlsx",
    
    ### For CIBER plots
    "behaviorchange",

    ### For working with dates
    "lubridate",
        
    ### For nice-looking tables
    "knitr",
    "kableExtra",
    
    ### For analyses
    "rosetta",
    "ufs",
    
    ### For visualisations
    "ggplot2",
    "ggridges",
    "svglite",
    
    ### For creating a world map
    "rnaturalearth",
    #"rgeos",
    
    ### For making sure variable/value labels 'stick'
    "sticky",
    
    ### For detailed session information
    "sessioninfo"

  )
);

### Get the development version of the fancy new R package `limonaid`,
### developed by Gjalt-Jorn especially for this awesome project
ufs::quietGitLabUpdate('r-packages/limonaid');
ufs::quietGitLabUpdate('r-packages/behaviorchange');

###-----------------------------------------------------------------------------
### Set package options
###-----------------------------------------------------------------------------

### Prevent knitr::kable from printing NAs
options(knitr.kable.NA = '');

### Set figure numbering
ufs::setFigCapNumbering();

### Always print plots when using knitAndSave
ufs::opts$set(knitAndSave.catPlot = TRUE);

###-----------------------------------------------------------------------------
### Project settings and shared paths
###-----------------------------------------------------------------------------

### Paths
source(here::here("v1", "scripts", "your-covid-19-risk-v1-paths.R"));

### Colors
deepKoamaru <- "#384e71";
upsdellRed <- "#b71f2b";
carminePink <- "#e94a50";

koamaruGradient <- c("#2a3b55", "#384d70", "#47628f",
                     "#5576aa", "#7691b7",
                     "#91a8ca", "#adbdd7");

upsDellGradient <- c("#6d121b", "#901823", "#b71f2c",
                     "#da2534", "#e14c58",
                     "#e7747e", "#ed979f");

### CIBER sample size
minCIBERsampleSize <- 500;

Data loading & cleaning

Load data

### Specify that we want detailed reporting
options(YCR_give_updates = TRUE);

### Load the data produced by the data pipeline. If we happen to be on a PC
### where the data pipeline repo is in the same directory as this repo, such
### as GJs PC, just load the local files instead of downloading.
dataPipelinePath <-
  here::here("..", "your-covid-19-risk-data", "data");

if (dir.exists(dataPipelinePath)) {
  ### Load all datasets
  dataFrames <-
    lapply(
        list.files(
          dataPipelinePath,
          full.names = TRUE
        ),
        read.csv,
        stringsAsFactors=FALSE,
        fileEncoding='UTF-8-BOM'
      );
  ### When a bug in the code producing the LimeSurvey
  ### surveys was fixed, other variables were added; remove these to
  ### enable merging
  varNames <- names(dataFrames[[1]]);
  dataFrames <-
    lapply(dataFrames,
           function(x) {
             return(x[, varNames]);
           });
  ### rbind together into one dataframe
  tryCatch({
    dat <-
      do.call(rbind, dataFrames);
  }, error = function(e) {
    browser();
  });
  
} else {
  source(paste0('https://gitlab.com/a-bc/your-covid-19-risk-data/',
                '-/raw/master/read--your-covid-19-risk--data.R?inline=false'));
}

### Save a backup of the data
dat.raw <- dat;

scriptBits <-
  limonaid::ls_parse_data_import_script(
    scriptfile = file.path(dataPath,
                           "survey_100199_R_syntax_file.R")
  );

dat <-
  limonaid::ls_apply_script_bits(dat,
                                 scriptBits,
                                 categoricalQuestions = c("age",
                                                          "gender"));

###-----------------------------------------------------------------------------
### Correct names of variables
###-----------------------------------------------------------------------------

names(dat) <-
  sub("AtIn", "AttIn", names(dat));

names(dat) <-
  sub("gnrc", "gen", names(dat));

###-----------------------------------------------------------------------------
### Replace "Y" and "" with 1/0 for checkboxes
###-----------------------------------------------------------------------------

# checkboxQuestions <-
#   grep(
#     "^work_|^siCurrent_|^siTrigger|^siIntention_|^hwFrequency_|^hwIntensity_",
#     names(dat),
#     value = TRUE
#   );
# 
# dat[, checkboxQuestions] <-
#   lapply(dat[, checkboxQuestions],
#          function(x) {
#            return(ifelse(x == "Y",
#                          1,
#                          0));
#          });

###-----------------------------------------------------------------------------
### Convenient vectors with variable names
###-----------------------------------------------------------------------------

lsPreVars <-
  names(dat)[1:which(names(dat) == "datestamp")];
reqVars <-
  names(dat)[which(names(dat) == "country"):which(names(dat) == "passString")];
dmqVars <-
  names(dat)[which(names(dat) == "AttExWeirdSeq"):which(names(dat) == "genInfctReqOutIn")];

dmqVars <-
  grep("Seq$", dmqVars, invert = TRUE, value=TRUE);

Select data

Here we select only the rows of peopl who completed the tool. This ensures consistency with the numbers reported in the manuscript.

### Select part of the data
sDat <-
  dat[dat$lastpage==156, ];

Prepare country labels

countryLabels_forCountries <-
  grepl("00", names(attr(dat$country, "labels")), fixed=TRUE);

countryLabels <-
  attr(dat$country, "labels")[countryLabels_forCountries];

countryLabels <-
  gsub(" - no .* speci?fied",
       "",
       countryLabels);

countryLabels_forAggregate <-
  stats::setNames(
    countryLabels,
    nm = substr(countryLabels, 1, 2)
  );

Clean data

###-----------------------------------------------------------------------------
### Store start and submit data and time as datetime
###-----------------------------------------------------------------------------

dat$date_submit <-
  lubridate::as_datetime(as.character(dat$submitdate));
dat$date_start <-
  lubridate::as_datetime(as.character(dat$startdate));

###-----------------------------------------------------------------------------
### Delete the first test entries of the first version, before we had a
### testing infrastructure in place
###-----------------------------------------------------------------------------

dat <-
  dat[dat$date_start > "2020-05-07 05:00:00", ];


###-----------------------------------------------------------------------------
### Add country variable without regions
###-----------------------------------------------------------------------------

dat$country_aggregated <-
  substr(dat$country, 1, 2);

dat$countryName <-
  countryLabels[paste0(dat$country_aggregated, "00")];

###-----------------------------------------------------------------------------
### Add regex vector to present stuff per country
###-----------------------------------------------------------------------------

countryRegexCodes <- table(dat$country_aggregated);
countryRegexCodes <- countryRegexCodes[countryRegexCodes > 100 & nchar(names(countryRegexCodes))>0];

countryRegexLabels <- c(countryLabels[paste0(names(countryRegexCodes), "00")],
                        "All countries");
countryRegexes <- c(paste0("^", names(countryRegexCodes), "$"),
                    ".*");
countryRegexIndices <- seq_along(countryRegexes);
countrySampleSizes <- c(countryRegexCodes,
                        sum(table(dat$country_aggregated)));
countryRegexCodes <- c(names(countryRegexCodes), "xx");

### Helper functions
labeledMultiResponseTable <- function(rows, regex) {

  multiResponseTable <-
    ufs::multiResponse(dat[rows, ],
                       regex = regex,
                       endorsedOption = "Y");
  multiResponseTable$Option <-
    c(
      gsub(
        "\\[(.*)\\].*$",
        "\\1",
        unlist(
          lapply(
            dat[, grep(regex, names(dat))],
            attr,
            "label"
          )
        )      
      ),
      "Total"
    );
 return(multiResponseTable); 
}

###-----------------------------------------------------------------------------
### Add variable to show each tool users' progress
###-----------------------------------------------------------------------------

dat$toolUserProgress <-
  factor(
    ifelse(dat$lastpage == 156,
           3,
           ifelse(dat$lastpage == 0,
                  1,
                  2)),
    levels = c(1, 2, 3),
    labels = c("Did not start", "Dropped out", "Completed"),
    ordered = TRUE
  );


###-----------------------------------------------------------------------------
###-----------------------------------------------------------------------------
###-----------------------------------------------------------------------------
###-----------------------------------------------------------------------------

### Moved here to make same selection as for manuscript
rawDat <-
  dat;
dat <-
  dat[dat$lastpage==156, ];

###-----------------------------------------------------------------------------
###-----------------------------------------------------------------------------
###-----------------------------------------------------------------------------
###-----------------------------------------------------------------------------

Countries

### Get world map from `tmap` package
# data(World, package="tmap");

### Convert from factor to character to enable matching
### when merging merging
# World$iso_a3 <- as.character(World$iso_a3);

### Sort by iso_a3
# World <- World[order(World$iso_a3), ];

### Get ISO Alpha-2 to ISO Alpha-3 country code translation table
### https://www.iban.com/country-codes
country_iso_codes <-
  utils::read.delim(file.path(dataPath, "country-iso-alpha2-alpha3.csv"),
                    encoding = "UTF-8");
iso_a3 <-
  stats::setNames(country_iso_codes$iso_a3,
                  nm = country_iso_codes$iso_a2);
dat$iso_a2 <-
  toupper(dat$country_aggregated);

### Correct land codes for UK
dat$iso_a2 <-
  ifelse(dat$iso_a2 == "UK",
         "GB",
         dat$iso_a2);

### Add ISO Alpha-3
dat$iso_a3 <-iso_a3[dat$iso_a2];

## Get tool users per country
usersPerCountry <- table(dat$iso_a3);
usersPerCountryDat <-
  data.frame(iso_a3 = names(usersPerCountry),
             users = as.vector(usersPerCountry),
             stringsAsFactors = FALSE);

### Now using
### https://www.r-spatial.org/r/2018/10/25/ggplot2-sf.html
spdf_world <- rnaturalearth::ne_countries(returnclass = "sf");

# spdf_world <-
#   spdf_world[order(spdf_world$gu_a3), ];

spdf_world_withUsers <-
  merge(x = spdf_world,
        y = usersPerCountryDat,
        by.x = "gu_a3",
        by.y = "iso_a3",
        all.x = TRUE,
        all.y = FALSE);

newWorldMap <-
  ggplot2::ggplot(data = spdf_world_withUsers) +
    ggplot2::geom_sf(ggplot2::aes(fill = users),
                     na.rm=TRUE) +
    ggplot2::scale_fill_viridis_c(
      name = "Tool Users",
      trans="log10",
      na.value="black"
    ) +
    ggplot2::theme_void() +
    ggplot2::theme(
      plot.margin = ggplot2::unit(c(.5,.5,.5,.5), units="cm")
    );

ufs::knitAndSave(
  newWorldMap,
  path = workingPath,
  figCaption = "World map of tool users",
  figWidth = 20,
  figHeight = 10);
## Warning in sprintf(suffix, counter): one argument not used by format ''
Figure 1: World map of tool users.

Figure 1: World map of tool users.

### Store the `geometry` column and attributes because
### left_join throws an error and `merge` converts to
### data.frame
# WorldGeometry <- World$geometry;
# WorldAttributes <- attributes(World);

### Merge
# mapdat <-
#   merge(x = World,
#         y = data.frame(iso_a3 = names(usersPerCountry),
#                        users = as.vector(usersPerCountry),
#                        stringsAsFactors = FALSE),
#         by = "iso_a3",
#         all.x = TRUE,
#         all.y = FALSE,
#         sort = TRUE);
### This is the original merging code that doesn't work
  # dplyr::left_join(World,
  #                  data.frame(iso_a3 = names(usersPerCountry),
  #                             users = as.vector(usersPerCountry),
  #                             stringsAsFactors = FALSE),
  #                  by = "iso_a3",
  #                  copy = TRUE);

### Store all new names in the attributes object
# WorldAttributes$names <-
#   names(mapdat);
# 
# ### Convert to tibble and restore attributes and
# ### geometry column
# mapdat <- tibble::as_tibble(mapdat);
# attributes(mapdat) <- WorldAttributes;
# mapdat$geometry <- WorldGeometry;

# worldWithUsers <- World;
# worldWithUsers$users <- mapdat$users;

# worldWithUsers <- tibble::as.tibble(worldWithUsers);
# 
# worldWithUsers$geometry <- WorldGeometry;
# 
# class(worldWithUsers$geometry) <-
#   c("sfc_MULTIPOLYGON", "sfc");
# 
# stop(paste0("WORLD CLASS:", ufs::vecTxtQ(class(worldWithUsers)),
#             "\n\nNAMES: ",
#             ufs::vecTxtQ(names(attributes(worldWithUsers))),
#             "\n\nCLASS of geometry: ",
#             class(worldWithUsers$geometry)));

### Create map
# toolUserMap <-
#   tmap::tm_shape(worldWithUsers) +
#     tmap::tm_polygons(
#       col = "users",
#       id = "geometry",
#       title = "Tool users",
#       palette = "viridis",
#       style = "log10",
#       colorNA = "black",
#       lwd = .2,
#       lty = "solid",
#       border.col = "grey"
#     ) +
#   tmap::tm_format("World");

# tmap::tmap_options(show.messages = FALSE);
# tmap::tmap_mode("plot");

### Print map
# tmap:::print.tmap(toolUserMap,
#                   knit=FALSE);

# data(World, package="tmap");
# m2 <- tmap::tm_shape(World) +
#   tmap::tm_fill("well_being", id="name", title="Well-being") +
#   tmap::tm_format("World");
# 
# tmap:::print_tmap(m2,
#                   knit=FALSE);

# aspectRatio <- tmaptools::get_asp_ratio(toolUserMap);
# 
# tmap::tmap_save(
#   toolUserMap,
#   filename = file.path(workingPath, "world-map-of-tool-use.pdf"),
#   width = 27.7, height = 27.7 / aspectRatio, units = "cm", dpi = 300
# );
# tmap::tmap_save(
#   toolUserMap,
#   filename = file.path(workingPath, "world-map-of-tool-use.svg"),
#   width = 27.7, height = 27.7 / aspectRatio, units = "cm", dpi = 300
# );
# tmap::tmap_save(
#   toolUserMap,
#   filename = file.path(workingPath, "world-map-of-tool-use.png"),
#   width = 27.7, height = 27.7 / aspectRatio, units = "cm", dpi = 300
# );

Univariate analyses

In total, 63850 people opened the tool (note that some people may have opened the tool multiple times). Of these, 0 only opened the first page and didn’t actually start using the tool, and 63850 completed the tool and were sent back to the website where they received their risk estimate and the intervention. The other 0 dropped off during tool use.

Tool use

totalNrOfToolUsers <-
  sum(!is.na(dat$submitdate));

cat("\n\n### Accumulation of tool use over time\n\n");

Accumulation of tool use over time

toolUse_accumulated <-
  ggplot2::ggplot(dat,
                  mapping = ggplot2::aes_string(x = "date_start")) +
    ggplot2::geom_line(size=2,
                       color = deepKoamaru,
                       stat = "ecdf",
                       na.rm=TRUE) +
    ggplot2::theme_minimal() + 
    ggplot2::scale_y_continuous(
      breaks = c(0, .25, .5, .75, 1),
      labels = round(c(0, .25, .5, .75, 1) * totalNrOfToolUsers)
    ) +
    ggplot2::labs(x = "Date and time",
                  y = "Total number of tool users",
                  title = "Accumulation of tool use over time");
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ufs::knitAndSave(toolUse_accumulated,
                 "xx: Accumulation of tool use over time",
                 path = workingPath);
## Warning in sprintf(suffix, counter): one argument not used by format ''
Figure 2: xx: Accumulation of tool use over time.

Figure 2: xx: Accumulation of tool use over time.

cat("\n\n### Tool use by hour\n\n");

Tool use by hour

toolUse_byHour <-
  ggplot2::ggplot(dat,
                  mapping = ggplot2::aes_string(x = "date_submit")) +
    ggplot2::geom_line(size=2,
                       color = deepKoamaru,
                       stat = "bin",
                       binwidth=60*60,
                       na.rm=TRUE) +
    ggplot2::theme_minimal() +
    ggplot2::labs(x = "Date and time",
                  y = "Number of tool users",
                  title = "Tool use by hour");

ufs::knitAndSave(toolUse_byHour,
                 "xx: Tool use by hour",
                 path = workingPath);
## Warning in sprintf(suffix, counter): one argument not used by format ''
Figure 3: xx: Tool use by hour.

Figure 3: xx: Tool use by hour.

cat("\n\n### Tool use over time, relative to max use per country\n\n");

Tool use over time, relative to max use per country

toolUse_densityOverTime_perCountry <-
  ggplot2::ggplot(dat[grep(paste(head(countryRegexes, -1),
                                 collapse="|"),
                           dat$country_aggregated), ],
                  mapping = ggplot2::aes_string(x = "date_start",
                                                group = "countryName",
                                                color = "countryName")) +
    ggplot2::geom_line(size=2,
                       stat = "density",
                       na.rm=TRUE) +
    ggplot2::theme_minimal() + 
    ggplot2::scale_color_viridis_d(end=.9) +
    ggplot2::labs(x = "Date and time",
                  y = "Density",
                  title = "Tool use over time, relative to max use per country");

ufs::knitAndSave(toolUse_densityOverTime_perCountry,
                 "Tool use over time, relative to max use per country",
                 path = workingPath);
## Warning in sprintf(suffix, counter): one argument not used by format ''
Figure 4: Tool use over time, relative to max use per country.

Figure 4: Tool use over time, relative to max use per country.

dropout_vs_completion_per_country <-
  table(
    dat[grep(paste(head(countryRegexes, -1),
                   collapse="|"),
             dat$country_aggregated), c("countryName", "toolUserProgress")]
  )[, 2:3];
dropout_vs_completion_per_country <-
  data.frame(country = row.names(dropout_vs_completion_per_country),
             dropout = dropout_vs_completion_per_country[, 1],
             completed = dropout_vs_completion_per_country[, 2],
             stringsAsFactors = FALSE,
             row.names=NULL);
dropout_vs_completion_per_country$dropout_proportion <-
  paste0(
    round(100 * dropout_vs_completion_per_country$dropout /
      (dropout_vs_completion_per_country$dropout +
         dropout_vs_completion_per_country$completed)),
    "%"
  );

kableExtra::kable_styling(
  knitr::kable(
    dropout_vs_completion_per_country
  )
);
country dropout completed dropout_proportion
Australia 0 523 0%
Belgium 0 7052 0%
Brasil 0 1415 0%
Canada 0 323 0%
China 0 104 0%
Cyprus 0 201 0%
France 0 340 0%
Germany 0 385 0%
India 0 251 0%
Indonesia 0 440 0%
Ireland (Republic) 0 587 0%
Italy 0 2240 0%
Mexico 0 109 0%
Netherlands 0 15376 0%
New Zealand 0 14615 0%
Pakistan 0 101 0%
Portugal 0 117 0%
Romania 0 6187 0%
Spain 0 281 0%
Switzerland 0 112 0%
Turkey 0 1137 0%
United Kingdom 0 6978 0%
United States 0 2998 0%

Missing variables

Overview

This is a table with a long list with the number of missing values per variable. Because it’s so long, it’s shown in the second tab.

Table

missingsPerVariable <-
  sapply(dat[, c(reqVars, dmqVars)],
         function(x) return(sum(is.na(x))));
missingsPerVariable <-
  data.frame(Missing = missingsPerVariable,
             Answered = nrow(dat) - missingsPerVariable,
             stringsAsFactors = FALSE);

kableExtra::kable_styling(
  knitr::kable(
    missingsPerVariable
  )
);
Missing Answered
country 0 63850
countryEst 0 63850
distRec 0 63850
age 117 63733
ageEst 0 63850
gender 252 63598
gender_other 23798 40052
genderEst 0 63850
work_ptnts 0 63850
work_chldr 0 63850
work_publc 0 63850
work_home 0 63850
workChldrEst 0 63850
workHomeEst 0 63850
workPtntsEst 0 63850
workPublcEst 0 63850
worksClose 0 63850
siCurrent_food 0 63850
siCurrent_shops 0 63850
siCurrent_famly 0 63850
siCurrent_frnds 0 63850
siCurrent_sport 0 63850
siCurrent_home 0 63850
siCurrentFamlyEst 0 63850
siCurrentFoodEst 0 63850
siCurrentFrndsEst 0 63850
siCurrentHomeEst 0 63850
siCurrentShopsEst 0 63850
siCurrentSportEst 0 63850
goOutSocial 0 63850
goOutReasons 0 63850
selfIsolates 0 63850
isolMsg1 0 63850
isolMsg2 0 63850
isolMsg3 0 63850
isolMsg4 0 63850
isolMsg5 0 63850
siTrigger_symSe 0 63850
siTrigger_symOt 0 63850
siTrigger_govmt 0 63850
siTrigger_none 9 63841
siTrigger_other 256 63594
siIntention_food 0 63850
siIntention_shops 0 63850
siIntention_famly 0 63850
siIntention_frnds 0 63850
siIntention_sport 0 63850
siIntention_other 10 63840
siIntentionFamlyEst 0 63850
siIntentionFoodEst 0 63850
siIntentionFrndsEst 0 63850
siIntentionOtherEst 0 63850
siIntentionShopsEst 0 63850
siIntentionSportEst 0 63850
siTriggerGovmtEst 0 63850
siTriggerNoneEst 0 63850
siTriggerOtherEst 0 63850
siTriggerSymOtEst 0 63850
siTriggerSymSeEst 0 63850
nrOfTriggers 0 63850
anarchist 0 63850
isolMsg6 0 63850
isolMsg7 0 63850
isolMsg8 0 63850
proximity 265 63585
proximityEst 0 63850
keepsDistance 0 63850
proxMsg 0 63850
hwFrequency_cntct 0 63850
hwFrequency_surfc 0 63850
hwFrequency_face 0 63850
hwFrequency_snzCf 0 63850
hwFrequency_bldng 0 63850
hwFrequency_food 0 63850
hwFrequency_never 123 63727
hwFrequencyBldngEst 0 63850
hwFrequencyCntctEst 0 63850
hwFrequencyFaceEst 0 63850
hwFrequencyFoodEst 0 63850
hwFrequencyNeverEst 0 63850
hwFrequencySnzCfEst 0 63850
hwFrequencySurfcEst 0 63850
hwFreqSum 0 63850
hwFreqDiligence 0 63850
hwIntensity_durtn 0 63850
hwIntensity_soap 0 63850
hwIntensity_thrgh 0 63850
hwIntensity_none 981 62869
hwIntensityDurtnEst 0 63850
hwIntensityNoneEst 0 63850
hwIntensitySoapEst 0 63850
hwIntensityThrghEst 0 63850
hwIntnsSum 0 63850
hwIntnsDiligence 0 63850
DMQslider_nr 2 63848
whoToProtectRaw 8 63842
whoToProtectEst 1 63849
gettingItOnYouRaw 1 63849
gettingItOnYouEst 1 63849
gettingItOffYouRaw 4061 59789
gettingItOffYouEst 1 63849
passString 1 63849
AttExExWeird 62471 1379
AttExEvWeird 62670 1180
AttExExLonely 62426 1424
AttExEvLonely 62600 1250
AttExExEmbarr 62489 1361
AttExEvEmbarr 63850 0
AttExExInControl 62464 1386
AttExEvInControl 62661 1189
AttExExAltruistic 62487 1363
AttExEvAltruistic 62665 1185
AttExExSocResp 62408 1442
AttExEvSocResp 62560 1290
AttExExUpset 62488 1362
AttExEvUpset 62616 1234
AttExExGood 62487 1363
AttExEvGood 62649 1201
AttExExSafe 62489 1361
AttExEvSafe 62647 1203
AttExExComfort 62525 1325
AttExEvComfort 62700 1150
AttExExThreatened 62626 1224
AttExEvThreatened 62630 1220
AttExExLeftOut 62554 1296
AttExEvLeftOut 62710 1140
AttExExSilly 62520 1330
AttExEvSilly 62679 1171
AttExExFreakedOut 62477 1373
AttExEvFreakedOut 62648 1202
AttExExVulnerable 62591 1259
AttExEvVulnerable 62743 1107
AttExExConnected 62507 1343
AttExEvConnected 62665 1185
AttInExLoseRespect 62449 1401
AttInEvLoseRespect 62628 1222
AttInExWasteTime 62659 1191
AttInEvWasteTime 62664 1186
AttInExUni 62441 1409
AttInEvUni 62674 1176
AttInEvUni2 63778 72
AttInExUniFl 62533 1317
AttInEvUniFl 62590 1260
AttInExBi 62491 1359
AttInEvBi 62733 1117
AttInEvBi2 63781 69
AttInExBiFl 62494 1356
AttInEvBiFl 62573 1277
AttInExHybridUni 62641 1209
AttInEvHybridUni 62716 1134
AttInEvHybridUni2 63773 77
AttInExHybridUniFl 62475 1375
AttInEvHybridUniFl 62518 1332
AttInExTradUni 62676 1174
AttInEvTradUni 62729 1121
AttInEvTradUni2 63798 52
AttInExTradFl 62532 1318
AttInEvTradFl 62572 1278
AttInExImplComp 62622 1228
AttInEvImplComp 62679 1171
AttInEvImplComp2 63792 58
AttInExImplCompFl 62547 1303
AttInEvImplCompFl 62593 1257
GenExSymptoms 62598 1252
GenEvSymptoms 62783 1067
GenEvSymptoms2 63801 49
GenExHospital 62531 1319
GenEvHospital 62786 1064
GenEvHospital2 63755 95
GenExDie 62547 1303
GenEvDie 63850 0
GenEvDie2 63850 0
AttInExFamInf 62711 1139
AttInEvFamInf 62776 1074
AttInEvFamInf2 63769 81
AttInExFriendsInf 62596 1254
AttInEvFriendsInf 62695 1155
AttInEvFriendsInf2 63756 94
AttInExOtherInf 62682 1168
AttInEvOtherInf 62754 1096
AttInEvOtherInf2 63771 79
AttInExInfFamShort 62673 1177
AttInEvInfFamShort 62741 1109
AttInEvInfFamShort2 63780 70
AttInExInfFamLong 62612 1238
AttInEvInfFamLong 62681 1169
AttInEvInfFamLong2 63771 79
AttInExInfFrieShort 62760 1090
AttInEvInfFrieShort 62854 996
AttInEvInfFrieShort2 63759 91
AttInExInfFrieLong 62683 1167
AttInEvInfFrieLong 62774 1076
AttInEvInfFrieLong2 63762 88
AttInExInfNeigh 62672 1178
AttInEvInfNeigh 62755 1095
AttInEvInfNeigh2 63766 84
AttInExInfPop 62635 1215
AttInEvInfPop 62721 1129
AttInEvInfPop2 63773 77
AttInExInfPeople 62644 1206
AttInEvInfPeople 62712 1138
AttInEvInfPeople2 63789 61
AttInExHouse 62686 1164
AttInEvHouse 62760 1090
AttInEvHouse2 63792 58
AttInExLeftOut 62686 1164
AttInEvLeftOut 62693 1157
AttInExDiscon 62572 1278
AttInEvDiscon 62709 1141
AttInExCoward 62467 1383
AttInEvCoward 62639 1211
AttInExWeak 62509 1341
AttInEvWeak 62670 1180
AttInExCitizen 62533 1317
AttInEvCitizen 62692 1158
AttInExFamRelax 62640 1210
AttInEvFamRelax 62646 1204
AttInExFriendsRelax 62654 1196
AttInEvFriendsRelax 62657 1193
AttInExFined 62660 1190
AttInEvFined 62667 1183
AttInExReasUni 62500 1350
AttInEvReasUni 62659 1191
AttInExReasBi 62646 1204
AttInEvReasBi 62638 1212
AttInExReasUniFl 62498 1352
AttInEvReasUniFl 62493 1357
AttInExReasBiFl 62463 1387
AttInEvReasBiFl 62466 1384
AttInExOthCool 62699 1151
AttInEvOthCool 62702 1148
AttInExHealth 62630 1220
AttInEvHealth 62635 1215
AttInExFamilySafe 62685 1165
AttInEvFamilySafe 63850 0
AttInEvFamilySafe2 63850 0
AttInExApprop 62668 1182
AttInEvApprop 62682 1168
AttInExInApprop 62676 1174
AttInEvInApprop 62682 1168
AttInExChildFeel 62651 1199
AttInEvChildFeel 63850 0
AttInEvChildFeel2 63850 0
AttInExChildReject 62652 1198
AttInEvChildReject 63850 0
AttInEvChildReject2 63850 0
AttInExProfRspns 62530 1320
AttInEvProfRspns 62535 1315
AttInExInformRspns 62540 1310
AttInEvInformRspns 62547 1303
AttInExNeglRspns 62546 1304
AttInEvNeglRspns 62560 1290
AttInExOthOffend 62437 1413
AttInEvOthOffend 62597 1253
AttInExOthCrazy 63850 0
AttInEvOthCrazy 62679 1171
AttInEvOthCrazy2 63781 69
AttInExOthThinkInf 62740 1110
AttInEvOthThinkInf 62737 1113
AttInExOthJudge 62490 1360
AttInEvOthJudge 62635 1215
AttInExOthHappy 62656 1194
AttInEvOthHappy 62656 1194
AttInExFriendsHappy 62639 1211
AttInEvFriendsHappy 62644 1206
AttInExFamilyHappy 62690 1160
AttInEvFamilyHappy 62697 1153
AttInExOthUpset 62463 1387
AttInEvOthUpset 62626 1224
AttInExActEasy 62523 1327
AttInEvActEasy 62693 1157
AttInExSocEasy 62541 1309
AttInEvSocEasy 62704 1146
AttInExOthDist 62611 1239
AttInEvOthDist 62607 1243
AttInExOutsideInf 62463 1387
AttInEvOutsideInf 62663 1187
AttInEvOutsideInf2 63799 51
AttInExContactFam 62703 1147
AttInEvContactFam 62708 1142
NrmDeBehOther 62666 1184
NrmDeIdOther 62559 1291
NrmDeBehFamily 62654 1196
NrmDeIdFamily 62532 1318
NrmDeBehDoctor 62637 1213
NrmDeIdDoctor 62525 1325
NrmDeBehRole 62628 1222
NrmDeIdRole 62527 1323
NrmDeBehFriends 62623 1227
NrmDeIdFriends 62490 1360
NrmDeBehLikeYou 62636 1214
NrmDeIdLikeYou 62508 1342
NrmDeBehNeighb 62667 1183
NrmDeIdLikeNeighb 62539 1311
NrmDeBehGeneral 62648 1202
NrmDeIdLikeGeneral 62524 1326
NrmInApFamily 62499 1351
NrmInMcFamily 62506 1344
NrmInApDoctor 62517 1333
NrmInMcDoctor 62515 1335
NrmInApBoss 62619 1231
NrmInMcBoss 62626 1224
NrmInApColleagues 62591 1259
NrmInMcColleagues 62592 1258
NrmInApLikeMe 62479 1371
NrmInMcLikeMe 62484 1366
NrmInApFriends 62513 1337
NrmInMcFriends 62516 1334
NrmInApNeighbrhd 62479 1371
NrmInMcNeighbrhd 62486 1364
NrmInApGeneral 62644 1206
NrmInMcGeneral 62645 1205
NrmInApHousehold 62516 1334
NrmInMcHousehold 62515 1335
NrmInApGovernment 62452 1398
NrmInMcGovernment 62450 1400
PbcSkPrRemWalk 62588 1262
PbcSkImRemWalk 62584 1266
PbcSkPrRemem 62546 1304
PbcSkImRemem 62550 1300
PbcSkPrRemExer 62415 1435
PbcSkImRemExer 62417 1433
PbcSkPrDecHugs 62495 1355
PbcSkImDecHugs 62493 1357
PbcSkPrDecCont 62619 1231
PbcSkImDecCont 62616 1234
PbcSkPrEstDist 62538 1312
PbcSkImEstDist 62541 1309
PbcSkPrChildBad 62664 1186
PbcSkImChildBad 62666 1184
PbcSkPrChildReject 62638 1212
PbcSkImChildReject 62644 1206
PbcSkPrWalkFast 62636 1214
PbcSkImWalkFast 62635 1215
PbcSkPrMeetCare 62697 1153
PbcSkImMeetCare 62699 1151
PbcSkPrTellOthers 62731 1119
PbcSkImTellOthers 62730 1120
PbcSkPrTechTouch 62610 1240
PbcSkImTechTouch 62614 1236
PbcSkPrDeclGreeting 62490 1360
PbcSkImDeclGreeting 62487 1363
PbcSkPrDeclHug 62522 1328
PbcSkImDeclHug 62525 1325
PbcCnPwBusyPlace 62665 1185
PbcCnPrBusyPlace 62762 1088
PbcCnPrBusyPlace2 63759 91
PbcCnPwSomeCare 62693 1157
PbcCnPrSomeCare 62797 1053
PbcCnPrSomeCare2 63749 101
PbcCnPwSprmrkt 62654 1196
PbcCnPrSprmrkt 62764 1086
PbcCnPrSprmrkt2 63741 109
PbcCnPwWork 62699 1151
PbcCnPrWork 62798 1052
PbcCnPrWork2 63751 99
PbcCnPwShopping 62675 1175
PbcCnPrShopping 62776 1074
PbcCnPrShopping2 63749 101
PbcCnPwEnoughRoom 62636 1214
PbcCnPrEnoughRoom 62722 1128
PbcCnPrEnoughRoom2 63763 87
PbcCnPwLonely 62654 1196
PbcCnPrLonely 62734 1116
PbcCnPrLonely2 63765 85
PbcCnPwBored 62715 1135
PbcCnPrBored 62807 1043
PbcCnPrBored2 63749 101
PbcCnPwUsualAct 62755 1095
PbcCnPrUsualAct 62830 1020
PbcCnPrUsualAct2 63763 87
PbcCnPwSocialise 62657 1193
PbcCnPrSocialise 62744 1106
PbcCnPrSocialise2 63752 98
PbcCnPwTired 62725 1125
PbcCnPrTired 62838 1012
PbcCnPrTired2 63749 101
PbcCnPwDistrac 62605 1245
PbcCnPrDistrac 62683 1167
PbcCnPrDistrac2 63769 81
PbcCnPwSignposts 62739 1111
PbcCnPrSignposts 62823 1027
PbcCnPrSignposts2 63771 79
PbcCnPwNormClose 62676 1174
PbcCnPrNormClose 62788 1062
PbcCnPrNormClose2 63763 87
PbcCnPwForget 62712 1138
PbcCnPrForget 62788 1062
PbcCnPrForget2 63770 80
PbcCnPwForgExer 62673 1177
PbcCnPrForgExer 62760 1090
PbcCnPrForgExer2 63784 66
PbcCnPwTechTouch 62680 1170
PbcCnPrTechTouch 62779 1071
PbcCnPrTechTouch2 63751 99
PbcCnPwSitClose 62718 1132
PbcCnPrSitClose 62821 1029
PbcCnPrSitClose2 63757 93
PbcCnPwOthDist 62648 1202
PbcCnPrOthDist 62731 1119
PbcCnPrOthDist2 63761 89
PbcCnPwOthAppr 62668 1182
PbcCnPrOthAppr 62744 1106
PbcCnPrOthAppr2 63783 67
PbcCnPwLotMind 62716 1134
PbcCnPrLotMind 62797 1053
PbcCnPrLotMind2 63771 79
PbcCnPwPayAtt 62738 1112
PbcCnPrPayAtt 62828 1022
PbcCnPrPayAtt2 63762 88
CIBERliteInt 62428 1422
CIBERliteAttIns 62635 1215
CIBERliteAttExp 62637 1213
CIBERlitePnInj 62707 1143
CIBERlitePnDes 62671 1179
CIBERlitePbcCap1 62659 1191
CIBERlitePbcCap2 62438 1412
CIBERlitePbcAut 62455 1395
genContract 62478 1372
genHoax 62568 1282
genInfctReqTouch 62495 1355
genInfctReqSympt 62515 1335
genInfctReqInsd 62584 1266
genInfctReqOutIn 62620 1230

Risk Estimation Questions

Country

countryFreqs <-
  sort(table(dat$countryName), decreasing=TRUE);

countryFreqsMods <-
  unlist(
    lapply(8:15,
           function(ncol) return(length(countryFreqs) %% ncol))
  );

if (any(countryFreqsMods == 0)) {
  countryFreqNcol <- seq(from = 8, to = 15)[countryFreqsMods == 0][1];
} else {
  countryFreqNcol <- 12;
  countryFreqs <- c(countryFreqs,
                    rep("", (12 - length(countryFreqs) %% 12)));
}

kableExtra::kable_styling(
  knitr::kable(
    matrix(
      ifelse(nchar(countryFreqs) > 0,
             paste0("<strong>", names(countryFreqs), "</strong>: ", countryFreqs),
             ""),
      ncol=countryFreqNcol,
      byrow=TRUE
    ),
    escape = FALSE
  )
);
<strong>Netherlands</strong>: 15376 <strong>New Zealand</strong>: 14615 <strong>Belgium</strong>: 7052 <strong>United Kingdom</strong>: 6978 <strong>Romania</strong>: 6187 <strong>United States</strong>: 2998 <strong>Italy</strong>: 2240 <strong>Brasil</strong>: 1415 <strong>Turkey</strong>: 1137
<strong>Ireland (Republic)</strong>: 587 <strong>Australia</strong>: 523 <strong>Indonesia</strong>: 440 <strong>Germany</strong>: 385 <strong>France</strong>: 340 <strong>Canada</strong>: 323 <strong>Spain</strong>: 281 <strong>India</strong>: 251 <strong>Cyprus</strong>: 201
<strong>Portugal</strong>: 117 <strong>Switzerland</strong>: 112 <strong>Mexico</strong>: 109 <strong>China</strong>: 104 <strong>Pakistan</strong>: 101 <strong>Sweden</strong>: 81 <strong>Greece</strong>: 73 <strong>Saudi Arabia</strong>: 60 <strong>Hungary</strong>: 50
<strong>United Arab Emirates</strong>: 49 <strong>South Africa</strong>: 46 <strong>Austria</strong>: 43 <strong>Singapore</strong>: 39 <strong>Poland</strong>: 38 <strong>Japan</strong>: 34 <strong>Philippines</strong>: 30 <strong>Denmark</strong>: 28 <strong>Chile</strong>: 27
<strong>Ethiopia</strong>: 26 <strong>Hong Kong</strong>: 26 <strong>Luxembourg</strong>: 26 <strong>Colombia</strong>: 25 <strong>Argentina</strong>: 24 <strong>Norway</strong>: 24 <strong>Ascension Island</strong>: 23 <strong>Finland</strong>: 23 <strong>Thailand</strong>: 22
<strong>Bulgaria</strong>: 20 <strong>Malaysia</strong>: 18 <strong>Afghanistan</strong>: 17 <strong>Israel</strong>: 16 <strong>Russia</strong>: 15 <strong>Croatia</strong>: 12 <strong>Czech Republic</strong>: 11 <strong>Iran</strong>: 11 <strong>Oman</strong>: 11
<strong>Qatar</strong>: 10 <strong>Ecuador</strong>: 9 <strong>Egypt</strong>: 9 <strong>Puerto Rico</strong>: 9 <strong>Serbia</strong>: 9 <strong>Slovakia</strong>: 9 <strong>Costa Rica</strong>: 8 <strong>Jordan</strong>: 8 <strong>Kuwait</strong>: 8
<strong>Lebanon</strong>: 8 <strong>Moldova</strong>: 8 <strong>Taiwan</strong>: 8 <strong>Algeria</strong>: 7 <strong>Macedonia</strong>: 7 <strong>Nigeria</strong>: 7 <strong>Peru</strong>: 7 <strong>Suriname</strong>: 7 <strong>Ukraine</strong>: 7
<strong>Aland</strong>: 6 <strong>Macao</strong>: 6 <strong>Slovenia</strong>: 6 <strong>Aruba</strong>: 5 <strong>Cambodia</strong>: 5 <strong>Guatemala</strong>: 5 <strong>Iraq</strong>: 5 <strong>Kenya</strong>: 5 <strong>Latvia</strong>: 5
<strong>Malta</strong>: 5 <strong>Montenegro</strong>: 5 <strong>Tunisia</strong>: 5 <strong>Vietnam</strong>: 5 <strong>Azerbaijan</strong>: 4 <strong>Bangladesh</strong>: 4 <strong>Bosnia and Herzegovina</strong>: 4 <strong>Estonia</strong>: 4 <strong>Falkland Islands</strong>: 4
<strong>Georgia</strong>: 4 <strong>Kazakhstan</strong>: 4 <strong>Nicaragua</strong>: 4 <strong>Panama</strong>: 4 <strong>San Marino</strong>: 4 <strong>Sri Lanka</strong>: 4 <strong>Tanzania</strong>: 4 <strong>Antarctica</strong>: 3 <strong>Bahrain</strong>: 3
<strong>Bolivia</strong>: 3 <strong>Cook Islands</strong>: 3 <strong>Dominican Republic</strong>: 3 <strong>Korea, South</strong>: 3 <strong>Libya</strong>: 3 <strong>Morocco</strong>: 3 <strong>Myanmar (Burma)</strong>: 3 <strong>The Bahamas</strong>: 3 <strong>Uruguay</strong>: 3
<strong>Albania</strong>: 2 <strong>Armenia</strong>: 2 <strong>Barbados</strong>: 2 <strong>Belarus</strong>: 2 <strong>Brunei</strong>: 2 <strong>Gibraltar</strong>: 2 <strong>Lithuania</strong>: 2 <strong>Nepal</strong>: 2 <strong>Rwanda</strong>: 2
<strong>Samoa</strong>: 2 <strong>Swaziland</strong>: 2 <strong>Uganda</strong>: 2 <strong>Venezuela</strong>: 2 <strong>Andorra</strong>: 1 <strong>Cameroon</strong>: 1 <strong>Cape Verde</strong>: 1 <strong>Cocos Islands</strong>: 1 <strong>Congo Democratic Republic</strong>: 1
<strong>Cuba</strong>: 1 <strong>Fiji</strong>: 1 <strong>Guam</strong>: 1 <strong>Honduras</strong>: 1 <strong>Iceland</strong>: 1 <strong>Isle of Man</strong>: 1 <strong>Korea, North</strong>: 1 <strong>Kosovo</strong>: 1 <strong>Liechtenstein</strong>: 1
<strong>Malawi</strong>: 1 <strong>Mali</strong>: 1 <strong>Martinique</strong>: 1 <strong>Namibia</strong>: 1 <strong>New Caledonia</strong>: 1 <strong>Palestine</strong>: 1 <strong>Paraguay</strong>: 1 <strong>Senegal</strong>: 1 <strong>Sierra Leone</strong>: 1
<strong>Solomon Islands</strong>: 1 <strong>South Sudan</strong>: 1 <strong>St Vincent & the Grenadines</strong>: 1 <strong>Syria</strong>: 1 <strong>Togo</strong>: 1 <strong>Turkmenistan</strong>: 1 <strong>Vanuatu</strong>: 1 <strong>Zambia</strong>: 1 <strong>Zimbabwe</strong>: 1

Age

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");

  cat(
    kableExtra::kable_styling(
      knitr::kable(
        rosetta::freq(dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "age"])$dat
      )
    )
  );
  
}

Australia

## Registered S3 methods overwritten by 'rosetta':
##   method          from
##   pander.crossTab ufs 
##   pander.freq     ufs 
##   print.crossTab  ufs 
##   print.freq      ufs
Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 10 1.9 1.9 1.9
20-29 40 7.6 7.7 9.6
30-39 124 23.7 23.8 33.3
40-49 134 25.6 25.7 59.0
50-59 114 21.8 21.8 80.8
60-69 74 14.1 14.2 95.0
70-79 22 4.2 4.2 99.2
80 or older 4 0.8 0.8 100.0
Total valid 522 99.8 100.0
NA (missing) 1 0.2
Total 523 100.0

Belgium

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 210 3.0 3.0 3.0
20-29 1390 19.7 19.7 22.7
30-39 1656 23.5 23.5 46.3
40-49 1332 18.9 18.9 65.2
50-59 1178 16.7 16.7 81.9
60-69 995 14.1 14.1 96.1
70-79 256 3.6 3.6 99.7
80 or older 18 0.3 0.3 99.9
I prefer not to say 4 0.1 0.1 100.0
Total valid 7039 99.8 100.0
NA (missing) 13 0.2
Total 7052 100.0

Brasil

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 13 0.9 0.9 0.9
20-29 147 10.4 10.4 11.4
30-39 170 12.0 12.1 23.4
40-49 383 27.1 27.2 50.6
50-59 504 35.6 35.8 86.4
60-69 175 12.4 12.4 98.9
70-79 13 0.9 0.9 99.8
80 or older 2 0.1 0.1 99.9
I prefer not to say 1 0.1 0.1 100.0
Total valid 1408 99.5 100.0
NA (missing) 7 0.5
Total 1415 100.0

Canada

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 13 4.0 4.0 4.0
20-29 44 13.6 13.7 17.7
30-39 50 15.5 15.5 33.2
40-49 58 18.0 18.0 51.2
50-59 60 18.6 18.6 69.9
60-69 60 18.6 18.6 88.5
70-79 31 9.6 9.6 98.1
80 or older 6 1.9 1.9 100.0
Total valid 322 99.7 100.0
NA (missing) 1 0.3
Total 323 100.0

Switzerland

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 1 0.9 0.9 0.9
20-29 16 14.3 14.3 15.2
30-39 27 24.1 24.1 39.3
40-49 31 27.7 27.7 67.0
50-59 29 25.9 25.9 92.9
60-69 8 7.1 7.1 100.0
Total valid 112 100.0 100.0

China

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 4 3.8 3.8 3.8
20-29 67 64.4 64.4 68.3
30-39 19 18.3 18.3 86.5
40-49 6 5.8 5.8 92.3
50-59 6 5.8 5.8 98.1
60-69 1 1.0 1.0 99.0
70-79 1 1.0 1.0 100.0
Total valid 104 100.0 100.0

Cyprus

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 2 1.0 1.0 1.0
20-29 29 14.4 14.4 15.4
30-39 90 44.8 44.8 60.2
40-49 42 20.9 20.9 81.1
50-59 23 11.4 11.4 92.5
60-69 12 6.0 6.0 98.5
70-79 3 1.5 1.5 100.0
Total valid 201 100.0 100.0

Germany

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 8 2.1 2.1 2.1
20-29 88 22.9 22.9 24.9
30-39 115 29.9 29.9 54.8
40-49 73 19.0 19.0 73.8
50-59 59 15.3 15.3 89.1
60-69 28 7.3 7.3 96.4
70-79 9 2.3 2.3 98.7
I prefer not to say 5 1.3 1.3 100.0
Total valid 385 100.0 100.0

Spain

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 2 0.7 0.7 0.7
20-29 78 27.8 27.8 28.5
30-39 77 27.4 27.4 55.9
40-49 30 10.7 10.7 66.5
50-59 54 19.2 19.2 85.8
60-69 30 10.7 10.7 96.4
70-79 10 3.6 3.6 100.0
Total valid 281 100.0 100.0

France

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 14 4.1 4.1 4.1
20-29 47 13.8 13.8 17.9
30-39 60 17.6 17.6 35.6
40-49 57 16.8 16.8 52.4
50-59 67 19.7 19.7 72.1
60-69 70 20.6 20.6 92.6
70-79 22 6.5 6.5 99.1
80 or older 3 0.9 0.9 100.0
Total valid 340 100.0 100.0

Indonesia

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 28 6.4 6.4 6.4
20-29 183 41.6 41.6 48.0
30-39 120 27.3 27.3 75.2
40-49 70 15.9 15.9 91.1
50-59 17 3.9 3.9 95.0
60-69 18 4.1 4.1 99.1
70-79 3 0.7 0.7 99.8
I prefer not to say 1 0.2 0.2 100.0
Total valid 440 100.0 100.0

Ireland (Republic)

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 19 3.2 3.2 3.2
20-29 87 14.8 14.8 18.1
30-39 89 15.2 15.2 33.3
40-49 141 24.0 24.1 57.3
50-59 127 21.6 21.7 79.0
60-69 95 16.2 16.2 95.2
70-79 26 4.4 4.4 99.7
80 or older 1 0.2 0.2 99.8
I prefer not to say 1 0.2 0.2 100.0
Total valid 586 99.8 100.0
NA (missing) 1 0.2
Total 587 100.0

India

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 14 5.6 5.6 5.6
20-29 71 28.3 28.3 33.9
30-39 67 26.7 26.7 60.6
40-49 46 18.3 18.3 78.9
50-59 26 10.4 10.4 89.2
60-69 19 7.6 7.6 96.8
70-79 5 2.0 2.0 98.8
80 or older 3 1.2 1.2 100.0
Total valid 251 100.0 100.0

Italy

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 222 9.9 10.0 10.0
20-29 665 29.7 29.8 39.8
30-39 451 20.1 20.2 60.0
40-49 399 17.8 17.9 77.9
50-59 281 12.5 12.6 90.5
60-69 179 8.0 8.0 98.5
70-79 25 1.1 1.1 99.6
80 or older 6 0.3 0.3 99.9
I prefer not to say 3 0.1 0.1 100.0
Total valid 2231 99.6 100.0
NA (missing) 9 0.4
Total 2240 100.0

Mexico

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 6 5.5 5.5 5.5
20-29 22 20.2 20.2 25.7
30-39 31 28.4 28.4 54.1
40-49 22 20.2 20.2 74.3
50-59 14 12.8 12.8 87.2
60-69 10 9.2 9.2 96.3
70-79 4 3.7 3.7 100.0
Total valid 109 100.0 100.0

Netherlands

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 484 3.1 3.1 3.1
20-29 3415 22.2 22.2 25.4
30-39 2893 18.8 18.8 44.2
40-49 2650 17.2 17.2 61.4
50-59 2943 19.1 19.2 80.6
60-69 2250 14.6 14.6 95.2
70-79 668 4.3 4.3 99.6
80 or older 53 0.3 0.3 99.9
I prefer not to say 10 0.1 0.1 100.0
Total valid 15366 99.9 100.0
NA (missing) 10 0.1
Total 15376 100.0

New Zealand

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 208 1.4 1.4 1.4
20-29 1137 7.8 7.8 9.2
30-39 2387 16.3 16.4 25.6
40-49 3452 23.6 23.7 49.3
50-59 3605 24.7 24.7 74.0
60-69 2677 18.3 18.4 92.3
70-79 1006 6.9 6.9 99.2
80 or older 104 0.7 0.7 99.9
I prefer not to say 8 0.1 0.1 100.0
Total valid 14584 99.8 100.0
NA (missing) 31 0.2
Total 14615 100.0

Pakistan

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 4 4.0 4.0 4.0
20-29 21 20.8 20.8 24.8
30-39 26 25.7 25.7 50.5
40-49 41 40.6 40.6 91.1
50-59 5 5.0 5.0 96.0
60-69 4 4.0 4.0 100.0
Total valid 101 100.0 100.0

Portugal

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 7 6.0 6.0 6.0
20-29 12 10.3 10.3 16.2
30-39 38 32.5 32.5 48.7
40-49 29 24.8 24.8 73.5
50-59 14 12.0 12.0 85.5
60-69 14 12.0 12.0 97.4
70-79 3 2.6 2.6 100.0
Total valid 117 100.0 100.0

Romania

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 855 13.8 13.8 13.8
20-29 1415 22.9 22.9 36.7
30-39 1477 23.9 23.9 60.7
40-49 1230 19.9 19.9 80.6
50-59 737 11.9 11.9 92.5
60-69 360 5.8 5.8 98.3
70-79 75 1.2 1.2 99.5
80 or older 9 0.1 0.1 99.7
I prefer not to say 20 0.3 0.3 100.0
Total valid 6178 99.9 100.0
NA (missing) 9 0.1
Total 6187 100.0

Turkey

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 47 4.1 4.1 4.1
20-29 531 46.7 46.9 51.0
30-39 170 15.0 15.0 66.0
40-49 172 15.1 15.2 81.2
50-59 118 10.4 10.4 91.6
60-69 88 7.7 7.8 99.4
70-79 7 0.6 0.6 100.0
Total valid 1133 99.6 100.0
NA (missing) 4 0.4
Total 1137 100.0

United Kingdom

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 167 2.4 2.4 2.4
20-29 1170 16.8 16.8 19.2
30-39 1394 20.0 20.0 39.2
40-49 1547 22.2 22.2 61.3
50-59 1490 21.4 21.4 82.7
60-69 917 13.1 13.1 95.9
70-79 260 3.7 3.7 99.6
80 or older 25 0.4 0.4 99.9
I prefer not to say 4 0.1 0.1 100.0
Total valid 6974 99.9 100.0
NA (missing) 4 0.1
Total 6978 100.0

United States

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 72 2.4 2.4 2.4
20-29 268 8.9 9.0 11.4
30-39 502 16.7 16.8 28.1
40-49 497 16.6 16.6 44.7
50-59 536 17.9 17.9 62.6
60-69 738 24.6 24.6 87.3
70-79 318 10.6 10.6 97.9
80 or older 57 1.9 1.9 99.8
I prefer not to say 6 0.2 0.2 100.0
Total valid 2994 99.9 100.0
NA (missing) 4 0.1
Total 2998 100.0

All countries

Frequencies Perc.Total Perc.Valid Cumulative
Younger than 20 2472 3.9 3.9 3.9
20-29 11210 17.6 17.6 21.5
30-39 12429 19.5 19.5 41.0
40-49 12820 20.1 20.1 61.1
50-59 12384 19.4 19.4 80.5
60-69 9129 14.3 14.3 94.8
70-79 2899 4.5 4.5 99.4
80 or older 315 0.5 0.5 99.9
I prefer not to say 75 0.1 0.1 100.0
Total valid 63733 99.8 100.0
NA (missing) 117 0.2
Total 63850 100.0

Gender

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");

  cat(
    kableExtra::kable_styling(
      knitr::kable(
        rosetta::freq(dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "gender"])$dat
      )
    )
  );
  
}

Australia

Frequencies Perc.Total Perc.Valid Cumulative
I am female 286 54.7 54.8 54.8
I am male 221 42.3 42.3 97.1
I am nonbinary / third gender 5 1.0 1.0 98.1
I prefer not to say 10 1.9 1.9 100.0
Total valid 522 99.8 100.0
NA (missing) 1 0.2
Total 523 100.0

Belgium

Frequencies Perc.Total Perc.Valid Cumulative
I am female 3586 50.9 51.0 51.0
I am male 3414 48.4 48.5 99.5
I am nonbinary / third gender 16 0.2 0.2 99.7
I prefer not to say 19 0.3 0.3 100.0
Total valid 7035 99.8 100.0
NA (missing) 17 0.2
Total 7052 100.0

Brasil

Frequencies Perc.Total Perc.Valid Cumulative
I am female 1121 79.2 79.6 79.6
I am male 288 20.4 20.4 100.0
Total valid 1409 99.6 100.0
NA (missing) 6 0.4
Total 1415 100.0

Canada

Frequencies Perc.Total Perc.Valid Cumulative
I am female 169 52.3 52.5 52.5
I am male 150 46.4 46.6 99.1
I am nonbinary / third gender 2 0.6 0.6 99.7
I prefer not to say 1 0.3 0.3 100.0
Total valid 322 99.7 100.0
NA (missing) 1 0.3
Total 323 100.0

Switzerland

Frequencies Perc.Total Perc.Valid Cumulative
I am female 50 44.6 44.6 44.6
I am male 60 53.6 53.6 98.2
I prefer not to say 2 1.8 1.8 100.0
Total valid 112 100.0 100.0

China

Frequencies Perc.Total Perc.Valid Cumulative
I am female 38 36.5 36.5 36.5
I am male 65 62.5 62.5 99.0
I prefer not to say 1 1.0 1.0 100.0
Total valid 104 100.0 100.0

Cyprus

Frequencies Perc.Total Perc.Valid Cumulative
I am female 98 48.8 48.8 48.8
I am male 102 50.7 50.7 99.5
I prefer not to say 1 0.5 0.5 100.0
Total valid 201 100.0 100.0

Germany

Frequencies Perc.Total Perc.Valid Cumulative
I am female 171 44.4 44.4 44.4
I am male 209 54.3 54.3 98.7
I am nonbinary / third gender 1 0.3 0.3 99.0
I prefer not to say 4 1.0 1.0 100.0
Total valid 385 100.0 100.0

Spain

Frequencies Perc.Total Perc.Valid Cumulative
I am female 146 52.0 52.1 52.1
I am male 132 47.0 47.1 99.3
I am nonbinary / third gender 2 0.7 0.7 100.0
Total valid 280 99.6 100.0
NA (missing) 1 0.4
Total 281 100.0

France

Frequencies Perc.Total Perc.Valid Cumulative
I am female 145 42.6 43 43
I am male 192 56.5 57 100
Total valid 337 99.1 100
NA (missing) 3 0.9
Total 340 100.0

Indonesia

Frequencies Perc.Total Perc.Valid Cumulative
I am female 162 36.8 37.1 37.1
I am male 271 61.6 62.0 99.1
I prefer not to say 4 0.9 0.9 100.0
Total valid 437 99.3 100.0
NA (missing) 3 0.7
Total 440 100.0

Ireland (Republic)

Frequencies Perc.Total Perc.Valid Cumulative
I am female 368 62.7 63.0 63.0
I am male 207 35.3 35.4 98.5
I am nonbinary / third gender 5 0.9 0.9 99.3
I prefer not to say 4 0.7 0.7 100.0
Total valid 584 99.5 100.0
NA (missing) 3 0.5
Total 587 100.0

India

Frequencies Perc.Total Perc.Valid Cumulative
I am female 67 26.7 26.8 26.8
I am male 180 71.7 72.0 98.8
I prefer not to say 3 1.2 1.2 100.0
Total valid 250 99.6 100.0
NA (missing) 1 0.4
Total 251 100.0

Italy

Frequencies Perc.Total Perc.Valid Cumulative
I am female 969 43.3 43.4 43.4
I am male 1249 55.8 56.0 99.4
I am nonbinary / third gender 3 0.1 0.1 99.6
I prefer not to say 10 0.4 0.4 100.0
Total valid 2231 99.6 100.0
NA (missing) 9 0.4
Total 2240 100.0

Mexico

Frequencies Perc.Total Perc.Valid Cumulative
I am female 56 51.4 51.4 51.4
I am male 53 48.6 48.6 100.0
Total valid 109 100.0 100.0

Netherlands

Frequencies Perc.Total Perc.Valid Cumulative
I am female 8169 53.1 53.3 53.3
I am male 7058 45.9 46.1 99.4
I am nonbinary / third gender 30 0.2 0.2 99.5
I prefer not to say 69 0.4 0.5 100.0
Total valid 15326 99.7 100.0
NA (missing) 50 0.3
Total 15376 100.0

New Zealand

Frequencies Perc.Total Perc.Valid Cumulative
I am female 8615 58.9 59.2 59.2
I am male 5867 40.1 40.3 99.6
I am nonbinary / third gender 22 0.2 0.2 99.7
I prefer not to say 40 0.3 0.3 100.0
Total valid 14544 99.5 100.0
NA (missing) 71 0.5
Total 14615 100.0

Pakistan

Frequencies Perc.Total Perc.Valid Cumulative
I am female 18 17.8 17.8 17.8
I am male 83 82.2 82.2 100.0
Total valid 101 100.0 100.0

Portugal

Frequencies Perc.Total Perc.Valid Cumulative
I am female 72 61.5 61.5 61.5
I am male 45 38.5 38.5 100.0
Total valid 117 100.0 100.0

Romania

Frequencies Perc.Total Perc.Valid Cumulative
I am female 3116 50.4 50.6 50.6
I am male 2992 48.4 48.6 99.2
I am nonbinary / third gender 5 0.1 0.1 99.2
I prefer not to say 47 0.8 0.8 100.0
Total valid 6160 99.6 100.0
NA (missing) 27 0.4
Total 6187 100.0

Turkey

Frequencies Perc.Total Perc.Valid Cumulative
I am female 536 47.1 47.4 47.4
I am male 588 51.7 52.0 99.4
I am nonbinary / third gender 4 0.4 0.4 99.7
I prefer not to say 3 0.3 0.3 100.0
Total valid 1131 99.5 100.0
NA (missing) 6 0.5
Total 1137 100.0

United Kingdom

Frequencies Perc.Total Perc.Valid Cumulative
I am female 3932 56.3 56.4 56.4
I am male 2974 42.6 42.7 99.1
I am nonbinary / third gender 44 0.6 0.6 99.8
I prefer not to say 16 0.2 0.2 100.0
Total valid 6966 99.8 100.0
NA (missing) 12 0.2
Total 6978 100.0

United States

Frequencies Perc.Total Perc.Valid Cumulative
I am female 1608 53.6 53.8 53.8
I am male 1355 45.2 45.3 99.1
I am nonbinary / third gender 18 0.6 0.6 99.7
I prefer not to say 10 0.3 0.3 100.0
Total valid 2991 99.8 100.0
NA (missing) 7 0.2
Total 2998 100.0

All countries

Frequencies Perc.Total Perc.Valid Cumulative
I am female 34384 53.9 54.1 54.1
I am male 28777 45.1 45.2 99.3
I am nonbinary / third gender 170 0.3 0.3 99.6
I prefer not to say 267 0.4 0.4 100.0
Total valid 63598 99.6 100.0
NA (missing) 252 0.4
Total 63850 100.0

Work

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");

  cat(
    kableExtra::kable_styling(
      knitr::kable(
        labeledMultiResponseTable(
          grep(countryRegexes[i], dat$country_aggregated),
          "^work_"
        )
      )
    )
  );
  
}

Australia

Option Frequency Percentage of responses Percentage of (523) cases
Yes, with patients or other vulnerable people 41 7.308378 7.839388
Yes, with children 39 6.951872 7.456979
Yes, with the general public or coworkers 159 28.342246 30.401530
I am working from home or not working currently 322 57.397504 61.567878
Total 561 100.000000 107.265774

Belgium

Option Frequency Percentage of responses Percentage of (7052) cases
Yes, with patients or other vulnerable people 421 5.790922 5.969938
Yes, with children 306 4.209078 4.339195
Yes, with the general public or coworkers 1500 20.632737 21.270561
I am working from home or not working currently 5043 69.367263 71.511628
Total 7270 100.000000 103.091322

Brasil

Option Frequency Percentage of responses Percentage of (1415) cases
Yes, with patients or other vulnerable people 163 11.187371 11.519435
Yes, with children 35 2.402196 2.473498
Yes, with the general public or coworkers 316 21.688401 22.332155
I am working from home or not working currently 943 64.722032 66.643109
Total 1457 100.000000 102.968198

Canada

Option Frequency Percentage of responses Percentage of (323) cases
Yes, with patients or other vulnerable people 17 5.151515 5.263158
Yes, with children 15 4.545454 4.643963
Yes, with the general public or coworkers 66 20.000000 20.433436
I am working from home or not working currently 232 70.303030 71.826625
Total 330 100.000000 102.167183

Switzerland

Option Frequency Percentage of responses Percentage of (112) cases
Yes, with patients or other vulnerable people 2 1.666667 1.785714
Yes, with children 5 4.166667 4.464286
Yes, with the general public or coworkers 34 28.333333 30.357143
I am working from home or not working currently 79 65.833333 70.535714
Total 120 100.000000 107.142857

China

Option Frequency Percentage of responses Percentage of (104) cases
Yes, with patients or other vulnerable people 9 8.035714 8.653846
Yes, with children 7 6.250000 6.730769
Yes, with the general public or coworkers 59 52.678571 56.730769
I am working from home or not working currently 37 33.035714 35.576923
Total 112 100.000000 107.692308

Cyprus

Option Frequency Percentage of responses Percentage of (201) cases
Yes, with patients or other vulnerable people 8 3.72093 3.98010
Yes, with children 23 10.69767 11.44279
Yes, with the general public or coworkers 111 51.62791 55.22388
I am working from home or not working currently 73 33.95349 36.31841
Total 215 100.00000 106.96517

Germany

Option Frequency Percentage of responses Percentage of (385) cases
Yes, with patients or other vulnerable people 22 5.459057 5.714286
Yes, with children 21 5.210918 5.454546
Yes, with the general public or coworkers 102 25.310174 26.493506
I am working from home or not working currently 258 64.019851 67.012987
Total 403 100.000000 104.675325

Spain

Option Frequency Percentage of responses Percentage of (281) cases
Yes, with patients or other vulnerable people 22 7.692308 7.829181
Yes, with children 9 3.146853 3.202847
Yes, with the general public or coworkers 56 19.580420 19.928826
I am working from home or not working currently 199 69.580420 70.818505
Total 286 100.000000 101.779359

France

Option Frequency Percentage of responses Percentage of (340) cases
Yes, with patients or other vulnerable people 19 5.307263 5.588235
Yes, with children 26 7.262570 7.647059
Yes, with the general public or coworkers 73 20.391061 21.470588
I am working from home or not working currently 240 67.039106 70.588235
Total 358 100.000000 105.294118

Indonesia

Option Frequency Percentage of responses Percentage of (440) cases
Yes, with patients or other vulnerable people 11 2.277433 2.50000
Yes, with children 33 6.832298 7.50000
Yes, with the general public or coworkers 189 39.130435 42.95455
I am working from home or not working currently 250 51.759834 56.81818
Total 483 100.000000 109.77273

Ireland (Republic)

Option Frequency Percentage of responses Percentage of (587) cases
Yes, with patients or other vulnerable people 36 6.010017 6.132879
Yes, with children 30 5.008347 5.110733
Yes, with the general public or coworkers 91 15.191987 15.502555
I am working from home or not working currently 442 73.789649 75.298126
Total 599 100.000000 102.044293

India

Option Frequency Percentage of responses Percentage of (251) cases
Yes, with patients or other vulnerable people 18 6.691450 7.171315
Yes, with children 21 7.806691 8.366534
Yes, with the general public or coworkers 74 27.509294 29.482072
I am working from home or not working currently 156 57.992565 62.151394
Total 269 100.000000 107.171315

Italy

Option Frequency Percentage of responses Percentage of (2240) cases
Yes, with patients or other vulnerable people 123 5.352480 5.491071
Yes, with children 116 5.047868 5.178571
Yes, with the general public or coworkers 974 42.384682 43.482143
I am working from home or not working currently 1085 47.214970 48.437500
Total 2298 100.000000 102.589286

Mexico

Option Frequency Percentage of responses Percentage of (109) cases
Yes, with patients or other vulnerable people 9 7.894737 8.256881
Yes, with children 8 7.017544 7.339449
Yes, with the general public or coworkers 21 18.421053 19.266055
I am working from home or not working currently 76 66.666667 69.724771
Total 114 100.000000 104.587156

Netherlands

Option Frequency Percentage of responses Percentage of (15376) cases
Yes, with patients or other vulnerable people 985 6.135160 6.406087
Yes, with children 754 4.696356 4.903746
Yes, with the general public or coworkers 3021 18.816568 19.647503
I am working from home or not working currently 11295 70.351915 73.458637
Total 16055 100.000000 104.415973

New Zealand

Option Frequency Percentage of responses Percentage of (14615) cases
Yes, with patients or other vulnerable people 1013 6.577068 6.931235
Yes, with children 1322 8.583301 9.045501
Yes, with the general public or coworkers 6242 40.527204 42.709545
I am working from home or not working currently 6825 44.312427 46.698597
Total 15402 100.000000 105.384878

Pakistan

Option Frequency Percentage of responses Percentage of (101) cases
Yes, with patients or other vulnerable people 8 7.142857 7.920792
Yes, with children 15 13.392857 14.851485
Yes, with the general public or coworkers 40 35.714286 39.603960
I am working from home or not working currently 49 43.750000 48.514851
Total 112 100.000000 110.891089

Portugal

Option Frequency Percentage of responses Percentage of (117) cases
Yes, with patients or other vulnerable people 2 1.680672 1.709402
Yes, with children 5 4.201681 4.273504
Yes, with the general public or coworkers 26 21.848740 22.222222
I am working from home or not working currently 86 72.268908 73.504273
Total 119 100.000000 101.709402

Romania

Option Frequency Percentage of responses Percentage of (6187) cases
Yes, with patients or other vulnerable people 357 5.646054 5.770163
Yes, with children 239 3.779851 3.862938
Yes, with the general public or coworkers 2142 33.876325 34.620979
I am working from home or not working currently 3585 56.697770 57.944076
Total 6323 100.000000 102.198157

Turkey

Option Frequency Percentage of responses Percentage of (1137) cases
Yes, with patients or other vulnerable people 33 2.882096 2.902375
Yes, with children 17 1.484716 1.495163
Yes, with the general public or coworkers 242 21.135371 21.284081
I am working from home or not working currently 853 74.497817 75.021988
Total 1145 100.000000 100.703606

United Kingdom

Option Frequency Percentage of responses Percentage of (6978) cases
Yes, with patients or other vulnerable people 383 5.312067 5.488679
Yes, with children 510 7.073509 7.308684
Yes, with the general public or coworkers 1293 17.933426 18.529665
I am working from home or not working currently 5024 69.680999 71.997707
Total 7210 100.000000 103.324735

United States

Option Frequency Percentage of responses Percentage of (2998) cases
Yes, with patients or other vulnerable people 420 13.174404 14.009340
Yes, with children 172 5.395232 5.737158
Yes, with the general public or coworkers 659 20.671267 21.981321
I am working from home or not working currently 1937 60.759097 64.609740
Total 3188 100.000000 106.337558

All countries

Option Frequency Percentage of responses Percentage of (63850) cases
Yes, with patients or other vulnerable people 4282 6.443070 6.706343
Yes, with children 3870 5.823139 6.061081
Yes, with the general public or coworkers 18023 27.118976 28.227095
I am working from home or not working currently 40284 60.614815 63.091621
Total 66459 100.000000 104.086139

Current self-isolating behavior

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");

  cat(
    kableExtra::kable_styling(
      knitr::kable(
        labeledMultiResponseTable(
          grep(countryRegexes[i], dat$country_aggregated),
          "^siCurrent_"
        )
      )
    )
  );

}

Australia

Option Frequency Percentage of responses Percentage of (523) cases
Leaving your house for food, medicine, or healthcare 451 26.733847 86.23327
Leaving your house for other shops or services 303 17.960877 57.93499
Visiting family 168 9.958506 32.12237
Visiting friends 162 9.602845 30.97514
Walking or exercising outdoors 384 22.762300 73.42256
Mostly staying at home 219 12.981624 41.87380
Total 1687 100.000000 322.56214

Belgium

Option Frequency Percentage of responses Percentage of (7052) cases
Leaving your house for food, medicine, or healthcare 5283 27.269912 74.914918
Leaving your house for other shops or services 2085 10.762401 29.566081
Visiting family 1341 6.922005 19.015882
Visiting friends 616 3.179683 8.735111
Walking or exercising outdoors 5620 29.009446 79.693704
Mostly staying at home 4428 22.856553 62.790698
Total 19373 100.000000 274.716392

Brasil

Option Frequency Percentage of responses Percentage of (1415) cases
Leaving your house for food, medicine, or healthcare 842 34.995844 59.505300
Leaving your house for other shops or services 306 12.718205 21.625442
Visiting family 189 7.855362 13.356891
Visiting friends 54 2.244389 3.816254
Walking or exercising outdoors 289 12.011638 20.424028
Mostly staying at home 726 30.174564 51.307420
Total 2406 100.000000 170.035336

Canada

Option Frequency Percentage of responses Percentage of (323) cases
Leaving your house for food, medicine, or healthcare 259 26.241135 80.18576
Leaving your house for other shops or services 156 15.805471 48.29721
Visiting family 98 9.929078 30.34056
Visiting friends 68 6.889564 21.05263
Walking or exercising outdoors 237 24.012158 73.37461
Mostly staying at home 169 17.122594 52.32198
Total 987 100.000000 305.57276

Switzerland

Option Frequency Percentage of responses Percentage of (112) cases
Leaving your house for food, medicine, or healthcare 92 28.048780 82.14286
Leaving your house for other shops or services 48 14.634146 42.85714
Visiting family 25 7.621951 22.32143
Visiting friends 26 7.926829 23.21429
Walking or exercising outdoors 89 27.134146 79.46429
Mostly staying at home 48 14.634146 42.85714
Total 328 100.000000 292.85714

China

Option Frequency Percentage of responses Percentage of (104) cases
Leaving your house for food, medicine, or healthcare 55 20.072993 52.88462
Leaving your house for other shops or services 63 22.992701 60.57692
Visiting family 23 8.394161 22.11538
Visiting friends 36 13.138686 34.61538
Walking or exercising outdoors 58 21.167883 55.76923
Mostly staying at home 39 14.233577 37.50000
Total 274 100.000000 263.46154

Cyprus

Option Frequency Percentage of responses Percentage of (201) cases
Leaving your house for food, medicine, or healthcare 156 26.00000 77.61194
Leaving your house for other shops or services 112 18.66667 55.72139
Visiting family 96 16.00000 47.76119
Visiting friends 67 11.16667 33.33333
Walking or exercising outdoors 124 20.66667 61.69154
Mostly staying at home 45 7.50000 22.38806
Total 600 100.00000 298.50746

Germany

Option Frequency Percentage of responses Percentage of (385) cases
Leaving your house for food, medicine, or healthcare 305 26.895944 79.22078
Leaving your house for other shops or services 171 15.079365 44.41558
Visiting family 98 8.641975 25.45455
Visiting friends 86 7.583774 22.33766
Walking or exercising outdoors 299 26.366843 77.66234
Mostly staying at home 175 15.432099 45.45455
Total 1134 100.000000 294.54545

Spain

Option Frequency Percentage of responses Percentage of (281) cases
Leaving your house for food, medicine, or healthcare 207 26.572529 73.66548
Leaving your house for other shops or services 85 10.911425 30.24911
Visiting family 76 9.756098 27.04626
Visiting friends 74 9.499358 26.33452
Walking or exercising outdoors 208 26.700899 74.02135
Mostly staying at home 129 16.559692 45.90747
Total 779 100.000000 277.22420

France

Option Frequency Percentage of responses Percentage of (340) cases
Leaving your house for food, medicine, or healthcare 257 28.335171 75.58824
Leaving your house for other shops or services 133 14.663727 39.11765
Visiting family 49 5.402426 14.41176
Visiting friends 84 9.261301 24.70588
Walking or exercising outdoors 205 22.601985 60.29412
Mostly staying at home 179 19.735391 52.64706
Total 907 100.000000 266.76471

Indonesia

Option Frequency Percentage of responses Percentage of (440) cases
Leaving your house for food, medicine, or healthcare 264 27.586207 60.00000
Leaving your house for other shops or services 225 23.510972 51.13636
Visiting family 84 8.777430 19.09091
Visiting friends 52 5.433647 11.81818
Walking or exercising outdoors 95 9.926855 21.59091
Mostly staying at home 237 24.764890 53.86364
Total 957 100.000000 217.50000

Ireland (Republic)

Option Frequency Percentage of responses Percentage of (587) cases
Leaving your house for food, medicine, or healthcare 476 28.674699 81.09029
Leaving your house for other shops or services 218 13.132530 37.13799
Visiting family 144 8.674699 24.53152
Visiting friends 101 6.084337 17.20613
Walking or exercising outdoors 473 28.493976 80.57922
Mostly staying at home 248 14.939759 42.24872
Total 1660 100.000000 282.79387

India

Option Frequency Percentage of responses Percentage of (251) cases
Leaving your house for food, medicine, or healthcare 127 25.813008 50.59761
Leaving your house for other shops or services 111 22.560976 44.22311
Visiting family 29 5.894309 11.55378
Visiting friends 33 6.707317 13.14741
Walking or exercising outdoors 64 13.008130 25.49801
Mostly staying at home 128 26.016260 50.99602
Total 492 100.000000 196.01594

Italy

Option Frequency Percentage of responses Percentage of (2240) cases
Leaving your house for food, medicine, or healthcare 1673 23.05678 74.68750
Leaving your house for other shops or services 1379 19.00496 61.56250
Visiting family 1043 14.37431 46.56250
Visiting friends 990 13.64388 44.19643
Walking or exercising outdoors 1164 16.04190 51.96429
Mostly staying at home 1007 13.87817 44.95536
Total 7256 100.00000 323.92857

Mexico

Option Frequency Percentage of responses Percentage of (109) cases
Leaving your house for food, medicine, or healthcare 71 28.063241 65.13761
Leaving your house for other shops or services 42 16.600790 38.53211
Visiting family 29 11.462451 26.60550
Visiting friends 14 5.533597 12.84404
Walking or exercising outdoors 39 15.415020 35.77982
Mostly staying at home 58 22.924901 53.21101
Total 253 100.000000 232.11009

Netherlands

Option Frequency Percentage of responses Percentage of (15376) cases
Leaving your house for food, medicine, or healthcare 11061 22.157008 71.93678
Leaving your house for other shops or services 7886 15.796959 51.28772
Visiting family 5890 11.798642 38.30645
Visiting friends 3916 7.844394 25.46826
Walking or exercising outdoors 12678 25.396126 82.45317
Mostly staying at home 8490 17.006871 55.21592
Total 49921 100.000000 324.66831

New Zealand

Option Frequency Percentage of responses Percentage of (14615) cases
Leaving your house for food, medicine, or healthcare 12582 23.061273 86.08963
Leaving your house for other shops or services 11291 20.695027 77.25624
Visiting family 8206 15.040598 56.14779
Visiting friends 6885 12.619366 47.10913
Walking or exercising outdoors 11141 20.420096 76.22990
Mostly staying at home 4454 8.163639 30.47554
Total 54559 100.000000 373.30824

Pakistan

Option Frequency Percentage of responses Percentage of (101) cases
Leaving your house for food, medicine, or healthcare 62 30.845771 61.38614
Leaving your house for other shops or services 38 18.905473 37.62376
Visiting family 19 9.452736 18.81188
Visiting friends 17 8.457711 16.83168
Walking or exercising outdoors 15 7.462687 14.85149
Mostly staying at home 50 24.875622 49.50495
Total 201 100.000000 199.00990

Portugal

Option Frequency Percentage of responses Percentage of (117) cases
Leaving your house for food, medicine, or healthcare 89 28.896104 76.06838
Leaving your house for other shops or services 44 14.285714 37.60684
Visiting family 33 10.714286 28.20513
Visiting friends 20 6.493506 17.09402
Walking or exercising outdoors 75 24.350649 64.10256
Mostly staying at home 47 15.259740 40.17094
Total 308 100.000000 263.24786

Romania

Option Frequency Percentage of responses Percentage of (6187) cases
Leaving your house for food, medicine, or healthcare 4251 28.670668 68.70858
Leaving your house for other shops or services 3281 22.128549 53.03055
Visiting family 1796 12.113037 29.02861
Visiting friends 1427 9.624334 23.06449
Walking or exercising outdoors 2509 16.921832 40.55277
Mostly staying at home 1563 10.541580 25.26265
Total 14827 100.000000 239.64765

Turkey

Option Frequency Percentage of responses Percentage of (1137) cases
Leaving your house for food, medicine, or healthcare 733 33.032898 64.467898
Leaving your house for other shops or services 158 7.120324 13.896218
Visiting family 140 6.309148 12.313105
Visiting friends 104 4.686796 9.146878
Walking or exercising outdoors 381 17.169896 33.509235
Mostly staying at home 703 31.680937 61.829375
Total 2219 100.000000 195.162709

United Kingdom

Option Frequency Percentage of responses Percentage of (6978) cases
Leaving your house for food, medicine, or healthcare 5272 25.347372 75.55173
Leaving your house for other shops or services 3044 14.635319 43.62281
Visiting family 2110 10.144718 30.23789
Visiting friends 1542 7.413818 22.09802
Walking or exercising outdoors 5547 26.669551 79.49269
Mostly staying at home 3284 15.789221 47.06220
Total 20799 100.000000 298.06535

United States

Option Frequency Percentage of responses Percentage of (2998) cases
Leaving your house for food, medicine, or healthcare 2481 28.801950 82.75517
Leaving your house for other shops or services 1248 14.488043 41.62775
Visiting family 831 9.647086 27.71848
Visiting friends 513 5.955421 17.11141
Walking or exercising outdoors 2038 23.659160 67.97865
Mostly staying at home 1503 17.448340 50.13342
Total 8614 100.000000 287.32488

All countries

Option Frequency Percentage of responses Percentage of (63850) cases
Leaving your house for food, medicine, or healthcare 48383 24.755682 75.77604
Leaving your house for other shops or services 33303 17.039838 52.15818
Visiting family 22942 11.738521 35.93109
Visiting friends 17284 8.843544 27.06969
Walking or exercising outdoors 44748 22.895795 70.08301
Mostly staying at home 28782 14.726620 45.07753
Total 195442 100.000000 306.09554

Triggers for increased self-isolation

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");
  
  cat(
    kableExtra::kable_styling(
      knitr::kable(
        labeledMultiResponseTable(
          grep(countryRegexes[i], dat$country_aggregated),
          "^siTrigger_"
        )
      )
    )
  );

}

Australia

Option Frequency Percentage of responses Percentage of (523) cases
I had symptoms of COVID-19 444 34.206471 84.894837
I had been in contact with somebody who is sick or showed symptoms 418 32.203390 79.923518
the government imposed more restrictions 406 31.278891 77.629063
I would not consider this at all 30 2.311248 5.736138
Other 0 0.000000 0.000000
Total 1298 100.000000 248.183556

Belgium

Option Frequency Percentage of responses Percentage of (7052) cases
I had symptoms of COVID-19 6503 41.36768 92.214974
I had been in contact with somebody who is sick or showed symptoms 4838 30.77608 68.604651
the government imposed more restrictions 4160 26.46310 58.990357
I would not consider this at all 219 1.39313 3.105502
Other 0 0.00000 0.000000
Total 15720 100.00000 222.915485

Brasil

Option Frequency Percentage of responses Percentage of (1415) cases
I had symptoms of COVID-19 942 43.550624 66.572438
I had been in contact with somebody who is sick or showed symptoms 780 36.061026 55.123675
the government imposed more restrictions 399 18.446602 28.197880
I would not consider this at all 42 1.941748 2.968198
Other 0 0.000000 0.000000
Total 2163 100.000000 152.862191

Canada

Option Frequency Percentage of responses Percentage of (323) cases
I had symptoms of COVID-19 275 35.714286 85.139319
I had been in contact with somebody who is sick or showed symptoms 257 33.376623 79.566564
the government imposed more restrictions 223 28.961039 69.040248
I would not consider this at all 15 1.948052 4.643963
Other 0 0.000000 0.000000
Total 770 100.000000 238.390093

Switzerland

Option Frequency Percentage of responses Percentage of (112) cases
I had symptoms of COVID-19 104 38.5185185 92.8571429
I had been in contact with somebody who is sick or showed symptoms 87 32.2222222 77.6785714
the government imposed more restrictions 78 28.8888889 69.6428571
I would not consider this at all 1 0.3703704 0.8928571
Other 0 0.0000000 0.0000000
Total 270 100.0000000 241.0714286

China

Option Frequency Percentage of responses Percentage of (104) cases
I had symptoms of COVID-19 71 33.333333 68.269231
I had been in contact with somebody who is sick or showed symptoms 64 30.046948 61.538461
the government imposed more restrictions 72 33.802817 69.230769
I would not consider this at all 6 2.816901 5.769231
Other 0 0.000000 0.000000
Total 213 100.000000 204.807692

Cyprus

Option Frequency Percentage of responses Percentage of (201) cases
I had symptoms of COVID-19 161 37.268518 80.099502
I had been in contact with somebody who is sick or showed symptoms 144 33.333333 71.641791
the government imposed more restrictions 122 28.240741 60.696517
I would not consider this at all 5 1.157407 2.487562
Other 0 0.000000 0.000000
Total 432 100.000000 214.925373

Germany

Option Frequency Percentage of responses Percentage of (385) cases
I had symptoms of COVID-19 329 36.393805 85.454545
I had been in contact with somebody who is sick or showed symptoms 302 33.407080 78.441558
the government imposed more restrictions 247 27.323009 64.155844
I would not consider this at all 26 2.876106 6.753247
Other 0 0.000000 0.000000
Total 904 100.000000 234.805195

Spain

Option Frequency Percentage of responses Percentage of (281) cases
I had symptoms of COVID-19 252 40.32 89.679715
I had been in contact with somebody who is sick or showed symptoms 208 33.28 74.021352
the government imposed more restrictions 154 24.64 54.804271
I would not consider this at all 11 1.76 3.914591
Other 0 0.00 0.000000
Total 625 100.00 222.419929

France

Option Frequency Percentage of responses Percentage of (340) cases
I had symptoms of COVID-19 287 38.941655 84.411765
I had been in contact with somebody who is sick or showed symptoms 228 30.936228 67.058824
the government imposed more restrictions 202 27.408413 59.411765
I would not consider this at all 20 2.713704 5.882353
Other 0 0.000000 0.000000
Total 737 100.000000 216.764706

Indonesia

Option Frequency Percentage of responses Percentage of (440) cases
I had symptoms of COVID-19 212 29.526462 48.18182
I had been in contact with somebody who is sick or showed symptoms 195 27.158774 44.31818
the government imposed more restrictions 265 36.908078 60.22727
I would not consider this at all 46 6.406685 10.45455
Other 0 0.000000 0.00000
Total 718 100.000000 163.18182

Ireland (Republic)

Option Frequency Percentage of responses Percentage of (587) cases
I had symptoms of COVID-19 504 36.468886 85.860307
I had been in contact with somebody who is sick or showed symptoms 454 32.850941 77.342419
the government imposed more restrictions 395 28.581766 67.291312
I would not consider this at all 29 2.098408 4.940375
Other 0 0.000000 0.000000
Total 1382 100.000000 235.434412

India

Option Frequency Percentage of responses Percentage of (251) cases
I had symptoms of COVID-19 120 29.62963 47.80876
I had been in contact with somebody who is sick or showed symptoms 122 30.12346 48.60558
the government imposed more restrictions 120 29.62963 47.80876
I would not consider this at all 43 10.61728 17.13147
Other 0 0.00000 0.00000
Total 405 100.00000 161.35458

Italy

Option Frequency Percentage of responses Percentage of (2240) cases
I had symptoms of COVID-19 1860 36.542240 83.035714
I had been in contact with somebody who is sick or showed symptoms 1735 34.086444 77.455357
the government imposed more restrictions 1423 27.956778 63.526786
I would not consider this at all 72 1.414538 3.214286
Other 0 0.000000 0.000000
Total 5090 100.000000 227.232143

Mexico

Option Frequency Percentage of responses Percentage of (109) cases
I had symptoms of COVID-19 80 39.408867 73.39450
I had been in contact with somebody who is sick or showed symptoms 64 31.527094 58.71560
the government imposed more restrictions 46 22.660099 42.20183
I would not consider this at all 13 6.403941 11.92661
Other 0 0.000000 0.00000
Total 203 100.000000 186.23853

Netherlands

Option Frequency Percentage of responses Percentage of (15376) cases
I had symptoms of COVID-19 14373 40.200822 93.47685
I had been in contact with somebody who is sick or showed symptoms 11352 31.751182 73.82934
the government imposed more restrictions 9627 26.926412 62.61056
I would not consider this at all 401 1.121584 2.60796
Other 0 0.000000 0.00000
Total 35753 100.000000 232.52471

New Zealand

Option Frequency Percentage of responses Percentage of (14615) cases
I had symptoms of COVID-19 12827 34.304129 87.765994
I had been in contact with somebody who is sick or showed symptoms 11776 31.493368 80.574752
the government imposed more restrictions 12175 32.560441 83.304824
I would not consider this at all 614 1.642062 4.201163
Other 0 0.000000 0.000000
Total 37392 100.000000 255.846733

Pakistan

Option Frequency Percentage of responses Percentage of (101) cases
I had symptoms of COVID-19 42 35.00000 41.58416
I had been in contact with somebody who is sick or showed symptoms 20 16.66667 19.80198
the government imposed more restrictions 37 30.83333 36.63366
I would not consider this at all 21 17.50000 20.79208
Other 0 0.00000 0.00000
Total 120 100.00000 118.81188

Portugal

Option Frequency Percentage of responses Percentage of (117) cases
I had symptoms of COVID-19 99 38.5214008 84.615385
I had been in contact with somebody who is sick or showed symptoms 89 34.6303502 76.068376
the government imposed more restrictions 67 26.0700389 57.264957
I would not consider this at all 2 0.7782101 1.709402
Other 0 0.0000000 0.000000
Total 257 100.0000000 219.658120

Romania

Option Frequency Percentage of responses Percentage of (6187) cases
I had symptoms of COVID-19 4040 35.917496 65.298206
I had been in contact with somebody who is sick or showed symptoms 3704 32.930299 59.867464
the government imposed more restrictions 3017 26.822546 48.763536
I would not consider this at all 487 4.329659 7.871343
Other 0 0.000000 0.000000
Total 11248 100.000000 181.800549

Turkey

Option Frequency Percentage of responses Percentage of (1137) cases
I had symptoms of COVID-19 828 39.447356 72.823219
I had been in contact with somebody who is sick or showed symptoms 720 34.302049 63.324538
the government imposed more restrictions 520 24.773702 45.734389
I would not consider this at all 31 1.476894 2.726473
Other 0 0.000000 0.000000
Total 2099 100.000000 184.608619

United Kingdom

Option Frequency Percentage of responses Percentage of (6978) cases
I had symptoms of COVID-19 6224 35.211586 89.194612
I had been in contact with somebody who is sick or showed symptoms 5725 32.388549 82.043565
the government imposed more restrictions 5387 30.476352 77.199771
I would not consider this at all 340 1.923512 4.872456
Other 0 0.000000 0.000000
Total 17676 100.000000 253.310404

United States

Option Frequency Percentage of responses Percentage of (2998) cases
I had symptoms of COVID-19 2564 37.154036 85.523683
I had been in contact with somebody who is sick or showed symptoms 2344 33.966092 78.185457
the government imposed more restrictions 1818 26.344008 60.640427
I would not consider this at all 175 2.535864 5.837225
Other 0 0.000000 0.000000
Total 6901 100.000000 230.186791

All countries

Option Frequency Percentage of responses Percentage of (63850) cases
I had symptoms of COVID-19 54514 37.288553 85.378230
I had been in contact with somebody who is sick or showed symptoms 46803 32.014091 73.301488
the government imposed more restrictions 42045 28.759533 65.849648
I would not consider this at all 2833 1.937823 4.436962
Other 0 0.000000 0.000000
Total 146195 100.000000 228.966327

Actions taken when increasing self-isolation

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");
  
  cat(
    kableExtra::kable_styling(
      knitr::kable(
        labeledMultiResponseTable(
          grep(countryRegexes[i], dat$country_aggregated),
          "^siIntention_"
        )
      )
    )
  );
  
}

Australia

Option Frequency Percentage of responses Percentage of (523) cases
I would stop leaving the house for food, medicine, or healthcare 235 23.90641 44.93308
I would stop leaving the house for other shops or services 263 26.75483 50.28681
I would stop visiting family 149 15.15768 28.48948
I would stop visiting friends 154 15.66633 29.44551
I would stop outdoor walks or exercise 182 18.51475 34.79924
Other 0 0.00000 0.00000
Total 983 100.00000 187.95411

Belgium

Option Frequency Percentage of responses Percentage of (7052) cases
I would stop leaving the house for food, medicine, or healthcare 3194 32.165156 45.292116
I would stop leaving the house for other shops or services 1694 17.059416 24.021554
I would stop visiting family 1249 12.578046 17.711288
I would stop visiting friends 582 5.861027 8.252978
I would stop outdoor walks or exercise 3211 32.336354 45.533182
Other 0 0.000000 0.000000
Total 9930 100.000000 140.811117

Brasil

Option Frequency Percentage of responses Percentage of (1415) cases
I would stop leaving the house for food, medicine, or healthcare 309 40.657895 21.837456
I would stop leaving the house for other shops or services 137 18.026316 9.681979
I would stop visiting family 118 15.526316 8.339223
I would stop visiting friends 41 5.394737 2.897527
I would stop outdoor walks or exercise 155 20.394737 10.954064
Other 0 0.000000 0.000000
Total 760 100.000000 53.710247

Canada

Option Frequency Percentage of responses Percentage of (323) cases
I would stop leaving the house for food, medicine, or healthcare 159 28.54578 49.22601
I would stop leaving the house for other shops or services 135 24.23698 41.79567
I would stop visiting family 91 16.33752 28.17337
I would stop visiting friends 64 11.49013 19.81424
I would stop outdoor walks or exercise 108 19.38959 33.43653
Other 0 0.00000 0.00000
Total 557 100.00000 172.44582

Switzerland

Option Frequency Percentage of responses Percentage of (112) cases
I would stop leaving the house for food, medicine, or healthcare 55 28.94737 49.10714
I would stop leaving the house for other shops or services 41 21.57895 36.60714
I would stop visiting family 22 11.57895 19.64286
I would stop visiting friends 25 13.15789 22.32143
I would stop outdoor walks or exercise 47 24.73684 41.96429
Other 0 0.00000 0.00000
Total 190 100.00000 169.64286

China

Option Frequency Percentage of responses Percentage of (104) cases
I would stop leaving the house for food, medicine, or healthcare 37 19.68085 35.57692
I would stop leaving the house for other shops or services 51 27.12766 49.03846
I would stop visiting family 19 10.10638 18.26923
I would stop visiting friends 33 17.55319 31.73077
I would stop outdoor walks or exercise 48 25.53191 46.15385
Other 0 0.00000 0.00000
Total 188 100.00000 180.76923

Cyprus

Option Frequency Percentage of responses Percentage of (201) cases
I would stop leaving the house for food, medicine, or healthcare 89 23.48285 44.27861
I would stop leaving the house for other shops or services 93 24.53826 46.26866
I would stop visiting family 87 22.95515 43.28358
I would stop visiting friends 62 16.35884 30.84577
I would stop outdoor walks or exercise 48 12.66491 23.88060
Other 0 0.00000 0.00000
Total 379 100.00000 188.55721

Germany

Option Frequency Percentage of responses Percentage of (385) cases
I would stop leaving the house for food, medicine, or healthcare 134 23.14335 34.80519
I would stop leaving the house for other shops or services 132 22.79793 34.28571
I would stop visiting family 84 14.50777 21.81818
I would stop visiting friends 78 13.47150 20.25974
I would stop outdoor walks or exercise 151 26.07945 39.22078
Other 0 0.00000 0.00000
Total 579 100.00000 150.38961

Spain

Option Frequency Percentage of responses Percentage of (281) cases
I would stop leaving the house for food, medicine, or healthcare 101 22.29581 35.94306
I would stop leaving the house for other shops or services 66 14.56954 23.48754
I would stop visiting family 70 15.45254 24.91103
I would stop visiting friends 67 14.79029 23.84342
I would stop outdoor walks or exercise 149 32.89183 53.02491
Other 0 0.00000 0.00000
Total 453 100.00000 161.20996

France

Option Frequency Percentage of responses Percentage of (340) cases
I would stop leaving the house for food, medicine, or healthcare 123 28.21101 36.17647
I would stop leaving the house for other shops or services 96 22.01835 28.23529
I would stop visiting family 44 10.09174 12.94118
I would stop visiting friends 71 16.28440 20.88235
I would stop outdoor walks or exercise 102 23.39450 30.00000
Other 0 0.00000 0.00000
Total 436 100.00000 128.23529

Indonesia

Option Frequency Percentage of responses Percentage of (440) cases
I would stop leaving the house for food, medicine, or healthcare 115 26.74419 26.136364
I would stop leaving the house for other shops or services 152 35.34884 34.545454
I would stop visiting family 67 15.58140 15.227273
I would stop visiting friends 43 10.00000 9.772727
I would stop outdoor walks or exercise 53 12.32558 12.045454
Other 0 0.00000 0.000000
Total 430 100.00000 97.727273

Ireland (Republic)

Option Frequency Percentage of responses Percentage of (587) cases
I would stop leaving the house for food, medicine, or healthcare 287 30.33827 48.89267
I would stop leaving the house for other shops or services 178 18.81607 30.32368
I would stop visiting family 130 13.74207 22.14651
I would stop visiting friends 98 10.35941 16.69506
I would stop outdoor walks or exercise 253 26.74419 43.10051
Other 0 0.00000 0.00000
Total 946 100.00000 161.15843

India

Option Frequency Percentage of responses Percentage of (251) cases
I would stop leaving the house for food, medicine, or healthcare 65 26.63934 25.896414
I would stop leaving the house for other shops or services 80 32.78689 31.872510
I would stop visiting family 23 9.42623 9.163347
I would stop visiting friends 30 12.29508 11.952191
I would stop outdoor walks or exercise 46 18.85246 18.326693
Other 0 0.00000 0.000000
Total 244 100.00000 97.211155

Italy

Option Frequency Percentage of responses Percentage of (2240) cases
I would stop leaving the house for food, medicine, or healthcare 772 18.22474 34.46429
I would stop leaving the house for other shops or services 1109 26.18036 49.50893
I would stop visiting family 800 18.88574 35.71429
I would stop visiting friends 861 20.32578 38.43750
I would stop outdoor walks or exercise 694 16.38338 30.98214
Other 0 0.00000 0.00000
Total 4236 100.00000 189.10714

Mexico

Option Frequency Percentage of responses Percentage of (109) cases
I would stop leaving the house for food, medicine, or healthcare 39 31.2 35.77982
I would stop leaving the house for other shops or services 31 24.8 28.44037
I would stop visiting family 22 17.6 20.18349
I would stop visiting friends 12 9.6 11.00917
I would stop outdoor walks or exercise 21 16.8 19.26606
Other 0 0.0 0.00000
Total 125 100.0 114.67890

Netherlands

Option Frequency Percentage of responses Percentage of (15376) cases
I would stop leaving the house for food, medicine, or healthcare 5888 20.537147 38.2934443
I would stop leaving the house for other shops or services 6728 23.467039 43.7565036
I would stop visiting family 5401 18.838507 35.1261707
I would stop visiting friends 3649 12.727590 23.7317898
I would stop outdoor walks or exercise 7003 24.426230 45.5450052
Other 1 0.003488 0.0065036
Total 28670 100.000000 186.4594173

New Zealand

Option Frequency Percentage of responses Percentage of (14615) cases
I would stop leaving the house for food, medicine, or healthcare 6781 19.49235 46.39754
I would stop leaving the house for other shops or services 10132 29.12499 69.32603
I would stop visiting family 7566 21.74888 51.76873
I would stop visiting friends 6543 18.80821 44.76907
I would stop outdoor walks or exercise 3766 10.82557 25.76805
Other 0 0.00000 0.00000
Total 34788 100.00000 238.02942

Pakistan

Option Frequency Percentage of responses Percentage of (101) cases
I would stop leaving the house for food, medicine, or healthcare 32 33.68421 31.68317
I would stop leaving the house for other shops or services 22 23.15789 21.78218
I would stop visiting family 15 15.78947 14.85149
I would stop visiting friends 14 14.73684 13.86139
I would stop outdoor walks or exercise 12 12.63158 11.88119
Other 0 0.00000 0.00000
Total 95 100.00000 94.05941

Portugal

Option Frequency Percentage of responses Percentage of (117) cases
I would stop leaving the house for food, medicine, or healthcare 41 22.65193 35.04274
I would stop leaving the house for other shops or services 40 22.09945 34.18803
I would stop visiting family 32 17.67956 27.35043
I would stop visiting friends 19 10.49724 16.23932
I would stop outdoor walks or exercise 49 27.07182 41.88034
Other 0 0.00000 0.00000
Total 181 100.00000 154.70085

Romania

Option Frequency Percentage of responses Percentage of (6187) cases
I would stop leaving the house for food, medicine, or healthcare 1808 22.82540 29.22256
I would stop leaving the house for other shops or services 2093 26.42343 33.82900
I would stop visiting family 1283 16.19745 20.73703
I would stop visiting friends 1167 14.73299 18.86213
I would stop outdoor walks or exercise 1570 19.82073 25.37579
Other 0 0.00000 0.00000
Total 7921 100.00000 128.02651

Turkey

Option Frequency Percentage of responses Percentage of (1137) cases
I would stop leaving the house for food, medicine, or healthcare 442 42.175573 38.874230
I would stop leaving the house for other shops or services 125 11.927481 10.993843
I would stop visiting family 116 11.068702 10.202287
I would stop visiting friends 95 9.064886 8.355321
I would stop outdoor walks or exercise 270 25.763359 23.746702
Other 0 0.000000 0.000000
Total 1048 100.000000 92.172383

United Kingdom

Option Frequency Percentage of responses Percentage of (6978) cases
I would stop leaving the house for food, medicine, or healthcare 3207 26.54142 45.95873
I would stop leaving the house for other shops or services 2612 21.61715 37.43193
I would stop visiting family 1935 16.01423 27.73001
I would stop visiting friends 1453 12.02516 20.82259
I would stop outdoor walks or exercise 2876 23.80204 41.21525
Other 0 0.00000 0.00000
Total 12083 100.00000 173.15850

United States

Option Frequency Percentage of responses Percentage of (2998) cases
I would stop leaving the house for food, medicine, or healthcare 1341 30.95568 44.72982
I would stop leaving the house for other shops or services 1054 24.33056 35.15677
I would stop visiting family 698 16.11265 23.28219
I would stop visiting friends 447 10.31856 14.90994
I would stop outdoor walks or exercise 792 18.28255 26.41761
Other 0 0.00000 0.00000
Total 4332 100.00000 144.49633

All countries

Option Frequency Percentage of responses Percentage of (63850) cases
I would stop leaving the house for food, medicine, or healthcare 25903 23.1231365 40.5685200
I would stop leaving the house for other shops or services 27709 24.7353198 43.3970243
I would stop visiting family 20352 18.1678599 31.8747063
I would stop visiting friends 15950 14.2382746 24.9804229
I would stop outdoor walks or exercise 22107 19.7345164 34.6233359
Other 1 0.0008927 0.0015662
Total 112022 100.0000000 175.4455756

Proximity / social distancing

dat$proximityAsFactor <-
  factor(dat$proximity,
         levels = 1:6,
         labels = attr(dat$proximity, "labels"),
         ordered=TRUE);

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");

  cat(
    kableExtra::kable_styling(
      knitr::kable(
        rosetta::freq(dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "proximityAsFactor"])$dat
      )
    )
  );
  
}

Australia

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 5 1.0 1.0 1.0
Rarely 9 1.7 1.7 2.7
Sometimes 59 11.3 11.3 14.0
Often 132 25.2 25.3 39.3
(Almost) always 312 59.7 59.8 99.0
I am never in public places 5 1.0 1.0 100.0
Total valid 522 99.8 100.0
NA (missing) 1 0.2
Total 523 100.0

Belgium

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 13 0.2 0.2 0.2
Rarely 42 0.6 0.6 0.8
Sometimes 205 2.9 2.9 3.7
Often 1255 17.8 17.8 21.5
(Almost) always 5233 74.2 74.4 95.9
I am never in public places 287 4.1 4.1 100.0
Total valid 7035 99.8 100.0
NA (missing) 17 0.2
Total 7052 100.0

Brasil

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 12 0.8 0.9 0.9
Rarely 21 1.5 1.5 2.4
Sometimes 113 8.0 8.1 10.5
Often 265 18.7 19.0 29.4
(Almost) always 736 52.0 52.7 82.2
I am never in public places 249 17.6 17.8 100.0
Total valid 1396 98.7 100.0
NA (missing) 19 1.3
Total 1415 100.0

Canada

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 1 0.3 0.3 0.3
Rarely 6 1.9 1.9 2.2
Sometimes 28 8.7 8.7 10.9
Often 53 16.4 16.5 27.3
(Almost) always 227 70.3 70.5 97.8
I am never in public places 7 2.2 2.2 100.0
Total valid 322 99.7 100.0
NA (missing) 1 0.3
Total 323 100.0

Switzerland

Frequencies Perc.Total Perc.Valid Cumulative
Rarely 2 1.8 1.8 1.8
Sometimes 10 8.9 8.9 10.7
Often 36 32.1 32.1 42.9
(Almost) always 62 55.4 55.4 98.2
I am never in public places 2 1.8 1.8 100.0
Total valid 112 100.0 100.0

China

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 5 4.8 4.8 4.8
Rarely 26 25.0 25.0 29.8
Sometimes 25 24.0 24.0 53.8
Often 22 21.2 21.2 75.0
(Almost) always 26 25.0 25.0 100.0
Total valid 104 100.0 100.0

Cyprus

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 1 0.5 0.5 0.5
Rarely 2 1.0 1.0 1.5
Sometimes 17 8.5 8.5 10.0
Often 67 33.3 33.5 43.5
(Almost) always 108 53.7 54.0 97.5
I am never in public places 5 2.5 2.5 100.0
Total valid 200 99.5 100.0
NA (missing) 1 0.5
Total 201 100.0

Germany

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 3 0.8 0.8 0.8
Rarely 13 3.4 3.4 4.2
Sometimes 22 5.7 5.8 9.9
Often 87 22.6 22.8 32.7
(Almost) always 246 63.9 64.4 97.1
I am never in public places 11 2.9 2.9 100.0
Total valid 382 99.2 100.0
NA (missing) 3 0.8
Total 385 100.0

Spain

Frequencies Perc.Total Perc.Valid Cumulative
Rarely 3 1.1 1.1 1.1
Sometimes 22 7.8 7.8 8.9
Often 53 18.9 18.9 27.8
(Almost) always 192 68.3 68.3 96.1
I am never in public places 11 3.9 3.9 100.0
Total valid 281 100.0 100.0

France

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 5 1.5 1.5 1.5
Rarely 9 2.6 2.7 4.1
Sometimes 23 6.8 6.8 10.9
Often 74 21.8 21.9 32.8
(Almost) always 204 60.0 60.4 93.2
I am never in public places 23 6.8 6.8 100.0
Total valid 338 99.4 100.0
NA (missing) 2 0.6
Total 340 100.0

Indonesia

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 8 1.8 1.8 1.8
Rarely 18 4.1 4.1 5.9
Sometimes 83 18.9 19.0 24.9
Often 106 24.1 24.3 49.2
(Almost) always 193 43.9 44.2 93.4
I am never in public places 29 6.6 6.6 100.0
Total valid 437 99.3 100.0
NA (missing) 3 0.7
Total 440 100.0

Ireland (Republic)

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 2 0.3 0.3 0.3
Rarely 6 1.0 1.0 1.4
Sometimes 42 7.2 7.2 8.5
Often 89 15.2 15.2 23.8
(Almost) always 426 72.6 72.8 96.6
I am never in public places 20 3.4 3.4 100.0
Total valid 585 99.7 100.0
NA (missing) 2 0.3
Total 587 100.0

India

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 4 1.6 1.6 1.6
Rarely 16 6.4 6.5 8.1
Sometimes 34 13.5 13.8 21.9
Often 66 26.3 26.7 48.6
(Almost) always 96 38.2 38.9 87.4
I am never in public places 31 12.4 12.6 100.0
Total valid 247 98.4 100.0
NA (missing) 4 1.6
Total 251 100.0

Italy

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 47 2.1 2.1 2.1
Rarely 56 2.5 2.5 4.6
Sometimes 245 10.9 11.0 15.6
Often 551 24.6 24.7 40.3
(Almost) always 1284 57.3 57.5 97.8
I am never in public places 49 2.2 2.2 100.0
Total valid 2232 99.6 100.0
NA (missing) 8 0.4
Total 2240 100.0

Mexico

Frequencies Perc.Total Perc.Valid Cumulative
Rarely 4 3.7 3.7 3.7
Sometimes 5 4.6 4.6 8.3
Often 20 18.3 18.5 26.9
(Almost) always 67 61.5 62.0 88.9
I am never in public places 12 11.0 11.1 100.0
Total valid 108 99.1 100.0
NA (missing) 1 0.9
Total 109 100.0

Netherlands

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 41 0.3 0.3 0.3
Rarely 74 0.5 0.5 0.7
Sometimes 420 2.7 2.7 3.5
Often 3253 21.2 21.2 24.7
(Almost) always 11095 72.2 72.3 97.0
I am never in public places 463 3.0 3.0 100.0
Total valid 15346 99.8 100.0
NA (missing) 30 0.2
Total 15376 100.0

New Zealand

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 140 1.0 1.0 1.0
Rarely 401 2.7 2.8 3.7
Sometimes 2327 15.9 16.0 19.7
Often 4326 29.6 29.8 49.5
(Almost) always 7217 49.4 49.6 99.1
I am never in public places 127 0.9 0.9 100.0
Total valid 14538 99.5 100.0
NA (missing) 77 0.5
Total 14615 100.0

Pakistan

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 2 2.0 2 2
Rarely 15 14.9 15 17
Sometimes 24 23.8 24 41
Often 32 31.7 32 73
(Almost) always 21 20.8 21 94
I am never in public places 6 5.9 6 100
Total valid 100 99.0 100
NA (missing) 1 1.0
Total 101 100.0

Portugal

Frequencies Perc.Total Perc.Valid Cumulative
Sometimes 11 9.4 9.6 9.6
Often 34 29.1 29.6 39.1
(Almost) always 67 57.3 58.3 97.4
I am never in public places 3 2.6 2.6 100.0
Total valid 115 98.3 100.0
NA (missing) 2 1.7
Total 117 100.0

Romania

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 117 1.9 1.9 1.9
Rarely 212 3.4 3.4 5.3
Sometimes 666 10.8 10.8 16.2
Often 1357 21.9 22.0 38.2
(Almost) always 3562 57.6 57.9 96.1
I am never in public places 243 3.9 3.9 100.0
Total valid 6157 99.5 100.0
NA (missing) 30 0.5
Total 6187 100.0

Turkey

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 20 1.8 1.8 1.8
Rarely 54 4.7 4.8 6.5
Sometimes 146 12.8 12.9 19.4
Often 358 31.5 31.6 51.0
(Almost) always 383 33.7 33.8 84.8
I am never in public places 172 15.1 15.2 100.0
Total valid 1133 99.6 100.0
NA (missing) 4 0.4
Total 1137 100.0

United Kingdom

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 45 0.6 0.6 0.6
Rarely 117 1.7 1.7 2.3
Sometimes 627 9.0 9.0 11.3
Often 1693 24.3 24.3 35.6
(Almost) always 4230 60.6 60.7 96.4
I am never in public places 252 3.6 3.6 100.0
Total valid 6964 99.8 100.0
NA (missing) 14 0.2
Total 6978 100.0

United States

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 27 0.9 0.9 0.9
Rarely 36 1.2 1.2 2.1
Sometimes 164 5.5 5.5 7.6
Often 558 18.6 18.7 26.3
(Almost) always 2092 69.8 70.0 96.2
I am never in public places 113 3.8 3.8 100.0
Total valid 2990 99.7 100.0
NA (missing) 8 0.3
Total 2998 100.0

All countries

Frequencies Perc.Total Perc.Valid Cumulative
(Almost) never 547 0.9 0.9 0.9
Rarely 1221 1.9 1.9 2.8
Sometimes 5507 8.6 8.7 11.4
Often 14981 23.5 23.6 35.0
(Almost) always 39076 61.2 61.5 96.5
I am never in public places 2253 3.5 3.5 100.0
Total valid 63585 99.6 100.0
NA (missing) 265 0.4
Total 63850 100.0

Hand washing situations

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");
  
  cat(
    kableExtra::kable_styling(
      knitr::kable(
        labeledMultiResponseTable(
          grep(countryRegexes[i], dat$country_aggregated),
          "^hwFrequency_"
        )
      )
    )
  );

}

Australia

Option Frequency Percentage of responses Percentage of (523) cases
After I have been in direct contact with somone else 335 16.4862205 64.053537
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 439 21.6043307 83.938815
Before/After I have touched my face, nose, mouth 178 8.7598425 34.034417
After I sneeze or cough 244 12.0078740 46.653920
On entering my home, place of work, or other building I will be spending some time in 410 20.1771654 78.393882
Before I handle or eat food 407 20.0295276 77.820268
I never or only occasionally wash/clean my hands 19 0.9350394 3.632887
Total 2032 100.0000000 388.527725

Belgium

Option Frequency Percentage of responses Percentage of (7052) cases
After I have been in direct contact with somone else 4729 19.176804 67.058990
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 5846 23.706407 82.898469
Before/After I have touched my face, nose, mouth 1350 5.474453 19.143505
After I sneeze or cough 2386 9.675588 33.834373
On entering my home, place of work, or other building I will be spending some time in 4764 19.318735 67.555303
Before I handle or eat food 5330 21.613950 75.581395
I never or only occasionally wash/clean my hands 255 1.034063 3.615995
Total 24660 100.000000 349.688032

Brasil

Option Frequency Percentage of responses Percentage of (1415) cases
After I have been in direct contact with somone else 917 16.3808503 64.805654
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 1202 21.4719543 84.946996
Before/After I have touched my face, nose, mouth 637 11.3790640 45.017668
After I sneeze or cough 628 11.2182922 44.381625
On entering my home, place of work, or other building I will be spending some time in 1169 20.8824580 82.614841
Before I handle or eat food 1028 18.3637013 72.650177
I never or only occasionally wash/clean my hands 17 0.3036799 1.201413
Total 5598 100.0000000 395.618375

Canada

Option Frequency Percentage of responses Percentage of (323) cases
After I have been in direct contact with somone else 244 17.7454545 75.541796
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 289 21.0181818 89.473684
Before/After I have touched my face, nose, mouth 137 9.9636364 42.414861
After I sneeze or cough 156 11.3454545 48.297214
On entering my home, place of work, or other building I will be spending some time in 281 20.4363636 86.996904
Before I handle or eat food 261 18.9818182 80.804954
I never or only occasionally wash/clean my hands 7 0.5090909 2.167183
Total 1375 100.0000000 425.696594

Switzerland

Option Frequency Percentage of responses Percentage of (112) cases
After I have been in direct contact with somone else 70 16.5876777 62.500000
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 98 23.2227488 87.500000
Before/After I have touched my face, nose, mouth 28 6.6350711 25.000000
After I sneeze or cough 49 11.6113744 43.750000
On entering my home, place of work, or other building I will be spending some time in 94 22.2748815 83.928571
Before I handle or eat food 81 19.1943128 72.321429
I never or only occasionally wash/clean my hands 2 0.4739336 1.785714
Total 422 100.0000000 376.785714

China

Option Frequency Percentage of responses Percentage of (104) cases
After I have been in direct contact with somone else 46 13.411079 44.230769
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 70 20.408163 67.307692
Before/After I have touched my face, nose, mouth 35 10.204082 33.653846
After I sneeze or cough 47 13.702624 45.192308
On entering my home, place of work, or other building I will be spending some time in 63 18.367347 60.576923
Before I handle or eat food 73 21.282799 70.192308
I never or only occasionally wash/clean my hands 9 2.623907 8.653846
Total 343 100.000000 329.807692

Cyprus

Option Frequency Percentage of responses Percentage of (201) cases
After I have been in direct contact with somone else 133 16.1016949 66.169154
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 171 20.7021792 85.074627
Before/After I have touched my face, nose, mouth 85 10.2905569 42.288557
After I sneeze or cough 98 11.8644068 48.756219
On entering my home, place of work, or other building I will be spending some time in 172 20.8232446 85.572139
Before I handle or eat food 164 19.8547215 81.592040
I never or only occasionally wash/clean my hands 3 0.3631961 1.492537
Total 826 100.0000000 410.945274

Germany

Option Frequency Percentage of responses Percentage of (385) cases
After I have been in direct contact with somone else 232 16.9219548 60.259740
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 310 22.6112327 80.519481
Before/After I have touched my face, nose, mouth 96 7.0021882 24.935065
After I sneeze or cough 117 8.5339168 30.389610
On entering my home, place of work, or other building I will be spending some time in 318 23.1947484 82.597403
Before I handle or eat food 291 21.2253829 75.584416
I never or only occasionally wash/clean my hands 7 0.5105762 1.818182
Total 1371 100.0000000 356.103896

Spain

Option Frequency Percentage of responses Percentage of (281) cases
After I have been in direct contact with somone else 176 17.904374 62.633452
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 229 23.296033 81.494662
Before/After I have touched my face, nose, mouth 68 6.917599 24.199288
After I sneeze or cough 78 7.934893 27.758007
On entering my home, place of work, or other building I will be spending some time in 225 22.889115 80.071174
Before I handle or eat food 202 20.549339 71.886121
I never or only occasionally wash/clean my hands 5 0.508647 1.779359
Total 983 100.000000 349.822064

France

Option Frequency Percentage of responses Percentage of (340) cases
After I have been in direct contact with somone else 205 17.358171 60.294118
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 284 24.047417 83.529412
Before/After I have touched my face, nose, mouth 87 7.366638 25.588235
After I sneeze or cough 103 8.721422 30.294118
On entering my home, place of work, or other building I will be spending some time in 250 21.168501 73.529412
Before I handle or eat food 247 20.914479 72.647059
I never or only occasionally wash/clean my hands 5 0.423370 1.470588
Total 1181 100.000000 347.352941

Indonesia

Option Frequency Percentage of responses Percentage of (440) cases
After I have been in direct contact with somone else 275 16.9126691 62.500000
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 332 20.4182042 75.454545
Before/After I have touched my face, nose, mouth 177 10.8856089 40.227273
After I sneeze or cough 160 9.8400984 36.363636
On entering my home, place of work, or other building I will be spending some time in 339 20.8487085 77.045455
Before I handle or eat food 328 20.1722017 74.545455
I never or only occasionally wash/clean my hands 15 0.9225092 3.409091
Total 1626 100.0000000 369.545455

Ireland (Republic)

Option Frequency Percentage of responses Percentage of (587) cases
After I have been in direct contact with somone else 415 17.3931266 70.698467
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 500 20.9555742 85.178876
Before/After I have touched my face, nose, mouth 215 9.0108969 36.626917
After I sneeze or cough 292 12.2380553 49.744463
On entering my home, place of work, or other building I will be spending some time in 501 20.9974853 85.349233
Before I handle or eat food 446 18.6923722 75.979557
I never or only occasionally wash/clean my hands 17 0.7124895 2.896082
Total 2386 100.0000000 406.473594

India

Option Frequency Percentage of responses Percentage of (251) cases
After I have been in direct contact with somone else 159 17.358079 63.34661
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 187 20.414847 74.50199
Before/After I have touched my face, nose, mouth 99 10.807860 39.44223
After I sneeze or cough 101 11.026201 40.23904
On entering my home, place of work, or other building I will be spending some time in 193 21.069869 76.89243
Before I handle or eat food 166 18.122271 66.13546
I never or only occasionally wash/clean my hands 11 1.200873 4.38247
Total 916 100.000000 364.94024

Italy

Option Frequency Percentage of responses Percentage of (2240) cases
After I have been in direct contact with somone else 1452 17.451923 64.821429
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 1867 22.439904 83.348214
Before/After I have touched my face, nose, mouth 699 8.401442 31.205357
After I sneeze or cough 780 9.375000 34.821429
On entering my home, place of work, or other building I will be spending some time in 1827 21.959135 81.562500
Before I handle or eat food 1610 19.350962 71.875000
I never or only occasionally wash/clean my hands 85 1.021635 3.794643
Total 8320 100.000000 371.428571

Mexico

Option Frequency Percentage of responses Percentage of (109) cases
After I have been in direct contact with somone else 80 17.3913043 73.3944954
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 93 20.2173913 85.3211009
Before/After I have touched my face, nose, mouth 58 12.6086957 53.2110092
After I sneeze or cough 45 9.7826087 41.2844037
On entering my home, place of work, or other building I will be spending some time in 91 19.7826087 83.4862385
Before I handle or eat food 92 20.0000000 84.4036697
I never or only occasionally wash/clean my hands 1 0.2173913 0.9174312
Total 460 100.0000000 422.0183486

Netherlands

Option Frequency Percentage of responses Percentage of (15376) cases
After I have been in direct contact with somone else 9746 17.607631 63.384495
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 12625 22.808983 82.108481
Before/After I have touched my face, nose, mouth 3081 5.566295 20.037721
After I sneeze or cough 6025 10.885079 39.184443
On entering my home, place of work, or other building I will be spending some time in 11108 20.068291 72.242456
Before I handle or eat food 12211 22.061029 79.415973
I never or only occasionally wash/clean my hands 555 1.002692 3.609521
Total 55351 100.000000 359.983091

New Zealand

Option Frequency Percentage of responses Percentage of (14615) cases
After I have been in direct contact with somone else 9100 16.434002 62.264796
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 12012 21.692883 82.189531
Before/After I have touched my face, nose, mouth 4172 7.534358 28.546014
After I sneeze or cough 6580 11.883048 45.022237
On entering my home, place of work, or other building I will be spending some time in 11365 20.524443 77.762573
Before I handle or eat food 11364 20.522637 77.755730
I never or only occasionally wash/clean my hands 780 1.408629 5.336983
Total 55373 100.000000 378.877865

Pakistan

Option Frequency Percentage of responses Percentage of (101) cases
After I have been in direct contact with somone else 50 17.301038 49.504950
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 63 21.799308 62.376238
Before/After I have touched my face, nose, mouth 24 8.304498 23.762376
After I sneeze or cough 23 7.958477 22.772277
On entering my home, place of work, or other building I will be spending some time in 61 21.107266 60.396040
Before I handle or eat food 64 22.145329 63.366337
I never or only occasionally wash/clean my hands 4 1.384083 3.960396
Total 289 100.000000 286.138614

Portugal

Option Frequency Percentage of responses Percentage of (117) cases
After I have been in direct contact with somone else 85 19.4508009 72.649573
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 96 21.9679634 82.051282
Before/After I have touched my face, nose, mouth 27 6.1784897 23.076923
After I sneeze or cough 37 8.4668192 31.623932
On entering my home, place of work, or other building I will be spending some time in 100 22.8832952 85.470085
Before I handle or eat food 90 20.5949657 76.923077
I never or only occasionally wash/clean my hands 2 0.4576659 1.709402
Total 437 100.0000000 373.504274

Romania

Option Frequency Percentage of responses Percentage of (6187) cases
After I have been in direct contact with somone else 3705 15.7746839 59.883627
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 5301 22.5699323 85.679651
Before/After I have touched my face, nose, mouth 2081 8.8602205 33.635041
After I sneeze or cough 2203 9.3796568 35.606918
On entering my home, place of work, or other building I will be spending some time in 5347 22.7657853 86.423145
Before I handle or eat food 4626 19.6960020 74.769678
I never or only occasionally wash/clean my hands 224 0.9537191 3.620495
Total 23487 100.0000000 379.618555

Turkey

Option Frequency Percentage of responses Percentage of (1137) cases
After I have been in direct contact with somone else 791 17.8233438 69.56904
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 993 22.3749437 87.33509
Before/After I have touched my face, nose, mouth 501 11.2888689 44.06332
After I sneeze or cough 526 11.8521857 46.26209
On entering my home, place of work, or other building I will be spending some time in 850 19.1527715 74.75814
Before I handle or eat food 763 17.1924290 67.10642
I never or only occasionally wash/clean my hands 14 0.3154574 1.23131
Total 4438 100.0000000 390.32542

United Kingdom

Option Frequency Percentage of responses Percentage of (6978) cases
After I have been in direct contact with somone else 5164 18.2203091 74.00401
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 6065 21.3993367 86.91602
Before/After I have touched my face, nose, mouth 2462 8.6867546 35.28232
After I sneeze or cough 3182 11.2271540 45.60046
On entering my home, place of work, or other building I will be spending some time in 5951 20.9971068 85.28232
Before I handle or eat food 5253 18.5343307 75.27945
I never or only occasionally wash/clean my hands 265 0.9350081 3.79765
Total 28342 100.0000000 406.16222

United States

Option Frequency Percentage of responses Percentage of (2998) cases
After I have been in direct contact with somone else 2400 18.2815356 80.053369
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 2663 20.2848873 88.825884
Before/After I have touched my face, nose, mouth 1484 11.3040829 49.499666
After I sneeze or cough 1551 11.8144424 51.734490
On entering my home, place of work, or other building I will be spending some time in 2475 18.8528336 82.555037
Before I handle or eat food 2459 18.7309567 82.021348
I never or only occasionally wash/clean my hands 96 0.7312614 3.202135
Total 13128 100.0000000 437.891928

All countries

Option Frequency Percentage of responses Percentage of (63850) cases
After I have been in direct contact with somone else 41654 17.327964 65.237275
After I have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) 53282 22.165184 83.448708
Before/After I have touched my face, nose, mouth 18440 7.670996 28.880188
After I sneeze or cough 26171 10.887073 40.988254
On entering my home, place of work, or other building I will be spending some time in 49438 20.566090 77.428348
Before I handle or eat food 48916 20.348939 76.610807
I never or only occasionally wash/clean my hands 2485 1.033754 3.891934
Total 240386 100.000000 376.485513

Hand washing procedure

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");
  
  cat(
    kableExtra::kable_styling(
      knitr::kable(
        labeledMultiResponseTable(
          grep(countryRegexes[i], dat$country_aggregated),
          "^hwIntensity_"
        )
      )
    )
  );
  
}

Australia

Option Frequency Percentage of responses Percentage of (523) cases
I wash for at least 20 seconds 368 34.8484848 70.3632887
I normally use soap or handsanitiser 485 45.9280303 92.7342256
I clean under my nails and between my fingers 200 18.9393939 38.2409178
I don’t do any of the above 3 0.2840909 0.5736138
Total 1056 100.0000000 201.9120459

Belgium

Option Frequency Percentage of responses Percentage of (7052) cases
I wash for at least 20 seconds 4799 32.4366340 68.0516166
I normally use soap or handsanitiser 6563 44.3595809 93.0657969
I clean under my nails and between my fingers 3363 22.7306522 47.6885990
I don’t do any of the above 70 0.4731328 0.9926262
Total 14795 100.0000000 209.7986387

Brasil

Option Frequency Percentage of responses Percentage of (1415) cases
I wash for at least 20 seconds 889 31.7613433 62.8268551
I normally use soap or handsanitiser 1203 42.9796356 85.0176678
I clean under my nails and between my fingers 695 24.8302965 49.1166078
I don’t do any of the above 12 0.4287245 0.8480565
Total 2799 100.0000000 197.8091873

Canada

Option Frequency Percentage of responses Percentage of (323) cases
I wash for at least 20 seconds 253 34.4217687 78.328173
I normally use soap or handsanitiser 303 41.2244898 93.808049
I clean under my nails and between my fingers 177 24.0816327 54.798762
I don’t do any of the above 2 0.2721088 0.619195
Total 735 100.0000000 227.554180

Switzerland

Option Frequency Percentage of responses Percentage of (112) cases
I wash for at least 20 seconds 69 29.8701299 61.607143
I normally use soap or handsanitiser 103 44.5887446 91.964286
I clean under my nails and between my fingers 57 24.6753247 50.892857
I don’t do any of the above 2 0.8658009 1.785714
Total 231 100.0000000 206.250000

China

Option Frequency Percentage of responses Percentage of (104) cases
I wash for at least 20 seconds 60 32.085561 57.692308
I normally use soap or handsanitiser 75 40.106952 72.115385
I clean under my nails and between my fingers 42 22.459893 40.384615
I don’t do any of the above 10 5.347594 9.615385
Total 187 100.000000 179.807692

Cyprus

Option Frequency Percentage of responses Percentage of (201) cases
I wash for at least 20 seconds 134 31.38173 66.66667
I normally use soap or handsanitiser 186 43.55972 92.53731
I clean under my nails and between my fingers 107 25.05855 53.23383
I don’t do any of the above 0 0.00000 0.00000
Total 427 100.00000 212.43781

Germany

Option Frequency Percentage of responses Percentage of (385) cases
I wash for at least 20 seconds 289 34.8192771 75.0649351
I normally use soap or handsanitiser 351 42.2891566 91.1688312
I clean under my nails and between my fingers 187 22.5301205 48.5714286
I don’t do any of the above 3 0.3614458 0.7792208
Total 830 100.0000000 215.5844156

Spain

Option Frequency Percentage of responses Percentage of (281) cases
I wash for at least 20 seconds 176 32.7137546 62.633452
I normally use soap or handsanitiser 253 47.0260223 90.035587
I clean under my nails and between my fingers 106 19.7026022 37.722420
I don’t do any of the above 3 0.5576208 1.067616
Total 538 100.0000000 191.459075

France

Option Frequency Percentage of responses Percentage of (340) cases
I wash for at least 20 seconds 213 32.2727273 62.647059
I normally use soap or handsanitiser 308 46.6666667 90.588235
I clean under my nails and between my fingers 133 20.1515152 39.117647
I don’t do any of the above 6 0.9090909 1.764706
Total 660 100.0000000 194.117647

Indonesia

Option Frequency Percentage of responses Percentage of (440) cases
I wash for at least 20 seconds 277 30.1086957 62.954546
I normally use soap or handsanitiser 393 42.7173913 89.318182
I clean under my nails and between my fingers 241 26.1956522 54.772727
I don’t do any of the above 9 0.9782609 2.045454
Total 920 100.0000000 209.090909

Ireland (Republic)

Option Frequency Percentage of responses Percentage of (587) cases
I wash for at least 20 seconds 470 36.2095532 80.0681431
I normally use soap or handsanitiser 526 40.5238829 89.6081772
I clean under my nails and between my fingers 299 23.0354391 50.9369676
I don’t do any of the above 3 0.2311248 0.5110733
Total 1298 100.0000000 221.1243612

India

Option Frequency Percentage of responses Percentage of (251) cases
I wash for at least 20 seconds 166 33.400402 66.135458
I normally use soap or handsanitiser 208 41.851107 82.868526
I clean under my nails and between my fingers 119 23.943662 47.410359
I don’t do any of the above 4 0.804829 1.593625
Total 497 100.000000 198.007968

Italy

Option Frequency Percentage of responses Percentage of (2240) cases
I wash for at least 20 seconds 1215 30.963303 54.241071
I normally use soap or handsanitiser 2020 51.478084 90.178571
I clean under my nails and between my fingers 649 16.539246 28.973214
I don’t do any of the above 40 1.019368 1.785714
Total 3924 100.000000 175.178571

Mexico

Option Frequency Percentage of responses Percentage of (109) cases
I wash for at least 20 seconds 79 36.574074 72.4770642
I normally use soap or handsanitiser 94 43.518518 86.2385321
I clean under my nails and between my fingers 42 19.444444 38.5321101
I don’t do any of the above 1 0.462963 0.9174312
Total 216 100.000000 198.1651376

Netherlands

Option Frequency Percentage of responses Percentage of (15376) cases
I wash for at least 20 seconds 10187 31.0730844 66.252601
I normally use soap or handsanitiser 14052 42.8623719 91.389178
I clean under my nails and between my fingers 8327 25.3995852 54.155827
I don’t do any of the above 218 0.6649585 1.417794
Total 32784 100.0000000 213.215401

New Zealand

Option Frequency Percentage of responses Percentage of (14615) cases
I wash for at least 20 seconds 10249 34.6472398 70.126582
I normally use soap or handsanitiser 13596 45.9619350 93.027711
I clean under my nails and between my fingers 5580 18.8634597 38.179952
I don’t do any of the above 156 0.5273655 1.067397
Total 29581 100.0000000 202.401642

Pakistan

Option Frequency Percentage of responses Percentage of (101) cases
I wash for at least 20 seconds 51 31.481482 50.495050
I normally use soap or handsanitiser 83 51.234568 82.178218
I clean under my nails and between my fingers 26 16.049383 25.742574
I don’t do any of the above 2 1.234568 1.980198
Total 162 100.000000 160.396040

Portugal

Option Frequency Percentage of responses Percentage of (117) cases
I wash for at least 20 seconds 66 30.555556 56.4102564
I normally use soap or handsanitiser 99 45.833333 84.6153846
I clean under my nails and between my fingers 50 23.148148 42.7350427
I don’t do any of the above 1 0.462963 0.8547009
Total 216 100.000000 184.6153846

Romania

Option Frequency Percentage of responses Percentage of (6187) cases
I wash for at least 20 seconds 4604 33.8554305 74.414094
I normally use soap or handsanitiser 5453 40.0985367 88.136415
I clean under my nails and between my fingers 3491 25.6710052 56.424762
I don’t do any of the above 51 0.3750276 0.824309
Total 13599 100.0000000 219.799580

Turkey

Option Frequency Percentage of responses Percentage of (1137) cases
I wash for at least 20 seconds 883 36.5177833 77.6605101
I normally use soap or handsanitiser 906 37.4689826 79.6833773
I clean under my nails and between my fingers 622 25.7237386 54.7053650
I don’t do any of the above 7 0.2894955 0.6156552
Total 2418 100.0000000 212.6649077

United Kingdom

Option Frequency Percentage of responses Percentage of (6978) cases
I wash for at least 20 seconds 5308 35.6098215 76.0676412
I normally use soap or handsanitiser 6471 43.4120488 92.7343078
I clean under my nails and between my fingers 3067 20.5756071 43.9524219
I don’t do any of the above 60 0.4025225 0.8598452
Total 14906 100.0000000 213.6142161

United States

Option Frequency Percentage of responses Percentage of (2998) cases
I wash for at least 20 seconds 2421 35.7079646 80.753836
I normally use soap or handsanitiser 2771 40.8702065 92.428286
I clean under my nails and between my fingers 1556 22.9498525 51.901268
I don’t do any of the above 32 0.4719764 1.067378
Total 6780 100.0000000 226.150767

All countries

Option Frequency Percentage of responses Percentage of (63850) cases
I wash for at least 20 seconds 44537 33.3752988 69.752545
I normally use soap or handsanitiser 58149 43.5759088 91.071261
I clean under my nails and between my fingers 30013 22.4912509 47.005482
I don’t do any of the above 744 0.5575414 1.165231
Total 133443 100.0000000 208.994518

Number of additional questions

We asked tool users whether they would be willing to answer a number of additional questions that we use to improve our tool (the “Determinant Mapping Questions”). This is how many questions the tool users were willing to answer:

for (i in countryRegexIndices) {
  
  cat("\n\n#### ", countryRegexLabels[i], "\n\n");

  cat(
    kableExtra::kable_styling(
      knitr::kable(
        rosetta::freq(dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "DMQslider_nr"])$dat
      )
    )
  );

  cat("\n\n##### Estimates of central tendency and spread\n\n");
  
  ufs::cat0("**Mean**, 99.99% confidence interval: ",
            ufs::formatCI(
              ufs::meanConfInt(
                dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "DMQslider_nr"],
                conf.level=.9999
              )$output$ci
            ),
            " (point estimate = ",
            round(mean(dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "DMQslider_nr"], na.rm=TRUE), 2),
            ")\n\n",
            "**Standard deviation**, point estimate: ",
            sd(dat[grep(countryRegexes[i],
                               dat$country_aggregated),
                          "DMQslider_nr"], na.rm=TRUE), "\n\n");
  
}

Australia

Frequencies Perc.Total Perc.Valid Cumulative
0 33 6.3 6.3 6.3
2 12 2.3 2.3 8.6
4 368 70.4 70.4 79.0
6 11 2.1 2.1 81.1
8 12 2.3 2.3 83.4
10 30 5.7 5.7 89.1
12 4 0.8 0.8 89.9
14 2 0.4 0.4 90.2
16 5 1.0 1.0 91.2
20 46 8.8 8.8 100.0
Total valid 523 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.94; 6.66] (point estimate = 5.8)

Standard deviation, point estimate: 5.018609

Belgium

Frequencies Perc.Total Perc.Valid Cumulative
0 199 2.8 2.8 2.8
2 136 1.9 1.9 4.8
4 4132 58.6 58.6 63.3
6 297 4.2 4.2 67.6
8 264 3.7 3.7 71.3
10 848 12.0 12.0 83.3
12 155 2.2 2.2 85.5
14 95 1.3 1.3 86.9
16 87 1.2 1.2 88.1
18 38 0.5 0.5 88.6
20 801 11.4 11.4 100.0
Total valid 7052 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [6.9; 7.41] (point estimate = 7.16)

Standard deviation, point estimate: 5.507897

Brasil

Frequencies Perc.Total Perc.Valid Cumulative
0 26 1.8 1.8 1.8
2 19 1.3 1.3 3.2
4 945 66.8 66.8 70.0
6 54 3.8 3.8 73.8
8 47 3.3 3.3 77.1
10 125 8.8 8.8 85.9
12 18 1.3 1.3 87.2
14 11 0.8 0.8 88.0
16 11 0.8 0.8 88.8
18 5 0.4 0.4 89.1
20 154 10.9 10.9 100.0
Total valid 1415 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [6.15; 7.25] (point estimate = 6.7)

Standard deviation, point estimate: 5.309764

Canada

Frequencies Perc.Total Perc.Valid Cumulative
0 19 5.9 5.9 5.9
2 5 1.5 1.5 7.4
4 226 70.0 70.0 77.4
6 6 1.9 1.9 79.3
8 6 1.9 1.9 81.1
10 22 6.8 6.8 87.9
12 7 2.2 2.2 90.1
14 4 1.2 1.2 91.3
20 28 8.7 8.7 100.0
Total valid 323 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.84; 7.03] (point estimate = 5.94)

Standard deviation, point estimate: 4.996509

Switzerland

Frequencies Perc.Total Perc.Valid Cumulative
0 4 3.6 3.6 3.6
2 7 6.2 6.2 9.8
4 68 60.7 60.7 70.5
6 9 8.0 8.0 78.6
8 3 2.7 2.7 81.2
10 7 6.2 6.2 87.5
12 1 0.9 0.9 88.4
20 13 11.6 11.6 100.0
Total valid 112 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.25; 8.36] (point estimate = 6.3)

Standard deviation, point estimate: 5.390748

China

Frequencies Perc.Total Perc.Valid Cumulative
0 6 5.8 5.8 5.8
2 2 1.9 1.9 7.7
4 77 74.0 74.0 81.7
6 2 1.9 1.9 83.7
8 3 2.9 2.9 86.5
10 3 2.9 2.9 89.4
12 2 1.9 1.9 91.3
14 1 1.0 1.0 92.3
16 1 1.0 1.0 93.3
18 3 2.9 2.9 96.2
20 4 3.8 3.8 100.0
Total valid 104 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [3.68; 7.21] (point estimate = 5.44)

Standard deviation, point estimate: 4.44563

Cyprus

Frequencies Perc.Total Perc.Valid Cumulative
0 5 2.5 2.5 2.5
2 6 3.0 3.0 5.5
4 138 68.7 68.7 74.1
6 11 5.5 5.5 79.6
8 5 2.5 2.5 82.1
10 14 7.0 7.0 89.1
12 3 1.5 1.5 90.5
14 1 0.5 0.5 91.0
16 1 0.5 0.5 91.5
20 17 8.5 8.5 100.0
Total valid 201 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.7; 7.4] (point estimate = 6.05)

Standard deviation, point estimate: 4.83503

Germany

Frequencies Perc.Total Perc.Valid Cumulative
0 25 6.5 6.5 6.5
2 23 6.0 6.0 12.5
4 229 59.5 59.5 71.9
6 23 6.0 6.0 77.9
8 15 3.9 3.9 81.8
10 23 6.0 6.0 87.8
12 5 1.3 1.3 89.1
14 3 0.8 0.8 89.9
16 2 0.5 0.5 90.4
20 37 9.6 9.6 100.0
Total valid 385 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.99; 7.08] (point estimate = 6.04)

Standard deviation, point estimate: 5.213037

Spain

Frequencies Perc.Total Perc.Valid Cumulative
0 7 2.5 2.5 2.5
2 6 2.1 2.1 4.6
4 162 57.7 57.7 62.3
6 17 6.0 6.0 68.3
8 10 3.6 3.6 71.9
10 30 10.7 10.7 82.6
12 8 2.8 2.8 85.4
14 2 0.7 0.7 86.1
16 1 0.4 0.4 86.5
18 1 0.4 0.4 86.8
20 37 13.2 13.2 100.0
Total valid 281 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.93; 8.59] (point estimate = 7.26)

Standard deviation, point estimate: 5.663806

France

Frequencies Perc.Total Perc.Valid Cumulative
0 24 7.1 7.1 7.1
2 7 2.1 2.1 9.1
4 220 64.7 64.7 73.8
6 14 4.1 4.1 77.9
8 7 2.1 2.1 80.0
10 27 7.9 7.9 87.9
12 3 0.9 0.9 88.8
14 3 0.9 0.9 89.7
16 1 0.3 0.3 90.0
18 1 0.3 0.3 90.3
20 33 9.7 9.7 100.0
Total valid 340 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.99; 7.23] (point estimate = 6.11)

Standard deviation, point estimate: 5.244519

Indonesia

Frequencies Perc.Total Perc.Valid Cumulative
0 11 2.5 2.5 2.5
2 12 2.7 2.7 5.2
4 280 63.6 63.8 69.0
6 33 7.5 7.5 76.5
8 11 2.5 2.5 79.0
10 26 5.9 5.9 85.0
12 3 0.7 0.7 85.6
14 5 1.1 1.1 86.8
16 2 0.5 0.5 87.2
18 4 0.9 0.9 88.2
20 52 11.8 11.8 100.0
Total valid 439 99.8 100.0
NA (missing) 1 0.2
Total 440 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.66; 7.73] (point estimate = 6.7)

Standard deviation, point estimate: 5.520966

Ireland (Republic)

Frequencies Perc.Total Perc.Valid Cumulative
0 25 4.3 4.3 4.3
2 17 2.9 2.9 7.2
4 399 68.0 68.0 75.1
6 18 3.1 3.1 78.2
8 19 3.2 3.2 81.4
10 44 7.5 7.5 88.9
12 9 1.5 1.5 90.5
14 4 0.7 0.7 91.1
16 3 0.5 0.5 91.7
18 4 0.7 0.7 92.3
20 45 7.7 7.7 100.0
Total valid 587 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.2; 6.77] (point estimate = 5.99)

Standard deviation, point estimate: 4.85698

India

Frequencies Perc.Total Perc.Valid Cumulative
0 14 5.6 5.6 5.6
2 5 2.0 2.0 7.6
4 165 65.7 65.7 73.3
6 8 3.2 3.2 76.5
8 9 3.6 3.6 80.1
10 16 6.4 6.4 86.5
12 8 3.2 3.2 89.6
14 3 1.2 1.2 90.8
16 1 0.4 0.4 91.2
18 1 0.4 0.4 91.6
20 21 8.4 8.4 100.0
Total valid 251 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.88; 7.4] (point estimate = 6.14)

Standard deviation, point estimate: 5.048103

Italy

Frequencies Perc.Total Perc.Valid Cumulative
0 160 7.1 7.1 7.1
2 59 2.6 2.6 9.8
4 1426 63.7 63.7 73.4
6 93 4.2 4.2 77.6
8 71 3.2 3.2 80.8
10 169 7.5 7.5 88.3
12 24 1.1 1.1 89.4
14 14 0.6 0.6 90.0
16 11 0.5 0.5 90.5
18 7 0.3 0.3 90.8
20 206 9.2 9.2 100.0
Total valid 2240 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.62; 6.47] (point estimate = 6.05)

Standard deviation, point estimate: 5.160885

Mexico

Frequencies Perc.Total Perc.Valid Cumulative
0 5 4.6 4.6 4.6
4 73 67.0 67.0 71.6
6 2 1.8 1.8 73.4
8 4 3.7 3.7 77.1
10 8 7.3 7.3 84.4
12 2 1.8 1.8 86.2
14 2 1.8 1.8 88.1
16 2 1.8 1.8 89.9
20 11 10.1 10.1 100.0
Total valid 109 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [4.52; 8.69] (point estimate = 6.61)

Standard deviation, point estimate: 5.385196

Netherlands

Frequencies Perc.Total Perc.Valid Cumulative
0 598 3.9 3.9 3.9
2 363 2.4 2.4 6.2
4 10373 67.5 67.5 73.7
6 550 3.6 3.6 77.3
8 550 3.6 3.6 80.9
10 1233 8.0 8.0 88.9
12 271 1.8 1.8 90.6
14 130 0.8 0.8 91.5
16 83 0.5 0.5 92.0
18 31 0.2 0.2 92.2
20 1194 7.8 7.8 100.0
Total valid 15376 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.9; 6.2] (point estimate = 6.05)

Standard deviation, point estimate: 4.809038

New Zealand

Frequencies Perc.Total Perc.Valid Cumulative
0 781 5.3 5.3 5.3
2 381 2.6 2.6 8.0
4 9825 67.2 67.2 75.2
6 531 3.6 3.6 78.8
8 483 3.3 3.3 82.1
10 1204 8.2 8.2 90.4
12 227 1.6 1.6 91.9
14 96 0.7 0.7 92.6
16 59 0.4 0.4 93.0
18 34 0.2 0.2 93.2
20 994 6.8 6.8 100.0
Total valid 14615 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.64; 5.94] (point estimate = 5.79)

Standard deviation, point estimate: 4.63543

Pakistan

Frequencies Perc.Total Perc.Valid Cumulative
0 6 5.9 5.9 5.9
2 2 2.0 2.0 7.9
4 77 76.2 76.2 84.2
6 2 2.0 2.0 86.1
8 2 2.0 2.0 88.1
10 5 5.0 5.0 93.1
12 1 1.0 1.0 94.1
18 1 1.0 1.0 95.0
20 5 5.0 5.0 100.0
Total valid 101 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [3.47; 6.83] (point estimate = 5.15)

Standard deviation, point estimate: 4.160255

Portugal

Frequencies Perc.Total Perc.Valid Cumulative
0 2 1.7 1.7 1.7
2 1 0.9 0.9 2.6
4 74 63.2 63.2 65.8
6 5 4.3 4.3 70.1
8 2 1.7 1.7 71.8
10 11 9.4 9.4 81.2
14 1 0.9 0.9 82.1
16 1 0.9 0.9 82.9
18 1 0.9 0.9 83.8
20 19 16.2 16.2 100.0
Total valid 117 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.26; 9.81] (point estimate = 7.54)

Standard deviation, point estimate: 6.104744

Romania

Frequencies Perc.Total Perc.Valid Cumulative
0 609 9.8 9.8 9.8
2 207 3.3 3.3 13.2
4 3110 50.3 50.3 63.5
6 193 3.1 3.1 66.6
8 123 2.0 2.0 68.6
10 478 7.7 7.7 76.3
12 52 0.8 0.8 77.1
14 54 0.9 0.9 78.0
16 49 0.8 0.8 78.8
18 25 0.4 0.4 79.2
20 1286 20.8 20.8 100.0
Total valid 6186 100.0 100.0
NA (missing) 1 0.0
Total 6187 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [7.44; 8.12] (point estimate = 7.78)

Standard deviation, point estimate: 6.87292

Turkey

Frequencies Perc.Total Perc.Valid Cumulative
0 59 5.2 5.2 5.2
2 80 7.0 7.0 12.2
4 663 58.3 58.3 70.5
6 67 5.9 5.9 76.4
8 33 2.9 2.9 79.3
10 99 8.7 8.7 88.0
12 20 1.8 1.8 89.8
14 7 0.6 0.6 90.4
16 6 0.5 0.5 90.9
18 1 0.1 0.1 91.0
20 102 9.0 9.0 100.0
Total valid 1137 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.53; 6.71] (point estimate = 6.12)

Standard deviation, point estimate: 5.109647

United Kingdom

Frequencies Perc.Total Perc.Valid Cumulative
0 404 5.8 5.8 5.8
2 146 2.1 2.1 7.9
4 4684 67.1 67.1 75.0
6 221 3.2 3.2 78.2
8 195 2.8 2.8 81.0
10 458 6.6 6.6 87.5
12 100 1.4 1.4 89.0
14 43 0.6 0.6 89.6
16 36 0.5 0.5 90.1
18 30 0.4 0.4 90.5
20 661 9.5 9.5 100.0
Total valid 6978 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.87; 6.35] (point estimate = 6.11)

Standard deviation, point estimate: 5.183578

United States

Frequencies Perc.Total Perc.Valid Cumulative
0 125 4.2 4.2 4.2
2 68 2.3 2.3 6.4
4 2184 72.8 72.8 79.3
6 73 2.4 2.4 81.7
8 90 3.0 3.0 84.7
10 160 5.3 5.3 90.1
12 38 1.3 1.3 91.3
14 12 0.4 0.4 91.7
16 5 0.2 0.2 91.9
18 4 0.1 0.1 92.0
20 239 8.0 8.0 100.0
Total valid 2998 100.0 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [5.4; 6.07] (point estimate = 5.73)

Standard deviation, point estimate: 4.731195

All countries

Frequencies Perc.Total Perc.Valid Cumulative
0 3257 5.1 5.1 5.1
2 1622 2.5 2.5 7.6
4 41206 64.5 64.5 72.2
6 2316 3.6 3.6 75.8
8 2017 3.2 3.2 79.0
10 5178 8.1 8.1 87.1
12 984 1.5 1.5 88.6
14 506 0.8 0.8 89.4
16 376 0.6 0.6 90.0
18 200 0.3 0.3 90.3
20 6186 9.7 9.7 100.0
Total valid 63848 100.0 100.0
NA (missing) 2 0.0
Total 63850 100.0
Estimates of central tendency and spread

Mean, 99.99% confidence interval: [6.22; 6.38] (point estimate = 6.3)

Standard deviation, point estimate: 5.22032

Determinant Mapping Questions

CIBER plots

This section holds the Confidence Interval-Based Estimation of Relevance (CIBER) plots based on the tool users’ answers to the Determinant Mapping Questions (DMQs). These plots allow selection of the most relevant determinants while respecting the relevant theoretical, methodological, and statistical considerations. For more details, please see here, here, or here.

In short, the left-most panel shows each (sub-)determinant’s raw data (i.e., the distribution of sample scores) as well as the 99.99% confidence interval for the mean. The right-most panel shows the 95% confidence interval of the association with one or more targets - in this specific case, the bivariate correlation with tool users’ self-reported social distancing as measured by one of the Risk Estimation Questions (REQs).

Whether a sub-determinant is selected as an intervention target normally depends on whether it is bivariately associated to behavior (or a proxy of behavior) as well as on its univariate distribution. For example, high correlations can be driven by only a few data points, so it is possible for a sub-determinants that barely has any room for improval to be associated to behavior nonetheless. For more details, please see here, here, or here.

Overviews and the Potential for Change Index

In addition to the CIBER plots, overviews of all sub-determinants are provided in the “Overview” tab. Three overviews are produced: the last one is sorted by the bivariate correlation of each sub-determinant with the target behavior, and the first two are sorted by two versions of the Potential for Change index (PΔ), which is a quantitative summary of some of the information in the CIBER plots. The Potential for Change index was developed by Keegan et al. and is a numerical representation of a number of important features in CIBER plots (for more details, please see here).

The original PΔ (see the preregistration linked to above) was conceptualized to optimize intervention tailoring and improve the prediction of individual-level intervention effectiveness. For this project, two sample-level variants were computed to facilitate sub-determinant selection.

The first, labelled Potential for Change Index 1 (PΔ1), was computed as follows:

The second, labelled Potential for Change Index 2 (PΔ2), was computed as follows:

The second variant effectively takes the 5% trimmed maximum and minimum, rendering it less sensitive to outliers, penalizes weak associations with behavior more severely, and decreases sensitivity to differences between correlations. These differences should render the second variant a bit more robust over different samples.

Analyses for manuscripts

First manuscript

### Select part of the data
sDat <-
  dat[dat$lastpage==156, ];

f <- function(x) {
  format(x, big.mark=" ", trim=TRUE);
}

nCountries <- length(unique(na.omit(rawDat$countryName)));
nCountries_finished <-
  length(unique(na.omit(rawDat[rawDat$lastpage == 156, 'countryName'])));
nTotal <- nrow(rawDat);
nFinished <- table(rawDat$lastpage)[["156"]];
nNotFinished <- nTotal - nFinished;
nFirstPage <- table(rawDat$lastpage)[["0"]];
nDropOut <- nTotal - nFinished - nFirstPage;

countriesOver100 <-
  sort(table(dat[dat$lastpage==156, 'countryName']), decreasing = TRUE);
countriesOver100 <-
  countriesOver100[countriesOver100 >= 100];
countriesOver100_txt <-
  ufs::vecTxt(paste0(names(countriesOver100),
                     " (n=",
                     f(countriesOver100), ")"),
              lastDelimiter = ", and ");
### Check to verify deviations from the general Age table above:

ages_raw <- table(dat$age);
ageCats_raw <-
  round( 100 * sort(ages_raw, decreasing = TRUE) / sum(ages_raw), 1);

### Original start of this chunk

ages <- table(sDat$age);
ageCats <-
  round( 100 * sort(ages, decreasing = TRUE) / sum(ages), 1);
ageRest <-
  round( 100 * (ages[[1]] + ages[[7]] + ages[[8]]) / sum(ages), 1);

genders <- 100 * table(sDat$gender) / sum(table(sDat$gender));
gender_1st <- round(genders[1], 1);
names(gender_1st) <-
  gsub(".*\\s(\\w+)$", "\\1", names(gender_1st));
gender_2nd <- round(genders[2], 1);
names(gender_2nd) <-
  gsub(".*\\s(\\w+)$", "\\1", names(gender_2nd));
gender_enby <- genders[grepl('nonbinary', names(genders))];
gender_undisclosed <- round(genders[grepl('prefer', names(genders))], 2);
gender_specified <-
  100 * sum(table(sDat[nchar(sDat$gender_other)>0, 'gender_other'])) /
  sum(table(sDat$gender));
gender_nb_sp <- round(gender_enby + gender_specified, 2);
###-----------------------------------------------------------------------------
### Risks throught tool users' jobs
###-----------------------------------------------------------------------------

### Get 'multi response table' for work questions
work_multiResponse <-
  ufs::multiResponse(sDat, regex="^work_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
workCatsNames <- 
  head(work_multiResponse[, 1], -1);
workPcts <- 
  head(work_multiResponse[, 4], -1);

### Get order from highest to lowest frequency
workOrder <- order(workPcts, decreasing=TRUE);

### Set pretty labels
workLabels <-
  c(work_ptnts = "professionally in contact with patients (e.g., at hospitals, general practitioners, or nursing homes)",
    work_chldr = "professionally in contact with children (e.g., at childcare, primary, or secondary education)",
    work_publc = "professionally in contact with the general public (e.g., in the hospitality or public transport sectors)",
    work_home = "working from home or not working");

### Sort the labels and the percentages in the right order
workLabels <- workLabels[workCatsNames][workOrder];
workPcts <- round(workPcts[workOrder], 1);

###-----------------------------------------------------------------------------
### Current degree of self isolation
###-----------------------------------------------------------------------------

### Get 'multi response table'
siCurrent_multiResponse <-
  ufs::multiResponse(sDat, regex="^siCurrent_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
siCurrentCatsNames <- 
  head(siCurrent_multiResponse[, 1], -1);
siCurrentPcts <- 
  head(siCurrent_multiResponse[, 4], -1);

### Get order from highest to lowest frequency
siCurrentOrder <- order(siCurrentPcts, decreasing=TRUE);

### Set pretty labels
siCurrentLabels <-
  c(siCurrent_food = "leaving their house for food, medicine, or healthcare",
    siCurrent_shops = "leaving their house for other shops and services",
    siCurrent_famly = "visiting family",
    siCurrent_frnds = "visiting friends",
    siCurrent_sport = "walking or exercising outdoors",
    siCurrent_home = "mostly staying at home");

### Sort the labels and the percentages in the right order
siCurrentLabels <- siCurrentLabels[siCurrentCatsNames][siCurrentOrder];
siCurrentPcts <- round(siCurrentPcts[siCurrentOrder], 1);

###-----------------------------------------------------------------------------
### Trigger to self-isolate more
###-----------------------------------------------------------------------------

### Get 'multi response table'
siTrigger_multiResponse <-
  ufs::multiResponse(sDat, regex="^siTrigger_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
siTriggerCatsNames <- 
  head(siTrigger_multiResponse[, 1], -1);
siTriggerPcts <- 
  head(siTrigger_multiResponse[, 4], -1);
names(siTriggerPcts) <-
  siTriggerCatsNames;

### Substitute correct percentage for 'other'
siTriggerPcts[length(siTriggerPcts)] <-
  round(100 * sum(nchar(sDat$siTrigger_other) > 2, na.rm=TRUE) /
    tail(siTrigger_multiResponse[, 2], 1), 2);

### Get order from highest to lowest frequency
siTriggerOrder <- order(siTriggerPcts, decreasing=TRUE);

### Set pretty labels
siTriggerLabels <-
  c(siTrigger_symSe = "they have symptoms of COVID-19",
    siTrigger_symOt = "they have been in contact with somebody who is sick or showed symptoms",
    siTrigger_govmt = "the government imposed more restrictions",
    siTrigger_none = "would not consider this at all",
    siTrigger_other = "other reason");

### Sort the labels and the percentages in the right order
siTriggerLabels <- siTriggerLabels[siTriggerCatsNames][siTriggerOrder];
siTriggerPcts <- round(siTriggerPcts[siTriggerOrder], 1);

###-----------------------------------------------------------------------------
### 2024-12-06 -- reproduce with raw data
###-----------------------------------------------------------------------------

### Get 'multi response table'
siTrigger_multiResponse_raw <-
  ufs::multiResponse(dat, regex="^siTrigger_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
siTriggerCatsNames_raw <- 
  head(siTrigger_multiResponse_raw[, 1], -1);
siTriggerPcts_raw <- 
  head(siTrigger_multiResponse_raw[, 4], -1);
names(siTriggerPcts_raw) <-
  siTriggerCatsNames_raw;

### Substitute correct percentage for 'other'
siTriggerPcts_raw[length(siTriggerPcts_raw)] <-
  round(100 * sum(nchar(dat$siTrigger_other) > 2, na.rm=TRUE) /
    tail(siTrigger_multiResponse_raw[, 2], 1), 2);

### Get order from highest to lowest frequency
siTriggerOrder_raw <- order(siTriggerPcts_raw, decreasing=TRUE);

### Set pretty labels
siTriggerLabels_raw <-
  c(siTrigger_symSe = "they have symptoms of COVID-19",
    siTrigger_symOt = "they have been in contact with somebody who is sick or showed symptoms",
    siTrigger_govmt = "the government imposed more restrictions",
    siTrigger_none = "would not consider this at all",
    siTrigger_other = "other reason");

### Sort the labels and the percentages in the right order
siTriggerLabels_raw <- siTriggerLabels_raw[siTriggerCatsNames_raw][siTriggerOrder_raw];
siTriggerPcts_raw <- round(siTriggerPcts_raw[siTriggerOrder_raw], 1);

###-----------------------------------------------------------------------------
### Actions taken when increasing self-isolation
###-----------------------------------------------------------------------------

### Get 'multi response table'
siIntention_multiResponse <-
  ufs::multiResponse(sDat, regex="^siIntention_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
siIntentionCatsNames <- 
  head(siIntention_multiResponse[, 1], -1);
siIntentionPcts <- 
  head(siIntention_multiResponse[, 4], -1);
names(siIntentionPcts) <-
  siIntentionCatsNames;

### Substitute correct percentage for 'other'
siIntentionPcts[length(siIntentionPcts)] <-
  round(100 * sum(nchar(sDat$siIntention_other) > 2, na.rm=TRUE) /
    tail(siIntention_multiResponse[, 2], 1), 2);

### Get order from highest to lowest frequency
siIntentionOrder <- order(siIntentionPcts, decreasing=TRUE);

### Set pretty labels
siIntentionLabels <-
  c(siIntention_food = "stop leaving the house for food, medicine, or healthcare",
    siIntention_shops = "stop leaving the house for other shops or services",
    siIntention_famly = "stop visiting family",
    siIntention_frnds = "stop visiting friends",
    siIntention_sport = "stop outdoor walks or exercise",
    siIntention_other = "other");

### Sort the labels and the percentages in the right order
siIntentionLabels <- siIntentionLabels[siIntentionCatsNames][siIntentionOrder];
siIntentionPcts <- round(siIntentionPcts[siIntentionOrder], 1);

###-----------------------------------------------------------------------------
### Distance keeping
###-----------------------------------------------------------------------------

proximityFreq <-
  rosetta::freq(sDat$proximityAsFactor);

proximityPcts <-
  head(proximityFreq$dat[, 3], -3);
proximityLabels <-
  tolower(head(row.names(proximityFreq$dat), -3));

###-----------------------------------------------------------------------------
### Hand washing frequency
###-----------------------------------------------------------------------------

### Get 'multi response table'
hwFrequency_multiResponse <-
  ufs::multiResponse(sDat, regex="^hwFrequency_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
hwFrequencyCatsNames <- 
  head(hwFrequency_multiResponse[, 1], -1);
hwFrequencyPcts <- 
  head(hwFrequency_multiResponse[, 4], -1);
names(hwFrequencyPcts) <-
  hwFrequencyCatsNames;

### Get order from highest to lowest frequency
hwFrequencyOrder <- order(hwFrequencyPcts, decreasing=TRUE);

### Set pretty labels
hwFrequencyLabels <-
  c(hwFrequency_cntct = "after they have been in direct contact with someone else",
    hwFrequency_surfc = "after they have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches)",
    hwFrequency_face = "before or after they have touched their face, nose, or mouth",
    hwFrequency_snzCf = "after they sneeze or cough",
    hwFrequency_bldng = "on entering their home, place of work, or other building they will be spending some time in",
    hwFrequency_food = "before they handle or eat food",
    hwFrequency_never = "never or only occasionally wash/clean their hands");

### Sort the labels and the percentages in the right order
hwFrequencyLabels <- hwFrequencyLabels[hwFrequencyCatsNames][hwFrequencyOrder];
hwFrequencyPcts <- round(hwFrequencyPcts[hwFrequencyOrder], 1);

###-----------------------------------------------------------------------------
### Hand washing intensity
###-----------------------------------------------------------------------------

### Get 'multi response table'
hwIntensity_multiResponse <-
  ufs::multiResponse(sDat, regex="^hwIntensity_", endorsedOption = "Y");

### Extract first (variable name) and last (percentage) columns;
### simultaneously remove last value (the total)
hwIntensityCatsNames <- 
  head(hwIntensity_multiResponse[, 1], -1);
hwIntensityPcts <- 
  head(hwIntensity_multiResponse[, 4], -1);
names(hwIntensityPcts) <-
  hwIntensityCatsNames;

### Get order from highest to lowest frequency
hwIntensityOrder <- order(hwIntensityPcts, decreasing=TRUE);

### Set pretty labels
hwIntensityLabels <-
  c(hwIntensity_durtn = "wash for at least 20 seconds",
    hwIntensity_soap = "normally use soap or hand sanitiser",
    hwIntensity_thrgh = "clean under their nails and between their fingers",
    hwIntensity_none = "do not do any of the above");

### Sort the labels and the percentages in the right order
hwIntensityLabels <- hwIntensityLabels[hwIntensityCatsNames][hwIntensityOrder];
hwIntensityPcts <- round(hwIntensityPcts[hwIntensityOrder], 1);

Countries

Between the 7th of May 2020, when the tool launched in the first country (The Netherlands; other countries launched in a staggered manner over the next month) and the 9th of June 2021, 102 909 individuals from 166 countries started using the Your COVID-19 Risk tool (see the world map of tool users in Figure 1), 63 850 of whom completed the tool (from 153 countries). Of the remaining 39 059, 27 424 only opened the first page, and 11 635 started but did not complete the risk assessment and did not receive behavioural support (15% drop-out over all countries). The following countries had 100 or more users who completed the tool: Netherlands (n=15 376), New Zealand (n=14 615), Belgium (n=7 052), United Kingdom (n=6 978), Romania (n=6 187), United States (n=2 998), Italy (n=2 240), Brasil (n=1 415), Turkey (n=1 137), Ireland (Republic) (n=587), Australia (n=523), Indonesia (n=440), Germany (n=385), France (n=340), Canada (n=323), Spain (n=281), India (n=251), Cyprus (n=201), Portugal (n=117), Switzerland (n=112), Mexico (n=109), China (n=104), and Pakistan (n=101). Tool use over time was strongly related to local promotional activities. It grew rapidly following the tool launch in May-June 2020 with a few spikes in July.

Risk Estimation Questions

Most of the tool users so far self-reported to be in the age category of 40-49 years (20.1%), followed by 30-39 (19.5%), 50-59 (19.4%), 20-29 (17.6%), 60-69 (14.3%), with 8.9% younger than 20 or 70 or older, and 0.1% declining to disclose their age. Most users identified as female (54.1%) or male (45.2%), with 0.31% identifying as nonbinary, third gender, or providing a self-specified gender.

In response to the (multiple choice) question about work-related risks, most tool users indicated they were currently working from home or not working (63.1%), with 28.2% indicating they were (instead or also) professionally in contact with the general public (e.g., in the hospitality or public transport sectors), 6.7% being professionally in contact with patients (e.g., at hospitals, general practitioners, or nursing homes), and 6.1% being professionally in contact with children (e.g., at childcare, primary, or secondary education).

In response to the (multiple choice) question about the degree to which tool users self-isolated, most tool users indicated that they were currently leaving their house for food, medicine, or healthcare (75.8%), with 70.1% indicating they were (instead or also) walking or exercising outdoors, 52.2% leaving their house for other shops and services, 45.1% mostly staying at home, 35.9% visiting family, and 27.1% visiting friends.

In response to the (multiple choice) question about what would prompt them to self-isolate more, most tool users indicated that they would self-isolate more if they have symptoms of COVID-19 (85.4%), with 73.3% indicating that they would (instead of or also) self-isolate more if they have been in contact with somebody who is sick or showed symptoms, 65.8% if the government imposed more restrictions, 4.4% if would not consider this at all, and 0.4% specified another reason.

What exactly that means (i.e., self-isolate more) is different for different people. In response to the (multiple choice) question about what ‘self-isolating more’ would entail for them, most tool users indicated that they would stop leaving the house for other shops or services (43.4%), with 40.6% indicating that they would (instead of or also) stop leaving the house for food, medicine, or healthcare, 34.6% stop outdoor walks or exercise, 31.9% stop visiting family, 25% stop visiting friends, and 3.2% specified another reason.

Regarding keeping their distance from others (the ‘behavior’ measure used to estimate determinant importance), 0.9% indicated they did this (almost) never; 1.9% rarely; 8.7% sometimes; 23.6% often; 61.5% (almost) always; and 3.5% indicated that they were never in public places.

Most tool users indicated that they washed their hands after they have touched public or frequently touched surfaces (e.g., doorknobs, railings, tables, buttons/switches) (83.4%), with 77.4% indicating that they (instead of or also) washed their hands on entering their home, place of work, or other building they will be spending some time in, 76.6% before they handle or eat food, 65.2% after they have been in direct contact with someone else, 41% after they sneeze or cough, 28.9% before or after they have touched their face, nose, or mouth, and 3.9% indicated they never or only occasionally wash/clean their hands.

Regarding thoroughness, 91.1% of the tool users indicate that they normally use soap or hand sanitiser, with 69.8% indicating that they (instead of or also) wash for at least 20 seconds, 47% clean under their nails and between their fingers, and 1.2% indicate they do not do any of the above.

Determinant Mapping Questions

manuscript1_CIBERexample_vars <-
  c("AttEx_LeftOut", "PbcSkPrRemem",
    "PbcSk_MeetCare", "AttInExInfFamShort",
    "NrmInApDoctor");

tmpDat <-
  dat[grep(countryRegexes[16], dat$country_aggregated),
      c(manuscript1_CIBERexample_vars, "proximity")];

for (currentVarName in manuscript1_CIBERexample_vars) {
  maxValue <- max(tmpDat[[currentVarName]], na.rm=TRUE);
  if (maxValue == 3) {
    tmpDat[, currentVarName] <-
      tmpDat[, currentVarName] / 3;
  } else if (maxValue == 5) {
    tmpDat[, currentVarName] <-
      (tmpDat[, currentVarName] - 3) / 2;
  } else if (maxValue == 7) {
    tmpDat[, currentVarName] <-
      (tmpDat[, currentVarName] - 4) / 3;
  }
}

manuscript1_CIBERexample <-
  customCIBERplot(
    data = tmpDat,
    vars = manuscript1_CIBERexample_vars,
    target = "proximity",
    caption = "Manuscript 1, figure 2: an example CIBER plot",
    path = workingPath,
    itemWrapWidth = 75,
    anchorWrapWidth = 25,
    generateColors = list(
      means = c(neutralColor, halfHiColor, hiColor),
      associations = c(loColor, neutralColor, hiColor)
    ),
    fullColorRange = c(-1, 1),
    xbreaks = seq(from=-1, to=1, by=.5)
  );

subQuestions <-
  c(
    "Keeping at least the recommended\ndistance from others makes me feel…\n(experiential attitude belief, i.e., product)",
    "Typically, are you able to remember to keep\nthe recommended distance from others?\n(perceived skill presence)",
    "For me to successfully keep the recommended\ndistance from others, being able to\nkeep my distance from someone I care about is…\n(PBC capacity belief, i.e., product)",
    "If I keep at least the recommended distance\nfrom others, I will…\n(instrumental attitude expectation)",
    "If I were to keep at least the recommended\ndistance from others, my doctor would…\n(Injunctive norms (approval))"
  )

manuscript1_CIBERexample_plot <-
  behaviorchange::CIBER(
    data = tmpDat,
    determinants = manuscript1_CIBERexample_vars,
    target = "proximity",
    subQuestions = subQuestions,
    leftAnchors = manuscript1_CIBERexample$loAnchors,
    rightAnchors = manuscript1_CIBERexample$hiAnchors,
    generateColors = list(
      means = c(neutralColor, halfHiColor, hiColor),
      associations = c(loColor, neutralColor, hiColor)
    ),
    fullColorRange = c(-1, 1),
    xbreaks = seq(from=-1, to=1, by=.5),
    rsq = FALSE,
    drawPlot = FALSE
  );

ufs::knitAndSave(
  manuscript1_CIBERexample_plot,
  figCaption = "Manuscript 1, figure 2: an example CIBER plot",
  path = workingPath,
  figWidth = 7,
  figHeight = 4
);
example_abcd <-
  openxlsx::read.xlsx(
    file.path(
      abcdsPath,
      "Your-COVID-19-Risk---ABCD-3---Edited-as-manuscript-1-example.xlsx"
    )
  );

names(example_abcd) <- gsub("\\.", " ", names(example_abcd));

abcd_example_ms1 <-
  behaviorchange::abcd(
    specs = example_abcd,
    outputFile = file.path(abcdsPath, "manuscript-1--abcd-example.png"),
    columnWarning = FALSE,
    graphTheme = list(c("fontname", "Arial", "node"),
                      c("fontname", "Arial", "edge"))
  );

abcd_example_ms1 <-
  behaviorchange::abcd(
    specs = example_abcd,
    outputFile = file.path(abcdsPath, "manuscript-1--abcd-example.pdf"),
    columnWarning = FALSE,
    returnSvgOnly = TRUE,
    graphTheme = list(c("fontname", "Arial", "node"),
                      c("fontname", "Arial", "edge"))
  );

cat(abcd_example_ms1);
%0 1->2 2->3 3->4 4->5 5->6 7->9 Message/source is credible 7->10 Message/source is credible 7->11 Message/source is credible 7->13 Message/source is credible 8->12 Plans are feasible 9->14 10->15 11->16 12->17 13->18 14->19 15->20 16->21 17->21 18->21 19->22 20->22 21->22 22->23 1 Behavior Change Principles 2 Applications 3 Sub-determinants 4 Determinants 5 Sub-behaviors 6 Target behavior 7 Verbal persuasion 8 Collaborative planning 9 The elderly can suffer the most if they get infected, but everyone is at risk of carrying the virus and developing the illness. 10 It is tough not meeting friends and family, yet it is the smart thing to do right now. Staying at home is the best way to protect each other. 11 People are coming up with new ways to be together virtually, e.g. call each other, enjoy a meal together, watch a movie, play a game. 12 Talk to your close ones and plan together to keep your meetings online or on the phone if possible, until the situation improves. 13 Hang in there, it won`t last forever 14 I believe that everybody can get infected, especially seniors 15 I believe that staying home is smart, and effective to prevent COVID-19 16 I know ways how to spend time with my family/friends while self-isolating 17 I have made a plan with my family/friends, how to spend time online 18 I believe I can self-isolate for the required duration 19 Risk perception 20 Instrumental attitude 21 Perceived behavioral control 22 Avoid visiting friends or family 23 Self-isolation

Session information

sessioninfo::session_info();
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.4.2 (2024-10-31 ucrt)
 os       Windows 11 x64 (build 26100)
 system   x86_64, mingw32
 ui       RTerm
 language (EN)
 collate  English_Netherlands.utf8
 ctype    English_Netherlands.utf8
 tz       Europe/Amsterdam
 date     2025-03-06
 pandoc   3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package        * version date (UTC) lib source
 behaviorchange   0.5.6   2025-03-05 [1] gitlab (r-packages/behaviorchange@bb79f51)
 bslib            0.9.0   2025-01-30 [1] CRAN (R 4.4.2)
 cachem           1.1.0   2024-05-16 [1] CRAN (R 4.4.2)
 class            7.3-22  2023-05-03 [2] CRAN (R 4.4.2)
 classInt         0.4-11  2025-01-08 [1] CRAN (R 4.4.2)
 cli              3.6.4   2025-02-13 [1] CRAN (R 4.4.2)
 codetools        0.2-20  2024-03-31 [2] CRAN (R 4.4.2)
 colorspace       2.1-1   2024-07-26 [1] CRAN (R 4.4.2)
 crayon           1.5.3   2024-06-20 [1] CRAN (R 4.4.2)
 curl             6.0.1   2024-11-14 [1] CRAN (R 4.4.2)
 DBI              1.2.3   2024-06-02 [1] CRAN (R 4.4.2)
 DiagrammeR       1.0.11  2024-02-02 [1] CRAN (R 4.4.2)
 DiagrammeRsvg    0.1     2016-02-04 [1] CRAN (R 4.4.2)
 digest           0.6.37  2024-08-19 [1] CRAN (R 4.4.2)
 dplyr            1.1.4   2023-11-17 [1] CRAN (R 4.4.2)
 e1071            1.7-16  2024-09-16 [1] CRAN (R 4.4.2)
 evaluate         1.0.3   2025-01-10 [1] CRAN (R 4.4.2)
 farver           2.1.2   2024-05-13 [1] CRAN (R 4.4.2)
 fastmap          1.2.0   2024-05-15 [1] CRAN (R 4.4.2)
 generics         0.1.3   2022-07-05 [1] CRAN (R 4.4.2)
 ggplot2          3.5.1   2024-04-23 [1] CRAN (R 4.4.2)
 glue             1.8.0   2024-09-30 [1] CRAN (R 4.4.2)
 gtable           0.3.6   2024-10-25 [1] CRAN (R 4.4.2)
 here             1.0.1   2020-12-13 [1] CRAN (R 4.4.2)
 htmltools        0.5.8.1 2024-04-04 [1] CRAN (R 4.4.2)
 htmlwidgets      1.6.4   2023-12-06 [1] CRAN (R 4.4.2)
 httr             1.4.7   2023-08-15 [1] CRAN (R 4.4.2)
 jquerylib        0.1.4   2021-04-26 [1] CRAN (R 4.4.2)
 jsonlite         1.9.0   2025-02-19 [1] CRAN (R 4.4.2)
 kableExtra       1.4.0   2024-01-24 [1] CRAN (R 4.4.2)
 KernSmooth       2.23-24 2024-05-17 [2] CRAN (R 4.4.2)
 knitr            1.49    2024-11-08 [1] CRAN (R 4.4.2)
 labeling         0.4.3   2023-08-29 [1] CRAN (R 4.4.0)
 lifecycle        1.0.4   2023-11-07 [1] CRAN (R 4.4.2)
 limonaid         0.2     2025-01-14 [1] gitlab (r-packages/limonaid@3331e4f)
 lubridate        1.9.4   2024-12-08 [1] CRAN (R 4.4.2)
 magrittr         2.0.3   2022-03-30 [1] CRAN (R 4.4.2)
 munsell          0.5.1   2024-04-01 [1] CRAN (R 4.4.2)
 openxlsx         4.2.7.1 2024-09-20 [1] CRAN (R 4.4.2)
 pander           0.6.5   2022-03-18 [1] CRAN (R 4.4.2)
 pillar           1.10.1  2025-01-07 [1] CRAN (R 4.4.2)
 pkgconfig        2.0.3   2019-09-22 [1] CRAN (R 4.4.2)
 proxy            0.4-27  2022-06-09 [1] CRAN (R 4.4.2)
 purrr            1.0.2   2023-08-10 [1] CRAN (R 4.4.2)
 R6               2.6.1   2025-02-15 [1] CRAN (R 4.4.2)
 ragg             1.3.3   2024-09-11 [1] CRAN (R 4.4.2)
 RColorBrewer     1.1-3   2022-04-03 [1] CRAN (R 4.4.0)
 Rcpp             1.0.14  2025-01-12 [1] CRAN (R 4.4.2)
 remotes          2.5.0   2024-03-17 [1] CRAN (R 4.4.2)
 rlang            1.1.5   2025-01-17 [1] CRAN (R 4.4.2)
 rmarkdown        2.29    2024-11-04 [1] CRAN (R 4.4.2)
 rnaturalearth    1.0.1   2023-12-15 [1] CRAN (R 4.4.2)
 rosetta          0.3.12  2023-03-05 [1] CRAN (R 4.4.2)
 rprojroot        2.0.4   2023-11-05 [1] CRAN (R 4.4.2)
 rstudioapi       0.17.1  2024-10-22 [1] CRAN (R 4.4.2)
 rsvg             2.6.1   2024-09-20 [1] CRAN (R 4.4.2)
 sass             0.4.9   2024-03-15 [1] CRAN (R 4.4.2)
 scales           1.3.0   2023-11-28 [1] CRAN (R 4.4.2)
 sessioninfo      1.2.2   2021-12-06 [1] CRAN (R 4.4.2)
 sf               1.0-19  2024-11-05 [1] CRAN (R 4.4.2)
 sticky           0.5.6.1 2020-03-16 [1] CRAN (R 4.4.2)
 stringi          1.8.4   2024-05-06 [1] CRAN (R 4.4.0)
 stringr          1.5.1   2023-11-14 [1] CRAN (R 4.4.2)
 svglite          2.1.3   2023-12-08 [1] CRAN (R 4.4.2)
 systemfonts      1.1.0   2024-05-15 [1] CRAN (R 4.4.2)
 terra            1.8-5   2024-12-12 [1] CRAN (R 4.4.2)
 textshaping      0.4.1   2024-12-06 [1] CRAN (R 4.4.2)
 tibble           3.2.1   2023-03-20 [1] CRAN (R 4.4.2)
 tidyselect       1.2.1   2024-03-11 [1] CRAN (R 4.4.2)
 timechange       0.3.0   2024-01-18 [1] CRAN (R 4.4.2)
 ufs              0.5.12  2024-03-09 [1] CRAN (R 4.4.2)
 units            0.8-5   2023-11-28 [1] CRAN (R 4.4.2)
 V8               6.0.0   2024-10-12 [1] CRAN (R 4.4.2)
 vctrs            0.6.5   2023-12-01 [1] CRAN (R 4.4.2)
 viridisLite      0.4.2   2023-05-02 [1] CRAN (R 4.4.2)
 visNetwork       2.1.2   2022-09-29 [1] CRAN (R 4.4.2)
 withr            3.0.2   2024-10-28 [1] CRAN (R 4.4.2)
 xfun             0.49    2024-10-31 [1] CRAN (R 4.4.2)
 xml2             1.3.6   2023-12-04 [1] CRAN (R 4.4.2)
 yaml             2.3.10  2024-07-26 [1] CRAN (R 4.4.2)
 zip              2.3.1   2024-01-27 [1] CRAN (R 4.4.2)

 [1] C:/Users/gj/AppData/Local/R/win-library/4.4
 [2] C:/Program Files (x86)/R/R-4.4.2/library

──────────────────────────────────────────────────────────────────────────────
renderingEndTime <- Sys.time();
renderingTime <- renderingEndTime - renderingStartTime;

Rendering/knitting started at 20:56:06 (on 2025-03-06) and ended at 20:57:34 (on 2025-03-06). This means the process took 1.47547 mins. Note that these times and dates are all in the CET timezone, which is at UTC+0100.

### Store data; first delete most old automatically saved data
if (dir.exists(processedDataPath)) {
  
  oldfiles <- list.files(processedDataPath,
                         pattern='^processed-data---.*\\.RData',
                         full.names=TRUE);

  ### Delete all but most recent one
  if (length(oldfiles) > 1) {
    unlink(head(sort(oldfiles), -1));
  }

  ### Housecleaning
  rm(oldfiles);
  
  ### Store new workspace
  processedDataDate <- Sys.time();
  processedDataFilename_rds <-
    format(processedDataDate,
           "processed-data---%Y-%m-%d--%H-%M.rds");
  tryCatch({
    saveRDS(
      dat,
      file = file.path(processedDataPath,
                       processedDataFilename_rds)
    );
  }, error = function(e) {
    warning(paste0("Encountered error when trying to save data to ",
                   processedDataFilename_xlsx, "!\n"));
  });

}
### Store workspace; first delete most old automatically saved
### workspaces
if (dir.exists(workspacePath)) {
  
  oldfiles <- list.files(workspacePath,
                         pattern='^autogenerated-workspace---.*\\.RData',
                         full.names=TRUE);

  ### Delete all but most recent one
  if (length(oldfiles) > 1) {
    unlink(head(sort(oldfiles), -1));
  }

  ### Housecleaning
  rm(oldfiles);
  
  ### Store new workspace
  workspaceDate <- Sys.time();
  workspaceFilename <-
    format(workspaceDate,
           "autogenerated-workspace---%Y-%m-%d--%H-%M.RData");
  tryCatch({
    save.image(file=file.path(workspacePath,
                              workspaceFilename));
  }, error = function(e) {
    warning(paste0("Encountered error when trying to save workspace to ",
                   workspaceFilename, "!\n"));
  });

}
### Load a list of available dataframes
dataframes <- list.files(processedDataPath,
                         pattern='^processed-data---.*\\.RData',
                         full.names=TRUE);

### Get most recent one
if (length(dataframes) > 0) {
  lastDataframe <- tail(sort(dataframes), 1);
  dat <- readRDS(lastDataframe);
  rm(lastDataframe);
} else {
  stop("No automatically stored dataframes available!");
}

rm(dataframes);
### Load a list of available workspaces
workspaces <- list.files(workspacePath,
                         pattern='^autogenerated-workspace---.*\\.RData',
                         full.names=TRUE);

### Get most recent one
if (length(workspaces) > 0) {
  lastWorkspace <- tail(sort(workspaces), 1);
  load(lastWorkspace);
  rm(lastWorkspace);
} else {
  stop("No automatically stored workspaces available!");
}

rm(workspaces);