1 Data preparation

1.1 Load packages

  • Load packages: load packages and useful scripts for the analysis
  • Load scripts: We have written functions to handle much of the Bayesian analysis
  • Load Bayesian datasets: The Bayesian approach relies on large simulated datasets from the observed data, for this report we will only present the results graphically from data we have simulated elsewhere. The scripts bayes_scripts.R, bayesian_data_generation.R and bayesian_analysis.R should be able to be run locally if you want to generate your own simulated data. Alternatively you can use the pre-generated data which is stored in the data_clean\bayesian_models folder in the github repository here and then you can skip the bayesian_data_generation.R step.
source(here("scripts", "author_dictionary.R"))

1.2 Download data

We maintain a Google sheets document here which contains all eligible articles the research team have identified. This is currently viewable only and not open for editing. We have collected the general information for the search in the first sheet, the studies general information in the second, further information on study populations, outcomes of interest and quality of the studies are contained in the further sheets. These sheets are organised in a similar way to the manuscript and so are labelled table_1 to table_6.

sheets_id <- as_sheets_id("https://docs.google.com/spreadsheets/d/1HV2Zk_UD2_s1zzd47dCyb4UKRSM0dDg7zmUPA9CMdx4/edit?usp=sharing")
search_details <- read_sheet(sheets_id, range = 'article_screening')
data_study_general <- read_sheet(sheets_id, range =  'general_details')
table_1 <- read_sheet(sheets_id, sheet = 'pop_descriptives')
table_2 <-  read_sheet(sheets_id, sheet = 'testing')
table_3 <-  read_sheet(sheets_id, sheet = 'hospitalisation')
table_4 <-  read_sheet(sheets_id, sheet = 'severity')
table_5 <-  read_sheet(sheets_id, sheet = 'mortality')
table_6 <-  read_sheet(sheets_id, sheet = 'updated_quality_appraisal')

We have extracted data from 252 studies, however, some of these are duplicates and some have been removed from the analysis set. For example there have been multiple versions of the ISARIC report and several publications have been retracted. We aim to keep on top of this but there is some risk that in between versions data may be superseded.

1.3 Raw Data

The first sheet is Search details we use this sheet to keep track of the number of studies found in our search and keep track of the number of titles and abstracts screened and number of papers included in each review version. It presents the data in groups of search periods.

flextable(search_details[,1:11])

date_screening in format (2020-05-22)

ovid_number_results

ovid_screened

ovid_excluded

ovid_included

medrxiv_number_results

medrxiv_screened

medrxiv_included

other_source_included

total_included

superseded

2020-04-21

15

NA

NA

4

NA

NA

NA

24

28

NA

2020-05-05

57

7

4

3

37

10

0

0

3

NA

2020-05-16

67

12

12

0

70

64

22

6

28

NA

2020-06-02

297

48

44

4

158

158

32

2

38

NA

2020-06-23

477

72

63

6

157

157

41

2

49

NA

2020-07-14

656

30

26

4

105

105

23

1

28

8

2020-08-25

347

118

111

7

251

251

49

5

61

1

The second sheet is General study details this includes the lead author, where the study is published, the date it was published, the country in which the data originated and the DoI or link to the publication for our records. This is a searchable list of all the studies that have met out inclusion and exclusion criteria up until -Inf. These are live links and should direct to the relevant article, however, some may have been deleted or require institutional access.

The third sheet produces Table 1 this contains the details of the population of the studies in our review. Primarily includes smoking status but also the proportion of females in the study and the age of participants.

The fourth sheet produces Table 2 this contains the data extracted from relevant studies on testing data and smoking status. Most studies will not have data on this outcome however we filter these subsequently. These are sparse datasets as many studies do not report on all levels of smoking exposure.

The fifth sheet produces Table 3 this contains the data extracted from relevant studies on hospitalisation and smoking status.

The sixth sheet produces Table 4 this contains the data extracted from relevant studies disease severity data and smoking status. Disease severity is differentially reported across the studies in some there is reference to WHO severity score in others we have based the distinction on clinical characteristics or whether patients were admitted to Intensive or Critical care areas.

The seventh sheet produces Table 5 this contains the data extracted from relevant studies on COVID-19 related mortality and smoking status. A caution needed when interpreting this data is that most studies have not followed patients up for sufficient amounts of time to be able to accurately report on disease associated mortality.

The final sheet is used to collate data on Study quality we changed our method on assessing study quality in version 3 of the review. We use the following criteria:

  • Good:
    1. <20% missing data on smoking status and used a reliable self-report measure that distinguished between current, former and never smoking status AND
    2. biochemical verification of smoking status and reported results from adjusted analyses OR
    3. reported data from a representative/random sample
  • Fair
    1. <20% missing data on smoking status and used a reliable self-report measure that distinguished between current, former and never smoking status
  • Poor
    1. The remainder of the studies

1.4 Clean data and save updated versions as RDS files

The data from the google sheets document is then cleaned using a script from the linelist package which has been developed by T. Jombart and Z. Kamvar within the R Epidemics Consortium The script clean_data() ensures consistency among column names, country names, dates and missing values in the included sheets. Data is also saved as .rds files in the /data_clean folder of the project repository.

search_details <- search_details %>%
  clean_data() %>%
  rename(date_screened = date_screening_in_format_2020_05_22) %>%
  write_rds(here::here('data_clean', 'search_details.rds')) ## The title of the date screened column is to communicate among the review team how we need date formatted

protect_columns_1 <- names(data_study_general) %in% 'doi' ## As the DoI's are links we want to preserve their formatting when running the cleaning script

data_study_general <- data_study_general %>%
  rename(date_published = `date_published_format(2020-05-12)`) %>%
  clean_data(protect = protect_columns_1) %>%
  mutate(study_id = 1:length(lead_author)) %>% ## We create a unique study ID to aid checking of the outputs later
  write_rds(here::here('data_clean', 'data_study_general.rds'))

prisma_previous <- data_study_general

review_details <- data_study_general %>%
  select(lead_author, date_published, country, review_version, study_id) %>% ## The version of the review in which included studies were incorporated is noted
  write_rds(here::here('data_clean', 'review_details.rds'))

table_1 <- table_1 %>%
  clean_data() %>%
  mutate(., lower_range = sub('\\_.*', '', .$range)) %>%
  mutate(., upper_range = sub('.*_', '',.$range,)) %>% ## We break apart the age range into an upper and lower level
  select(lead_author, sample_size, female_sex_percent, data_source, median_age, mean_age, iqr_lower, iqr_upper, standard_deviation, lower_range,
         upper_range, current_smoker, former_smoker, current_former_smoker, never_smoker, never_smoker_unknown, current_vaper, former_vaper,
         current_former_vaper, not_stated, missing, total) %>%
  filter(!is.na(lead_author)) %>%
  left_join(., review_details, by = 'lead_author') %>%
  write_rds(here::here('data_clean', 'table_1.rds'))


##For the following tables we're only interested in obtaining data for trials which report on the specific outcome of interest

table_2 <-  table_2 %>%
  clean_data() %>%
  filter(data_on_testing == TRUE) %>%
  left_join(., review_details, by = 'lead_author') %>%
  write_rds(here::here('data_clean', 'table_2.rds'))

table_3 <-  table_3 %>%
  clean_data() %>%
  filter(data_on_hospitalisation == TRUE) %>%
  left_join(., review_details, by = 'lead_author') %>%
  write_rds(here::here('data_clean', 'table_3.rds'))

table_4 <-  table_4 %>%
  clean_data() %>%
  filter(data_disease_severity == TRUE) %>%
  left_join(., review_details, by = 'lead_author') %>%
  write_rds(here::here('data_clean', 'table_4.rds'))

table_5 <- table_5 %>%
  clean_data() %>%
  filter(data_on_deaths == TRUE) %>%
  left_join(., review_details, by = 'lead_author') %>%
  write_rds(here::here('data_clean', 'table_5.rds'))


protect_columns_2 <- !names(table_6) %in% 'lead_author'

table_6 <-  table_6 %>%
  clean_data(protect = protect_columns_2) %>%
  left_join(., table_1 %>%
              select(lead_author,
                     not_stated,
                     missing,
                     total),
                          by = 'lead_author') %>%
  mutate(missingness = rowSums(.[8:9], na.rm = T),
         missingness_percentage = (missingness/total)*100) %>% ## Later we want to assess the amount of missingness for each study as it would impact the inclusion of a study into the relevant meta-analyses
  select(-c(not_stated, missing, total, missingness)) %>%
  left_join(., review_details, by = 'lead_author') %>%
  write_rds(here::here('data_clean', 'table_6.rds'))

a <- data_study_general %>%
  select(lead_author, date_published, source, study_id) %>%
  rename('Lead Author' = lead_author,
         'Date Published' = date_published,
         'Publication Source' = source,
         'Study ID' = study_id)

a$`Lead Author` <- to_upper_camel_case(a$`Lead Author`, sep_out = ", ")
a$`Publication Source` <- to_title_case(a$`Publication Source`)
a$`Publication Source` <- if_else(str_length(a$`Publication Source`) < 5,
                                  toupper(a$`Publication Source`),
                                  to_title_case(a$`Publication Source`))

write_rds(data_study_general, here("data_clean", "data_study_general.rds"))

The package flextable can save tables in a format that is easily manageable within word which we currently use to write the manuscript (until I get better with RMarkdown). At various points I save these to the output_data folder.

2 Preparing the descriptive analysis

2.1 Choosing which data we want to include in the current review?

date_of_update <- Sys.Date()

prev_versions <- c('v1', 'v2', 'v3', 'v4', 'v5', 'v6')
#This can categorise which studies we want to look at
current_version <- c('v7')
#This will categorise which studies we are including in the current report

analysed_versions <- c('v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7')
#This will incorporate all studies into the current version of the report

We define the current version of the report here. At the moment this needs to be changed directly when compiling the code. This report has been generated for version v7

exclude_from_analysis <- c('isaric_1', 'isaric_2', 'isaric_3', 'miyara_old', 'isaric_4', 'mehra', 'hopkinson', 'gaibazzi', 'miyara_updated', 'russell_old', "petrilli_old", "magagnoli_old", "niedzwiedz_old", "bello_chavolla_old", "kimmig_old", "russell_old", "zuo_zuo_old", "patel_old", "shi_zuo_old")

We don’t want to remove studies from the dataset despite them no longer being included in the analysis. The excluded studies are defined in this chunk of code. We have excluded this version the following studies: -isaric_1, isaric_2, isaric_3, miyara_old, isaric_4, mehra, hopkinson, gaibazzi, miyara_updated, russell_old, petrilli_old, magagnoli_old, niedzwiedz_old, bello_chavolla_old, kimmig_old, russell_old, zuo_zuo_old, patel_old, and shi_zuo_old Generally we label these as _old in the Google sheet but there are exceptions to this so we manually define them at the moment.

2.2 Filter the included studies

Based on the version and excluded studies we produce the tables for analysis. This is a searchable table.

data_study_general <- data_study_general %>%
  filter(review_version %in% analysed_versions) %>%
  filter(!(lead_author %in% exclude_from_analysis)) %>%
  write_rds(., here::here('data_clean', 'data_study_general.rds'))

review_details <- data_study_general %>%
  select(lead_author, date_published, country, review_version, study_id) %>% 
  filter(!(lead_author %in% exclude_from_analysis))

table_1 <- table_1 %>%
  filter(review_version %in% analysed_versions) %>%
  select(-review_version) %>%
  filter(!(lead_author %in% exclude_from_analysis))

table_2 <- table_2 %>%
  filter(review_version %in% analysed_versions) %>%
  select(-review_version) %>%
  filter(!(lead_author %in% exclude_from_analysis))

table_3 <- table_3 %>%
  filter(review_version %in% analysed_versions) %>%
  select(-review_version) %>%
  filter(!(lead_author %in% exclude_from_analysis))

table_4 <- table_4 %>%
  filter(review_version %in% analysed_versions) %>%
  select(-review_version) %>%
  filter(!(lead_author %in% exclude_from_analysis))

table_5 <- table_5 %>%
  filter(review_version %in% analysed_versions) %>%
  select(-review_version) %>%
  filter(!(lead_author %in% exclude_from_analysis))

table_6 <- table_6 %>%
  filter(review_version %in% analysed_versions) %>%
  select(-review_version) %>%
  filter(!lead_author %in% exclude_from_analysis)

a <- data_study_general %>%
  select(lead_author, date_published, source, study_id) %>%
  rename('Lead Author' = lead_author,
         'Date Published' = date_published,
         'Publication Source' = source,
         'Study ID' = study_id)

a$`Lead Author` <- to_upper_camel_case(a$`Lead Author`, sep_out = ", ")
a$`Publication Source` <- to_title_case(a$`Publication Source`)
a$`Publication Source` <- if_else(str_length(a$`Publication Source`) < 5,
                                  toupper(a$`Publication Source`),
                                  to_title_case(a$`Publication Source`))

datatable(a)
a <- flextable(a)%>%
  set_table_properties(width = 1, layout = 'autofit') %>%
  set_caption(caption = 'Studies included in the current analysis')

save_as_docx(a, path = here('output_data', 'included_studies.docx'))

3 Study descriptive analysis

3.1 The PRISMA diagram will be updated

The PRISMA reporting guidelines for systematic reviews the guidance is available here. This takes the format of the number of articles obtained from the search from OVID (login may be needed), medRxiv, and articles identified by the research team. These are then screened at the title and abstract level. Full texts are then read to extract relevant data, if articles are excluded at this level we describe the reason for this. All of the selected articles will contribute to the narrative synthesis but only those that are judged ‘good’ or ‘fair’ quality will be included in the Bayesian meta-analysis.

current_total <- search_details %>%
  select(total_included) %>%
  sum()

previous_total <- search_details %>%
  filter(review_version %in% prev_versions) %>%
  select(total_included) %>%
  sum()

prisma <- search_details %>%
  group_by(review_version) %>%
  filter(review_version == current_version) %>%
  mutate(title_abstract = sum(ovid_number_results, medrxiv_number_results, other_source_included),
         full_texts_assessed = sum(ovid_screened, medrxiv_screened, other_source_included),
         title_abstract_included = sum(ovid_included, medrxiv_included, other_source_included),
         title_abstract_excluded = title_abstract - full_texts_assessed,
         full_text_excluded = full_texts_assessed-total_included,
         previous_total = previous_total,
         previous_minus_superseded = previous_total-superseded,
         current_total = current_total-superseded) %>%
  select("Review version" = review_version,
         "Date Screened" = date_screened,
         "OVID results" = "ovid_number_results",
         "medRxiv results" = "medrxiv_number_results",
         "Other sources" = "other_source_included",
         "Title/abstracts screened" = "title_abstract",
         "Title/abstracts excluded" = "title_abstract_excluded",
         "Full texts assessed" = "full_texts_assessed",
         "Full texts excluded" = "full_text_excluded",
         "Records carried forward" = "previous_minus_superseded",
         "Supersed from previous version" = superseded,
         "Studies in narrative synthesis" = "current_total")
flextable(prisma)

Review version

Date Screened

OVID results

medRxiv results

Other sources

Title/abstracts screened

Title/abstracts excluded

Full texts assessed

Full texts excluded

Records carried forward

Supersed from previous version

Studies in narrative synthesis

v7

2020-08-25

347

251

5

603

229

374

313

173

1

234

The number of studies contributing to meta-analysis is calculated later.

3.2 We summarise where the studies were conducted

As the pandemic continues studies are being reported from an increasing numbers of countries.

library('ggmap')
#Countries
country <- table_1$country %>%
  to_upper_camel_case() %>%
  recode(., 'Usa' = 'USA', 'Uk' = 'UK', 'SaudiArabia' = 'Saudi Arabia', "SouthKorea" = "South Korea") %>%
  table() %>%
  as.data.frame() %>%
  arrange(desc(Freq)) %>%
  rename('Country' = 1,
         'Number' = 2) %>%
  mutate(Country = as.character(Country))

ggplot(country, aes(x = reorder(Country, desc(-Number)), y = Number))+
  geom_col()+
  coord_flip()+
  theme_bw()+
  labs(title = 'Countries where studies were performed',
       y = 'Number of studies',
       x = 'Country')

a <- flextable(country) %>%
  set_table_properties(width = 0.5, layout = 'autofit')
a

Country

Number

USA

62

China

53

UK

27

Spain

13

Mexico

12

France

11

Italy

7

Multiple

6

Brazil

4

Iran

4

Israel

3

Turkey

3

Bangladesh

2

Chile

2

Denmark

2

Finland

2

India

2

Japan

2

Qatar

2

Australia

1

Austria

1

Canada

1

Colombia

1

Germany

1

Hungary

1

Kuwait

1

Netherlands

1

Poland

1

Portugal

1

Saudi Arabia

1

South Korea

1

Sweden

1

Switzerland

1

Thailand

1

country <- subset(country, Country != "Multiple")

Currently studies are reported from 33

country <- mutate_geocode(country, Country)

country_bounds <- country %>%
  select(lon, lat) %>%
  tidyr::drop_na() %>%
  sp::SpatialPointsDataFrame(coords = .[,1:2], data = .) %>%
  sp::bbox() * 1.1

map_world <- map_data(map = "world") %>%
  filter(region != "Antarctica")

save_as_docx(a, path = here('output_data', 'Countries_performing_studies.docx'))  

3.3 A map is produced for where the studies are performed

library(rgdal)
library(leaflet)
library(coronavirus)
update_dataset()

my_spdf <- readOGR( 
  dsn= paste0(here::here("data_clean", "world_shape_file")), 
  layer="TM_WORLD_BORDERS_SIMPL-0.3",
  verbose=FALSE
)

from_countries <- c("USA", "UK", "Iran", "South Korea")
to_countries <- c("United States", "United Kingdom", "Iran (Islamic Republic of)", "Korea, Republic of")
country_map <- country %>%
  mutate(Country = plyr::mapvalues(Country, from = from_countries,
                to = to_countries))

from_countries <- c("US", "Iran", "Korea, South", "Czech Republic")
to_countries <- c("United States", "Iran (Islamic Republic of)", "Korea, Republic of", "Czechia")

data("coronavirus")
summary_df <- coronavirus %>% 
  filter(type == "confirmed") %>%
  group_by(country) %>%
  summarise(total_cases = sum(cases)) %>%
  arrange(-total_cases) %>%
  rename("NAME" = country) %>%
  mutate(NAME = plyr::mapvalues(NAME, from = from_countries,
                to = to_countries))

my_spdf@data <- left_join(my_spdf@data, country_map %>%
            rename(NAME = Country),
          by = "NAME") %>%
  left_join(., summary_df %>%
              mutate(total_cases = total_cases/1000),
            by = "NAME") %>%
  mutate(NAME = as.factor(NAME))

my_spdf@data$Number[ which(my_spdf@data$Number == 0)] = NA
my_spdf@data$total_cases[ which(is.na(my_spdf@data$total_cases))] = 0


my_bins <- c(0, 1, 5, 10, 20, 30, 40, 70)
mypalette <- colorBin(palette="YlOrBr", domain=my_spdf@data$Number, na.color="transparent", bins=my_bins)

mytext <- paste(
  "Country: ", my_spdf@data$NAME,"<br/>", 
  "Number of studies included: ", my_spdf@data$Number, "<br/>", 
  "COVID-19 reported cases (thousands): ", round(my_spdf@data$total_cases, 2), 
  sep="") %>%
  lapply(htmltools::HTML)

html_map <- leaflet(my_spdf) %>% 
  addTiles()  %>% 
  setView(lat=10, lng=0 , zoom=2) %>%
  addPolygons( 
    fillColor = ~mypalette(Number), 
    stroke=TRUE, 
    fillOpacity = 0.9, 
    color="white", 
    weight=0.3,
    label = mytext,
    labelOptions = labelOptions( 
      style = list("font-weight" = "normal", padding = "3px 8px"), 
      textsize = "13px", 
      direction = "auto"
    )
  ) %>%
  addLegend( pal=mypalette, values=~Number, opacity=0.9, title = "Number of studies included", position = "bottomright" )

html_map

This map displays the number of studies produced in each country. The number of confirmed COVID-19 cases are shown when resting over each country for reference, data on confirmed cases have been obtained from Rami Krispin’s coronavirus package. The number of cases is updated when the report is generated so will not remain in date, it is current as of 2020-08-26 16:11:19. Countries displaying 0 cases are most likely due to naming mismatches.

3.4 We sumarise the settings in which they were conducted

Most studies are performed in hospital settings. Some studies are conducted in both such as those in emergency departments where patients are discharged home and followed up. Some registry studies utilising primary care networks are solely conducted in the community.

#Setting
setting <- to_upper_camel_case(data_study_general$study_setting, sep_out = ' ') %>%
  table(.) %>%
  sort('Number of studies', decreasing = T) %>%
  as.data.frame() %>%
  arrange(desc(Freq)) %>%
  rename('Setting' = 1,
         'Number' = 2)

a <- flextable(setting) %>%
  set_table_properties(width = 0.5, layout = 'autofit')
a

Setting

Number

Hospital

155

Community And Hospital

63

Community

14

Not Stated

1

Quarantine Centre

1

save_as_docx(a, path = here('output_data', 'Countries_performing_studies.docx'))  

3.5 We summarise the design of the included studies

The majority were retrospective cohorts. There were fewer case-control and cross-sectional studies. There were some prospective cohorts established and reported.

design <- to_upper_camel_case(data_study_general$study_design, sep_out = ' ') %>%
  recode("Rct" = "RCT") %>%
  table(.) %>%
  sort('Number of studies', decreasing = T) %>%
  as.data.frame() %>%
  arrange(desc(Freq)) %>%
  rename('Design' = 1,
         'Number' = 2)

a <- flextable(design) %>%
  set_table_properties(width = 0.5, layout = 'autofit')
a

Design

Number

Retrospective Cohort

165

Prospective Cohort

44

Cross Sectional

17

Case Control

3

Matched Case Control

3

RCT

2

save_as_docx(a, path = here('output_data', 'Study_designs.docx'))  

##For supplementary tables
study_design <- data_study_general %>%
  select(lead_author, study_design) %>%
  mutate(study_design = to_upper_camel_case(study_design, sep_out = " "),
         study_design = ifelse(study_design == "Rct", "Randomised Controlled Trial", study_design))

3.6 We update the number of participants we have included

  • Summary statistics: this table will give us the mean, median and IQR of the samples in the review
#Numbers
summary(table_1$sample_size)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##        6      115      404   121141     1631 17425445
  • Total number of participants: 28346947

3.7 We want to know if they use a CRF or electronic health record

The majority of data on smoking outcomes is extracted from electronic health records that are routinely collected in the provision of healthcare. Some of the studies utilise specifically designed Case Report Forms (CRFs). The source of information on smoking status is not always reported.

#Source of data
table_1$data_source %>%
  recode('electronic_health_records' = 'Electronic health record',
         'case_report_form' = 'Case report form',
         'not_stated' = 'Not stated') %>%
  table() %>%
  as.data.frame() %>%
  arrange(desc(Freq)) %>%
  rename('Data source' = 1,
         'Number' = 2) %>%
  flextable() %>%
  set_table_properties(width = 0.5, layout = 'autofit')

Data source

Number

Electronic health record

145

Case report form

60

Not stated

29

4 Smoking descriptive data

#Studies reporting smokers
current_smok <- table_1 %>%
  filter(., current_smoker != 'NA')
#Studies reporting former smokers
former_smok <- table_1 %>%
  filter(., former_smoker != 'NA')
#Studies reporting never smokers
never_smok <- table_1 %>%
  filter(., never_smoker != 'NA')
#Studies reporting current/former smokers
current_former_smok <- table_1 %>%
  filter(., current_former_smoker != 'NA')
#Studies reporting missing data
missing_smok <- table_1 %>%
  filter(., missing != 'NA') %>%
  mutate(percent = missing/total*100)
minimum <- min(missing_smok$percent)
maximum <- max(missing_smok$percent)
#Studies reporting never/unknown
never_smok_unknown <- table_1 %>%
  filter(., never_smoker_unknown != 'NA')

#Studies with not stated
smok_not_stated <- table_1 %>%
  filter(., not_stated != 'NA')

4.1 Studies reporting current, former and never smoking status

#Studies reporting current, former and never smoking status
full_smoking_status <- table_1 %>%
  filter(lead_author %in% current_smok$lead_author) %>%
  filter(lead_author %in% former_smok$lead_author) %>%
  filter(lead_author %in% never_smok$lead_author)

b <- full_smoking_status %>%
  select(lead_author, sample_size, current_smoker, former_smoker, never_smoker, study_id) %>%
  rename('Lead author' = lead_author,
         'Sample size' = sample_size,
         'Current smokers' = current_smoker,
         'Former smokers' = former_smoker,
         'Never smokers' = never_smoker,
         'Study ID' = study_id)

b$`Lead author` <- to_upper_camel_case(b$`Lead author`, sep_out = ", ")
b$`Lead author` <- plyr::mapvalues(b$`Lead author`,
                               from = cleaned_names,
                               to = correct_names)  
datatable(b,
          caption = "Studies providing data on current, former and never smokers") %>%
  formatRound(columns = c(2:5), digits = 0, interval = 3, mark = ",")
#These are the studies with data on current, former and never smokers

b <- b %>%
  select(-"Study ID") %>%
  flextable() %>%
    set_caption(caption = 'Studies reporting complete smoking status') %>%
  colformat_num(col_keys = c("Sample size", "Current smokers", "Former smokers", "Never smokers"),
                digits = 0, na_str = '-', big.mark = ',') %>%
  set_table_properties(width = 1, layout = 'autofit')

save_as_docx(b, path = here('output_data', 'Supplementary_1a.docx'))
  • Studies with complete smoking status: 57, 24.36%

4.2 Studies providing partially complete data on smoking status

#Studies reporting current or current/former and never smoking
semi_full_smoking_status <- table_1 %>%
  filter(lead_author %in% current_former_smok$lead_author) %>%
  filter(lead_author %in% never_smok$lead_author) %>%
  filter(!lead_author %in% full_smoking_status$lead_author)

b <- semi_full_smoking_status %>%
  select(lead_author, sample_size, current_former_smoker, never_smoker, study_id) %>%
  rename('Lead author' = lead_author,
         'Sample size' = sample_size,
         'Current/former smokers' = current_former_smoker,
         'Never smokers' = never_smoker,
         'Study ID' = study_id)

b$`Lead author` <- to_upper_camel_case(b$`Lead author`, sep_out = ", ")
b$`Lead author` <- plyr::mapvalues(b$`Lead author`,
                               from = cleaned_names,
                               to = correct_names)  

datatable(b,
          caption = "Studies providing partially complete data on smoking status") %>%
  formatRound(columns = c(2:4), digits = 0, interval = 3, mark = ",")
b <- b %>%
  select(-"Study ID") %>%
  flextable() %>%
    set_caption(caption = 'Studies reporting complete smoking status') %>%
  colformat_num(col_keys = c("Sample size", "Current/former smokers", "Never smokers"),
                digits = 0, na_str = '-', big.mark = ',') %>%
  set_table_properties(width = 1, layout = 'autofit')

save_as_docx(b, path = here('output_data', 'Supplementary_1b.docx'))
  • Studies reporting partially incomplete smoking data: 17
    These studies typically report smoking history as the measure of exposure which is why they have grouped values for current/former smokers

4.3 Studies providing incomplete data on smoking status

#Remaining studies
incomplete_smoking_status <- table_1 %>%
  filter(!lead_author %in% full_smoking_status$lead_author) %>%
  filter(!lead_author %in% semi_full_smoking_status$lead_author)

b <- incomplete_smoking_status %>%
  select(lead_author, sample_size, current_smoker, current_former_smoker, former_smoker, never_smoker, never_smoker_unknown, not_stated, missing, study_id) %>%
  rename('Lead author' = lead_author,
         'Sample size' = sample_size,
         'Current smokers' = current_smoker,
         'Current/former smokers' = current_former_smoker,
         'Former smoker' = former_smoker,
         'Never smokers' = never_smoker,
         'Never smoker/unknown' = never_smoker_unknown,
         'Not stated' = not_stated,
         'Missing' = missing,
         'Study ID' = study_id)

b$`Lead author` <- to_upper_camel_case(b$`Lead author`, sep_out = ", ")
b$`Lead author` <- plyr::mapvalues(b$`Lead author`,
                               from = cleaned_names,
                               to = correct_names)  

datatable(b,
          caption = "Studies providing incomplete data on smoking status") %>%
  formatRound(columns = c(2:8), digits = 0, interval = 3, mark = ",")
numeric_names <- colnames(b[2:9])
b <- b %>%
  select(-"Study ID") %>%
  flextable() %>%
    set_caption(caption = 'Studies reporting complete smoking status') %>%
  colformat_num(col_keys = numeric_names,
                digits = 0, na_str = '-', big.mark = ',') %>%
  set_table_properties(width = 1, layout = 'autofit')

save_as_docx(b, path = here('output_data', 'Supplementary_1c.docx'))
  • Studies missing key smoking data: 160

5 Smoking prevalence by country

#Smoking prevalence by country
country_prevalence_list <- table_1 %>%
    group_by(country, add = T) %>%
  mutate(., current_smok_percentage = current_smoker/total*100) %>%
  mutate(., former_smok_percentage = former_smoker/total*100) %>%
  mutate(., missing_percentage = missing/total*100) %>%
  mutate(., not_stated_percentage = not_stated/total*100) %>%
  mutate(never_smoker_percentage = never_smoker/total*100) %>%
  group_split()

We have split the data into a list where each country can be analysed separately if required

Confidence intervals are obtained through bootstrap estimates of a thousand repetitions of the included studies. Following the production of the confidence intervals from bootstrapping in olgas_script.R the prevalence graphs are produced in the smoking_plots.R script. This uses data extracted on current and former smoking prevalence data from countries which have included studies in this review.

5.1 Graph for smoking prevalence

Current smoking prevalence The studies are grouped by the country in which they were conducted. The solid line represents national current smoking prevalence obtained from national smoking survey estimates. Studies are further grouped by the setting in which they were conducted, Hospital (Triangle), Community (Square) and Community and Hospital (Circle). The size of the shape corresponds to the relative size of the study sample. The weighted mean current smoking prevalence is displayed for each setting. Country smoking prevalence

5.2 Graph for former smoking prevalence

Former smoker prevalence This graph is for former smoking prevalence. The data is more sparse for this exposure and therefore several countries are missing for the analysis. Studies are further grouped by the setting in which they were conducted, Hospital (Triangle), Community (Square) and Community and Hospital (Circle). The size of the shape corresponds to the relative size of the study sample. The weighted mean current smoking prevalence is displayed for each setting. Country former smoking prevalence

6 Final results tables and meta-analyses

6.1 Table 1: Included studies

#Updating table 1
table_1_word <- table_1 %>%
  mutate(., current_percentage = current_smoker/total*100,
         former_percentage = former_smoker/total*100,
         current_former_percentage = current_former_smoker/total*100,
         never_smoker_percentage = never_smoker/total*100,
         never_smoker_unknown_percentage = never_smoker_unknown/total*100,
         not_stated_percentage = not_stated/total*100,
         missing_percentage = missing/total*100) %>%
  select(lead_author, date_published, country, sample_size, median_age, iqr_lower, iqr_upper, mean_age, lower_range,
         upper_range, standard_deviation, female_sex_percent, current_percentage, former_percentage, current_former_percentage,
         never_smoker_percentage, never_smoker_unknown_percentage, not_stated_percentage, missing_percentage, study_id) %>%
  replace_na(., list(not_stated_percentage = 0, missing_percentage = 0)) %>%
  mutate(., missing_percentage = not_stated_percentage + missing_percentage,
         missing_percentage = formatC(missing_percentage, digits = 2, format = "f"))

#Smoking completeness
smoking_status <- as_tibble(full_smoking_status$lead_author) %>%
  rename(lead_author = 1) %>%
  mutate(complete_status = c("Yes")) %>%
  bind_rows(., semi_full_smoking_status %>%
              select(lead_author)) %>%
  bind_rows(., incomplete_smoking_status %>%
              select(lead_author)) %>%
  distinct() %>%
  mutate(complete_status = replace_na(complete_status, "No"))

#Data missingness
missingness <- table_6 %>%
  select(lead_author) %>%
  left_join(., table_1_word %>%
              select(lead_author, missing_percentage)) %>%
  mutate(missing_percentage = as.numeric(missing_percentage),
         low_missingness = ifelse(missing_percentage >= 20, "No", "Yes"))

#Defining poor quality
poor_quality <- missingness %>%
  select(-missing_percentage) %>%
  left_join(., smoking_status, by = "lead_author") %>%
  mutate(study_quality = ifelse(low_missingness == "No" | complete_status == "No", "Poor", "Not_poor"))

good_quality <- table_6 %>%
  left_join(., poor_quality, by = "lead_author") %>%
  select(lead_author, study_quality, biochemical_verification, random_representative_sample) %>%
  mutate(study_quality_final = ifelse(study_quality == "Not_poor" & (biochemical_verification == "Yes" | random_representative_sample == "Yes"), "good",
                                      ifelse(study_quality == "Poor", "poor", "fair")))

quality_rating <- good_quality %>%
  select(lead_author, study_quality_final) %>%
  rename("overall_quality" = study_quality_final)

table_1_word <- left_join(table_1_word, good_quality %>%
                            select(lead_author, study_quality_final))

a <- data_study_general %>%
  select(study_id, study_setting)

table_1_word <- left_join(table_1_word, a, by = 'study_id') %>%
  select(1:4, 22, 5:19, 21, 20)
table_1_word$date_published <- as.Date.character(table_1_word$date_published)
write_rds(table_1_word, here::here('data_clean', 'table_1_word.rds'))

table_1_word <- table_1_word %>%
  mutate(median_mean = ifelse(is.na(median_age), mean_age, median_age))

a <- table_1_word %>%
  mutate(median_mean = ifelse(is.na(median_age), mean_age, median_age),
         mean_used = ifelse(is.na(mean_age), '','^'),
         iqr = ifelse(is.na(iqr_lower), NA, paste(iqr_lower, iqr_upper, sep = '-')),
         range_combined = paste(lower_range, upper_range, sep = '-'),
         range_combined = na_if(range_combined, 'NA-NA'),
         standard_deviation = as.numeric(standard_deviation),
         st_dev = paste((as.integer(median_mean-standard_deviation)), as.integer((median_mean+standard_deviation)), sep = '-'),
         st_dev = na_if(st_dev, 'NA-NA'))

a$iqr <- coalesce(a$iqr, a$range_combined, a$st_dev)

a <- a %>%
  select(study_id, lead_author, date_published, country, sample_size, study_setting, median_mean, mean_used, iqr,
         female_sex_percent, current_percentage, former_percentage, current_former_percentage, never_smoker_percentage,
         never_smoker_unknown_percentage, missing_percentage, study_quality_final) %>%
  mutate(median_mean = paste(median_mean, mean_used, sep = ''),
         median_mean = na_if(median_mean, NA)) %>%
  select(-mean_used) %>%
  mutate(median_mean = ifelse(median_mean == 'NA', 'NA', paste(paste(median_mean, iqr, sep = ' ('),')', sep = ''))) %>%
  select(-iqr) %>%
  rename('Study ID' = study_id,
         'Lead author' = lead_author,
         'Date published' = date_published,
         'Country' = country,
         'Sample size' = sample_size,
         'Study setting' = study_setting,
         'Median (IQR)' = median_mean,
         'Female %' = female_sex_percent,
         'Current smoker %' = current_percentage,
         'Former smokers %' = former_percentage,
         'Current/former smokers %' = current_former_percentage,
         'Never smokers %' = never_smoker_percentage,
         'Never/unknown smokers %' = never_smoker_unknown_percentage,
         'Missing %' = missing_percentage,
         "Study quality" = study_quality_final)
         
a$`Lead author` <- to_upper_camel_case(a$`Lead author`, sep_out = ", ")
author_list <- plyr::mapvalues(a$`Lead author`,
                               from = cleaned_names,
                               to = correct_names)

a$`Lead author` <- author_list

a$`Study setting` <-to_title_case(a$`Study setting`, sep_out = " ")
a$`Country` <-to_title_case(a$`Country`, sep_out = " ")
a$`Country` <- a$Country %>%
  recode('Usa' = 'USA',
         'Uk' = 'UK')

numeric_columns <- c('Median (IQR)', 'Female %', 'Current smoker %','Former smokers %', 'Current/former smokers %',
                     'Never smokers %', 'Never/unknown smokers %', 'Missing %')

The total number of included studies is 234. This table is searchable

datatable(a) %>%
  formatRound(
    columns = c(8:14),
    digits = 2,
    interval = 3,
    mark = ",",
    dec.mark = getOption("OutDec")
)
a <- flextable(a) %>%
    set_caption(caption = 'Characteristics of included studies') %>%
  colformat_num(col_keys = numeric_columns, digits = 1, na_str = '-', big.mark = ',') %>%
  colformat_num(col_keys = 'Sample size', digits = 0, na_str = '-', big.mark = ',') %>%
  set_table_properties(width = 1, layout = 'autofit')

save_as_docx(a, path = here('output_data', 'Table_1.docx'))

6.2 Table 2: Smoking and COVID-19 diagnostic testing

#Table 2
table_2_word <-  table_2 %>%
  mutate(., sample = contributing_sample) %>%
  mutate(., negative_test_percentage =formatC(negative_test/sample*100, digits = 2, format = "f"),
         negative_current_percentage = formatC(negative_current_smoker/negative_test*100, digits = 2, format = "f"),
         negative_former_smoker_percentage = formatC(negative_former_smoker/negative_test*100, digits = 2, format = "f"),
         negative_current_former_smoker_percentage = formatC(negative_current_former_smoker/negative_test*100, digits = 2, format = "f"),
         negative_never_smoker_percentage = formatC(negative_never_smoker/negative_test*100, digits = 2, format = "f"),
         negative_not_stated_percentage = formatC(negative_not_stated/negative_test*100, digits = 2, format = "f"),
         positive_test_percentage = formatC(positive_test/sample*100, digits = 2, format = "f"),
         positive_current_smoker_percentage = formatC(positive_current_smoker/positive_test*100, digits = 2, format = "f"),
         positive_former_smoker_percentage = formatC(positive_former_smoker/positive_test*100, digits = 2, format = "f"),
         positive_current_former_smoker_percentage = formatC(positive_current_former_smoker/positive_test*100, digits = 2, format = "f"),
         positive_never_smoker_percentage = formatC(positive_never_smoker/positive_test*100, digits = 2, format = "f"),
         positive_not_stated_percentage = formatC(positive_not_stated/positive_test*100, digits = 2, format = "f")) %>%
  select(-data_on_testing, -missing, -date_published, -sample) %>%
  write_rds(here::here('data_clean', 'table_2_word.rds'))

quality_table_2 <- table_2_word %>%
  left_join(., quality_rating, by = 'lead_author')

a <- table_2_word %>%
  filter(contributing_sample >= 1) %>%
  mutate(Author = lead_author,
         Population_tested = contributing_sample,
         SARS_CoV_2_negative = paste(
           paste(negative_test, 
                 (negative_test_percentage), sep = " ("), "%)", sep = ""),
         N_current_smoker = paste(paste(negative_current_smoker, (negative_current_percentage), sep = " (")
                                  , "%)", sep = ""),
         N_current_smoker = na_if(N_current_smoker, "NA ( NA%)"),
         N_former_smoker = paste(paste(negative_former_smoker, (negative_former_smoker_percentage), sep = " (")
                                 , "%)", sep = ""),
         N_former_smoker = na_if(N_former_smoker, "NA ( NA%)"),
         N_current_former_smoker = paste(paste(negative_current_former_smoker,
                                               (negative_current_former_smoker_percentage), sep = " (")
                                         , "%)", sep = ""),
         N_current_former_smoker = na_if(N_current_former_smoker, "NA ( NA%)"),
         N_never_smoker = paste(paste(negative_never_smoker,
                                      (negative_never_smoker_percentage), sep = " (")
                                , "%)", sep = ""),
         N_never_smoker = na_if(N_never_smoker, "NA ( NA%)"),
         N_not_stated = paste(paste(negative_not_stated,
                                    (negative_not_stated_percentage), sep = " (")
                              , "%)", sep = ""),
         N_not_stated = na_if(N_not_stated, "NA ( NA%)")) %>%
  mutate(SARS_CoV_2_positive = paste(
    paste(positive_test, 
          (positive_test_percentage), sep = " ("), "%)", sep = ""),
    P_current_smoker = paste(paste(positive_current_smoker, (positive_current_smoker_percentage), sep = " (")
                             , "%)", sep = ""),
    P_current_smoker = na_if(P_current_smoker, "NA ( NA%)"),
    P_former_smoker = paste(paste(positive_former_smoker, (positive_former_smoker_percentage), sep = " (")
                            , "%)", sep = ""),
    P_former_smoker = na_if(P_former_smoker, "NA ( NA%)"),
    P_current_former_smoker = paste(paste(positive_current_former_smoker,
                                          (positive_current_former_smoker_percentage), sep = " (")
                                    , "%)", sep = ""),
    P_current_former_smoker = na_if(P_current_former_smoker, "NA ( NA%)"),
    P_never_smoker = paste(paste(positive_never_smoker,
                                 (positive_never_smoker_percentage), sep = " (")
                           , "%)", sep = ""),
    P_never_smoker = na_if(P_never_smoker, "NA ( NA%)"),
    P_not_stated = paste(paste(positive_not_stated,
                               (positive_not_stated_percentage), sep = " (")
                         , "%)", sep = ""),
    P_not_stated = na_if(P_not_stated, "NA ( NA%)")) %>%
  select(Author, Population_tested, SARS_CoV_2_negative, N_current_smoker, N_former_smoker, N_current_former_smoker,
         N_never_smoker, N_not_stated, SARS_CoV_2_positive, P_current_smoker, P_former_smoker, P_current_former_smoker,
         P_never_smoker, P_not_stated)

         
a$Author <- to_upper_camel_case(a$Author, sep_out = ", ")
a$Author  <- a$Author  %>%
  recode("Bello, Chavolla" = "Bello-Chavolla",
         "De, Lusignan" = "de Lusignan",
         "Del, Valle" = "del Valle")

numeric_columns <- c('Population_tested', 'SARS_CoV_2_negative', 'N_current_smoker', 'N_former_smoker',
                     'N_current_former_smoker', 'N_never_smoker', 'N_not_stated', 'SARS_CoV_2_positive', 'P_current_smoker',
                     'P_former_smoker', 'P_current_former_smoker', 'P_never_smoker', 'P_not_stated')
a <- flextable(a) %>%
    set_caption(caption = 'SARS-CoV-2 infection by smoking status') %>%
  colformat_num(j = numeric_columns, digits = 0, na_str = '-', big.mark = ',')

The number of studies reporting on infection by smoking status is: 45

a <- set_header_labels(a,
                       Population_tested = 'Total population tested',
                       SARS_CoV_2_negative = "N (%)",
                       N_current_smoker = "Current smoker (%)",
                       N_former_smoker = "Former smoker (%)",
                       N_current_former_smoker = "Current/former smoker (%)",
                       N_never_smoker = "Never smoker (%)",
                       N_not_stated = "Not stated (%)",
                       SARS_CoV_2_positive = "N (%)",
                       P_current_smoker = "Current smoker (%)",
                       P_former_smoker = "Former smoker (%)",
                       P_current_former_smoker = "Current/former smoker (%)",
                       P_never_smoker = "Never smoker (%)",
                       P_not_stated = "Not stated (%)") %>%
  add_header_row(top = TRUE, values = c("","SARS-CoV-2 negative", "SARS-CoV-2 positive" ), colwidths = c(2, 6, 6)) %>%
  theme_booktabs() %>%
  fix_border_issues() %>%
  set_table_properties(width = 1, layout = 'autofit')  %>%
  colformat_char(na_str = '-')
a
SARS-CoV-2 infection by smoking status

SARS-CoV-2 negative

SARS-CoV-2 positive

Author

Total population tested

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Not stated (%)

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Not stated (%)

Rentsch

3528

2974 (84.30%)

1444 (48.55%)

704 (23.67%)

-

826 (27.77%)

-

554 (15.70%)

159 (28.70%)

179 (32.31%)

-

216 (38.99%)

-

Fontanet

661

490 (74.13%)

64 (13.06%)

-

-

426 (86.94%)

-

171 (25.87%)

5 (2.92%)

-

-

166 (97.08%)

-

Cho

1331

793 (59.58%)

142 (17.91%)

214 (26.99%)

-

437 (55.11%)

-

538 (40.42%)

111 (20.63%)

145 (26.95%)

-

282 (52.42%)

-

Shah

243

212 (87.24%)

52 (24.53%)

47 (22.17%)

-

113 (53.30%)

-

29 (11.93%)

0 (0.00%)

9 (31.03%)

-

20 (68.97%)

-

Kolin

1474

805 (54.61%)

141 (17.52%)

307 (38.14%)

-

354 (43.98%)

3 (0.37%)

669 (45.39%)

72 (10.76%)

285 (42.60%)

-

303 (45.29%)

9 (1.35%)

de Lusignan

3291

2740 (83.26%)

366 (13.36%)

1450 (52.92%)

-

924 (33.72%)

-

551 (16.74%)

47 (8.53%)

303 (54.99%)

-

201 (36.48%)

-

Valenti

789

689 (87.33%)

197 (28.59%)

-

-

-

492 (71.41%)

40 (5.07%)

7 (17.50%)

-

-

-

33 (82.50%)

Parrotta

76

39 (51.32%)

1 (2.56%)

10 (25.64%)

-

27 (69.23%)

1 (2.56%)

37 (48.68%)

1 (2.70%)

10 (27.03%)

-

25 (67.57%)

1 (2.70%)

Berumen

102875

71353 (69.36%)

-

-

7173 (10.05%)

64180 (89.95%)

-

31522 (30.64%)

-

-

2748 (8.72%)

28774 (91.28%)

-

Israel

24906

20755 (83.33%)

3783 (18.23%)

2671 (12.87%)

-

14301 (68.90%)

-

41151 (165.23%)

406 (0.99%)

483 (1.17%)

-

3262 (7.93%)

-

del Valle

1108

143 (12.91%)

27 (18.88%)

53 (37.06%)

-

-

63 (44.06%)

965 (87.09%)

55 (5.70%)

293 (30.36%)

-

-

617 (63.94%)

Romao

34

20 (58.82%)

-

-

5 (25.00%)

-

15 (75.00%)

14 (41.18%)

-

-

4 (28.57%)

-

10 (71.43%)

Ramlall

11116

4723 (42.49%)

-

-

-

-

-

6393 (57.51%)

-

-

1643.001 (25.70%)

4749.999 (74.30%)

-

Sharma

501

267 (53.29%)

-

-

1 (0.37%)

-

266 (99.63%)

234 (46.71%)

-

-

20 (8.55%)

-

214 (91.45%)

Eugen, Olsen

407

290 (71.25%)

76 (26.21%)

104 (35.86%)

-

102 (35.17%)

-

117 (28.75%)

8 (6.84%)

46 (39.32%)

-

59 (50.43%)

-

Raisi, Estabragh

4510

3184 (70.60%)

-

-

1653 (51.92%)

-

1531 (48.08%)

1326 (29.40%)

-

-

683 (51.51%)

-

643 (48.49%)

Houlihan

177

97 (54.80%)

14 (14.43%)

14 (14.43%)

-

69 (71.13%)

-

80 (45.20%)

7 (8.75%)

19 (23.75%)

-

54 (67.50%)

-

Mcqueenie

428199

424355 (99.10%)

-

-

189299 (44.61%)

235056 (55.39%)

-

1311 (0.31%)

-

-

669 (51.03%)

642 (48.97%)

-

Woolford

4474

3161 (70.65%)

441 (13.95%)

1194 (37.77%)

-

1526 (48.28%)

-

1313 (29.35%)

145 (11.04%)

525 (39.98%)

-

643 (48.97%)

-

Lan

104

83 (79.81%)

-

-

24 (28.92%)

-

59 (71.08%)

21 (20.19%)

-

-

1 (4.76%)

-

20 (95.24%)

Hernandez, Garduno

32583

20279 (62.24%)

-

-

2399 (11.83%)

17861 (88.08%)

-

12304 (37.76%)

-

-

1191 (9.68%)

11083 (90.08%)

-

Govind

6215

6207 (99.87%)

4104 (66.12%)

1669 (26.89%)

-

342 (5.51%)

-

102 (1.64%)

78 (76.47%)

20 (19.61%)

-

2 (1.96%)

-

Gu

4699

3815 (81.19%)

360 (9.44%)

1142 (29.93%)

-

2313 (60.63%)

-

884 (18.81%)

40 (4.52%)

264 (29.86%)

-

580 (65.61%)

-

Kibler

702

680 (96.87%)

25 (3.68%)

-

-

-

655 (96.32%)

22 (3.13%)

1 (4.55%)

-

-

-

21 (95.45%)

Auvinen

61

33 (54.10%)

10 (30.30%)

8 (24.24%)

-

15 (45.45%)

-

28 (45.90%)

1 (3.57%)

9 (32.14%)

-

18 (64.29%)

-

Favara

70

55 (78.57%)

5 (9.09%)

-

-

-

50 (90.91%)

15 (21.43%)

2 (13.33%)

-

-

-

13 (86.67%)

Antonio, Villa

34263

23338 (68.11%)

2293 (9.83%)

-

-

-

21045 (90.17%)

10925 (31.89%)

1023 (9.36%)

-

-

-

9902 (90.64%)

Merzon

7807

7025 (89.98%)

-

-

1136 (16.17%)

-

5889 (83.83%)

782 (10.02%)

-

-

127 (16.24%)

-

655 (83.76%)

Trubiano

2676

2827 (105.64%)

-

-

256 (9.06%)

-

2586 (91.48%)

108 (4.04%)

-

-

3 (2.78%)

-

105 (97.22%)

Shi, Resurreccion

1521

1265 (83.17%)

-

-

681 (53.83%)

-

584 (46.17%)

256 (16.83%)

-

-

154 (60.16%)

-

102 (39.84%)

Riley

120620

120461 (99.87%)

2594 (2.15%)

-

-

19914 (16.53%)

97953 (81.32%)

159 (0.13%)

3 (1.89%)

-

-

17 (10.69%)

139 (87.42%)

Alizadehsani

319

196 (61.44%)

-

-

-

-

196 (100.00%)

123 (38.56%)

-

-

1 (0.81%)

-

122 (99.19%)

Merkely

10474

10336 (98.68%)

2904 (28.10%)

2107 (20.39%)

-

5310 (51.37%)

15 (0.15%)

70 (0.67%)

16 (22.86%)

15 (21.43%)

-

38 (54.29%)

1 (1.43%)

Mcgrail

209

118 (56.46%)

-

-

31 (26.27%)

-

87 (73.73%)

91 (43.54%)

-

-

8 (8.79%)

-

83 (91.21%)

Izquierdo

71192

NA ( NA%)

-

-

-

-

-

1006 (1.41%)

111 (11.03%)

-

-

-

895 (88.97%)

Ward

99908

94416 (94.50%)

10202 (10.81%)

-

-

-

84214 (89.19%)

5492 (5.50%)

433 (7.88%)

-

-

-

5059 (92.12%)

Ebinger

6062

5850 (96.50%)

99 (1.69%)

-

-

-

5668 (96.89%)

212 (3.50%)

3 (1.42%)

-

-

-

205 (96.70%)

Salerno

15920

14753 (92.67%)

-

-

5517 (37.40%)

8278 (56.11%)

958 (6.49%)

1167 (7.33%)

-

-

339 (29.05%)

626 (53.64%)

202 (17.31%)

Iversen

28792

27629 (95.96%)

4430 (16.03%)

1799 (6.51%)

-

21217 (76.79%)

246 (0.89%)

1163 (4.04%)

177 (15.22%)

78 (6.71%)

-

898 (77.21%)

10 (0.86%)

Hippisley, Cox

8275949

NA ( NA%)

-

-

-

-

-

19486 (0.24%)

1354 (6.95%)

5715 (29.33%)

-

12036 (61.77%)

381 (1.96%)

Fillmore

22914

21120 (92.17%)

8137 (38.53%)

8416 (39.85%)

-

3227 (15.28%)

1340 (6.34%)

1794 (7.83%)

452 (25.20%)

899 (50.11%)

-

322 (17.95%)

121 (6.74%)

Alkurt

119

NA ( NA%)

-

-

-

-

-

119 (100.00%)

14 (11.76%)

-

-

-

105 (88.24%)

Petrilli

10620

5341 (50.29%)

3454 (64.67%)

816 (15.28%)

-

541 (10.13%)

530 (9.92%)

5279 (49.71%)

3268 (61.91%)

902 (17.09%)

-

288 (5.46%)

821 (15.55%)

Bello-Chavolla

150200

98567 (65.62%)

-

-

9624 (9.76%)

-

88943 (90.24%)

51633 (34.38%)

-

-

4366 (8.46%)

-

47267 (91.54%)

save_as_docx(a, path = here('output_data', 'Table_2.docx'))

6.2.1 Smoking and testing meta-analysis

The steps to reproduce the Bayesian analysis are available above. We generate the treatment effect (mu) and standard deviations (tau) from the studies using the meta package

source(here::here('scripts', 'rr_function.R'))

table_2 <- table_2_word

included_studies <- quality_table_2 %>%
  filter(overall_quality != 'poor') %>%
  select(lead_author) %>%
  filter(lead_author != "reiter")

meta <- tibble('author' = table_2$lead_author,
               'negative_smoker' = table_2$negative_current_smoker,
               'negative_never_smoker' = table_2$negative_never_smoker,
               'positive_smoker' = table_2$positive_current_smoker,
               'positive_never_smoker' = table_2$positive_never_smoker,
               'negative_former_smoker' = table_2$negative_former_smoker,
               'positive_former_smoker' = table_2$positive_former_smoker) %>%
        filter(author %in% included_studies$lead_author)
meta$author <- to_upper_camel_case(meta$author, sep_out = ", ")
meta$author <- plyr::mapvalues(meta$author,
                               from = cleaned_names,
                               to = correct_names)

testing_rr <- list()
testing_rr[[1]] <- RR_testing('Rentsch', 'current')
testing_rr[[2]] <- RR_testing('Rentsch', 'former')
testing_rr[[3]] <- RR_testing('Cho', 'current')
testing_rr[[4]] <- RR_testing('Cho', 'former')
testing_rr[[5]] <- RR_testing('Kolin', 'current')
testing_rr[[6]] <- RR_testing('Kolin', 'former')
testing_rr[[7]] <- RR_testing('de Lusignan', 'current')
testing_rr[[8]] <- RR_testing('de Lusignan', 'former')
testing_rr[[9]] <- RR_testing('Parrotta', 'current')
testing_rr[[10]] <- RR_testing('Parrotta', 'former')
testing_rr[[11]] <- RR_testing('Israel', 'current')
testing_rr[[12]] <- RR_testing('Israel', 'former')
testing_rr[[13]] <- RR_testing('Eugen-Olsen', 'current')
testing_rr[[14]] <- RR_testing('Eugen-Olsen', 'former')
testing_rr[[15]] <- RR_testing('Houlihan', 'current')
testing_rr[[16]] <- RR_testing('Houlihan', 'former')
testing_rr[[17]] <- RR_testing('Woolford', 'current')
testing_rr[[18]] <- RR_testing('Woolford', 'former')
testing_rr[[19]] <- RR_testing('Govind', 'current')
testing_rr[[20]] <- RR_testing('Govind', 'former')
testing_rr[[21]] <- RR_testing('Gu', 'current')
testing_rr[[22]] <- RR_testing('Gu', 'former')
testing_rr[[23]] <- RR_testing('Petrilli', 'current')
testing_rr[[24]] <- RR_testing('Petrilli', 'former')
testing_rr[[25]] <- RR_testing('Auvinen', 'current')
testing_rr[[26]] <- RR_testing('Auvinen', 'former')
testing_rr[[27]] <- RR_testing('Merkely', 'current')
testing_rr[[28]] <- RR_testing('Merkely', 'former')
testing_rr[[29]] <- RR_testing('Iversen', 'current')
testing_rr[[30]] <- RR_testing('Iversen', 'former')
testing_rr[[31]] <- RR_testing('Fillmore', 'current')
testing_rr[[32]] <- RR_testing('Fillmore', 'former')

data <- testing_rr
k <- do.call(rbind.data.frame, data)

#SEs for Niedzwiedz et al. 2020

#current vs. never

niedz_log_RR_1<-log(1.15)
niedz_log_SE_1<-(log(1.54)-log(0.86))/3.92

k <- k %>%
  add_row(., study = 'Niedzwiedz', smoking_status = 'current', log_RR = niedz_log_RR_1, log_SE = niedz_log_SE_1)
#former vs. never

niedz_log_RR_2<-log(1.42)
niedz_log_SE_2<-(log(1.69)-log(1.19))/3.92

k <- k %>%
  add_row(., study = 'Niedzwiedz', smoking_status = 'former', log_RR = niedz_log_RR_2, log_SE = niedz_log_SE_2)

numbers_in_analysis <- table_2_word %>%
        left_join(., quality_rating, by = 'lead_author') %>%
        filter(., overall_quality != 'poor') %>%
        add_row(lead_author = 'niedzwiedz', contributing_sample = 1474) %>%
        replace_na(list(negative_not_stated = 0, positive_not_stated = 0)) %>%
        mutate(contributing_sample = (contributing_sample - (negative_not_stated+positive_not_stated))) %>%
                       select(lead_author, contributing_sample) %>%
  na.omit()
numbers_in_analysis$lead_author <- to_upper_camel_case(numbers_in_analysis$lead_author, sep_out = ", ")
numbers_in_analysis$lead_author <- plyr::mapvalues(numbers_in_analysis$lead_author,
                               from = cleaned_names,
                               to = correct_names)

running_meta_count <- k %>%
  group_by(study) %>%
  summarise()

ecdf <- read_rds(here("data_clean", "bayesian_models", "ecdf_list.rds"))
m1_a_ecdf <- ecdf[[1]]
m2_a_ecdf <- ecdf[[2]]
m3_a_ecdf <- ecdf[[3]]
m4_a_ecdf <- ecdf[[4]]
m5_a_ecdf <- ecdf[[5]]
m6_a_ecdf <- ecdf[[6]]
m7_a_ecdf <- ecdf[[7]]
m8_a_ecdf <- ecdf[[8]]

The studies included in meta-analysis are rentsch, cho, kolin, de_lusignan, parrotta, israel, eugen_olsen, houlihan, woolford, govind, gu, auvinen, merkely, iversen, hippisley_cox, fillmore, petrilli, and niedzwiedz.

6.2.1.1 Current versus never smokers for testing positive

#current vs. never smokers
current_never_meta <- k %>%
  filter(smoking_status == 'current') %>%
  left_join(., numbers_in_analysis %>%
              rename("study" = lead_author),
            by = c("study")) %>%
  mutate(study = paste(study, contributing_sample, sep = ", n = ")) %>%
  select(-contributing_sample)

a <-metagen(current_never_meta$log_RR,
           current_never_meta$log_SE,
           studlab = current_never_meta$study,
           sm="RR",
           comb.fixed = F, comb.random = T)


write_rds(a, here("data_clean", "bayes_testing_current.rds"))

Current smoking against never smoking for testing positive ECDF for current smoking against never smoking for testing positive

The ECDF shows the probability of the risk being less than or equal to RR = 0.9, 95.44%

6.2.1.2 Former versus never smokers

#former vs. never smokers

former_never_meta <- k %>%
  filter(smoking_status == 'former') %>%
  left_join(., numbers_in_analysis %>%
              rename("study" = lead_author),
            by = c("study")) %>%
  mutate(study = paste(study, contributing_sample, sep = ", n = ")) %>%
  select(-contributing_sample)

a<-metagen(former_never_meta$log_RR,
           former_never_meta$log_SE,
           studlab = former_never_meta$study,
           sm="RR", comb.fixed = F, comb.random = T)

write_rds(a, here("data_clean", "bayes_testing_former.rds"))

Former smoking against never smoking for testing positive ECDF for former smoking against never smoking for testing positive

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 20.85%

6.3 Table 3: Smoking and COVID-19 hospitalisation

#Table 3
table_3_word <- table_3 %>%
  mutate(., sample = sample_with_outcome) %>%
  mutate(., community_percentage = formatC(number_community/sample*100, digits = 2, format = "f")) %>%
  mutate(., community_current_smoker_percent = formatC(community_current_smoker/number_community*100, digits = 2, format = "f")) %>%
  mutate(., community_former_smoker_percent = formatC(community_former_smoker/number_community*100, digits = 2, format = "f")) %>%
  mutate(., community_current_former_smoker_percent = formatC(community_current_former_smoker/number_community*100, digits = 2, format = "f")) %>%
  mutate(., community_never_smoker_percent = formatC(community_never_smoker/number_community*100, digits = 2, format = "f")) %>%
  mutate(., community_never_unknown_smoker_percent = formatC(community_never_unknown_smoker/number_community*100, digits = 2, format = "f")) %>%
  mutate(., community_not_stated_percent = formatC(community_not_stated/number_community*100, digits = 2, format = "f")) %>%
  mutate(., number_hospitalised_percent = formatC(number_hospitalised/sample*100, digits = 2, format = "f")) %>%
  mutate(., hospitalised_current_smoker_percent = formatC(hospitalised_current_smoker/number_hospitalised*100, digits = 2, format = "f")) %>%
  mutate(., hospitalised_former_smoker_percent = formatC(hospitalised_former_smoker/number_hospitalised*100, digits = 2, format = "f")) %>%
  mutate(., hospitalised_current_former_smoker_percent = formatC(hospitalised_current_former_smoker/number_hospitalised*100, digits = 2, format = "f")) %>%
  mutate(., hospitalised_never_smoker_percent = formatC(hospitalised_never_smoker/number_hospitalised*100, digits = 2, format = "f")) %>%
  mutate(., hospitalised_never_unknown_smoker_percent = formatC(hospitalised_never_unknown_smoker/number_hospitalised*100, digits = 2, format = "f")) %>%
  mutate(., hospitalised_not_stated_percent = formatC(hospitalised_not_stated/number_hospitalised*100, digits = 2, format = "f")) %>%
  select(lead_author, sample_with_outcome, number_community, community_percentage,
         community_current_smoker, community_current_smoker_percent, community_former_smoker, 
         community_former_smoker_percent, community_current_former_smoker,
         community_current_former_smoker_percent, community_never_smoker, community_never_smoker_percent,
         community_never_unknown_smoker, community_never_unknown_smoker_percent, 
         community_not_stated, community_not_stated_percent, number_hospitalised, number_hospitalised_percent,
         hospitalised_current_smoker, hospitalised_current_smoker_percent, hospitalised_former_smoker,
         hospitalised_former_smoker_percent, hospitalised_current_former_smoker, hospitalised_current_former_smoker_percent,
         hospitalised_never_smoker, hospitalised_never_smoker_percent, hospitalised_never_unknown_smoker,
         hospitalised_never_unknown_smoker_percent, hospitalised_not_stated, hospitalised_not_stated_percent) %>%
  write_rds(here::here('data_clean', 'table_3_word.rds'))

The number of studies reporting on hospitalisation by smoking status is: 29

quality_table_3 <- table_3_word %>%
  left_join(., quality_rating, by = 'lead_author') %>%
  select(lead_author, overall_quality)

a <- table_3_word %>%
  filter(number_community >= 1) %>%
  mutate(Author = lead_author,
         Population = sample_with_outcome,
         Community = paste(
           paste(number_community, 
                 as.integer(community_percentage), sep = " ("), "%)", sep = ""),
         C_current_smoker = paste(paste(community_current_smoker, (community_current_smoker_percent), sep = " (")
                                  , "%)", sep = ""),
         C_current_smoker = na_if(C_current_smoker, "NA ( NA%)"),
         C_former_smoker = paste(paste(community_former_smoker, (community_former_smoker_percent), sep = " (")
                                 , "%)", sep = ""),
         C_former_smoker = na_if(C_former_smoker, "NA ( NA%)"),
         C_current_former_smoker = paste(paste(community_current_former_smoker,
                                               (community_current_former_smoker_percent), sep = " (")
                                         , "%)", sep = ""),
         C_current_former_smoker = na_if(C_current_former_smoker, "NA ( NA%)"),
         C_never_smoker = paste(paste(community_never_smoker,
                                      (community_never_smoker_percent), sep = " (")
                                , "%)", sep = ""),
         C_never_smoker = na_if(C_never_smoker, "NA ( NA%)"),
         C_never_unknown_smoker = paste(paste(community_never_unknown_smoker,
                                              (community_never_unknown_smoker_percent), sep = " (")
                                        , "%)", sep = ""),
         C_never_unknown_smoker = na_if(C_never_unknown_smoker, "NA ( NA%)"),
         C_not_stated = paste(paste(community_not_stated,
                                    (community_not_stated_percent), sep = " (")
                              , "%)", sep = ""),
         C_not_stated = na_if(C_not_stated, "NA ( NA%)")) %>%
  mutate(Hospitalised = paste(
    paste(number_hospitalised, 
          as.integer(number_hospitalised_percent), sep = " ("), "%)", sep = ""),
    H_current_smoker = paste(paste(hospitalised_current_smoker, (hospitalised_current_smoker_percent), sep = " (")
                             , "%)", sep = ""),
    H_current_smoker = na_if(H_current_smoker, "NA ( NA%)"),
    H_former_smoker = paste(paste(hospitalised_former_smoker, (hospitalised_former_smoker_percent), sep = " (")
                            , "%)", sep = ""),
    H_former_smoker = na_if(H_former_smoker, "NA ( NA%)"),
    H_current_former_smoker = paste(paste(hospitalised_current_former_smoker,
                                          (hospitalised_current_former_smoker_percent), sep = " (")
                                    , "%)", sep = ""),
    H_current_former_smoker = na_if(H_current_former_smoker, "NA ( NA%)"),
    H_never_smoker = paste(paste(hospitalised_never_smoker,
                                 (hospitalised_never_smoker_percent), sep = " (")
                           , "%)", sep = ""),
    H_never_smoker = na_if(H_never_smoker, "NA ( NA%)"),
    H_never_unknown_smoker = paste(paste(hospitalised_never_unknown_smoker,
                                         (hospitalised_never_unknown_smoker_percent), sep = " (")
                                   , "%)", sep = ""),
    H_never_unknown_smoker = na_if(H_never_unknown_smoker, "NA ( NA%)"),
    H_not_stated = paste(paste(hospitalised_not_stated,
                               (hospitalised_not_stated_percent), sep = " (")
                         , "%)", sep = ""),
    H_not_stated = na_if(H_not_stated, "NA ( NA%)")) %>%
  select(Author, Population, Community, C_current_smoker, C_former_smoker, C_current_former_smoker,
         C_never_smoker,C_never_unknown_smoker,C_not_stated, Hospitalised, H_current_smoker, H_former_smoker,
         H_current_former_smoker, H_never_smoker, H_never_unknown_smoker, H_not_stated)

         
a$Author <- to_upper_camel_case(a$Author, sep_out = ", ")
a$Author <- plyr::mapvalues(a$Author,
                               from = cleaned_names,
                               to = correct_names)

numeric_columns <- 'Population'

a <- flextable(a) %>%
    set_caption(caption = 'COVID-19 hospitalisation by smoking status') %>%
  colformat_num(col_keys = numeric_columns, digits = 0, na_str = '-', big.mark = ',') %>%
  colformat_char(na_str = '-')

a <- set_header_labels(a,
                       Population = 'Population with outcome',
                       Community = "N (%)",
                       C_current_smoker = "Current smoker (%)",
                       C_former_smoker = "Former smoker (%)",
                       C_current_former_smoker = "Current/former smoker (%)",
                       C_never_smoker = "Never smoker (%)",
                       C_never_unknown_smoker = "Never/unknown smoker (%)",
                       C_not_stated = "Not stated (%)",
                       Hospitalised = "N (%)",
                       H_current_smoker = "Current smoker (%)",
                       H_former_smoker = "Former smoker (%)",
                       H_current_former_smoker = "Current/former smoker (%)",
                       H_never_smoker = "Never smoker (%)",
                       H_never_unknown_smoker = "Never/unknown smoker (%)",
                       H_not_stated = "Not stated (%)") %>%
  add_header_row(top = TRUE, values = c("","Community", "Hospitalised" ), colwidths = c(2, 7, 7)) %>%
  theme_booktabs() %>%
  fix_border_issues() %>%
  set_table_properties(width = 1, layout = 'autofit')
a
COVID-19 hospitalisation by smoking status

Community

Hospitalised

Author

Population with outcome

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Never/unknown smoker (%)

Not stated (%)

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Never/unknown smoker (%)

Not stated (%)

Rentsch

554

269 (48%)

69 (25.65%)

90 (33.46%)

-

110 (40.89%)

-

-

285 (51%)

90 (31.58%)

89 (31.23%)

-

106 (37.19%)

-

-

Chow (US CDC)

6637

5143 (77%)

61 (1.19%)

80 (1.56%)

-

-

-

5002 (97.26%)

1494 (22%)

27 (1.81%)

78 (5.22%)

-

-

-

1389 (92.97%)

Argenziano

1000

151 (15%)

14 (9.27%)

18 (11.92%)

-

119 (78.81%)

-

-

849 (84%)

35 (4.12%)

161 (18.96%)

-

653 (76.91%)

-

-

Lubetzky

54

15 (27%)

-

-

4 (26.67%)

-

-

11 (73.33%)

39 (72%)

-

-

8 (20.51%)

-

-

31 (79.49%)

Carillo-Vega

9946

3922 (39%)

408 (10.40%)

-

-

-

-

3514 (89.60%)

6024 (60%)

486 (8.07%)

-

-

-

-

5538 (91.93%)

Yanover

4353

4180 (96%)

484 (11.58%)

118 (2.82%)

-

3578 (85.60%)

-

-

173 (3%)

30 (17.34%)

11 (6.36%)

-

132 (76.30%)

-

-

Hamer

387109

386349 (99%)

37333 (9.66%)

134542 (34.82%)

-

214474 (55.51%)

-

-

760 (0%)

93 (12.24%)

313 (41.18%)

-

354 (46.58%)

-

-

Heili-Frades

4712

1973 (41%)

121 (6.13%)

222 (11.25%)

-

-

1630 (82.62%)

1630 (82.62%)

2739 (58%)

112 (4.09%)

598 (21.83%)

-

-

2029 (74.08%)

-

Freites

123

69 (56%)

1 (1.45%)

-

-

-

-

68 (98.55%)

54 (43%)

3 (5.56%)

-

-

-

-

51 (94.44%)

Berumen

102875

18832 (18%)

-

-

1546 (8.21%)

-

17286 (91.79%)

-

12690 (12%)

-

-

1202 (9.47%)

-

11488 (90.53%)

-

Gianfrancesco

600

323 (53%)

-

-

61 (18.89%)

-

-

262 (81.11%)

277 (46%)

-

-

68 (24.55%)

-

-

209 (75.45%)

Chaudhry

40

19 (47%)

-

-

0 (0.00%)

-

-

19 (100.00%)

21 (52%)

-

-

6 (28.57%)

-

-

15 (71.43%)

Giannouchos

89756

58485 (65%)

4679 (8.00%)

-

-

-

53806 (92.00%)

-

31271 (34%)

2721 (8.70%)

-

-

-

28550 (91.30%)

-

Wang, Oekelen

57

22 (38%)

-

-

6 (27.27%)

-

-

16 (72.73%)

36 (63%)

-

-

15 (41.67%)

-

-

20 (55.56%)

Miyara

470

132 (28%)

14 (10.61%)

41 (31.06%)

-

77 (58.33%)

-

-

338 (71%)

18 (5.33%)

111 (32.84%)

-

209 (61.83%)

-

-

Suleyman

463

108 (23%)

-

-

23 (21.30%)

-

-

85 (78.70%)

355 (76%)

-

-

137 (38.59%)

-

-

218 (61.41%)

Garassino

196

48 (24%)

10 (20.83%)

27 (56.25%)

-

11 (22.92%)

-

-

152 (77%)

38 (25.00%)

84 (55.26%)

-

26 (17.11%)

-

-

Siso-Almirall

260

119 (45%)

-

-

31 (26.05%)

-

-

88 (73.95%)

141 (54%)

-

-

50 (35.46%)

-

-

91 (64.54%)

Gu

884

511 (57%)

30 (5.87%)

126 (24.66%)

-

355 (69.47%)

-

-

373 (42%)

10 (2.68%)

138 (37.00%)

-

225 (60.32%)

-

-

Killerby

531

311 (58%)

-

-

37 (11.90%)

222 (71.38%)

-

52 (16.72%)

220 (41%)

-

-

54 (24.55%)

157 (71.36%)

-

9 (4.09%)

Nguyen

689

333 (48%)

-

-

57 (17.12%)

-

-

276 (82.88%)

356 (51%)

-

-

114 (32.02%)

-

-

242 (67.98%)

Mendy

689

473 (68%)

-

-

84 (17.76%)

-

-

389 (82.24%)

216 (31%)

-

-

86 (39.81%)

-

-

130 (60.19%)

Soares

10713

9561 (89%)

132 (1.38%)

-

-

-

9429 (98.62%)

-

1152 (10%)

77 (6.68%)

-

-

-

1075 (93.32%)

-

Zobairy

203

65 (32%)

1 (1.54%)

-

-

-

64 (98.46%)

-

138 (67%)

11 (7.97%)

-

-

-

127 (92.03%)

-

Izquierdo

1006

743 (73%)

52 (7.00%)

-

-

-

691 (93.00%)

-

263 (26%)

16 (6.08%)

-

-

-

247 (93.92%)

-

Rizzo

76819

60039 (78%)

3931 (6.55%)

11379 (18.95%)

-

30042 (50.04%)

-

14687 (24.46%)

16780 (21%)

1254 (7.47%)

4585 (27.32%)

-

8693 (51.81%)

-

2248 (13.40%)

Dashti

4140

2759 (66%)

-

-

600 (21.75%)

1541 (55.85%)

-

618 (22.40%)

1381 (33%)

-

-

577 (41.78%)

-

596 (43.16%)

208 (15.06%)

Pan

12084

8548 (70%)

-

-

1263 (14.78%)

-

-

7285 (85.22%)

3536 (29%)

-

-

874 (24.72%)

-

-

2662 (75.28%)

Petrilli

5279

2538 (48%)

147 (5.79%)

337 (13.28%)

-

1678 (66.12%)

-

376 (14.81%)

2741 (51%)

141 (5.14%)

565 (20.61%)

-

1590 (58.01%)

-

445 (16.23%)

save_as_docx(a, path = here('output_data', 'Table_3.docx'))

6.3.1 Smoking and hospitalisation meta-analysis

The studies included in meta-analysis are rentsch, argenziano, yanover, hamer, miyara_medrxiv, garassino, gu, and petrilli.

6.3.1.1 Current versus never smoking for hospitalisation

# Data --------------------------------------------------------------------
meta <- tibble('author' = table_3$lead_author,
               'community_smoker' = table_3$community_current_smoker,
               'community_never_smoker' = table_3$community_never_smoker, 
               'hospitalised_smoker' = table_3$hospitalised_current_smoker, 
               'hospitalised_never_smoker' = table_3$hospitalised_never_smoker,
               'community_former_smoker' = table_3$community_former_smoker,
               'hospitalised_former_smoker' = table_3$hospitalised_former_smoker) %>%
  filter(author %in% included_studies$lead_author)

meta$author <- to_upper_camel_case(meta$author, sep_out = ", ")
meta$author <- plyr::mapvalues(meta$author,
                               from = cleaned_names,
                               to = correct_names)  

# Current smoker hospitalisation ------------------------------------------
event_rates_smoker <- meta %>%
  mutate(., Ee = hospitalised_smoker) %>%
  mutate(., Ne = (hospitalised_smoker+community_smoker)) %>%
  mutate(., Ec = hospitalised_never_smoker) %>%
  mutate(., Nc = (hospitalised_never_smoker+community_never_smoker)) %>%
  rename('Author' = author) %>%
  select(Author, Ee, Ne, Ec, Nc)

event_rates_smoker <- metabin(Ee,
                              Ne,
                              Ec,
                              Nc,
                              data = event_rates_smoker,
                              studlab = paste(Author),
                              comb.fixed = F,
                              comb.random = T,
                              method.tau = 'SJ',
                              hakn = T,
                              prediction = F,
                              incr = 0.1,
                              sm = 'RR')

write_rds(event_rates_smoker, here("data_clean", "bayes_hospital_current.rds"))

Current smoking against never smoking for hospitalisation

ECDF for current smoking against never smoking for hospitalisation

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 34.93%

6.3.1.2 Former versus never smoking for hospitalisation

# Former smoker hospitalisation -------------------------------------------
event_rates_former <- meta %>%
  mutate(., Ee = hospitalised_former_smoker) %>%
  mutate(., Ne = (hospitalised_former_smoker+community_former_smoker)) %>%
  mutate(., Ec = hospitalised_never_smoker) %>%
  mutate(., Nc = (hospitalised_never_smoker+community_never_smoker)) %>%
  rename('Author' = author) %>%
  select(Author, Ee, Ne, Ec, Nc)

event_rates_former <- metabin(Ee,
                              Ne,
                              Ec,
                              Nc,
                              data = event_rates_former,
                              studlab = paste(Author),
                              comb.fixed = F,
                              comb.random = T,
                              method.tau = 'SJ',
                              hakn = T,
                              prediction = F,
                              incr = 0.1,
                              sm = 'RR')

running_meta_count <- running_meta_count %>%
  full_join(., meta %>%
  rename("study" = author), by = "study") %>%
  select(study)

write_rds(event_rates_former, here("data_clean", "bayes_hospital_former.rds"))

Former smoking against never smoking for hospitalisation ECDF for Former smoking against never smoking for hospitalisation

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 89.09%

6.4 Table 4: Smoking and COVID-19 disease severity

#Table 4
table_4_word <- table_4 %>%
  mutate(., sample = sample_with_severity) %>%
  mutate(., non_severe_disease_percentage = formatC(non_severe_disease/sample*100, digits = 2, format = "f")) %>%
  mutate(., non_severe_current_smoker_percent = formatC(non_severe_current_smoker/non_severe_disease*100, digits = 2, format = "f")) %>%
  mutate(., non_severe_former_smoker_percent = formatC(non_severe_former_smoker/non_severe_disease*100, digits = 2, format = "f")) %>%
  mutate(., non_severe_current_former_smoker_percent = formatC(non_severe_current_former_smoker/non_severe_disease*100, digits = 2, format = "f")) %>%
  mutate(., non_severe_never_smoker_percent = formatC(non_severe_never_smoker/non_severe_disease*100, digits = 2, format = "f")) %>%
  mutate(., non_severe_never_unknown_smoker_percent = formatC(non_severe_never_unknown_smoker/non_severe_disease*100, digits = 2, format = "f")) %>%
  mutate(., non_severe_not_stated_percent = formatC(non_severe_not_stated/non_severe_disease*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_number_percent = formatC(severe_disease_number/sample*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_current_smoker_percent = formatC(severe_disease_current_smoker/severe_disease_number*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_former_smoker_percent = formatC(severe_disease_former_smoker/severe_disease_number*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_current_former_smoker_percent = formatC(severe_disease_current_former_smoker/severe_disease_number*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_never_smoker_percent = formatC(severe_disease_never_smoker/severe_disease_number*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_never_unknown_percent = formatC(severe_disease_never_unknown/severe_disease_number*100, digits = 2, format = "f")) %>%
  mutate(., severe_disease_not_stated_percent = formatC(severe_disease_not_stated/severe_disease_number*100, digits = 2, format = "f")) %>%
  select(lead_author, sample, non_severe_disease, non_severe_disease_percentage, non_severe_current_smoker,
         non_severe_current_smoker_percent, non_severe_former_smoker, non_severe_former_smoker_percent,
         non_severe_current_former_smoker, non_severe_current_former_smoker_percent, non_severe_never_smoker,
         non_severe_never_smoker_percent, non_severe_never_unknown_smoker, non_severe_never_unknown_smoker_percent,
         non_severe_not_stated, non_severe_not_stated_percent, severe_disease_number, severe_disease_number_percent,
         severe_disease_current_smoker, severe_disease_current_smoker_percent, 
         severe_disease_former_smoker, severe_disease_former_smoker_percent, severe_disease_current_former_smoker,
         severe_disease_current_former_smoker_percent, severe_disease_never_smoker, severe_disease_never_smoker_percent,
         severe_disease_never_unknown, severe_disease_never_unknown_percent, severe_disease_not_stated,
         severe_disease_not_stated_percent) %>%
  write_rds(here::here('data_clean', 'table_4_word.rds'))

The number of studies reporting on hospitalisation by smoking status is: 60

quality_table_4 <- table_4_word %>%
  left_join(., quality_rating, by = 'lead_author') %>%
  select(lead_author, overall_quality)

a <- table_4_word %>%
  mutate(Author = lead_author,
         Population = sample,
         non_severe_disease = paste(
           paste(non_severe_disease, 
                 as.integer(non_severe_disease_percentage), sep = " ("), "%)", sep = ""),
         ns_current_smoker = paste(paste(non_severe_current_smoker, (non_severe_current_smoker_percent), sep = " (")
                                  , "%)", sep = ""),
         ns_current_smoker = na_if(ns_current_smoker, "NA ( NA%)"),
         ns_former_smoker = paste(paste(non_severe_former_smoker, (non_severe_former_smoker_percent), sep = " (")
                                 , "%)", sep = ""),
         ns_former_smoker = na_if(ns_former_smoker, "NA ( NA%)"),
         ns_current_former_smoker = paste(paste(non_severe_current_former_smoker,
                                               (non_severe_current_former_smoker_percent), sep = " (")
                                         , "%)", sep = ""),
         ns_current_former_smoker = na_if(ns_current_former_smoker, "NA ( NA%)"),
         ns_never_smoker = paste(paste(non_severe_never_smoker,
                                      (non_severe_never_smoker_percent), sep = " (")
                                , "%)", sep = ""),
         ns_never_smoker = na_if(ns_never_smoker, "NA ( NA%)"),
         ns_never_unknown_smoker = paste(paste(non_severe_never_unknown_smoker,
                                              (non_severe_never_unknown_smoker_percent), sep = " (")
                                        , "%)", sep = ""),
         ns_never_unknown_smoker = na_if(ns_never_unknown_smoker, "NA ( NA%)"),
         ns_not_stated = paste(paste(non_severe_not_stated,
                                    (non_severe_not_stated_percent), sep = " (")
                              , "%)", sep = ""),
         ns_not_stated = na_if(ns_not_stated, "NA ( NA%)"),
         ) %>%
  mutate(severe_disease = paste(
    paste(severe_disease_number, 
          as.integer(severe_disease_number_percent), sep = " ("), "%)", sep = ""),
    s_current_smoker = paste(paste(severe_disease_current_smoker, (severe_disease_current_smoker_percent), sep = " (")
                             , "%)", sep = ""),
    s_current_smoker = na_if(s_current_smoker, "NA ( NA%)"),
    s_former_smoker = paste(paste(severe_disease_former_smoker, (severe_disease_former_smoker_percent), sep = " (")
                            , "%)", sep = ""),
    s_former_smoker = na_if(s_former_smoker, "NA ( NA%)"),
    s_current_former_smoker = paste(paste(severe_disease_current_former_smoker,
                                          (severe_disease_current_former_smoker_percent), sep = " (")
                                    , "%)", sep = ""),
    s_current_former_smoker = na_if(s_current_former_smoker, "NA ( NA%)"),
    s_never_smoker = paste(paste(severe_disease_never_smoker,
                                 (severe_disease_never_smoker_percent), sep = " (")
                           , "%)", sep = ""),
    s_never_smoker = na_if(s_never_smoker, "NA ( NA%)"),
    s_never_unknown_smoker = paste(paste(severe_disease_never_unknown,
                                         (severe_disease_never_unknown_percent), sep = " (")
                                   , "%)", sep = ""),
    s_never_unknown_smoker = na_if(s_never_unknown_smoker, "NA ( NA%)"),
    s_not_stated = paste(paste(severe_disease_not_stated,
                                 (severe_disease_not_stated_percent), sep = " (")
                           , "%)", sep = ""),
    s_not_stated = na_if(s_not_stated, "NA ( NA%)")) %>%
  select(Author, Population, non_severe_disease, ns_current_smoker, ns_former_smoker,
         ns_current_former_smoker, ns_never_smoker, ns_never_unknown_smoker, ns_not_stated,
         severe_disease, s_current_smoker, s_former_smoker, s_current_former_smoker, s_never_smoker, s_never_unknown_smoker,
         s_not_stated)

         
a$Author <- to_upper_camel_case(a$Author, sep_out = ", ")
a$Author <- plyr::mapvalues(a$Author,
                               from = cleaned_names,
                               to = correct_names)  
numeric_columns <- 'Population'

a <- flextable(a) %>%
    set_caption(caption = 'COVID-19 severity by smoking status') %>%
  colformat_num(col_keys = numeric_columns, digits = 0, na_str = '-', big.mark = ',') %>%
  colformat_char(na_str = '-')

a <- set_header_labels(a,
                       Population = "Population with severity",
                       non_severe_disease = "N (%)",
                       ns_current_smoker = "Current smoker (%)",
                       ns_former_smoker = "Former smoker (%)",
                       ns_current_former_smoker = "Current/former smoker (%)",
                       ns_never_unknown_smoker = "Never/unknown smoker (%)",
                       ns_never_smoker = "Never smoker (%)",
                       ns_not_stated = "Not stated (%)",
                       severe_disease = "N (%)", 
                       s_current_smoker = "Current smoker (%)", 
                       s_former_smoker = "Former smoker (%)", 
                       s_current_former_smoker = "Current/former smoker (%)",
                       s_never_unknown_smoker = "Never/unknown smoker (%)",
                       s_never_smoker = "Never smoker (%)",
                       s_not_stated = "Not stated (%)") %>%
  add_header_row(top = TRUE, values = c("","Non severe disease", "Severe disease" ), colwidths = c(2, 7, 7)) %>%
  theme_booktabs() %>%
  fix_border_issues() %>%
  set_table_properties(width = 1, layout = 'autofit')
a
COVID-19 severity by smoking status

Non severe disease

Severe disease

Author

Population with severity

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Never/unknown smoker (%)

Not stated (%)

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Never/unknown smoker (%)

Not stated (%)

Guan, Ni

1085

913 (84%)

108 (11.83%)

12 (1.31%)

-

793 (86.86%)

-

-

172 (15%)

29 (16.86%)

9 (5.23%)

-

134 (77.91%)

-

-

Zhang, Dong

9

3 (33%)

0 (0.00%)

3 (100.00%)

-

0 (0.00%)

-

-

6 (66%)

2 (33.33%)

4 (66.67%)

-

0 (0.00%)

-

-

Wan

9

8 (88%)

8 (100.00%)

0 (0.00%)

-

0 (0.00%)

-

-

1 (11%)

1 (100.00%)

0 (0.00%)

-

0 (0.00%)

-

-

Huang, Wang

3

3 (100%)

3 (100.00%)

0 (0.00%)

-

0 (0.00%)

-

-

0 (0%)

0 (NaN%)

0 (NaN%)

-

0 (NaN%)

-

-

Rentsch

285

168 (58%)

47 (27.98%)

53 (31.55%)

-

68 (40.48%)

-

-

117 (41%)

43 (36.75%)

36 (30.77%)

-

38 (32.48%)

-

-

Hu

323

151 (46%)

-

-

12 (7.95%)

-

139 (92.05%)

-

172 (53%)

-

-

26 (15.12%)

-

146 (84.88%)

-

Wang, Pan

125

100 (80%)

-

-

9 (9.00%)

-

91 (91.00%)

-

25 (20%)

-

-

7 (28.00%)

-

18 (72.00%)

-

Kim

27

21 (77%)

3 (14.29%)

-

-

-

18 (85.71%)

-

6 (22%)

2 (33.33%)

0 (0.00%)

-

-

4 (66.67%)

-

Shi, Yu

474

425 (89%)

-

-

34 (8.00%)

-

391 (92.00%)

-

49 (10%)

-

-

6 (12.24%)

-

43 (87.76%)

-

Liao, Feng

148

92 (62%)

-

-

5 (5.43%)

-

-

87 (94.57%)

56 (37%)

3 (5.36%)

-

-

-

-

53 (94.64%)

Shi, Ren

134

88 (65%)

-

-

8 (9.09%)

-

-

80 (90.91%)

46 (34%)

-

-

6 (13.04%)

-

-

40 (86.96%)

Hadjadj

50

15 (30%)

1 (6.67%)

2 (13.33%)

-

12 (80.00%)

-

-

35 (70%)

0 (0.00%)

7 (20.00%)

-

28 (80.00%)

-

-

Zheng, Xiong

73

43 (58%)

-

-

6 (13.95%)

37 (86.05%)

-

-

30 (41%)

-

-

2 (6.67%)

28 (93.33%)

-

-

de la Rica

48

26 (54%)

-

-

6 (23.08%)

-

-

20 (76.92%)

20 (41%)

-

-

4 (20.00%)

-

-

16 (80.00%)

Yin, Yang

106

47 (44%)

-

-

6 (12.77%)

-

-

41 (87.23%)

59 (55%)

-

-

12 (20.34%)

-

-

47 (79.66%)

Allenbach

147

100 (68%)

-

-

9 (9.00%)

-

-

91 (91.00%)

47 (31%)

-

-

0 (0.00%)

-

-

47 (100.00%)

Goyal

393

263 (66%)

14 (5.32%)

-

-

-

-

249 (94.68%)

130 (33%)

6 (4.62%)

-

-

-

-

124 (95.38%)

Feng

454

333 (73%)

27 (8.11%)

-

-

-

-

306 (91.89%)

121 (26%)

17 (14.05%)

-

-

-

-

104 (85.95%)

Yao

108

83 (76%)

1 (1.20%)

-

-

-

-

82 (98.80%)

25 (23%)

3 (12.00%)

-

-

-

-

22 (88.00%)

Sami

490

400 (81%)

53 (13.25%)

-

-

-

-

347 (86.75%)

90 (18%)

16 (17.78%)

-

-

-

-

74 (82.22%)

Regina

200

163 (81%)

9 (5.52%)

-

-

-

-

154 (94.48%)

37 (18%)

0 (0.00%)

-

-

-

-

37 (100.00%)

Feuth

28

21 (75%)

1 (4.76%)

7 (33.33%)

-

13 (61.90%)

-

-

7 (25%)

2 (28.57%)

1 (14.29%)

-

4 (57.14%)

-

-

Mejia-Vilet

329

214 (65%)

-

-

13 (6.07%)

-

-

201 (93.93%)

115 (34%)

-

-

10 (8.70%)

-

-

105 (91.30%)

Chen, Jiang

135

54 (40%)

-

-

4 (7.41%)

-

-

50 (92.59%)

81 (60%)

-

-

9 (11.11%)

-

-

72 (88.89%)

Vaquero-Roncero

146

75 (51%)

-

-

4 (5.33%)

-

-

71 (94.67%)

71 (48%)

-

-

6 (8.45%)

-

-

65 (91.55%)

Kim, Garg

2490

1692 (67%)

112 (6.62%)

395 (23.35%)

-

-

1185 (70.04%)

-

798 (32%)

38 (4.76%)

247 (30.95%)

-

-

512 (64.16%)

-

Wu

174

92 (52%)

-

-

47 (51.09%)

-

45 (48.91%)

-

82 (47%)

11 (13.41%)

-

-

-

71 (86.59%)

-

Chaudhry

40

34 (85%)

-

-

5 (14.71%)

-

-

29 (85.29%)

6 (15%)

-

-

1 (16.67%)

-

-

5 (83.33%)

Garibaldi

832

532 (63%)

25 (4.70%)

107 (20.11%)

-

-

-

400 (75.19%)

300 (36%)

21 (7.00%)

81 (27.00%)

-

-

-

198 (66.00%)

Kuderer

928

686 (73%)

35 (5.10%)

210 (30.61%)

-

370 (53.94%)

-

29 (4.23%)

242 (26%)

8 (3.31%)

116 (47.93%)

-

99 (40.91%)

15 (6.20%)

4 (1.65%)

Romao

14

14 (100%)

-

-

4 (28.57%)

-

-

10 (71.43%)

0 (0%)

-

-

-

-

-

-

Giannouchos

89756

78050 (86%)

6322 (8.10%)

-

-

-

71728 (91.90%)

-

11706 (13%)

1089 (9.30%)

-

-

-

10617 (90.70%)

-

Cen

1007

720 (71%)

-

-

70 (9.72%)

-

-

650 (90.28%)

287 (28%)

-

-

18 (6.27%)

-

-

269 (93.73%)

Maraschini

132

89 (67%)

-

11 (12.36%)

-

78 (87.64%)

-

-

43 (32%)

-

3 (6.98%)

-

40 (93.02%)

-

-

Russell

156

128 (82%)

9 (7.03%)

31 (24.22%)

-

51 (39.84%)

-

37 (28.91%)

28 (17%)

2 (7.14%)

8 (28.57%)

-

8 (28.57%)

-

10 (35.71%)

Siso-Almirall

260

212 (81%)

-

-

60 (28.30%)

-

-

152 (71.70%)

48 (18%)

-

-

21 (43.75%)

-

-

27 (56.25%)

Gu

884

511 (57%)

30 (5.87%)

126 (24.66%)

-

355 (69.47%)

-

-

134 (15%)

3 (2.24%)

61 (45.52%)

-

70 (52.24%)

-

-

Mendy

689

598 (86%)

-

-

133 (22.24%)

-

-

465 (77.76%)

91 (13%)

-

-

37 (40.66%)

-

-

54 (59.34%)

Pongpirul

193

161 (83%)

-

-

25 (15.53%)

106 (65.84%)

-

30 (18.63%)

32 (16%)

-

-

4 (12.50%)

21 (65.62%)

-

7 (21.88%)

Jin, Gu

6

2 (33%)

-

-

0 (0.00%)

-

-

4 (200.00%)

4 (66%)

-

-

2 (50.00%)

-

-

2 (50.00%)

Senkal

611

446 (73%)

48 (10.76%)

-

-

-

-

398 (89.24%)

165 (27%)

21 (12.73%)

-

-

-

-

144 (87.27%)

Patel

129

89 (68%)

26 (29.21%)

-

-

-

58 (65.17%)

5 (5.62%)

40 (31%)

22 (55.00%)

-

-

-

14 (35.00%)

4 (10.00%)

Maucourant

27

10 (37%)

1 (10.00%)

2 (20.00%)

-

2 (20.00%)

-

5 (50.00%)

17 (62%)

2 (11.76%)

5 (29.41%)

-

9 (52.94%)

-

1 (5.88%)

Xie

619

469 (75%)

-

-

32 (6.82%)

-

-

437 (93.18%)

150 (24%)

-

-

19 (12.67%)

-

-

131 (87.33%)

Fox

55

30 (54%)

1 (3.33%)

4 (13.33%)

-

17 (56.67%)

-

8 (26.67%)

25 (45%)

0 (0.00%)

2 (8.00%)

-

14 (56.00%)

-

9 (36.00%)

Zhang, Cao

240

162 (67%)

2 (1.23%)

6 (3.70%)

-

-

-

154 (95.06%)

78 (32%)

4 (5.13%)

4 (5.13%)

-

-

-

70 (89.74%)

Kurashima

53

10 (18%)

-

-

3 (30.00%)

-

-

7 (70.00%)

43 (81%)

-

-

24 (55.81%)

-

-

19 (44.19%)

Zhan

75

NA (NA%)

-

-

-

-

-

-

75 (100%)

-

-

9 (12.00%)

-

-

66 (88.00%)

Omrani

858

806 (93%)

-

-

121 (15.01%)

-

-

685 (84.99%)

52 (6%)

-

-

9 (17.31%)

-

-

43 (82.69%)

Marcos

918

555 (60%)

38 (6.85%)

-

69 (12.43%)

-

-

448 (80.72%)

363 (39%)

18 (4.96%)

-

71 (19.56%)

-

-

292 (80.44%)

Hoertel, Sanchez, Rico

7345

6014 (81%)

433 (7.20%)

-

-

-

-

5581 (92.80%)

1331 (18%)

190 (14.27%)

-

-

-

-

1141 (85.73%)

Qi

267

217 (81%)

22 (10.14%)

-

-

-

195 (89.86%)

-

50 (18%)

31 (62.00%)

-

-

-

19 (38.00%)

-

Monteiro

112

84 (75%)

3 (3.57%)

14 (16.67%)

-

63 (75.00%)

-

4 (4.76%)

28 (25%)

4 (14.29%)

6 (21.43%)

-

14 (50.00%)

-

4 (14.29%)

Dashti

1381

619 (44%)

-

-

239 (38.61%)

292 (47.17%)

-

88 (14.22%)

762 (55%)

-

-

338 (44.36%)

304 (39.90%)

-

120 (15.75%)

Morshed

103

87 (84%)

28 (32.18%)

-

-

-

59 (67.82%)

-

16 (15%)

4 (25.00%)

-

-

-

12 (75.00%)

-

Zhou, Sun

144

108 (75%)

11 (10.19%)

-

-

-

-

97 (89.81%)

36 (25%)

2 (5.56%)

-

-

-

-

34 (94.44%)

Hippisley, Cox

-

NA (NA%)

-

-

-

-

-

-

1286 (NA%)

56 (4.35%)

427 (33.20%)

-

791 (61.51%)

-

12 (0.93%)

Zhao, Chen

641

398 (62%)

87 (21.86%)

-

-

-

-

311 (78.14%)

195 (30%)

52 (26.67%)

-

-

-

-

143 (73.33%)

Qu

246

226 (91%)

90 (39.82%)

-

-

-

-

136 (60.18%)

20 (8%)

14 (70.00%)

-

-

-

-

6 (30.00%)

Petrilli

2729

1739 (63%)

97 (5.58%)

325 (18.69%)

-

1067 (61.36%)

-

250 (14.38%)

990 (36%)

44 (4.44%)

236 (23.84%)

-

517 (52.22%)

-

193 (19.49%)

save_as_docx(a, path = here('output_data', 'Table_4.docx'))

6.4.1 Smoking and severity meta-analysis

The studies included in meta-analysis are guan_ni, rentsch, hadjadj, feuth, kuderer, gu, monteiro, hippisley_cox, and petrilli.

6.4.1.1 Current versus never smoking for risk of severe disease

# Data --------------------------------------------------------------------
meta <- tibble('author' = table_4$lead_author,
               'non_severe_smoker' = table_4$non_severe_current_smoker,
               'non_severe_never_smoker' = table_4$non_severe_never_smoker,
               'severe_smoker' = table_4$severe_disease_current_smoker,
               'severe_never_smoker' = table_4$severe_disease_never_smoker,
               'non_severe_former_smoker' = table_4$non_severe_former_smoker,
               'severe_former_smoker' = table_4$severe_disease_former_smoker) %>%
  filter(author %in% included_studies$lead_author)

meta$author <- to_upper_camel_case(meta$author, sep_out = ", ")
meta$author <- plyr::mapvalues(meta$author,
                               from = cleaned_names,
                               to = correct_names)  

# Current smoker severity ------------------------------------------
event_rates_smoker <- meta %>%
  mutate(., Ee = severe_smoker) %>%
  mutate(., Ne = (severe_smoker+non_severe_smoker)) %>%
  mutate(., Ec = severe_never_smoker) %>%
  mutate(., Nc = (severe_never_smoker+non_severe_never_smoker)) %>%
  rename('Author' = author) %>%
  select(Author, Ee, Ne, Ec, Nc)

event_rates_smoker <- metabin(Ee,
                              Ne,
                              Ec,
                              Nc,
                              data = event_rates_smoker,
                              studlab = paste(Author),
                              comb.fixed = F,
                              comb.random = T,
                              method.tau = 'SJ',
                              hakn = F,
                              prediction = F,
                              incr = 0.1,
                              sm = 'RR')

running_meta_count <- running_meta_count %>%
  full_join(., meta %>%
  rename("study" = author), by = "study") %>%
  select(study)

write_rds(event_rates_smoker, here("data_clean", "bayes_severity_current.rds"))

Current smoking against never smoking for disease severity ECDF for current smoking against never smoking for disease severity

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 78.96%

6.4.1.2 Former versus never smoking for risk of severe disease

# Former smoker severity -------------------------------------------
event_rates_former <- meta %>%
  mutate(., Ee = severe_former_smoker) %>%
  mutate(., Ne = (severe_former_smoker+non_severe_former_smoker)) %>%
  mutate(., Ec = severe_never_smoker) %>%
  mutate(., Nc = (severe_never_smoker+non_severe_never_smoker)) %>%
  rename('Author' = author) %>%
  select(Author, Ee, Ne, Ec, Nc)

event_rates_former <- metabin(Ee,
                              Ne,
                              Ec,
                              Nc,
                              data = event_rates_former,
                              studlab = paste(Author),
                              comb.fixed = F,
                              comb.random = T,
                              method.tau = 'SJ',
                              hakn = F,
                              prediction = F,
                              incr = 0.1,
                              sm = 'RR')

write_rds(event_rates_former, here("data_clean", "bayes_severity_former.rds"))

Former smoking against never smoking for disease severity ECDF for former smoking against never smoking for disease severity

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 98.02%

6.5 Table 5: Smoking and COVID-19 mortality

#Table 5
table_5_word <- table_5 %>%
  mutate(., sample = sample_with_deaths) %>%
  mutate(., deaths_percentage = formatC(deaths/sample*100, digits = 2, format = "f")) %>%
  mutate(., death_current_smokers_percent = formatC(death_current_smokers/deaths*100, digits = 2, format = "f")) %>%
  mutate(., death_former_smokers_percent = formatC(death_former_smokers/deaths*100, digits = 2, format = "f")) %>%
  mutate(., death_current_former_smokers_percent = formatC(death_current_former_smokers/deaths*100, digits = 2, format = "f")) %>%
  mutate(., death_never_smokers_percent = formatC(death_never_smokers/deaths*100, digits = 2, format = "f")) %>%
  mutate(., death_never_unknown_smokers_percent = formatC(death_never_unknown_smokers/deaths*100, digits = 2, format = "f")) %>%
  mutate(., death_not_stated_percent = formatC(death_not_stated/deaths*100, digits = 2, format = "f")) %>%
  mutate(., recovered_percentage = formatC(recovered/sample*100, digits = 2, format = "f")) %>%
  mutate(., recovered_current_smokers_percent = formatC(recovered_current_smoking/recovered*100, digits = 2, format = "f")) %>%
  mutate(., recovered_former_smokers_percent = formatC(recovered_former_smoker/recovered*100, digits = 2, format = "f")) %>%
  mutate(., recovered_current_former_smokers_percent = formatC(recovered_current_former_smokers/recovered*100, digits = 2, format = "f")) %>%
  mutate(., recovered_never_smokers_percent = formatC(recovered_never_smoker/recovered*100, digits = 2, format = "f")) %>%
  mutate(., recovered_never_unknown_smokers_percent = formatC(recovered_never_unknown_smoker/recovered*100, digits = 2, format = "f")) %>%
  mutate(., recovered_not_stated_percent = formatC(recovered_not_stated/recovered*100, digits = 2, format = "f")) %>%
  select(lead_author, sample, recovered, recovered_percentage, recovered_current_smoking, recovered_current_smokers_percent,
         recovered_former_smoker, recovered_former_smokers_percent, recovered_current_former_smokers,
         recovered_current_former_smokers_percent, recovered_never_smoker, recovered_never_smokers_percent,
         recovered_never_unknown_smoker, recovered_never_unknown_smokers_percent, recovered_not_stated,
         recovered_not_stated_percent,
         deaths, deaths_percentage, death_current_smokers, death_current_smokers_percent,
         death_former_smokers, death_former_smokers_percent, death_current_former_smokers,
         death_current_former_smokers_percent, death_never_smokers, death_never_smokers_percent,
         death_never_unknown_smokers, death_never_unknown_smokers_percent, death_not_stated, death_not_stated_percent) %>%
  write_rds(here::here('data_clean', 'table_5_word.rds'))

The number of studies reporting on death by smoking status is: 50

quality_table_5 <- table_5_word %>%
  left_join(., quality_rating, by = 'lead_author') %>%
  select(lead_author, overall_quality)

a <- table_5_word %>%
  mutate(Author = lead_author,
         Population = sample,
         recovered = paste(
           paste(recovered, 
                 as.integer(recovered_percentage), sep = " ("), "%)", sep = ""),
         recovered_current_smoker = paste(paste(recovered_current_smoking, 
                                                 (recovered_current_smokers_percent), sep = " (")
                                  , "%)", sep = ""),
         recovered_current_smoker = na_if(recovered_current_smoker, "NA ( NA%)"),
         recovered_former_smoker = paste(paste(recovered_former_smoker,
                                               (recovered_former_smokers_percent), sep = " (")
                                 , "%)", sep = ""),
         recovered_former_smoker = na_if(recovered_former_smoker, "NA ( NA%)"),
         recovered_current_former_smoker = paste(paste(recovered_current_former_smokers,
                                               (recovered_current_former_smokers_percent), sep = " (")
                                         , "%)", sep = ""),
         recovered_current_former_smoker = na_if(recovered_current_former_smoker, "NA ( NA%)"),
         recovered_never_smoker = paste(paste(recovered_never_smoker,
                                      (recovered_never_smokers_percent), sep = " (")
                                , "%)", sep = ""),
         recovered_never_smoker = na_if(recovered_never_smoker, "NA ( NA%)"),
         recovered_never_unknown_smoker = paste(paste(recovered_never_unknown_smoker,
                                              (recovered_never_unknown_smokers_percent), sep = " (")
                                        , "%)", sep = ""),
         recovered_never_unknown_smoker = na_if(recovered_never_unknown_smoker, "NA ( NA%)"),
         recovered_not_stated = paste(paste(recovered_not_stated,
                                    (recovered_not_stated_percent), sep = " (")
                              , "%)", sep = ""),
         recovered_not_stated = na_if(recovered_not_stated, "NA ( NA%)")) %>%
  mutate(deaths = paste(
           paste(deaths, 
                 as.integer(deaths_percentage), sep = " ("), "%)", sep = ""),
         death_current_smoker = paste(paste(death_current_smokers, 
                                                 (death_current_smokers_percent), sep = " (")
                                  , "%)", sep = ""),
         death_current_smoker = na_if(death_current_smoker, "NA ( NA%)"),
         death_former_smoker = paste(paste(death_former_smokers,
                                               (death_former_smokers_percent), sep = " (")
                                 , "%)", sep = ""),
         death_former_smoker = na_if(death_former_smoker, "NA ( NA%)"),
         death_current_former_smoker = paste(paste(death_current_former_smokers,
                                               (death_current_former_smokers_percent), sep = " (")
                                         , "%)", sep = ""),
         death_current_former_smoker = na_if(death_current_former_smoker, "NA ( NA%)"),
         death_never_smoker = paste(paste(death_never_smokers,
                                      (death_never_smokers_percent), sep = " (")
                                , "%)", sep = ""),
         death_never_smoker = na_if(death_never_smoker, "NA ( NA%)"),
         death_never_unknown_smoker = paste(paste(death_never_unknown_smokers,
                                              (death_never_unknown_smokers_percent), sep = " (")
                                        , "%)", sep = ""),
         death_never_unknown_smoker = na_if(death_never_unknown_smoker, "NA ( NA%)"),
         death_not_stated = paste(paste(death_not_stated,
                                    (death_not_stated_percent), sep = " (")
                              , "%)", sep = ""),
         death_not_stated = na_if(death_not_stated, "NA ( NA%)")) %>%
  select(Author, Population, recovered, recovered_current_smoker, recovered_former_smoker, recovered_current_former_smoker,
         recovered_never_smoker, recovered_never_unknown_smoker, recovered_not_stated, deaths, death_current_smoker,
         death_former_smoker, death_current_former_smoker, death_never_smoker, death_never_unknown_smoker,
         death_not_stated)

         
a$Author <- to_upper_camel_case(a$Author, sep_out = ", ")
a$Author <- plyr::mapvalues(a$Author,
                               from = cleaned_names,
                               to = correct_names)  

numeric_columns <- 'Population'

a <- flextable(a) %>%
    set_caption(caption = 'COVID-19 mortality by smoking status') %>%
  colformat_num(col_keys = numeric_columns, digits = 0, na_str = '-', big.mark = ',') %>%
  colformat_char(na_str = '-')

a <- set_header_labels(a,
                       Population = "Population with mortality",
                       recovered = "N (%)",
                       recovered_current_smoker = "Current smoker (%)",
                       recovered_former_smoker = "Former smoker (%)",
                       recovered_current_former_smoker = "Current/former smoker (%)",
                       recovered_never_unknown_smoker = "Never/unknown smoker (%)",
                       recovered_never_smoker = "Never smoker (%)",
                       recovered_not_stated = "Not stated (%)",
                       deaths = "N (%)", 
                       death_current_smoker = "Current smoker (%)", 
                       death_former_smoker = "Former smoker (%)", 
                       death_current_former_smoker = "Current/former smoker (%)",
                       death_never_unknown_smoker = "Never/unknown smoker (%)",
                       death_never_smoker = "Never smoker (%)",
                       death_not_stated = "Not stated (%)") %>%
  add_header_row(top = TRUE, values = c("","Recovered", "Died" ), colwidths = c(2, 7, 7)) %>%
  theme_booktabs() %>%
  fix_border_issues() %>%
  set_table_properties(width = 1, layout = 'autofit')
a
COVID-19 mortality by smoking status

Recovered

Died

Author

Population with mortality

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Never/unknown smoker (%)

Not stated (%)

N (%)

Current smoker (%)

Former smoker (%)

Current/former smoker (%)

Never smoker (%)

Never/unknown smoker (%)

Not stated (%)

Chen

274

161 (58%)

5 (3.11%)

5 (3.11%)

-

-

-

151 (93.79%)

113 (41%)

7 (6.19%)

2 (1.77%)

-

-

-

104 (92.04%)

Zhou, Yu

191

137 (71%)

6 (4.38%)

-

-

-

-

131 (95.62%)

54 (28%)

5 (9.26%)

-

-

-

-

49 (90.74%)

Yang, Yu

52

20 (38%)

2 (10.00%)

-

-

-

18 (90.00%)

-

32 (61%)

-

-

-

-

32 (100.00%)

-

Borobia

2226

1766 (79%)

113 (6.40%)

-

-

-

-

1653 (93.60%)

460 (20%)

44 (9.57%)

-

-

-

-

416 (90.43%)

Giacomelli

233

185 (79%)

-

-

53 (28.65%)

132 (71.35%)

-

-

48 (20%)

-

-

17 (35.42%)

31 (64.58%)

-

0 (0.00%)

Yao

108

96 (88%)

1 (1.04%)

-

-

-

-

95 (98.96%)

12 (11%)

3 (25.00%)

-

-

-

-

9 (75.00%)

Carillo-Vega

9946

8983 (90%)

795 (8.85%)

-

-

-

-

8188 (91.15%)

963 (9%)

99 (10.28%)

-

-

-

-

864 (89.72%)

Ge

51

39 (76%)

6 (15.38%)

-

-

-

-

33 (84.62%)

12 (23%)

1 (8.33%)

-

-

-

-

11 (91.67%)

Chen, Jiang

135

NA (NA%)

-

-

-

-

-

-

31 (22%)

-

-

4 (12.90%)

-

-

27 (87.10%)

Heili-Frades

4712

4086 (86%)

210 (5.14%)

659 (16.13%)

-

-

3217 (78.73%)

-

626 (13%)

23 (3.67%)

161 (25.72%)

-

-

442 (70.61%)

-

Kim, Garg

2490

2070 (83%)

128 (6.18%)

481 (23.24%)

-

-

1461 (70.58%)

-

420 (16%)

22 (5.24%)

161 (38.33%)

-

-

236 (56.19%)

-

Al-Hindawi

31

15 (48%)

0 (0.00%)

10 (66.67%)

-

5 (33.33%)

-

-

16 (51%)

1 (6.25%)

12 (75.00%)

-

3 (18.75%)

-

-

Louis

22

16 (72%)

-

-

7 (43.75%)

-

-

9 (56.25%)

6 (27%)

-

-

3 (50.00%)

-

-

3 (50.00%)

Soto-Mota

400

200 (50%)

-

-

23 (11.50%)

-

-

177 (88.50%)

200 (50%)

-

-

25 (12.50%)

-

-

175 (87.50%)

Garibaldi

747

634 (84%)

36 (5.68%)

129 (20.35%)

-

-

-

469 (73.97%)

113 (15%)

6 (5.31%)

36 (31.86%)

-

-

-

71 (62.83%)

Docherty

13364

8199 (61%)

370 (4.51%)

1832 (22.34%)

-

4179 (50.97%)

-

1818 (22.17%)

5165 (38%)

214 (4.14%)

1350 (26.14%)

-

2105 (40.76%)

-

1496 (28.96%)

Kuderer

928

807 (86%)

38 (4.71%)

262 (32.47%)

-

425 (52.66%)

-

31 (3.84%)

121 (13%)

5 (4.13%)

64 (52.89%)

-

44 (36.36%)

-

2 (1.65%)

Ramlall

11116

10498 (94%)

-

-

2771 (26.40%)

7727 (73.60%)

-

-

618 (5%)

-

-

208 (33.66%)

410 (66.34%)

-

-

Wang, Oekelen

57

43 (75%)

-

-

14 (32.56%)

-

-

29 (67.44%)

14 (24%)

-

-

7 (50.00%)

-

-

7 (50.00%)

Martinez-Portilla

224

217 (96%)

-

-

7 (3.23%)

-

-

210 (96.77%)

7 (3%)

-

-

0 (0.00%)

-

-

7 (100.00%)

Cen

1007

964 (95%)

-

-

87 (9.02%)

-

-

877 (90.98%)

43 (4%)

-

-

1 (2.33%)

-

-

42 (97.67%)

Klang

3406

2270 (66%)

-

-

492 (21.67%)

-

-

1778 (78.33%)

1136 (33%)

-

-

301 (26.50%)

-

-

835 (73.50%)

Wang, Zhong

5510

4874 (88%)

247 (5.07%)

1083 (22.22%)

-

3544 (72.71%)

-

-

636 (11%)

28 (4.40%)

214 (33.65%)

-

394 (61.95%)

-

-

Miyara

338

211 (62%)

13 (6.16%)

58 (27.49%)

-

141 (66.82%)

-

-

46 (13%)

1 (2.17%)

23 (50.00%)

-

21 (45.65%)

-

-

Rajter

255

209 (81%)

-

-

28 (13.40%)

181 (86.60%)

-

-

53 (20%)

-

-

18 (33.96%)

28 (52.83%)

-

-

Zeng

1031

866 (84%)

-

-

69 (7.97%)

-

-

797 (92.03%)

165 (16%)

-

-

36 (21.82%)

-

-

129 (78.18%)

Chen, Yu

1859

1651 (88%)

32 (1.94%)

54 (3.27%)

-

1565 (94.79%)

-

-

208 (11%)

13 (6.25%)

12 (5.77%)

-

183 (87.98%)

-

-

Garassino

190

124 (65%)

-

-

92 (74.19%)

32 (25.81%)

-

-

66 (34%)

-

61 (92.42%)

-

5 (7.58%)

-

-

Gu

884

864 (97%)

40 (4.63%)

250 (28.94%)

-

219 (25.35%)

-

-

20 (2%)

0 (0.00%)

14 (70.00%)

-

6 (30.00%)

-

-

Zhou, He

-

NA (NA%)

-

-

-

-

-

-

NA (NA%)

-

-

-

-

-

-

Sigel

88

70 (79%)

-

-

37 (52.86%)

-

-

33 (47.14%)

18 (20%)

-

-

11 (61.11%)

-

-

7 (38.89%)

Nguyen

356

308 (86%)

-

-

91 (29.55%)

-

-

217 (70.45%)

45 (12%)

-

-

23 (51.11%)

-

-

22 (48.89%)

de Souza

8443

7826 (92%)

-

-

95 (1.21%)

-

7571 (96.74%)

160 (2.04%)

617 (7%)

-

-

47 (7.62%)

-

560 (90.76%)

10 (1.62%)

Mendy

532

663 (124%)

-

-

160 (24.13%)

-

-

502 (75.72%)

26 (4%)

-

-

10 (38.46%)

-

-

16 (61.54%)

Shi, Resurreccion

256

210 (82%)

-

-

128 (60.95%)

-

-

82 (39.05%)

46 (17%)

-

-

26 (56.52%)

-

-

20 (43.48%)

Xie

619

591 (95%)

-

-

43 (7.28%)

-

-

548 (92.72%)

28 (4%)

-

-

8 (28.57%)

-

-

20 (71.43%)

Fox

54

35 (64%)

1 (2.86%)

4 (11.43%)

-

18 (51.43%)

-

12 (34.29%)

19 (35%)

0 (0.00%)

2 (10.53%)

-

12 (63.16%)

-

5 (26.32%)

Zhang, Cao

289

240 (83%)

10 (4.17%)

6 (2.50%)

-

-

-

224 (93.33%)

49 (16%)

4 (8.16%)

8 (16.33%)

-

-

-

37 (75.51%)

Gupta

496

255 (51%)

-

-

15 (5.88%)

-

80 (31.37%)

160 (62.75%)

241 (48%)

-

-

21 (8.71%)

77 (31.95%)

-

143 (59.34%)

Soares

1075

696 (64%)

38 (5.46%)

-

-

-

658 (94.54%)

-

456 (42%)

39 (8.55%)

-

-

-

417 (91.45%)

-

Thompson

470

301 (64%)

39 (12.96%)

79 (26.25%)

-

183 (60.80%)

-

-

169 (35%)

27 (15.98%)

49 (28.99%)

-

93 (55.03%)

-

-

Bernaola

1645

1382 (84%)

35 (2.53%)

146 (10.56%)

-

1201 (86.90%)

-

-

263 (15%)

6 (2.28%)

33 (12.55%)

-

218 (82.89%)

-

-

Islam

654

631 (96%)

103 (16.32%)

-

-

-

-

507 (80.35%)

23 (3%)

3 (13.04%)

-

-

-

-

-

Philipose

466

267 (57%)

19 (7.12%)

204 (76.40%)

-

44 (16.48%)

-

-

199 (42%)

9 (4.52%)

137 (68.84%)

-

33 (16.58%)

-

20 (10.05%)

Dashti

4140

3953 (95%)

-

-

1068 (27.02%)

2078 (52.57%)

-

804 (20.34%)

187 (4%)

-

-

109 (58.29%)

56 (29.95%)

-

22 (11.76%)

Fillmore

1794

1566 (87%)

408 (26.05%)

758 (48.40%)

-

279 (17.82%)

-

98 (6.26%)

228 (12%)

44 (19.30%)

141 (61.84%)

-

43 (18.86%)

-

23 (10.09%)

Pan

3536

3302 (93%)

-

-

862 (26.11%)

-

-

2440 (73.89%)

234 (6%)

-

-

82 (35.04%)

-

-

152 (64.96%)

Zhao, Chen

474

398 (83%)

87 (21.86%)

-

-

-

-

311 (78.14%)

82 (17%)

36 (43.90%)

-

-

-

-

46 (56.10%)

Holman

10989

NA (NA%)

-

-

-

-

-

-

10989 (100%)

609 (5.54%)

4684 (42.62%)

-

5386 (49.01%)

-

310 (2.82%)

Chand

300

143 (47%)

23 (16.08%)

-

-

-

-

120 (83.92%)

157 (52%)

44 (28.03%)

-

-

-

-

113 (71.97%)

save_as_docx(a, path = here('output_data', 'Table_5.docx'))

6.5.1 Smoking and COVID-19 mortality meta-analysis

The studies included in meta-analysis are al_hindawi, kuderer, miyara_medrxiv, chen_yu, gu, thompson, bernaola, philipose, and fillmore.

6.5.1.1 Current versus never smoking for disease mortality

# Data --------------------------------------------------------------------
meta <- tibble('author' = table_5$lead_author,
               'recovered_current_smoker' = table_5$recovered_current_smoking,
               'recovered_never_smoker' = table_5$recovered_never_smoker,
               'death_current_smoker' = table_5$death_current_smokers,
               'death_never_smoker' = table_5$death_never_smokers,
               'recovered_former_smoker' = table_5$recovered_former_smoker,
               'death_former_smoker' = table_5$death_former_smokers) %>%
  filter(author %in% included_studies$lead_author)

meta$author <- to_upper_camel_case(meta$author, sep_out = ", ")
meta$author <- plyr::mapvalues(meta$author,
                               from = cleaned_names,
                               to = correct_names)  


# Current smoker mortality ------------------------------------------
event_rates_smoker <- meta %>%
  mutate(., Ee = death_current_smoker) %>%
  mutate(., Ne = (death_current_smoker+recovered_current_smoker)) %>%
  mutate(., Ec = death_never_smoker) %>%
  mutate(., Nc = (death_never_smoker+recovered_never_smoker)) %>%
  rename('Author' = author) %>%
  select(Author, Ee, Ne, Ec, Nc)

event_rates_smoker <- metabin(Ee,
                              Ne,
                              Ec,
                              Nc,
                              data = event_rates_smoker,
                              studlab = paste(Author),
                              comb.fixed = F,
                              comb.random = T,
                              method.tau = 'SJ',
                              hakn = F,
                              prediction = F,
                              incr = 0.1,
                              sm = 'RR')

write_rds(event_rates_smoker, here("data_clean", "bayes_mortality_current.rds"))

Current smoking against never smoking for mortality ECDF for current smoking against never smoking for mortality

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 69.54%

6.5.1.2 Former versus never smoking for disease mortality

# Former smoker mortality ------------------------------------------
event_rates_former <- meta %>%
  mutate(., Ee = death_former_smoker) %>%
  mutate(., Ne = (death_former_smoker+recovered_former_smoker)) %>%
  mutate(., Ec = death_never_smoker) %>%
  mutate(., Nc = (death_never_smoker+recovered_never_smoker)) %>%
  rename('Author' = author) %>%
  select(Author, Ee, Ne, Ec, Nc)

event_rates_former <- metabin(Ee,
                              Ne,
                              Ec,
                              Nc,
                              data = event_rates_former,
                              studlab = paste(Author),
                              comb.fixed = F,
                              comb.random = T,
                              method.tau = 'SJ',
                              hakn = F,
                              prediction = F,
                              incr = 0.1,
                              sm = 'RR')

write_rds(event_rates_former, here("data_clean", "bayes_mortality_former.rds"))

running_meta_count <- running_meta_count %>%
  full_join(., meta %>%
  rename("study" = author), by = "study") %>%
  select(study)

Former smoking against never smoking for mortality ECDF for former smoking against never smoking for mortality

The ECDF shows the probability of the risk being greater than or equal to RR = 1.1, 97.23%

6.6 Study quality assessment

#Table 6
fair <- filter(quality_rating, quality_rating$overall_quality == "fair" ) %>%
  filter(!lead_author %in% exclude_from_analysis) %>%
  nrow()
poor <- filter(quality_rating, quality_rating$overall_quality == "poor" ) %>%
  filter(!lead_author %in% exclude_from_analysis) %>%
  nrow()

The number of Fair quality studies are 46 with 187 Poor quality studies

The number of studies included in Meta-analysis are 33

7 Final PRISMA table

prisma <- prisma %>%
  mutate("Studies included in meta-analysis" = nrow(running_meta_count))
flextable(prisma)

Review version

Date Screened

OVID results

medRxiv results

Other sources

Title/abstracts screened

Title/abstracts excluded

Full texts assessed

Full texts excluded

Records carried forward

Supersed from previous version

Studies in narrative synthesis

Studies included in meta-analysis

v7

2020-08-25

347

251

5

603

229

374

313

173

1

234

33

8 Supplementary tables

8.1 Supplementary tables

8.1.1 Data on clinical or virological diagnosis and studies stratifying smoking status

a <- data_study_general %>%
  filter(review_version %in% analysed_versions) %>%
  select(lead_author, study_design, clinical_diagnosis, stratified_smoking) %>%
  filter(!lead_author %in% exclude_from_analysis) %>%
  rename("Lead author" = "lead_author",
         "Study design" = "study_design",
         "Clinical diagnoses included" = "clinical_diagnosis",
         "Stratified smoking reported" = "stratified_smoking") %>%
 mutate("Lead author" = to_upper_camel_case(`Lead author`, sep_out = ", "),
        "Lead author" = plyr::mapvalues(`Lead author`,
                               from = cleaned_names,
                               to = correct_names),
        "Study design" = to_upper_camel_case(`Study design`, sep_out = " "))

a <- a %>%
  flextable() %>%
    set_caption(caption = 'Studies design, inclusion of clinical diagnoses and stratified smoking') %>%
  set_table_properties(width = 1, layout = 'autofit')

save_as_docx(a, path = here('output_data', 'Supplementary_2.docx'))

8.1.2 Country level smoking estimates

country_smoking <-  read_sheet(sheets_id, sheet = 'national_smoking_prevalence') %>%
  flextable()
save_as_docx(country_smoking, path = here('output_data', 'Supplementary_3.docx'))

8.1.3 Sensitivity