Overall there is much evidence for a general improvement of health in Europe during the last decades. Important examples being life expectancy, health care per capita spending and vaccination rates. However, the indicators of the health domain also show different trends, developments and current states throughout Europe. Often there is a gradient from Western to Eastern Europe with Eastern Europe showing lower levels of improvements of certain indicators. A similar gradient is also often seen from north to south for a few indicators. There are also stagnating or even slightly negative trends for some indicators (e.g. some diseases, mental health, substance use), which show that there are certain areas that still need improvement throughout Europe. The increasing gap in some health related subjects could become a rpoblem in the future and needs adressing. Furthermore there exist dangers and difficulties for the progress of health related criterias in Europe that need to be dealt with (e.g. anti-vaccination movement). The population shift is another important health related factor and requires long term adjustments of health related subjects (e.g. health care).
Ensuring mental and physical health is an important part of sustainable development and therefore a crucial subject to monitor in countries around the world. Due to the influence that the health of a population can have on many other important areas and factors like economy and politics, it is crucial to not only monitor but also use the data gathered to positively influence health development. This is not only true for a country but also for a region surrounding that country, because regional gradients affect countries. Be it directly by disease spreading or indirectly by economic decisions partially based on health. The following analysis aims to give an overview of trends and the state of health relevant indicators in Europe. To achieve this, five sections of the main health sustainable development goal and some of their most relevant indicators have been chosen to be investigated. These indicators have been selected in part based on the goals set by the United Nations for sustainable development. The UN goals relevant to this category are to decrease deaths due to diseases, accidents, childbirth and other causes. Furthermore the UN sees higher investments in medical research, health coverage and vaccinations as important long term solutions. Better treatments and prevention for illnesses and mental as well as drug use disorders are also crucial for reaching a higher health quality. Of these categories indicators belonging to the subsections of vaccination, mental health, diseases, healthcare, life expectancy and substance use have been selected to be analyzed.
Most of the base data used in this analysis has been obtained from https://ourworldindata.org. Ourworldindata in turn accumulates data from multiple studies done by international organisations, researchers and national registers. Sources for the data used in this analysis include: the United Nations (UN), the World Bank, the World Health Orginzation (WHO), the United Nations (UN), the International Children’s Emergency Fund (UNICEF) and the Institute for Health Metrics and Evaluation (IHME). Depending on the indicator the data was either used to create maps,graphs or charts depicting the development in Europe as a whole or comparing European countries. Processing steps included merging, calculating, filtering, joining, aggregating and plotting the data. The processing was carried out using R 3.5.1 and RStudio 1.1.463. The main packages used were ggplot2 and leaflet and RColorBrewer. The full list of packages can be found in the following chapter.
Activating all necessary packages:
#install.packages("rgeos",repos="http://R-Forge.R-project.org")
#install.packages("cartography")
packages=c("broom","devtools","sp","sf","raster","ggplot2","rgdal","cartography","ggiraph","rnaturalearth","readr","RCurl","htmlwidgets","hrbrthemes","colormap","widgetframe","dplyr","plotly","leaflet","ape","lubridate","tidyr","ggmap","RColorBrewer","dygraphs","xts","reshape2")
lapply(packages, library, character.only=T)
require(data.table)
Downloading and importing world border data:
#download.file(url="http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip", destfile="./Data/tm_world.zip",mode='wb')
#unzip("./Data/tm_world.zip", exdir = "./Data")
worldborder <- st_read("./Data/TM_WORLD_BORDERS-0.3.shp")
Creating a filter for European countries excluding Russia:
seleurope = worldborder$REGION == 150 & worldborder$ISO3 != "RUS"
summary(seleurope)
## Mode FALSE TRUE
## logical 196 50
europefilter <- dplyr::filter(worldborder, seleurope)
Importing data:
cancer100k <- read.table("./Data/cancer-death-rates-per-100000.csv",quote="\"",stringsAsFactors=TRUE,sep=",",dec=".",header=TRUE)
names(cancer100k) <- c("Entity", "Code", "Year", "Cancer")
cardio100k <- read.table("./Data/cardiovascular-disease-death-rates.csv",quote="\"",stringsAsFactors=TRUE,sep=",",dec=".",header=TRUE)
names(cardio100k) <- c("Entity", "Code", "Year", "Cardio")
dementia100k <- read.table("./Data/dementia-death-rates.csv",quote="\"",stringsAsFactors=TRUE,sep=",",dec=".",header=TRUE)
names(dementia100k) <- c("Entity", "Code", "Year", "Dementia")
Filtering by Europe:
EUca100k=filter(cancer100k, Code %in% europefilter$ISO3)
EUcd100k=filter(cardio100k, Code %in% europefilter$ISO3)
EUde100k=filter(dementia100k, Code %in% europefilter$ISO3)
Calculating the difference from 2016 to 1990:
cancercal=EUca100k
cancercal$Year <- as.character(cancercal$Year)
cancercal$Year[cancercal$Year == "1990"] <- "Past"
cancercal$Year[cancercal$Year == "2016"] <- "Present"
cancerpoly=cancercal %>%
dcast(Entity ~ Year, value.var = "Cancer", fill = 0) %>%
mutate(Diff = Present - Past ) %>%
select(Entity, Diff)
cardiocal=EUcd100k
cardiocal$Year <- as.character(cardiocal$Year)
cardiocal$Year[cardiocal$Year == "1990"] <- "Past"
cardiocal$Year[cardiocal$Year == "2016"] <- "Present"
cardiopoly=cardiocal %>%
dcast(Entity ~ Year, value.var = "Cardio", fill = 0) %>%
mutate(Diff = Present - Past ) %>%
select(Entity, Diff)
dementcal=EUde100k
dementcal$Year <- as.character(dementcal$Year)
dementcal$Year[dementcal$Year == "1990"] <- "Past"
dementcal$Year[dementcal$Year == "2016"] <- "Present"
dementiapoly=dementcal %>%
dcast(Entity ~ Year, value.var = "Dementia", fill = 0) %>%
mutate(Diff = Present - Past ) %>%
select(Entity, Diff)
Joining the data:
cancerlayer<- left_join(europefilter, cancerpoly, by = c('NAME' = 'Entity'))
cardiolayer<- left_join(europefilter, cardiopoly, by = c('NAME' = 'Entity'))
dementialayer<- left_join(europefilter, dementiapoly, by = c('NAME' = 'Entity'))
Creating color palettes for the map:
## Vector of colors for values smaller than 0 (15 colors)
rc1 <- colorRampPalette(colors = c("darkblue", "white"), space = "Lab")(15)
## Vector of colors for values larger than 0 (5 colors)
rc2 <- colorRampPalette(colors = c("white", "red"), space = "Lab")(5)
ra2 <- colorRampPalette(colors = c("darkblue", "white"), space = "Lab")(100)
rd1 <- colorRampPalette(colors = c("darkblue", "white"), space = "Lab")(50)
rd2 <- colorRampPalette(colors = c("white", "red"), space = "Lab")(4)
## Combining the color palettes
rampcancer <- c(rc1, rc2)
rampdement=c(rd1,rd2)
cancerpal <- colorNumeric(palette = rampcancer, domain = cancerlayer$Diff,na.color = "black")
dementiapal <- colorNumeric(palette = rampdement, domain = dementialayer$Diff,na.color = "black")
cardiopal <- colorNumeric(palette = ra2, domain = cardiolayer$Diff,na.color = "black")
Creating a map with each layer showing the difference in deaths due to a specific disease type standardized by age from 1990 to 2016:
basem<-leaflet()
leafletmapdis = basem %>% addProviderTiles(providers$Esri.WorldShadedRelief)%>%
addPolygons(data=cancerlayer,weight = 1,opacity = 1,color = "black",dashArray = "1",fillOpacity = 0.7,fillColor = ~cancerpal(Diff),label=~paste(NAME,":",as.character(Diff)),group="Cancers")%>%
addPolygons(data=cardiolayer,weight = 1,opacity = 1,color = "black",dashArray = "1",fillOpacity = 0.7,fillColor = ~cardiopal(Diff),label=~paste(NAME,":",as.character(Diff)),group="Cardiovascular")%>%
addPolygons(data=dementialayer,weight = 1,opacity = 1,color = "black",dashArray = "1",fillOpacity = 0.7,fillColor = ~dementiapal(Diff),label=~paste(NAME,":",as.character(Diff)),group="Dementia")%>%
leaflet::addLegend("bottomright", title="<p>Difference in deaths per </p><p>100,000 inhabitants</p><p>from 1990 to 2016</p>",
colors =c(rc1[1], rc1[10], rc2[1], rc2[3], rc2[5],"","black"),
labels= c("Decrease", "", "Unchanged", "", "Increase", "", "No data"))%>%
leaflet::addScaleBar("bottomleft")
leafletmapdis %>% addLayersControl(c("Cancers", "Cardiovascular","Dementia"),
options = layersControlOptions(collapsed = FALSE))
Sources: IHME (2017); UN Population Division (2017)
When accounting for the population shifting to a higher mean age it can be seen that the deaths caused by cancers and cardiovascular diseases have been decreasing in most of Europe. Cardiovascular deaths have decreased in every country in Europe since 1990. The highest reduction of deaths caused by cardiovascular diseases is in Central Europe, while the reduction is less in Eastern Europe. Cancer deaths have decreased in most European countries as well, except for romania, serbia and albania. Other Eastern European countries show only a very small decrease. Dementia related deaths have only noticeably decreased in a few countries.Germany is showing the highest difference to 1990, but even that decrease is rather small. For Eastern Europe the deaths related to dementia have decreased only very slightly with some countries even showing an increase. Researching these diseases will have further increased importance due to the population shifting to older ages.
Importing data:
life <- read.csv("./Data/life-expectancy.csv")
names(life) <- c("Entity", "Code", "Year", "lifeexp")
Filtering by Europe:
europelifefil=filter(life, Code %in% europefilter$ISO3)
Joining the data:
europelife <- left_join(europefilter, europelifefil, by = c('ISO3' = 'Code'))
Filtering by year:
life80 <- filter(europelife, Year==1980)
life90 <- filter(europelife, Year==1990)
life2000 <- filter(europelife, Year==2000)
life2010 <- filter(europelife, Year==2010)
Creating a color palette for the map:
brew=brewer.pal(9,"Purples")
mpal=colorBin(brew, 60:85, pretty = TRUE,
na.color = "black", alpha = FALSE, reverse = FALSE,
right = FALSE)
Creating the map with each layer showing life expectancy in Europe from 1980 to 2010 in 10-year-steps.
basem<-leaflet()
leafletmaplife = basem %>%addProviderTiles(providers$CartoDB.DarkMatterNoLabels)%>%
addPolygons(data=life80,fillColor = "darkgrey",weight = 1,opacity = 1,color = "black",
dashArray = "3",fillOpacity = 0.7,label = ~Entity)%>%
addPolygons(data=life80,fillColor = ~mpal(lifeexp),weight = 1,opacity = 1,color = "black",
dashArray = "3",group="1980",fillOpacity = 0.7,label=~paste(NAME,":",as.character(lifeexp),"Years"))%>%
addPolygons(data=life90,fillColor = ~mpal(lifeexp),weight = 1,opacity = 1,color = "black",
dashArray = "3",group="1990",fillOpacity = 0.7,label=~paste(NAME,":",as.character(lifeexp),"Years"))%>%
addPolygons(data=life2000,fillColor = ~mpal(lifeexp),weight = 1,opacity = 1,color = "black",
dashArray = "3",group="2000",fillOpacity = 0.7,label=~paste(NAME,":",as.character(lifeexp),"Years"))%>%
addPolygons(data=life2010,fillColor = ~mpal(lifeexp),weight = 1,opacity = 1,color = "black",
dashArray = "3",group="2010",fillOpacity = 0.7,label=~paste(NAME,":",as.character(lifeexp),"Years"))%>%
leaflet::addLegend("bottomright", pal=mpal, values=europelife$lifeexp,
title="<p>Life expectancy</p><p>in Europe [yrs]</p>", na.label="No data")%>%
leaflet::addScaleBar("bottomleft")
leafletmaplife %>% addLayersControl(c("1980", "1990","2000","2010"),
options = layersControlOptions(collapsed = FALSE))
Sources: UN Population Division (2017), Census data
Life expectancy has increased for all European countries from 1980 to 2010, whereas Western Europe had a higher increase. For some of the Eastern European countries life expectancy has stagnated (e.g. Ukraine) or only slightly increased. Overall there is a clear gradient from Western Europe to Eastern Europe visible in the maps. Problematic is the increasing gap beween Eastern European countries and the rest of Europe. While life expectancy increased by 6-8 years anywhere else, it only increased by 0-2 years in some countries in the east.
Importing data:
measles <- read.table("./Data/share-of-children-vaccinated-against-measles.csv",quote="\"",stringsAsFactors=TRUE,sep=",",dec=".",header=TRUE)
names(measles) <- c("Entity", "Code", "Year", "meas")
dtp <- read.table("./Data/share-of-children-immunized-dtp3.csv",quote="\"",stringsAsFactors=TRUE,sep=",",dec=".",header=TRUE)
names(dtp) <- c("Entity", "Code", "Year", "dtp1")
Filtering by Europe and joining:
measlesfil=filter(measles, Code %in% europefilter$ISO3)
measleeurope<- left_join(europefilter, measlesfil, by = c('NAME' = 'Entity'))
dtpfil=filter(dtp, Code %in% europefilter$ISO3)
dtpeurope<- left_join(europefilter, dtpfil, by = c('NAME' = 'Entity'))
Filtering by year:
measleeurope2015 <- filter(measleeurope, Year==2015)
dtpeurope2015 <- filter(dtpeurope, Year==2015)
vacc2015=measleeurope2015
setDT(vacc2015)[setDT(dtpeurope2015), dtpeurope2015 := i.dtp1, on=c("Code")]
Creating the scatterplot:
ggplot(data=vacc2015) +
geom_point(aes(x=meas,y=dtpeurope2015,size=POP2005),alpha=0.5, color="darkgreen") +
geom_text(aes(x=meas,y=dtpeurope2015, label=NAME), color="grey15",
data=filter(vacc2015,meas<90),vjust="inward",hjust="inward") +
labs(title = "Vaccination rates of children against diphtheria, pertussis,
tetanus (DPT) and measles in Europe (2015)",
x = "Vaccinated against measles [%]",
y = "Vaccinated against DPT [%]",
size = "Popoulation", caption="Sources: WHO, UNICEF (2017)")+
theme_classic()
The scatter plot shows that most European countries have high to very high vaccination rates against the chosen diseases. Vaccination rates have heavily increased for most European countries since 1950. However, there are some that still have relatively low vaccination rates against measles in 2015.These include Ukraine, Romania, Serbia, San Marino and Italy. Overall there seems to again be a decrease in vaccination rates from west to east and north to south. These mentioned countries also have relatively low vaccination rates for diphtheria, pertussis and tetanus with Ukraine having the lowest rates. One of the reasons for this could be the ongoing conflict in the country as well as the problems with medical education and health care. According to the WHO a task force has been established consisting of the ministry of health as well as international organisations like the WHO and UNICEF to counter the problem of recent large-scale outbreaks in the Ukraine(WHO, 2018).
Importing data:
capita <- read.table("./Data/annual-healthcare-expenditure-per-capita.csv",quote="\"",stringsAsFactors=TRUE,sep=",",dec=".",header=TRUE)
names(capita) <- c("Entity", "Code", "Year", "cap")
capitafil=filter(capita, Code %in% europefilter$ISO3)
Calculating the difference from 2016 to 1990:
capitafil$Year <- as.character(capitafil$Year)
capitafil$Year[capitafil$Year == "1995"] <- "Past"
capitafil$Year[capitafil$Year == "2014"] <- "Present"
capitapoly=capitafil %>%
dcast(Entity ~ Year, value.var = "cap", fill = 0) %>%
mutate(Diff = Present - Past ) %>%
select(Entity, Diff)
Joining the data:
capitalayer<- left_join(europefilter, capitapoly, by = c('NAME' = 'Entity'))
Creating a color palette for the map:
c1 <- colorRampPalette(colors = c("white", "orange4"), space = "Lab")(10)
cappal <- colorNumeric(palette = c1, domain = capitalayer$Diff,na.color = "black")
Change in health care expenditure per capita from 1995 to 2014 in constant international-$ in 2011 prices:
basem<-leaflet()
leafletmapcap = basem %>% addProviderTiles(providers$Esri.WorldGrayCanvas)%>%
addPolygons(data=capitalayer,weight = 1,opacity = 1,color = "black",dashArray = "1",fillOpacity = 0.7,fillColor = ~cappal(Diff),label=~paste(NAME,":",as.character(Diff)))%>%
leaflet::addLegend("bottomright", pal=cappal, values=capitalayer$Diff,
title="<p>Increase of health care</p><p> expenditure per capita</p><p>from 1995 to 2014</p><p>[const. int. $]</p>", na.label="No Data")%>%
leaflet::addScaleBar("bottomleft")
leafletmapcap
Sources: WHO, 2016
Health care expenditure per capita has increased in all of Europe since 1995. Again there is a gradient from north to south and west to east with Norway increasing expenditure by as much as 4481 \(.The expenditure in Greece, Albania, Ukraine and Latvia increased by less than 1000 constant international-\). This increase can have different reasons. Public spending by goverment programs can be increased, as well as higher private contributions from the citizens to health care. Increases in health care expenditure can be a sign of betterment of healthcare if the treatments increase in quality. However increasing numbers here also mean higher expenditures for the citizens. Health care expenditure increased in countries that already had the highest expenditure in Europe, which could indicate a further increasing gap in health care in Europe. This would be an important area to improve on to combat this gap.
IHME, 2012: Institute for Health Metrics and Evaluation (IHME), 2017: Nationally reperesentative sources and survey data. http://ghdx.healthdata.org/
IHME, 2017: Institute for Health Metrics and Evaluation (IHME), 2017: Global Burden of Disease Study 2016 (GBD 2016) Results. Seattle, United States
Larson et al, 2016: The State of Vaccine Confidence 2016: Global Insights Through a 67-Country Survey.
Scheil-Adlung, Xenia, 2014: Universal Health Protection: Progress to Date and the Way Forward, International Labour Organization.
UN Population Division, 2017: United Nations Population Division, 2017 https://population.un.org/wpp/Download/
World Bank - World Development Indicators, 2017
https://ourworldindata.org/ Last visited on 13.01.2019
WHO, 2016: World Health Organisation Global Health Expenditure database.
WHO, UNICEF, 2017: http://www.who.int/immunization/monitoring_surveillance/en/