Info

Quick check to debunk some wrong plots on Hospitalization vs. Vaccination Rate.

Just to make it clear, this is just a simple correlation, as cross country comparison would require a multivariate analysis, as many factors influence this analysis. Just to name a few: restrictions / measures in place, median age of the country, population density etc. But at least this analysis takes in consideration the inhabitants of each country, it provides data and is easily reproducible (all the code is here).

Data for vaccination and hospitalization rates come from:

Population numbers come from:

Data from a few countries are not taken from the exact same date due to data availability, but the difference is negligible.

Libraries and data

library(dplyr)
library(ggplot2)
library(kableExtra)
cov_hosp_vac <- read.csv2(file = 'Covid_Hosp_Vaccine.csv')
kable(cov_hosp_vac, caption = 'Source data') %>%
  kable_styling("striped", full_width = T, position = 'left')
Source data
country country_code day_vax people_fully_vaccinated day_hosp daily_hospital_occupancy population
Austria AUT 30/11/2021 65.94 28/11/2021 290.167 9079404
Belgium BEL 30/11/2021 74.77 28/11/2021 304.840 11661287
Denmark DNK 30/11/2021 76.67 28/11/2021 74.828 5821184
Finland FIN 30/11/2021 72.61 28/11/2021 58.035 5552952
France FRA 30/11/2021 69.79 28/11/2021 138.846 65478756
Ireland IRL 30/11/2021 76.18 28/11/2021 113.588 5016107
Israel ISR 30/11/2021 62.18 30/11/2021 19.051 9326000
Italy ITA 30/11/2021 72.98 28/11/2021 92.798 60335462
Netherlands NLD 28/11/2021 74.08 28/11/2021 121.760 17188747
Norway NOR 30/11/2021 70.13 26/11/2021 40.435 5481453
Spain ESP 30/11/2021 80.49 19/11/2021 51.299 46780515
Sweden SWE 30/11/2021 70.22 28/11/2021 29.035 10188725
Switzerland CHE 30/11/2021 65.44 30/11/2021 153.175 8744527
United Kingdom GBR 30/11/2021 68.03 30/11/2021 112.070 68392645

Proper plot

Clear trend: the higher the vaccination rate, the lower the hospitalization rate.

The plot weights the number of inhabitants of each country and shows a 95% confidence interval.

ggplot(cov_hosp_vac, aes(x = people_fully_vaccinated, y = daily_hospital_occupancy, size = population)) + 
  geom_point(colour = 'blue', show.legend = FALSE) +
  geom_text(aes(label = country_code, size = 100), hjust = -.5, size = 4) +
  geom_smooth(method = 'lm', mapping = aes(weight = population), level = .95, show.legend = FALSE) +
  labs(x = 'Share of people fully vaccinated (percentage)', y = 'Hospitalizations per million inhabitants')
## `geom_smooth()` using formula 'y ~ x'