library(tidyverse)
library(lubridate)

Covid Data From Johns Hopkins University

This data from Johns Hopkins University covers COVID-19 cases and deaths in both the United States and globally. The data is aggregated from a variety of sources such as the World Health Organization, the Centers for Disease Control, and the European Centre for Disease Prevention and Control. The data is continuing to be updated daily, but the data in this project ends at the time the project was started. Additionally, vaccination data from the University of Oxford’s Our World in Data is used. The Github repository for the Johns Hopkins University data is: https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_time_series, while the University of Oxford data can be found at: https://ourworldindata.org/covid-vaccinations.

Importing the Data

#Adding JHU's COVID data
url_in <- 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/'
file_names <- 
  c('time_series_covid19_confirmed_US.csv',
    'time_series_covid19_confirmed_global.csv',
    'time_series_covid19_deaths_US.csv',
    'time_series_covid19_deaths_global.csv',
    'time_series_covid19_recovered_global.csv')
urls <- str_c(url_in, file_names)
us_cases <- read_csv(urls[1])
global_cases <- read_csv(urls[2])
us_deaths <- read_csv(urls[3])
global_deaths <- read_csv(urls[4])
global_recovered <- read_csv(urls[5])

#Adding global population data from Johns Hopkins University
uid_lookup_url <- 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/UID_ISO_FIPS_LookUp_Table.csv'
uid <- read_csv(uid_lookup_url) %>%
  select(-c(UID, iso2, iso3, code3, FIPS, Admin2, Lat, Long_, Combined_Key)) %>%
  rename(country_region = Country_Region, province_state = Province_State, population = Population)

#Adding in vaccine data from University of Oxford
url_in <- 'https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/vaccinations.csv'
vaccine <- read_csv(url_in)

Tidying the Data

The data is then tidied in a way to make the data easier to use. To tidy the data, the datasets were reformatted, certain column values were dropped, column names were edited, and datasets for the combination of data concerning each of the USA and globally were created.

#Changing data occurrences into rows, not columns and dropping Lat/Long
#Global cases
global_cases <- global_cases %>%
  pivot_longer(cols = -c('Province/State', 'Country/Region', Lat, Long),
               names_to = 'date',
               values_to = 'cases') %>%
  select(-c(Lat, Long)) %>%
  rename(province_state = 'Province/State', country_region = 'Country/Region')

#Global deaths
global_deaths <- global_deaths %>%
  pivot_longer(cols = -c('Province/State', 'Country/Region', Lat, Long),
               names_to = 'date',
               values_to = 'deaths') %>%
  select(-c(Lat, Long)) %>%
  rename(province_state = 'Province/State', country_region = 'Country/Region')

#Combining global cases and global deaths
global <- global_cases %>%
  full_join(global_deaths) %>% 
  mutate(date = mdy(date)) %>%
  filter(cases > 0)
global <- global %>%
  left_join(uid, by = c('province_state', 'country_region')) %>%
  select(province_state, country_region, date, cases, deaths, population)
  
#US cases
us_cases <- us_cases %>%
  pivot_longer(cols = -c(UID, 'iso2', 'iso3', code3, 'Admin2', FIPS, 'Province_State', 'Country_Region', Lat, Long_, 'Combined_Key'),
               names_to = 'date',
               values_to = 'cases') %>%
  select(-c(UID, FIPS, code3, 'iso2', 'iso3', Lat, Long_, 'Combined_Key')) %>%
  rename(county = Admin2, province_state = Province_State, country_region = Country_Region)

#US deaths
us_deaths <- us_deaths %>%
  pivot_longer(cols = -c(UID, 'iso2', 'iso3', code3, FIPS, 'Admin2', 'Province_State', 'Country_Region', Lat, Long_, 'Combined_Key', Population),
               names_to = 'date',
               values_to = 'deaths') %>%
  select(-c(UID, 'iso2', 'iso3', code3, FIPS, Lat, Long_, 'Combined_Key')) %>%
  rename(county = Admin2, province_state = Province_State, country_region = Country_Region, population = Population)

#Combining US cases and US deaths
us <- us_cases %>%
  full_join(us_deaths) %>%
  mutate(date = mdy(date)) %>%
  filter(cases > 0)

#Making Us by state
us_by_state <- us %>%
  group_by(province_state, country_region, date) %>%
  summarize(cases = sum(cases), deaths = sum(deaths), 
            population = sum(population)) %>%
  mutate(deaths_per_mil = deaths * 1000000 / population, cases_per_mil = cases * 1000000 / population) %>%
  select(province_state, country_region, date, cases, cases_per_mil, deaths_per_mil, population, deaths) %>%
  ungroup()

#US totals
us_totals <- us_by_state %>%
  group_by(country_region, date) %>%
  summarize(cases = sum(cases), deaths = sum(deaths),
            population = sum(population)) %>%
  mutate(deaths_per_mil = deaths * 1000000 / population, 
         cases_per_mil = cases * 1000000 / population,
         new_cases = cases - lag(cases),
         new_deaths = deaths - lag(deaths)) %>%
  select(country_region, date, cases, deaths, new_cases, new_deaths, deaths_per_mil, cases_per_mil, population) %>%
  ungroup()

#Adding new cases and new deaths per million
us_totals <- us_totals %>%
  mutate(new_cases_per_mil = new_cases * 1000000 / population, 
         new_deaths_per_mil = new_deaths * 1000000 / population) %>%
  select(everything())

#Global by country
global_by_country <- global %>%
  group_by(country_region, province_state, date) %>%
  summarise(cases = sum(cases), deaths = sum(deaths), population = sum(population)) %>%
  mutate(deaths_per_mil = deaths * 1000000 / population, cases_per_mil = cases * 1000000 / population) %>%
  select(country_region, province_state, date, cases, cases_per_mil, deaths, deaths_per_mil, population) %>%
  ungroup()

#Getting Sweden data
sweden <- global_by_country %>%
  filter(country_region == 'Sweden') %>%
  mutate(new_cases = cases - lag(cases),
         new_deaths = deaths - lag(deaths)) %>%
  select(everything())
sweden <- sweden %>%
  mutate(new_cases_per_mil = new_cases * 1000000 / population, 
         new_deaths_per_mil = new_deaths * 1000000 / population) %>%
  select(-c(province_state))

#Getting Sweden's vaccine data
sweden_vac <- vaccine %>%
  filter(location == 'Sweden') %>%
  mutate(date = ymd(date))

#Getting USA's vaccine data
usa_vac <- vaccine %>%
  filter(location == 'United States') %>%
  mutate(date = ymd(date), new_total_vaccinations = total_vaccinations - lag(total_vaccinations))

Visualizing and Analyzing the Data

The analysis of this project primarily concerns the COVID-19 data of the United States and Sweden. Sweden did not institute a lock down when many countries did early on in the pandemic, more can be read at https://www.newyorker.com/news/dispatch/swedens-pandemic-experiment. Given Sweden’s choice, their data was compared to the United States in terms of cases, deaths, new cases and deaths, and also vaccinations. Given the size disparities of the countries, data was scaled.

#Sweden cases and deaths per million line graph
sweden %>%
  ggplot() +
  geom_line(aes(x = date, y = deaths_per_mil, color = 'deaths')) + 
  geom_line(aes(x = date, y = cases_per_mil, color = 'cases')) +
  scale_y_log10() +
  labs(title = 'Swedish Cases per Million and Deaths per Million', 
       x = 'Date', y = 'Deaths and Cases per Million') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

sweden %>%
  filter(new_cases_per_mil > 0 & new_deaths_per_mil > 0) %>%
  ggplot() +
  geom_point(aes(x = date, y = new_cases_per_mil, color = 'Cases')) +
  geom_point(aes(x = date, y = new_deaths_per_mil, color = 'Deaths')) + 
  scale_y_log10() + 
  labs(title = 'Swedish New Cases and New Deaths per Million', x = 'Date', y = 'New Cases and Deaths per Mil Scaled by Log 10') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#US cases and deaths per million
us_totals %>%
  ggplot() +
  geom_line(aes(x = date, y = deaths_per_mil, color = 'deaths')) + 
  geom_line(aes(x = date, y = cases_per_mil, color = 'cases')) +
  scale_y_log10() +
  labs(title = 'Cases per Million and Deaths per Million in United States', 
       x = 'Date', y = 'Deaths and Cases per Million')  +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#US new cases and new deaths per million
us_totals %>%
  ggplot() +
  geom_point(aes(x = date, y = new_cases_per_mil, color = 'Cases')) +
  geom_point(aes(x = date, y = new_deaths_per_mil, color = 'Deaths')) +
  scale_y_log10() + 
  labs(title = 'United States New Cases and New Deaths per Million', x = 'Date', y = 'New Cases and Deaths per Mil Scaled by Log 10') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#Comparison of Swedish and US  cases and deaths per million
ggplot() +
  geom_line(data = sweden, aes(x = date, y = deaths_per_mil, color = 'Swedish Deaths per Mil')) +
  geom_line(data = sweden, aes(x = date, y = cases_per_mil, color = 'Swedish Cases per Mil')) +
  geom_line(data = us_totals, aes(x = date, y = cases_per_mil, color = 'US Cases per Mil')) +
  geom_line(data = us_totals, aes(x = date, y = deaths_per_mil, color = 'US Deaths per Mil')) +
  scale_y_log10() + 
  labs(title = 'Swedish and United States Cases and Deaths per Million',  x = 'Date', y = 'Value per Million Scaled by Log Base 10') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#Graph showing new cases and deaths (per million) in US and Sweden
ggplot() +
  geom_point(data = sweden %>% filter(new_deaths_per_mil > 0), aes(x = date, y = new_deaths_per_mil, color = 'Swedish New Deaths'), alpha = 0.4) +
  geom_point(data = sweden %>% filter(new_cases_per_mil > 0), aes(x = date, y = new_cases_per_mil, color = 'Swedish New Cases'), alpha = 0.4) +
  geom_point(data = us_totals, aes(x = date, y = new_cases_per_mil, color = 'US New Cases'), alpha = 0.4) +
  geom_point(data = us_totals, aes(x = date, y = new_deaths_per_mil, color = 'US New Deaths'), alpha = 0.4) +
  scale_y_log10() +
  labs(title = 'Swedish and United States Cases New Cases and New Deaths',  x = 'Date', y = 'New Cases and Deaths per Mil Scaled by Log 10') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#Graph highlighting Sweden vaccinations
sweden_vac %>%
  ggplot() + 
  geom_point(aes(x = date, y = total_vaccinations_per_hundred, color = 'Total Vaccines'), na.rm = TRUE) + 
  geom_point(aes(x = date, y = people_fully_vaccinated_per_hundred, color = 'People Fully Vaccinated'), na.rm = TRUE) +
  geom_point(aes(x = date, y = people_vaccinated_per_hundred, color = 'People at Least Partially Vaccinated Vaccinated'), na.rm = TRUE) +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '1 month') +
  theme(axis.text.x = element_text(angle = 330)) + 
  labs(title = 'Swedish Total Vaccines and People Vaccinated per Hundred', x = 'Date', y = 'Count')

#Graph detailing USA vaccinations
usa_vac %>%
  ggplot() + 
  geom_point(aes(x = date, y = total_vaccinations_per_hundred, color = 'Total Vaccines'), na.rm = TRUE) +
  geom_point(aes(x = date, y = people_vaccinated_per_hundred, color = 'People at Least Partially Vaccinated'), na.rm = TRUE) +
  geom_point(aes(x = date, y = people_fully_vaccinated_per_hundred, color = 'People Fully Vaccinated'), na.rm = TRUE) +
scale_x_date(date_labels = '%m-%Y', date_breaks = '1 month') +
  theme(axis.text.x = element_text(angle = 330)) + 
  labs(title = 'USA Total Vaccines and People Vaccinated per Hundred', x = 'Date', y = 'Count')

#Comparison of Swedish and USA vaccines
ggplot() + 
  geom_point(data = sweden_vac, aes(x = date, y = total_vaccinations_per_hundred, color = 'Swedish Total Vaccines'), na.rm = TRUE) +
    geom_point(data = sweden_vac, aes(x = date, y = people_vaccinated_per_hundred, color = 'Swedish At Least Partially Vaccinated'), na.rm = TRUE) +
   geom_point(data = sweden_vac, aes(x = date, y = people_fully_vaccinated_per_hundred, color = 'Swedish Fully Vaccinated'), na.rm = TRUE) +
  geom_point(data = usa_vac, aes(x = date, y = total_vaccinations_per_hundred, color = 'American Total Vaccines'), na.rm = TRUE) +
   geom_point(data = usa_vac, aes(x = date, y = people_vaccinated_per_hundred, color = 'American At Least Partially Vaccinated'), na.rm = TRUE) +
  geom_point(data = usa_vac, aes(x = date, y = people_fully_vaccinated_per_hundred, color = 'American Fully Vaccinated'), na.rm = TRUE) +
scale_x_date(date_labels = '%m-%Y', date_breaks = '1 month') +
  theme(axis.text.x = element_text(angle = 330)) + 
  labs(title = 'Sweden and USA Vaccine Data Per Hundred', x = 'Date', y = 'Count')

#Graph of new vaccinations for USA
usa_vac %>%
  ggplot() +
  geom_point(aes(x = date, y = new_total_vaccinations), na.rm = TRUE, color = 'dark blue') +
  labs(x = 'Date', y = 'New Vaccinations', title = 'American New Vaccinations') + 
  scale_x_date(date_labels = '%m-%Y', date_breaks = '1 month') +
  theme(axis.text.x = element_text(angle = 330))

Modeling

#model of Swedish deaths and cases, then using it to predict deaths per mil
swedish_death_model <- lm(deaths_per_mil ~ cases_per_mil, data = sweden)
summary(swedish_death_model)
## 
## Call:
## lm(formula = deaths_per_mil ~ cases_per_mil, data = sweden)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -544.63 -150.06  -18.94  249.83  340.20 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   5.444e+02  1.224e+01   44.48   <2e-16 ***
## cases_per_mil 5.969e-03  9.094e-05   65.63   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 249.3 on 932 degrees of freedom
## Multiple R-squared:  0.8221, Adjusted R-squared:  0.8219 
## F-statistic:  4308 on 1 and 932 DF,  p-value: < 2.2e-16
sweden <- sweden %>%
  mutate(pred_deaths_per_mil = predict(swedish_death_model))
sweden %>%
  ggplot() + 
  geom_point(aes(x = cases_per_mil, y = deaths_per_mil, color = 'Actual Deaths per Million')) + 
  geom_point(aes(x = cases_per_mil, y = pred_deaths_per_mil, color = 'Predicted Deaths per Million')) +
  labs(title = 'Swedish Deaths per Million as a Function of Cases per Million', x = 'Cases per Million', y = 'Deaths per Million')

#us model of deaths and cases per mil to predict death per mil
us_deaths_model <- lm(deaths_per_mil ~ cases_per_mil, data = us_totals)
summary(us_deaths_model)
## 
## Call:
## lm(formula = deaths_per_mil ~ cases_per_mil, data = us_totals)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -385.16 -161.97  -23.49  246.01  347.79 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   3.852e+02  1.157e+01    33.3   <2e-16 ***
## cases_per_mil 1.106e-02  8.151e-05   135.7   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 228.3 on 942 degrees of freedom
## Multiple R-squared:  0.9513, Adjusted R-squared:  0.9513 
## F-statistic: 1.841e+04 on 1 and 942 DF,  p-value: < 2.2e-16
us_totals <- us_totals %>%
  mutate(pred_deaths_per_mil = predict(us_deaths_model))
us_totals %>%
  ggplot() +
  geom_point(aes(x = cases_per_mil, y = deaths_per_mil, color = 'Actual Deaths per Million')) + 
  geom_point(aes(x = cases_per_mil, y = pred_deaths_per_mil, color = 'Predicted Deaths per Million')) +
  labs(title = 'American Deaths per Million as a Function of Cases per Million', x = 'Cases per Million', y = 'Deaths per Million')

#Sweden cases and date
sweden_cases_model <- lm(cases_per_mil ~ date, data = sweden)
summary(sweden_cases_model)
## 
## Call:
## lm(formula = cases_per_mil ~ date, data = sweden)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -46923 -19654  -4385  20862  50038 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -5.868e+06  5.979e+04  -98.16   <2e-16 ***
## date         3.182e+02  3.187e+00   99.84   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26260 on 932 degrees of freedom
## Multiple R-squared:  0.9145, Adjusted R-squared:  0.9144 
## F-statistic:  9969 on 1 and 932 DF,  p-value: < 2.2e-16
sweden <- sweden %>%
  mutate(pred_cases_per_mil_date = predict(sweden_cases_model))
sweden %>%
  filter(pred_cases_per_mil_date >= 0) %>%
  ggplot() +
  geom_point(aes(x = date, y = pred_cases_per_mil_date, color = 'Predicted Cases')) +
  geom_point(aes(x = date, y = cases_per_mil, color = 'Actual Cases')) + 
  labs(title = 'Swedish Cases per Million as a Function of Date', x = 'Date', y = 'Count') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#Sweden deaths and date
sweden_death_date_model <- lm(deaths_per_mil ~ date, data = sweden)
summary(sweden_death_date_model)
## 
## Call:
## lm(formula = deaths_per_mil ~ date, data = sweden)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -254.57 -113.83  -27.17   70.71  290.02 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.861e+04  3.405e+02  -113.4   <2e-16 ***
## date         2.119e+00  1.815e-02   116.8   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 149.5 on 932 degrees of freedom
## Multiple R-squared:  0.936,  Adjusted R-squared:  0.9359 
## F-statistic: 1.363e+04 on 1 and 932 DF,  p-value: < 2.2e-16
sweden <- sweden %>%
  mutate(pred_deaths_per_mil_date = predict(sweden_death_date_model))
sweden %>%
  filter(pred_deaths_per_mil_date >= 0) %>%
  ggplot() +
  geom_point(aes(x = date, y = pred_deaths_per_mil_date, color = 'Predicted Deaths')) +
  geom_point(aes(x = date, y = deaths_per_mil, color = 'Actual Deaths')) + 
  labs(title = 'Swedish Deaths per Million as a Function of Date', x = 'Date', y = 'Count') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#US cases and date model
us_case_date_model <- lm(cases_per_mil ~ date, data = us_totals)
summary(us_case_date_model)
## 
## Call:
## lm(formula = cases_per_mil ~ date, data = us_totals)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -30699 -18566  -2455  19341  44727 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -5.995e+06  4.712e+04  -127.2   <2e-16 ***
## date         3.255e+02  2.512e+00   129.5   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21040 on 942 degrees of freedom
## Multiple R-squared:  0.9469, Adjusted R-squared:  0.9468 
## F-statistic: 1.678e+04 on 1 and 942 DF,  p-value: < 2.2e-16
us_totals <- us_totals %>%
  mutate(pred_cases_per_mil_date = predict(us_case_date_model))
#Plotting model
us_totals %>%
  filter(pred_cases_per_mil_date >= 0) %>%
  ggplot() +
  geom_point(aes(x = date, y = pred_cases_per_mil_date, color = 'Predicted Cases')) +
  geom_point(aes(x = date, y = cases_per_mil, color = 'Actual Cases')) +
  labs(title = 'American Cases per Million as a Function of Date', x = 'Date', y = 'Count') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

#Model for us death_per_mil and date
us_death_date_model <- lm(deaths_per_mil ~ date, data = us_totals)
summary(us_death_date_model)
## 
## Call:
## lm(formula = deaths_per_mil ~ date, data = us_totals)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -231.88  -79.19  -11.88   88.00  220.80 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -6.913e+04  2.500e+02  -276.5   <2e-16 ***
## date         3.770e+00  1.333e-02   282.9   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 111.6 on 942 degrees of freedom
## Multiple R-squared:  0.9884, Adjusted R-squared:  0.9884 
## F-statistic: 8.001e+04 on 1 and 942 DF,  p-value: < 2.2e-16
#plotting model
us_totals <- us_totals %>%
  mutate(pred_deaths_per_mil_date = predict(us_death_date_model))
us_totals %>%
  filter(pred_deaths_per_mil_date >= 0) %>%
  ggplot() +
  geom_point(aes(x = date, y = pred_deaths_per_mil_date, color = 'Predicted Death')) +
  geom_point(aes(x = date, y = deaths_per_mil, color = 'Actual Death')) +
  labs(title = 'American Deaths per Million as a Function of Date', x = 'Date', y = 'Count') +
  scale_x_date(date_labels = '%m-%Y', date_breaks = '2 month') +
  theme(axis.text.x = element_text(angle = 330))

Conclusion

With this analysis it is important to discuss possible bias that may have been in this project. Firstly, I chose to analyze certain countries with possibly biased motives. I chose the USA as it is my home country, while I chose Sweden as I knew they did not impose a lock down early on in the pandemic. Further, while the data comes from reputable sources, I cannot attest as to how the data is collected. Thus, there may be possible bias in this data collection.

In conclusion, this project utilized data from Johns Hopkins University and the University of Oxford. These data were tidied to use for analysis, visualization, and modeling to compare the COVID-19 pandemic for the United States and Sweden.

sessionInfo()
## R version 4.2.1 (2022-06-23)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS Monterey 12.5
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] lubridate_1.8.0 forcats_0.5.2   stringr_1.4.0   dplyr_1.0.9    
##  [5] purrr_0.3.4     readr_2.1.2     tidyr_1.2.0     tibble_3.1.8   
##  [9] ggplot2_3.3.6   tidyverse_1.3.2
## 
## loaded via a namespace (and not attached):
##  [1] assertthat_0.2.1    digest_0.6.29       utf8_1.2.2         
##  [4] R6_2.5.1            cellranger_1.1.0    backports_1.4.1    
##  [7] reprex_2.0.2        evaluate_0.15       highr_0.9          
## [10] httr_1.4.3          pillar_1.8.0        rlang_1.0.4        
## [13] curl_4.3.2          googlesheets4_1.0.1 readxl_1.4.1       
## [16] rstudioapi_0.13     jquerylib_0.1.4     rmarkdown_2.14     
## [19] labeling_0.4.2      googledrive_2.0.0   bit_4.0.4          
## [22] munsell_0.5.0       broom_1.0.0         compiler_4.2.1     
## [25] modelr_0.1.9        xfun_0.31           pkgconfig_2.0.3    
## [28] htmltools_0.5.3     tidyselect_1.1.2    fansi_1.0.3        
## [31] crayon_1.5.1        tzdb_0.3.0          dbplyr_2.2.1       
## [34] withr_2.5.0         grid_4.2.1          jsonlite_1.8.0     
## [37] gtable_0.3.0        lifecycle_1.0.1     DBI_1.1.3          
## [40] magrittr_2.0.3      scales_1.2.1        cli_3.3.0          
## [43] stringi_1.7.8       vroom_1.5.7         cachem_1.0.6       
## [46] farver_2.1.1        fs_1.5.2            xml2_1.3.3         
## [49] bslib_0.4.0         ellipsis_0.3.2      generics_0.1.3     
## [52] vctrs_0.4.1         tools_4.2.1         bit64_4.0.5        
## [55] glue_1.6.2          hms_1.1.2           parallel_4.2.1     
## [58] fastmap_1.1.0       yaml_2.3.5          colorspace_2.0-3   
## [61] gargle_1.2.0        rvest_1.0.3         knitr_1.39         
## [64] haven_2.5.1         sass_0.4.2