ACAPS - CoronaNet Taxonomy Map
0 Introduction
This document maps the taxonomy used by the ACAPS COVID-19 Government Measures dataset to document government policies made in response to COVID-19 into the CoronaNet Research Project taxonomy. Each section maps the general area for which the taxonomy is mapped and each sub-section provides further detail as necessary. Following each explanation for how the mapping is conceptualized, there is R code for operationalizing this mapping. Please refer to the ACAPS ReadMe and the CoronaNet Codebook for more information on their respective taxonomies.
You can access (i) the original version of the ACAPS dataset, “acaps_covid19_government_measures_dataset_0.xlsx”, as well as (ii) the version which transforms this version of the CIHI dataset into the CoronaNet taxonomy, “acaps_coronanet_map.csv” (the rest of this document details how this transformation was implemented) from the CoronaNet pubic git repo.
1 Setup
To create replicate this taxonomy mapping exercise, users will need to load the following R packages and to read in the original ACAPS data as follows:
library(readr)
library(dplyr)
library(magrittr)
library(tidyr)
library(readxl)
library(here)
= read_excel(here("data", "collaboration", "acaps", "acaps_covid19_government_measures_dataset_0.xlsx"), sheet = "Dataset") acaps
2 Map Creation
The following code creates a map to translate the ACAPS data to the CoronaNet taxonomy. Where there is a straightforward one-to-one relationship between the two taxonomies, these are directly mapped in the below:
The ACAPS
id
variable allows each unique observation to be identifiable. This is conceptually the same as CoronaNet’srecord_id
variable. However, to make it clear when a policy originates from ACAPS and when it originates from CoronaNet, we encode this information into a new variable we nameunique_id
.The ACAPS
Comments
variable is a close approximation to CoronaNet’sdescription
variable. The main difference is that (at least in theory), CoronaNet’s description variable must always contain certain information (the policy initiator, the type of policy, the date the policy started, and if applicable: the geographic target of the policy, the demographic target of the policy and the end date of the policy) while there does not appear to be the same amount of information consistently captured in the ACAPSComments
variable. As such, it will likely be necessary to recode or back code for this information for observations in the ACAPS dataset that are not in the CoronaNet dataset.The ACAPS
DATE_IMPLEMENTED
variable, which captures when a policy was implemented, is a direct match for CoronaNet’sdate_start
variable.The ACAPS
COUNTRY
variable andISO
variable, which captures information on the initiating country, are direct matches for Coronanet’scountry
variable andISO_A3
variable.The ACAPS
ADMIN_LEVEL_NAME
variable, which captures information on whether a policy is applied toward a particular subnational government, is a close matche for Coronanet’sprovince
variable. The difference between the two is thatADMIN_LEVEL_NAME
includes information on both provinces/states as well as cities whereas the CoronaNet taxonomy captures this information separately in itsprovince
andcity
variables. Since these distinctions are not systematically separable in the ACAPS taxonomy, in this automated mapping, we mapADMIN_LEVEL_NAME
toprovince
while noting that downstream manual harmonization will need to make these distinctions.The ACAPS
LINK
variable, which captures information on the URL link for the raw source of information on which the policy is based, is a direct match for CoronaNet’slink
variable.The ACAPS
ENTRY_DATE
variable, which captures information on when a policy was recorded, is a direct match for CoronaNet’srecorded_date
variable.
<- data.frame(unique_id = acaps$ID,
acaps_coronanet_map entry_type = NA,
correct_type= NA,
update_type= NA,
update_level= NA,
description= acaps$COMMENTS,
date_announced= NA,
date_start= acaps$DATE_IMPLEMENTED,
date_end= NA,
country = acaps$COUNTRY,
ISO_A3 = acaps$ISO,
ISO_A2 = NA,
init_country_level= NA,
domestic_policy= NA,
province = acaps$ADMIN_LEVEL_NAME,
city= NA,
type= NA,
type_sub_cat= NA,
type_text= NA,
instituion_status= NA,
target_country= NA,
target_geog_level= NA,
target_region= NA,
target_province= NA,
target_city= NA,
target_other= NA,
target_who_what= NA,
target_who_gen = NA,
target_direction= NA,
travel_mechanism= NA,
compliance= NA,
enforcer= NA,
index_high_est= NA,
index_med_est= NA,
index_low_est= NA,
index_country_rank= NA,
link = acaps$LINK,
date_updated = NA,
recorded_date = acaps$ENTRY_DATE)
2.1 Init Country Level
The init_country_level
variable documents what level of government a policy originated from (e.g. national, provincial, municipal). Because the ACAPS taxonomy does not have a comparable variable, in our mapping of the ACAPS taxonomy:
We assume that if a policy takes an NA value in the
province
variable, which records what province a policy is applied to, that the policy originates from the national level.Conversely, if the
province
variable is not empty, we assume that the policy originates from the provincial level.Note that there may be some errors in coding here insofar as the ACAPS taxonomy captures both provinces and cities in the same variable in its taxonomy (see previous section for how we mapped ACAPS
ADMIN_LEVEL_NAME
for more information). As such, theinit_country_level
variable will likely need to be cleaned to take the value of Municipal or Other Governmental Level in manual harmonization downstream.
<-
acaps_coronanet_map %>%
acaps_coronanet_map mutate(
init_country_level =
case_when(
!is.na(province) ~ 'Provincial',
is.na(province) ~ 'National',
TRUE ~ as.character(NA)
) )
3 Policy Type
3.1. Category: Lockdown
3.1.1 Lockdown of the entire population.
The following code maps how ACAPS captures lockdown measures which apply to all people in a region to the CoronaNet taxonomy.
- The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
variable as Lockdown and theMEASURE
as Full lockdown. - The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Lockdown and thetarget_who_gen
as No special population targeted.
<- acaps %>%
full_lockdown filter(CATEGORY == 'Lockdown' & MEASURE == 'Full lockdown') %>%
mutate(type = 'Lockdown',
target_who_gen ='No special population targeted') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, full_lockdown, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, full_lockdown, by = 'unique_id') acaps_coronanet_map
3.1.2 Lockdown of the partial population
The following code maps how ACAPS captures lockdown measures which apply to all people in a region to the CoronaNet taxonomy. Note that in the ACAPS taxonomy, the main difference between a full lockdown and a partial lockdown is whether stores related to alimentation continue to be open. In the CoronaNet taxonomy, these distinctions can be captured in its Restrictions and Regulations of Businesses policy type.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Lockdown and theMEASURE
as Partial lockdown.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Lockdown and thetarget_who_gen
as No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Lockdown based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
partial_lockdown filter(CATEGORY == 'Lockdown' & MEASURE == 'Partial lockdown') %>%
mutate(type =
case_when(
grepl("urfew", COMMENTS) ~ 'Curfew',
TRUE ~ 'Lockdown'
),target_who_gen ='No special population targeted') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, partial_lockdown, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, partial_lockdown, by = 'unique_id') acaps_coronanet_map
3.1.3 Lockdown for a specific population
The following code maps how ACAPS captures lockdown measures which apply to refugees or other minorities to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Lockdown and theMEASURE
as Lockdown of refugee/IDP camps or other minorities.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Lockdown and thetarget_who_gen
is Asylum/refugee seekers
However, we have added customized code to recode the type
variable to take on values other than Lockdown based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
refugee_lockdown filter(CATEGORY == 'Lockdown' & MEASURE == 'Lockdown of refugee/idp camps or other minorities') %>%
mutate(type =
case_when(
grepl("urfew", COMMENTS) ~ 'Curfew',
TRUE ~ 'Lockdown'
),target_who_gen ='Asylum/refugee seekers') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, refugee_lockdown, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, refugee_lockdown, by = 'unique_id') acaps_coronanet_map
3.2 Governance and Socio-economic measures
3.2.1 State of Emergency
The following code maps how ACAPS captures declarations of emergency which applies to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Governance and Socio-economic measures and theMEASURE
as State of emergency declared.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable a Declaration of Emergency and thetarget_who_gen
is No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Declaration of Emergency based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
declar_emergency filter(CATEGORY == 'Governance and socio-economic measures' & MEASURE == 'State of emergency declared') %>%
mutate(type =
case_when(
grepl("curfew put", COMMENTS) ~ 'Curfew',
grepl("continuing curfew", COMMENTS) ~ 'Curfew',
TRUE ~ 'Declaration of Emergency'
),target_who_gen ='No special population targeted') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, declar_emergency, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, declar_emergency, by = 'unique_id') acaps_coronanet_map
3.2.2 Limitation of international commerce
The following code maps how ACAPS captures whether authorities limit the import or export of either food or health items to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Governance and Socio-economic measures and theMEASURE
as Limit product imports/exports.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Other Policy Not Listed Above and thetarget_who_gen
is No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Other Policy Not Listed Above based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
limit_commerce filter(CATEGORY == 'Governance and socio-economic measures' & MEASURE == 'Limit product imports/exports') %>%
mutate(type =
case_when(
grepl("bars|restaurants", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl("Event|event", COMMENTS) ~ "Restrictions of Mass Gatherings",
grepl("disinfect|medic|mask|drug|Health|health", COMMENTS) ~ "Health Resources",
grepl("uarantine", COMMENTS) ~ "Quarantine",
grepl("education|school|School", COMMENTS) ~ "Closure and Regulation of Schools",
grepl("Port Authorities", COMMENTS) ~ "External Border Restrictions",
TRUE ~ "Other Policy Not Listed Above"
),target_who_gen ='No special population targeted') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, limit_commerce, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, limit_commerce, by = 'unique_id') acaps_coronanet_map
3.2.3 Emergency administrative structures activated or established
The following code maps how ACAPS captures whether emergency administrative measures have been put in place to coordinate, decide or monitor COVID-19 measures to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Governance and Socio-economic measures and theMEASURE
as Emergency administrative structures activated or established.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as New Task Force, Bureau or Administrative Configuration and thetarget_who_gen
as No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than New Task Force, Bureau or Administrative Configuration based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
governance_emergency filter(CATEGORY == 'Governance and socio-economic measures' & MEASURE == 'Emergency administrative structures activated or established') %>%
mutate(type =
case_when(
grepl("Interinstitutional Unit", COMMENTS) ~ 'New Task Force, Bureau or Administrative Configuration',
grepl("bars|restaurants", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl("uarantine", COMMENTS) ~ "Quarantine",
grepl("education|school|School", COMMENTS) ~ "Closure and Regulation of Schools",
grepl("urfew", COMMENTS) ~ 'Curfew',
TRUE ~ "New Task Force, Bureau or Administrative Configuration"
),target_who_gen ='No special population targeted') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, governance_emergency, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, governance_emergency, by = 'unique_id') acaps_coronanet_map
3.2.4 Military Deployment
The following code maps how ACAPS captures whether the military has been deployed to support medical operations and ensure compliance with the measures of the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Governance and Socio-economic measures and theMEASURE
as Military deployment.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as New Task Force, Bureau or Administrative Configuration, thetype_sub_cat
variable as Other Administrative Configuration and thetarget_who_gen
as No special population targeted.
However, we have added customized code to recode policies based on keywords in their textual description. This strategy is applied to recode the type
and target_who_gen
variables. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
military_deployment filter(CATEGORY == 'Governance and socio-economic measures' & MEASURE == 'Military deployment') %>%
mutate(type =
case_when(
grepl("urfew", COMMENTS) ~ 'Curfew',
TRUE ~ 'New Task Force, Bureau or Administrative Configuration'
),target_who_gen =
case_when(
grepl("homeless", COMMENTS) ~ 'Homeless population',
TRUE ~ 'No special population targeted'
),type_sub_cat = 'Other Administrative Configuration') %>%
select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, military_deployment, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, military_deployment, by = 'unique_id') acaps_coronanet_map
3.2.5 Economic Measures
The following code maps how ACAPS captures whether authorities have taken economic measures to mitigate the impact of other restrictions on the economy and to society to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Governance and Socio-economic measures and theMEASURE
as Economic measures.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Other and thetarget_who_gen
is No special population targeted.
However, we have added customized codeto recode the target_who_gen
variable to take on values other than No special population targeted based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
other filter(CATEGORY == 'Governance and socio-economic measures' & MEASURE == 'Economic measures') %>%
mutate(type = 'Other Policy Not Listed Above',
target_who_gen =
case_when(
grepl("efugee", COMMENTS) ~ 'Asylum/refugee seekers',
TRUE ~ 'No special population targeted'
%>%
)) select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, other, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, other, by = 'unique_id') acaps_coronanet_map
3.3 Movement restrictions
3.3.1 Curfews
The following code maps how ACAPS captures the curfew measures which apply to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Curfew.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Curfew and thetarget_who_gen
as No special population targeted.
<- acaps %>%
curfew filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Curfews') %>%
mutate(type = 'Curfew',
target_who_gen ='No special population targeted') %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, curfew, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, curfew, by = 'unique_id') acaps_coronanet_map
3.3.2 Border Checks
The following code maps how ACAPS captures border checks measures, such as checking for identification documents, into CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Border checks.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions, thetype_sub_cat
variable as Travel History Form, and the target_who_gen as No special population targeted.
<- acaps %>%
border_checks filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Border checks') %>%
mutate(type = 'External Border Restrictions',
target_who_gen ='No special population targeted',
type_sub_cat = 'Travel History Form') %>%
select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, border_checks, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, border_checks, by = 'unique_id') acaps_coronanet_map
3.3.3 Border Closure
The following code maps how ACAPS captures border closure measures policies into CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Border closure.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions and the target_who_gen as No special population targeted.Where possible, we also map the mechanism of travel into CoronaNet’s
travel_mechanism
variable by extracting keywords from the ACAPSCOMMENTS
variable.
While in theory, we could have further specified that the target_who_what
variable to be set to All Foreign Nationals, we found that there were substantial miscodings in the ACAPS data, which warranted a broader mapping. Moreover, we have added customized code to recode the variables based on keywords in their textual description. This strategy is applied to recode type
types and target_who_gen
variables. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
border_closure filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Border closure') %>%
mutate(type =
case_when(
grepl("urfew", COMMENTS) ~ 'Curfew',
TRUE ~ 'External Border Restrictions'
),target_who_gen =
case_when(
grepl("efugee", COMMENTS) ~ 'Asylum/refugee seekers',
grepl("migrant", COMMENTS) ~ 'Other population not specified above',
TRUE ~ 'No special population targeted'),
travel_mechanism =
case_when(
grepl('flight|air', COMMENTS)~ "Flights",
grepl('rain|rains', COMMENTS)~ "Trains",
grepl('sea ports|boat|boats|sea ports|ship|ships|vessels', COMMENTS)~ "Seaports",
grepl('cruis', COMMENTS)~ "Cruises",
TRUE ~ as.character(NA)
)%>%
) select(unique_id = ID, type, target_who_gen,travel_mechanism)
Following this, the object which incorporates the mapping of the relevant subset of the data, border_closure, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, border_closure, by = 'unique_id') acaps_coronanet_map
3.3.4 Full Border Closure
The following code maps how ACAPS captures full border closure measures policies into CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Complete border closure.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions, thetype_sub_cat
variable as Total border crossing ban, and the target_who_gen as No special population targeted.
<- acaps %>%
full_closure filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Complete border closure') %>%
mutate(type = 'External Border Restrictions',
target_who_gen ='No special population targeted',
type_sub_cat = 'Total border crossing ban') %>%
select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, full_closure, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, full_closure, by = 'unique_id') acaps_coronanet_map
3.3.5 International Flights suspension
The following code maps how ACAPS captures suspending the operation of international flight policies into CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as International flights suspension.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions, thetype_sub_cat
variable as Total border crossing ban, thetravel_mechanism
variable as Flights, and the target_who_gen as No special population targeted.
However, we have added customized code to recode this policy into mechanisms of travel other than Flights based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
international_closure filter(CATEGORY == 'Movement restrictions' & MEASURE == 'International flights suspension') %>%
mutate(type = 'External Border Restrictions',
target_who_gen ='No special population targeted',
type_sub_cat = 'Total border crossing ban',
travel_mechanism =
case_when(
grepl('train ', COMMENTS)~ "Trains",
TRUE ~ "Flights"
)%>%
) select(unique_id = ID, type, target_who_gen, type_sub_cat, travel_mechanism)
Following this, the object which incorporates the mapping of the relevant subset of the data, international_closure, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, international_closure, by = 'unique_id') acaps_coronanet_map
3.3.6 Visa restrictions
The following code maps how ACAPS captures visa restriction measures policies into CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Visa restrictions.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions, thetype_sub_cat
variable as Visa restrictions, and thetarget_who_gen
is No special population targeted.
However, we have added customized code to recode the target_who_gen
variable to take on values other than No special population targeted based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
visa_restrictions filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Visa restrictions') %>%
mutate(type = 'External Border Restrictions',
target_who_gen =
case_when(
grepl("migrant", COMMENTS) ~ 'Other population not specified above',
TRUE ~ 'No special population targeted'),
type_sub_cat = 'Visa restrictions') %>%
select(unique_id = ID, type, target_who_gen,type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, visa_restrictions, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, visa_restrictions, by = 'unique_id') acaps_coronanet_map
3.3.7 Additional requirements upon arrival
The following code maps how ACAPS captures the movement restrictions measures which apply to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Additional health/documents requirements upon arrival.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions, thetype_sub_cat
variable as Health Certificates, and thetarget_who_gen
as No special population targeted.
<- acaps %>%
additional_requirements filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Additional health/documents requirements upon arrival') %>%
mutate(type = 'External Border Restrictions',
target_who_gen ='No special population targeted',
type_sub_cat = 'Health Certificates') %>%
select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, additional_requirements, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, additional_requirements, by = 'unique_id') acaps_coronanet_map
3.3.8 Surveillance and monitoring
The following code maps how ACAPS captures the health monitoring measures which apply to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Surveillance and monitoring.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Health Monitoring and thetarget_who_gen
as No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Health Monitoring based on keywords in their textual description. This strategy is also applied to recode target_who_gen
. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
health_monitoring filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Surveillance and monitoring') %>%
mutate(type =
case_when(
grepl("uarantine", COMMENTS) ~ "Quarantine",
grepl("travel|border|countr|irport", COMMENTS) ~ 'External Border Restrictions',
grepl("warehouse|grocery|shop|business|estaurant|bar", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl("mask", COMMENTS) ~ 'Social Distancing',
grepl("Church|mass gath", COMMENTS) ~'Restrictions of Mass Gatherings',
grepl("team", COMMENTS) ~'New Task Force, Bureau or Administrative Configuration',
grepl("Emergency|emergency", COMMENTS) ~ 'Declaration of Emergency',
grepl("econ", COMMENTS) ~ 'Other Policy Not Listed Above',
grepl("remote medical consultations", COMMENTS) ~ "Health Resources",
grepl("rumour|rumor", COMMENTS) ~ "Anti-Disinformation Measures",
grepl("Regulations Repealed", COMMENTS) ~ "Curfew",
grepl("stricter curfew|curfew overturned", COMMENTS) ~ "Curfew",
TRUE ~ 'Health Monitoring'
),target_who_gen =case_when(
grepl("migrant", COMMENTS) ~ 'Other population not specified above',
TRUE ~ 'No special population targeted')) %>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, health_monitoring, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, health_monitoring, by = 'unique_id') acaps_coronanet_map
3.3.9 Movement restrictions (Checkpoint Deployment)
The following code maps how ACAPS captures policies that deploy checkpoints within a country to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Checkpoints within the country.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable asInternal Border Restrictions, thetype_sub_cat
variable as Health Certificates, and thetarget_who_gen
is No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Internal Border Restrictions based on keywords in their textual description. The same strategy is applied to recode type_sub_cat
. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
checkpoints_deployment filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Checkpoints within the country') %>%
mutate(type =
case_when(
grepl("mall|shop", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl("irport", COMMENTS) ~ 'External Border Restrictions',
grepl("uarantine", COMMENTS) ~ "Quarantine",
TRUE ~ 'Internal Border Restrictions'),
target_who_gen ='No special population targeted',
type_sub_cat =
case_when(
grepl("temp|health screening", COMMENTS)~ "Health Screenings (e.g. temperature checks)",
TRUE ~ 'Health Certificates'
)%>%
)select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, checkpoints_deployment, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, checkpoints_deployment, by = 'unique_id') acaps_coronanet_map
3.3.10 Domestic Travel Restrictions
The following code maps how ACAPS captures policies that limit the movement of people within a country the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Movement restrictions and theMEASURE
as Domestic travel restrictions.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Internal Border Restrictions and thetarget_who_gen
is No special population targeted.Where possible, we also map the mechanism of travel into CoronaNet’s
travel_mechanism
variable and thetype_sub_cat
by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode the type
variable to take on values other than Internal Border Restrictions based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
domestic_restrictions filter(CATEGORY == 'Movement restrictions' & MEASURE == 'Domestic travel restrictions') %>%
mutate(type = case_when(
grepl("car|traffic|taxi|vehicle", COMMENTS) ~ "Social Distancing",
grepl("ordone sanit", COMMENTS) ~ "Lockdown",
grepl("mall|shop", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl('urfew', COMMENTS) ~ 'Curfew',
grepl("uarantine", COMMENTS) ~ "Quarantine",
TRUE ~ 'Internal Border Restrictions'),
type_sub_cat = case_when(
grepl('car', COMMENTS) ~ 'Regulating private vehicles in public circulation',
TRUE ~ as.character(NA)
),travel_mechanism = case_when(
grepl('flight', COMMENTS)~ "Flights",
grepl('train|Train', COMMENTS)~ "Trains",
grepl('bus', COMMENTS)~ "Buses",
grepl('ship', COMMENTS)~ "Seaports",
TRUE ~ as.character(NA)
),target_who_gen ='No special population targeted' )%>%
select(unique_id = ID, type, type_sub_cat, travel_mechanism, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, domestic_restrictions, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, domestic_restrictions, by = 'unique_id') acaps_coronanet_map
3.4 Public Health Measures
3.4.1 Health screenings
The following code maps how ACAPS captures health screenings in airports and border crossings to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Health screenings in airports and border crossings.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions, thetype_sub_cat
variable as Health Screenings (e.g. temperature checks), and thetarget_who_gen
is No special population targeted.Where possible, we also map the mechanism of travel into CoronaNet’s
travel_mechanism
variable by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode policies to type_sub_cat
to values other than Health Screenings (e.g. temperature checks) based on keywords in their textual description. The same strategy is applied to recode target_who_gen
. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
health_screenings filter(CATEGORY == 'Public health measures' & MEASURE == 'Health screenings in airports and border crossings') %>%
mutate(type = 'External Border Restrictions',
target_who_gen =
case_when(
grepl("migrant", COMMENTS) ~ 'Other population not specified above',
TRUE ~ 'No special population targeted'),
type_sub_cat =
case_when(
grepl("form|question|history", COMMENTS)~ "Travel History Form (e.g. documents where traveler has recently been)",
grepl("test", COMMENTS)~ "Negative COVID-19 Test",
TRUE ~ 'Health Screenings (e.g. temperature checks)'
),travel_mechanism = case_when(
grepl('flight|irport|Flight', COMMENTS)~ "Flights",
grepl('train|Train', COMMENTS)~ "Trains",
grepl('bus', COMMENTS)~ "Buses",
grepl('ship', COMMENTS)~ "Seaports",
TRUE ~ as.character(NA)
)%>%
) select(unique_id = ID, type, type_sub_cat, travel_mechanism, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, health_screenings, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, health_screenings, by = 'unique_id') acaps_coronanet_map
3.4.2 Strengthening the public health system
The following code maps how ACAPS captures policies that seek to strengthen the public health system to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Strengthening the public health system.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Health Resources and thetarget_who_gen
as Essential workers.Where possible, we also map the policy sub type into CoronaNet’s
type_sub_cat
variable by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode the type
variable to take on values other than Health Resources based on keywords in their textual description. The same strategy is applied to recode target_who_gen
. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
public_health_system filter(CATEGORY == 'Public health measures' & MEASURE == 'Strengthening the public health system') %>%
mutate(type =
case_when(
grepl("task force", COMMENTS) ~ " New Task Force, Bureau or Administrative Configuration",
grepl("COVAX|Astra|COVID-19 vaccine|COVID-19 Vacc|Corona vaccine|Pfizer|coronavirus vaccine|Covid-19 vaccine|NZ Govt vaccine", COMMENTS) ~ "COVID-19 Vaccines",
grepl("water|repatriation", COMMENTS) ~ "Other Policy Not Listed Above",
grepl("Elderly|ursing home", COMMENTS) ~ "Social Distancing",
grepl("Government to release contact tracing", COMMENTS) ~ 'Health Monitoring',
grepl("Prohibition of health workers to travel abroad", COMMENTS) ~ "External Border Restrictions",
TRUE ~ 'Health Resources',
),target_who_gen =
case_when(
grepl("efugee", COMMENTS) ~ "Asylum/refugee seekers",
grepl("migrant", COMMENTS) ~ 'Other population not specified above',
TRUE ~ 'No special population targeted',
),type_sub_cat = case_when(
== 'Health Resources' & grepl("insurance", COMMENTS) ~ "Health Insurance",
type == 'Health Resources' & grepl("flu", COMMENTS) ~ "Non COVID-19 Vaccines",
type == 'Health Resources' & grepl("sanitizer", COMMENTS) ~ "Hand Sanitizer",
type == 'Health Resources' & grepl("ospital|hotel| bed", COMMENTS) ~ "Masks",
type == 'Health Resources' & grepl("center", COMMENTS) ~ "Temporary Medical Centers",
type == 'Health Resources' & grepl("ppe|Protective Great|rotective gear|PPE|personal protective equipment", COMMENTS) ~ "Masks",
type == 'Health Resources' & grepl("mask|Mask", COMMENTS) ~ "Hospitals",
type == 'Health Resources' & grepl("drug|medicine pack", COMMENTS) ~ "Medicine/Drugs",
type == 'Health Resources' & grepl("lab|Lab|diagnostic|research", COMMENTS) ~ "Health Research Facilities",
type == 'Health Resources' & grepl("doctor|Doctor", COMMENTS) ~ "Doctors",
type == 'Health Resources' & grepl("Nurse|nurse", COMMENTS) ~ "nurse",
type == 'Health Resources' & grepl("ventilator|espirator", COMMENTS) ~ "Ventilators",
type == 'Health Resources' & grepl("uarantine|isolation", COMMENTS) ~ "Temporary Quarantine Centers",
type == 'Health Resources' & grepl("paramedic|contact tracer", COMMENTS) ~ "Other Heath Staff",
type == 'Health Resources' & grepl("technician|retired professional|retired health|elemedicine|ele-hotline|hotline|medicine student|medical student|medical professional|professional|staff capacity", COMMENTS) ~ "Unspecified Health Staff",
type == 'Health Resources' & grepl("olulnteer", COMMENTS) ~ "Health Volunteers",
type == 'Health Resources' & grepl("medical goods|biosafety materials|edical Supply", COMMENTS) ~ "Unspecified Health Materials",
type == 'Health Resources' & grepl("test|Test|TEST", COMMENTS) ~ "Test Kits",
type TRUE ~ as.character(NA)
)%>%
)select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, public_health_system, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, public_health_system, by = 'unique_id') acaps_coronanet_map
3.4.3 Medical tests
The following code maps how ACAPS captures policies in which governments oblige people to take health checks not related to COVID-19 to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Obligatory medical tests not related to COVID-19.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Health Testing, thetype_sub_cat
variable as Other health testing, and thetarget_who_gen
as No special population targeted.
<- acaps %>%
medical_test filter(CATEGORY == 'Public health measures' & MEASURE == 'Obligatory medical tests not related to COVID-19') %>%
mutate(type = 'Health Testing',
target_who_gen ='No special population targeted',
type_sub_cat = 'Other health testing') %>%
select(unique_id = ID, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, medical_test, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, medical_test, by = 'unique_id') acaps_coronanet_map
3.4.4 Mass population testing
The following code maps how ACAPS captures mass screening of the population of a country or region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Mass population testing.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Health Testing, thetype_sub_cat
variable as Health testing of entire population under the government’s jurisdiction, and thetarget_who_gen
is No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Health Testing based on keywords in their textual description. This strategy is applied to recode type_sub_cat
and target_who_gen
as well. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
mass_testing filter(CATEGORY == 'Public health measures' & MEASURE == 'Mass population testing') %>%
mutate(type =
case_when(
grepl("teacher|school", COMMENTS) ~ "Closure and Regulation of Schools",
TRUE ~ 'Health Testing'
),target_who_gen =
case_when(
grepl("teacher|school", COMMENTS) ~ "NA",
grepl("migrant", COMMENTS) ~ 'Migrant workers',
TRUE ~ 'No special population targeted'
),type_sub_cat =
case_when(
grepl("teacher|school", COMMENTS) ~ "NA",
TRUE ~ "Health testing of entire population under the government's jurisdiction"
%>%
))select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, mass_testing, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, mass_testing, by = 'unique_id') acaps_coronanet_map
3.4.5 Testing policy
The following code maps how ACAPS captures policies in which tests are conducted to identify people infected with COVID-19 in the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Testing policy.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Health Testing and thetarget_who_gen
as No special population targeted.Where possible, we also map the policy sub type into CoronaNet’s
type_sub_cat
variable by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode policies based on keywords in their textual description. This strategy is applied to recode the type_sub_cat
and target_who_gen
variables. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
testing_policy filter(CATEGORY == 'Public health measures' & MEASURE == 'Testing policy') %>%
mutate(type =
case_when(
grepl("travel|border|country|diplomat|departure|passenger|destination|airport|arriv|Country|ferry", COMMENTS) ~ "External Border Restrictions",
grepl("shipment|allocat|test kit|Test kit|Reception of", COMMENTS) ~ "Health Resources",
grepl("upermarket|grocery|shop|business| bar|restaurant", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl("disinfect", COMMENTS) ~ "Hygiene",
grepl("teacher|school", COMMENTS) ~ " Closure and Regulation of Schools",
TRUE ~ 'Health Testing'
),type_sub_cat = case_when(
== "External Border Restrictions" ~ "Negative COVID-19 Test",
type == 'Health Resources' ~ 'Test Kits',
type grepl("upermarket|grocery", COMMENTS) ~ "Supermarkets/grocery stores",
TRUE ~ as.character(NA)
),target_who_gen =
case_when(
grepl("efugee", COMMENTS) ~ "Asylum/refugee seekers",
grepl("migrant", COMMENTS) ~ 'Migrant workers',
TRUE ~ 'No special population targeted')) %>%
select(unique_id = ID, type, type_sub_cat, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, testing_policy, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, testing_policy, by = 'unique_id') acaps_coronanet_map
3.4.6 General recommendations
The following code maps how ACAPS captures the public health messages to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as General recommendations.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Public Awareness Measures, thecompliance
variable as Recommended/Voluntary but no penalties, and thetarget_who_gen
as No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Public Awareness Measures based on keywords in their textual description. This strategy is also applied to recode compliance
and target_who_gen
variables. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
general_recommendations filter(CATEGORY == 'Public health measures' & MEASURE == 'General recommendations') %>%
mutate(type = case_when(
grepl('stay at home|stay home', COMMENTS) ~ 'Lockdown',
grepl('travel|Travel|trip|countr|abroad|not to fly', COMMENTS) ~ 'External Border Restrictions',
grepl('education|school|day care', COMMENTS) ~ 'Closure and Regulation of Schools',
grepl('hygiene|cleaning of various|disinfection', COMMENTS) ~ 'Hygiene',
grepl('unauthorized letter|cyber', COMMENTS) ~ ' Anti-Disinformation Measures',
grepl('uarantine|self-isolat', COMMENTS) ~ 'Quarantine',
grepl('mask|aged care|visits|physical distance| meter|Visit|public transport', COMMENTS) ~ 'Social Distancing',
grepl('usiness|employ|entitie|worker|companies|work|Employ|Work|ustomer|market|shopping|grocery', COMMENTS) ~ 'Restriction and Regulation of Businesses',
grepl('gatherings|Gathering|mass event|Church|church|political demo', COMMENTS) ~ ' Restrictions of Mass Gatherings',
grepl('beach|civil serv|swimming', COMMENTS) ~ 'Restriction and Regulation of Government Services',
TRUE ~ 'Public Awareness Measures'
),compliance = case_when(
grepl("fine", COMMENTS) ~ 'Mandatory With Fines',
TRUE ~ 'Recommended/Voluntary but no penalties'
),target_who_gen =
case_when(
grepl("abuse", COMMENTS) ~ "Domestically abused people",
grepl("migrant", COMMENTS) ~ 'Migrant workers',
grepl("homeless", COMMENTS) ~ 'Homeless population',
TRUE ~ 'No special population targeted'))%>%
select(unique_id = ID, type, compliance, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, general_recommendations, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, general_recommendations, by = 'unique_id') acaps_coronanet_map
3.4.7 Other public health measures enforced
The following code maps how ACAPS captures miscellaneous public health measures to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Other public health measures enforce.This policy can be mapped into multiple different options in the CoronaNet
type
variable. We can however map information from these policies types in thetarget_who_gen
as No special population targeted.Where possible, we also map relevant information into the CoronaNet’s
type
andtravel_mechansim
variable by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode policies in the target_who_gen
variable based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
measures_enforce filter(CATEGORY == 'Public health measures' & MEASURE == 'Other public health measures enforced') %>%
mutate(type = case_when(
grepl('stay at home|stay home|between 18:00|Full lockdown|lockdown', COMMENTS) ~ 'Lockdown',
grepl('travel|Travel|trip|countr|abroad|border|passenger|international|entry|airport|Airp|flight|cruise|Flight|air|trans|Tankers|ship|ships|Vessels', COMMENTS) ~ 'External Border Restrictions',
grepl('education|school|day care|child|student', COMMENTS) ~ 'Closure and Regulation of Schools',
grepl('unauthorized letter|cyber', COMMENTS) ~ 'Anti-Disinformation Measures',
grepl('uarantine|self-isolat', COMMENTS) ~ 'Quarantine',
grepl('mask|aged care|visits|physical disance| meter|-meter|Visit|public transport|visitation|adult strides|Fewer train|spread|distancing|handshake|kiss', COMMENTS) ~ 'Social Distancing',
grepl('cigarette|Retail|Store|dining|bank|office|store|usiness|employ|entitie|worker|companies|work|Employ|Work|ustomer|market|shopping|Grocer|grocer|otel|estaurant|Ski|ski|Grocery|shop|alcohol|liquor|Tobac|tobac|catering|Catering|cinema|guest|establishment|bar|bars|tourism|Slaughterhouses|Vehicle occupancy|gyms', COMMENTS) ~ 'Restriction and Regulation of Businesses',
grepl('desinfect|Desinfect|Cleaning|Sanit|Steril|hygiene|cleaning of various|disinfec|Sanitiz|Disinf|Hygie|saniti', COMMENTS) ~ 'Hygiene',
grepl('gatherings|Gathering|mass event|Church|church|political demo|worship|Worship|relig|event|venue|mosqu|demonstrations|sport', COMMENTS) ~ 'Restrictions of Mass Gatherings',
grepl('emergency|extends', COMMENTS) ~ 'Declaration of Emergency',
grepl('beach|civil serv|swimming|park|elect|post|library|public building|license|public serv|public therm|constitution|museum|justicial system', COMMENTS) ~ 'Restriction and Regulation of Government Services',
grepl("hospital|PPE|pharmac|Pharm|Hospital|surgery|Chloro|hand sanitiz|flu|omeless|pneumo|Flu|public drinking|birth", COMMENTS) ~ "Health Resources",
grepl("guid|Guid|list|Toolbox|toolbox", COMMENTS) ~'Public Awareness Measures',
grepl('test|sanitation', COMMENTS) ~ 'Health Testing',
grepl('counsel|new health technology|budget', COMMENTS) ~ 'Health Resources',
grepl('Red|contact trac|surveillance|investigate|control order|Mitigation|mitigation|indicator|monitor|monitoring|tracing', COMMENTS) ~ 'Health Monitoring',
grepl('expert group', COMMENTS) ~ 'New Task Force, Bureau or Administrative Configuration',
grepl("food|Relief|ban hunting|labour pretec|price-controlled|cigarrettes|army|labour|Hackathon", COMMENTS) ~"Other Policy Not Listed Above",
grepl('COVID-19 Vaccine|COVID-19 vaccine|COVID 19 Vaccine|vaccination|vaccine', COMMENTS) ~ 'COVID-19 Vaccines',
TRUE ~ as.character(NA),
),target_who_gen =
case_when(
grepl("abuse", COMMENTS) ~ "Domestically abused people",
grepl("migrant", COMMENTS) ~ 'Migrant workers',
grepl("homeless", COMMENTS) ~ 'Homeless population',
grepl("refugee", COMMENTS) ~ 'Asylum/refugee seekers',
TRUE ~ 'No special population targeted'),
travel_mechanism = case_when(
grepl('flight|irport|Flight', COMMENTS)~ "Flights",
grepl('train|Train', COMMENTS)~ "Trains",
grepl('bus |buses', COMMENTS)~ "Buses",
grepl('ship', COMMENTS)~ "Seaports",
TRUE ~ as.character(NA)
%>%
))select(unique_id = ID, type, target_who_gen, travel_mechanism)
Following this, the object which incorporates the mapping of the relevant subset of the data, measures_enforce, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, measures_enforce, by = 'unique_id') acaps_coronanet_map
3.4.8 Funeral and Burial Regulations
The following code maps how ACAPS captures policies on funeral and burial regulations to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Amendments to funeral and burial regulations.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Hygiene and thetarget_who_gen
is No special population targeted.
However, we have added customized code to recode the type
variable to take on values other than Hygiene based on keywords in their textual description. The same strategy is applied to recode sub-policy type and target_who_gen. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
funeral_regulations filter(CATEGORY == 'Public health measures' & MEASURE == 'Amendments to funeral and burial regulations') %>%
mutate(type =
case_when(
grepl("funeral|Funeral", COMMENTS) ~ 'Restrictions of Mass Gatherings',
TRUE ~ 'Hygiene'
),target_who_gen ='Other workers where the distinction between essential and non-essential is not explicitly made',
type_sub_cat =
case_when(
grepl("funeral|Funeral", COMMENTS) ~ 'Funerals and mourning rituals',
TRUE ~ 'Burial Procedure'
),%>%
) select(unique_id = ID, type, target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, funeral_regulations, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, funeral_regulations, by = 'unique_id') acaps_coronanet_map
3.4.9 Awareness campaigns
The following code maps how ACAPS captures public health awareness campaigns to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Awareness campaigns.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable asPublic Awareness Measures and thetarget_who_gen
as No special population targeted.
However, we have added customized codeto recode the target_who_gen
variable to take on values other than No special population targeted based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
awareness_campaigns filter(CATEGORY == 'Public health measures' & MEASURE == 'Awareness campaigns') %>%
mutate(type = 'Public Awareness Measures',
target_who_gen =
case_when(
grepl("efugee", COMMENTS) ~ "Asylum/refugee seekers",
grepl("migrant", COMMENTS) ~ 'Migrant workers',
TRUE ~ 'No special population targeted'))%>%
select(unique_id = ID, type, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, awareness_campaigns, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, awareness_campaigns, by = 'unique_id') acaps_coronanet_map
3.4.11 Introduction of isolation and quarantine policies
The following code maps how ACAPS captures the quarantine measures which apply to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Isolation and quarantine policies.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Quarantine and thetarget_who_gen
is No special population targeted.Where possible, we also map relevant information on the policy sub type into the CoronaNet’s
type_sub_cat
by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode the type
variable to take on values other than Quarantine based on keywords in their textual description. This strategy is also applied to recode the target_who_gen
variable. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
quarantine filter(CATEGORY == 'Public health measures' & MEASURE == 'Isolation and quarantine policies') %>%
mutate( type =
case_when(
grepl("daycare|day care", COMMENTS) ~ "Closure and Regulation of Schools",
grepl("retirement|residential homes|Hospital bars kids|Elderly|one visitor|aged 70|elderly|nursing homes|residential care|care institu|care home|care facil|Homecare|care centre|Care insti|old people|visits for various public|Social welfare|visiting ban", COMMENTS) ~ "Social Distancing",
grepl("Stay-home|Stay-Home|people are not allowed to move out of their houses|24 hours curfew|24h curfew|stay-at-home|stay at home|leave home between 1100", COMMENTS) ~ "Lockdown",
grepl("curfew", COMMENTS) ~ "Curfew",
grepl("vaccine development", COMMENTS) ~ "COVID-19 Vaccines",
grepl("employ", COMMENTS) ~ "Restriction and Regulation of Businesses",
TRUE ~ "Quarantine"
),target_who_gen =
case_when(
grepl("nigrant", COMMENTS) ~ "Migrant workers",
TRUE ~ 'No special population targeted'),
type_sub_cat = case_when(
== 'Social Distancing' & grepl("retirement|residential homes|Elderly|one visitor|aged 70|elderly|nursing homes|residential care|care institu|care home|care facil|Homecare|care centre|Care insti|old people|visits for various public|Social welfare|visiting ban", COMMENTS) ~ 'Restrictions on visiting nursing homes/long term care facilities',
type == 'Social Distancing' & grepl("Hospital bars kids", COMMENTS) ~ 'Restrictions on visiting hospitals',
type == 'Social Distancing' & grepl("care centre|Care insti|old people|visits for various public|Social welfare", COMMENTS) ~ 'Restrictions on visiting other group residential facilities (e.g. orphanages, group homes)',
type TRUE ~ as.character(NA)
)%>%
) select(type, unique_id = ID,target_who_gen, type_sub_cat)
Following this, the object which incorporates the mapping of the relevant subset of the data, quarantine, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, quarantine, by = 'unique_id') acaps_coronanet_map
3.4.12 Requirement to wear protective gear in public
The following code maps how ACAPS captures policies that require people to wear masks or gloves to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Public Health Measures and theMEASURE
as Requirement to wear protective gear in public.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Social Distancing and thetarget_who_gen
is No special population targeted.Where possible, we also map relevant information on the policy sub type into the CoronaNet’s
type_sub_cat
by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode the type
variable to take on values other than Social Distancing based on keywords in their textual description. The same strategy is applied to recode sub-policy type. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
masks filter(CATEGORY == 'Public health measures' & MEASURE == 'Requirement to wear protective gear in public') %>%
mutate( type =
case_when(
grepl("store|shops|estaurant| bar|ustomer|profession|office|compani", COMMENTS) ~ "Restriction and Regulation of Businesses",
grepl("school", COMMENTS) ~ "Closure and Regulation of Schools",
grepl("uarantine", COMMENTS) ~ "Quarantine",
grepl("roups of up to|indoor events", COMMENTS) ~ "Restrictions of Mass Gatherings",
TRUE ~ "Social Distancing"
),target_who_gen ='No special population targeted',
type_sub_cat =
case_when(
grepl("estaurant", COMMENTS) ~ "Restaurant",
grepl(" bar", COMMENTS) ~ "Bars",
grepl("public transport", COMMENTS) ~ "Other",
grepl("public areas|public spaces|everywhere|public place|PUBLIC SPACE", COMMENTS) ~ "All public spaces / everywhere",
TRUE ~ as.character(NA)
)%>%
) select(type,type_sub_cat, unique_id = ID, target_who_gen)
Following this, the object which incorporates the mapping of the relevant subset of the data, masks, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, masks, by = 'unique_id') acaps_coronanet_map
3.6 Humanitarian Exemptions
The following code maps how ACAPS captures humanitarian exemptions measures to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Humanitarian exemption and theMEASURE
as Humanitarian exemptions.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as External Border Restrictions and thetarget_who_gen
as No special population targeted.Where possible, we also map relevant information on the travel mechanism into the CoronaNet’s
travel_mechanism
by extracting keywords from the ACAPSCOMMENTS
variable.
However, we have added customized code to recode the target_who_gen
variable to take on values other than No special population targeted based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.
<- acaps %>%
humanitarian_exemp filter(CATEGORY == 'Humanitarian exemption' & MEASURE == 'Humanitarian exemptions') %>%
mutate(type = 'External Border Restrictions',
target_who_gen =
case_when(
grepl("efugee", COMMENTS) ~ 'Asylum/refugee seekers',
grepl("migrant", COMMENTS) ~ 'Migrant workers',
TRUE ~ 'No special population targeted'),
travel_mechanism =
case_when(
grepl('flight|air', COMMENTS)~ "Flights",
grepl('rain|rains', COMMENTS)~ "Trains",
grepl('sea ports|boat|boats|sea ports|ship|ships|vessels', COMMENTS)~ "Seaports",
grepl('cruis', COMMENTS)~ "Cruises",
TRUE ~ as.character(NA))
%>%
) select(unique_id = ID, type, target_who_gen,travel_mechanism)
Following this, the object which incorporates the mapping of the relevant subset of the data, humanitarian_exep, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the unique_id
variable to match the corresponding records.
<- rows_update(acaps_coronanet_map, humanitarian_exemp, by = 'unique_id') acaps_coronanet_map
4 Final Map Adjustments
Finally, once all the variables that are possible to harmonize from the ACAPS dataset to CoronaNet taxonomy have been identified, the results are exported in an .rds and .csv format, to be consolidated together with the other external databases to be harmonised. The final consolidated dataset is then processed for manual harmonisation into the CoronaNet Research Project dataset.
write.csv(acaps_coronanet_map, "acaps_coronanet_map.csv")
saveRDS(acaps_coronanet_map, "acaps_coronanet_map.rds")
3.5 Social Distancing
3.5.1 Schools closure
The following code maps how ACAPS captures school closure policies to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Social Distancing and theMEASURE
as Schools closure.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable as Closure and Regulation of Schools and thetarget_who_gen
as No special population targeted.Following this, the object which incorporates the mapping of the relevant subset of the data, reg_schools, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the
unique_id
variable to match the corresponding records.3.5.2 Closures of businesses and public services
The following code maps how ACAPS captures the restriction and regulations of business or government services, which applies to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Social Distancing and theMEASURE
is Closures of businesses and public services.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable asRestriction and Regulations of Government Services and thetarget_who_gen
is No special population targeted.However, we have added customized code to recode the
type
variable to take on values other than Restriction and Regulation of Businesses based on keywords in their textual description. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.Following this, the object which incorporates the mapping of the relevant subset of the data, reg_gov_services, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the
unique_id
variable to match the corresponding records.3.5.3 Restriction of Mass Gatherings of Prisoners
The following code maps how ACAPS captures prison policies undertaken to mitigate the spread of COVID-19 to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Social Distancing and theMEASURE
as Changes in prison policies.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable asRestriction of Mass Gatherings, thetype_sub_cat
as Prison population reduced, thetarget_who_gen
as Prisoners.Following this, the object which incorporates the mapping of the relevant subset of the data, mass_gathering, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the
unique_id
variable to match the corresponding records.3.5.4 Restriction of Mass Gatherings of General Public
The following code maps how ACAPS captures the restrictions of mass gathering measures which apply to all people in a region to the CoronaNet taxonomy.
The ACAPS taxonomy aims to capture such policies by coding the
CATEGORY
as Social Distancing and theMEASURE
as Limit public gatherings.The CoronaNet taxonomy aims to capture such policies by coding the
type
variable asRestriction of Mass Gatherings, thetype_sub_cat
variable as All/Unspecified mass gatherings, and thetarget_who_gen
as No special population targeted.However, we have added customized code to recode the
type
variable to take on values other than Restrictions of Mass Gatherings based on keywords in their textual description. This strategy is also applied to recode thetype_sub_cat
variable. This was necessary as some policies are miscoded in the original ACAPS taxonomy and this code helps minimize the chance that these miscodings are mapped into the CoronaNet taxonomy. The keywords were identified based on manual inspection of the ACAPS data.Following this, the object which incorporates the mapping of the relevant subset of the data, mass_gathering_general, is incorporated into the main object which records this mapping, acaps_coronanet_map, using the
unique_id
variable to match the corresponding records.