We compute the implicit tax rates (ITR) on consumption, labour and corporate income for France, Italy, Spain, Germany and the Euro Area since 1995. We use as reference the reports on Taxation trends in the European Union: “DG Taxation and Customs Union” (2018), “DG Taxation and Customs Union” (2017), “DG Taxation and Customs Union” (2016) and “DG Taxation and Customs Union” (2014).

This database is built and automatically updated through DBnomics using the rdbnomics package. All the code is written in R, thanks to the R Core Team (2016) and RStudio Team (2016).

Implicit tax rate on consumption

The ITR on consumption is defined as all consumption taxes divided by the final consumption expenditure of households (domestic concept). The Directorate-General for Taxation & Customs Union of the European Commission proposes a detailed calculation methodology here (p. 255). We follow this general methodology using Eurostat’s data for the 19 countries composing the Euro Area, and we will add some specificities for France, Germany, Italy and Spain using national tax lists. Given that the ITR is a ratio, we structure this section in 4 steps. We begin by gathering all data on consumption taxes (the numerator), we add the specificities for France, Germany, Italy and Spain, then we retrieve data on the final consumption expenditure of households on the economic territory (the denominator), and we finish by constituting the Euro Area GDP-weighted average.

Step 1: taxes on consumption

Following the DG Taxation & Customs Union’s methodology, we consider as taxes on consumption the following aggregates (values in parenthesis represent the ESA 2010 nomenclature):

  1. Value added type taxes (D211)

  2. Taxes and duties on imports excluding VAT (D212)

  3. Taxes on products except VAT and import duties (D214), excluding:
    1. Stamp taxes (D214B)
    2. Taxes on financial and capital transactions (D214C)
    3. Export duties and monetary compensatory amounts on exports (D214K)
  4. From other taxes on production:
    1. Taxes on international transactions (D29D)
    2. Taxes on pollution (D29F)
    3. Under-compensation of VAT (flat rate system) (D29G)
  5. From other current taxes:
    1. Poll taxes (D59B)
    2. Expenditure taxes (D59C)
    3. Payments by households for licences (D59D)

These aggregates can be found in Eurostat’s database, using the dataset Main national accounts tax aggregates (gov_10a_taxag).

url_country <- paste(c("AT","BE","CY","EE","FI","FR","DE","EL","IE","IT",
                       "LV","LT","LU","MT","NL","PT","SK","SI","ES"),
                     collapse = "+")
url_taxes <- paste(c("D211","D212","D214","D214B","D214C","D214K",
                     "D29D","D29F","D29G","D59B","D59C","D59D"),
                   collapse = "+")
filter <- paste0("A.MIO_NAC.S13_S212.",url_taxes,".",url_country)

ITR_cons_num <- 
  rdb("Eurostat","gov_10a_taxag", mask = filter) %>%
  filter(year(period)>=1995 & year(period)<2017) %>% 
  select(country=geo,period,var=na_item,value)

We verify the minDate and maxDate of the data series we have just obtained from Eurostat’s database:

ITR_cons_min_d <-
  ITR_cons_num %>%
  na.omit %>%
  group_by(country,var) %>%
  summarize(mindate= min(year(period))) %>%
  spread(var,mindate)

kable(ITR_cons_min_d, "html", caption = "Taxes on consumption: min Date") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed",  "responsive"), position = "center", font_size = 12) %>%
  footnote(general = "The following taxes are not applicable for some countries (in a determined period of time): D214B, D214C, D214K, D29D, D29F, D29G, D59B, D59C, D59D. Thus we replace their NA values by 0 for the calculation.", number = c("D214B is not applicable for: EE, LV, SI. ", "D214C is not applicable for: EE, LV, SI; it is applicable for FI since 1997. ", "D214K is not applicable for: EE, FI, IT, LT, MT PT, SI,SK. ", "D29D is not applicable for: EE, FI, IT, LT, LV, MT, PT, SI, SK. ", "D29F is applicable since: 1996 for FI, 2007 for MT, and 2006 for PT.", "D29G is not applicable for: EE, FI, IT, LT, LV, MT, PT; it is applicable for SI since 1999.", "D59B is not applicable for: EE, FI, IT, LT, LV, MT, SI, SK; it is applicable for PT since 2015.", "D59C is not applicable for: EE, FI, IT, LT, LV, PT, SI, SK.", "D59D is not applicable for: EE; it is applicable for LV since 2007. "))
Taxes on consumption: min Date
country D211 D212 D214 D214B D214C D214K D29D D29F D29G D59B D59C D59D
AT 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
BE 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
CY 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
DE 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
EE 1995 1995 1995 NA NA NA NA 1995 NA NA NA NA
EL 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
ES 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
FI 1995 1995 1995 1995 1997 NA NA 1996 NA NA NA 1995
FR 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
IE 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
IT 1995 1995 1995 1995 1995 NA NA 1995 NA NA NA 1995
LT 1995 1995 1995 1995 NA NA NA 1995 NA NA NA 1995
LU 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
LV 1995 1995 1995 NA 1995 1995 NA 1995 NA NA NA 2007
MT 1995 1995 1995 1995 1995 NA NA 2007 NA NA 1995 1995
NL 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995
PT 1995 1995 1995 1995 1995 NA NA 2006 NA 2015 NA 1995
SI 1999 1995 1995 NA 1995 NA NA 1995 1999 NA NA 1995
SK 1995 1995 1995 1995 1995 NA NA 1995 NA NA NA 1995
Note:
The following taxes are not applicable for some countries (in a determined period of time): D214B, D214C, D214K, D29D, D29F, D29G, D59B, D59C, D59D. Thus we replace their NA values by 0 for the calculation.
1 D214B is not applicable for: EE, LV, SI.
2 D214C is not applicable for: EE, LV, SI; it is applicable for FI since 1997.
3 D214K is not applicable for: EE, FI, IT, LT, MT PT, SI,SK.
4 D29D is not applicable for: EE, FI, IT, LT, LV, MT, PT, SI, SK.
5 D29F is applicable since: 1996 for FI, 2007 for MT, and 2006 for PT.
6 D29G is not applicable for: EE, FI, IT, LT, LV, MT, PT; it is applicable for SI since 1999.
7 D59B is not applicable for: EE, FI, IT, LT, LV, MT, SI, SK; it is applicable for PT since 2015.
8 D59C is not applicable for: EE, FI, IT, LT, LV, PT, SI, SK.
9 D59D is not applicable for: EE; it is applicable for LV since 2007.
ITR_cons_max_d <-
  ITR_cons_num %>%
  na.omit %>%
  group_by(country,var) %>%
  summarize(maxdate= max(year(period))) %>%
  spread(var,maxdate)

kable(ITR_cons_max_d, "html", caption = "Taxes on consumption: max Date") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed",  "responsive"), position = "center", font_size = 12)%>%
  footnote(general = "The following taxes are not applicable for some countries (in a determined period of time): D214B, D214C, D214K, D29D, D29F, D29G, D59B, D59C, D59D. Thus we replace their NA values by 0 for the calculation.", number = c("D214B is not applicable for: EE, LV, SI;  it is applicable for FI until 2002, and for SK until 2004.", "D214C is not applicable for: EE, LV, SI.", "D214K is not applicable for: EE, FI, IT, LT, MT PT, SI,SK.  it is applicable for MT until 1999.", "D29D is not applicable for: EE, FI, IT, LT, LV, MT, PT, SI, SK.", "D29G is not applicable for: EE, FI, IT, LT, LV, MT, PT.", "D59B is not applicable for: EE, FI, IT, LT, LV, MT, SI, SK.", "D59C is not applicable for: EE, FI, IT, LT, LV, PT, SI, SK;  it is applicable for MT until 1995", "D59D is not applicable for: EE."))
Taxes on consumption: max Date
country D211 D212 D214 D214B D214C D214K D29D D29F D29G D59B D59C D59D
AT 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
BE 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
CY 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
DE 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
EE 2016 2016 2016 NA NA NA NA 2016 NA NA NA NA
EL 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
ES 2016 2016 2016 2015 2016 2016 2016 2016 2016 2016 2016 2016
FI 2016 2016 2016 2002 2016 NA NA 2016 NA NA NA 2016
FR 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
IE 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
IT 2016 2016 2016 2016 2016 NA NA 2016 NA NA NA 2016
LT 2016 2016 2016 2016 NA NA NA 2016 NA NA NA 2016
LU 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
LV 2016 2016 2016 NA 2016 1999 NA 2016 NA NA NA 2016
MT 2016 2016 2016 2016 2016 NA NA 2016 NA NA 1995 2016
NL 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
PT 2016 2016 2016 2016 2016 NA NA 2016 NA 2016 NA 2016
SI 2016 2016 2016 NA 2016 NA NA 2016 2016 NA NA 2016
SK 2016 2016 2016 2004 2016 NA NA 2016 NA NA NA 2016
Note:
The following taxes are not applicable for some countries (in a determined period of time): D214B, D214C, D214K, D29D, D29F, D29G, D59B, D59C, D59D. Thus we replace their NA values by 0 for the calculation.
1 D214B is not applicable for: EE, LV, SI; it is applicable for FI until 2002, and for SK until 2004.
2 D214C is not applicable for: EE, LV, SI.
3 D214K is not applicable for: EE, FI, IT, LT, MT PT, SI,SK. it is applicable for MT until 1999.
4 D29D is not applicable for: EE, FI, IT, LT, LV, MT, PT, SI, SK.
5 D29G is not applicable for: EE, FI, IT, LT, LV, MT, PT.
6 D59B is not applicable for: EE, FI, IT, LT, LV, MT, SI, SK.
7 D59C is not applicable for: EE, FI, IT, LT, LV, PT, SI, SK; it is applicable for MT until 1995
8 D59D is not applicable for: EE.

Step 2: taxes on consumption - specificities for France, Germany, Italy and Spain:

We pay special attention to France, Italy, Spain & Germany, and following the DG Taxation and Customs Union we add more specificities using a detailed list of taxes and social contributions according to national classification (NTLs - national tax lists), as follows:

France:

  1. From council tax (D59A):
    1. (C05):part raised on consumption.
  2. From Capital transfers from general government to relevant sectors representing taxes and social contributions assessed but unlikely to be collected (D995):
    1. part raised on consumption.

Germany:

  1. From other current taxes n.e.c. (D59F):
    1. (C03): tax on radio and TV.

Italy:

  1. From stamp taxes (D214B):
    1. (C02): excise duty on spirits.
    2. (C03): excise duty on tobacco.
  2. From other current taxes on production n.e.c. (D29H):
    1. (C02): other taxes on production.
    2. (C05): fees to national & local economic bodies.

Spain:

  1. Taxes on products assessed but unlikely to be collected (D995A).

  2. From other taxes on production assessed but unlikely to be collected (D995B):
    1. part raised on consumption.
conso_specificities <- 
  read_csv("s_conso.csv") %>%
  select(country, period, var, value=total) %>%
  filter(year(period)>=1995 & year(period)<2017) %>%
  spread(var,value)

ITR_cons_num <-
  ITR_cons_num %>%
  spread(var,value) %>% 
  left_join(conso_specificities,by=c("country","period"))
  
  ITR_cons_num[is.na(ITR_cons_num)] <- 0

ITR_cons_num <-
  ITR_cons_num %>%
  transmute(period,
            country,
            value=D211+D212+(D214-D214B-D214C-D214K)+(D29D+D29F+D29G)+(D59B+D59C+D59D)+spec) %>%
  add_column(var="tx_cons")

Step 3: final consumption expenditure of households on the economic territory

The denominator of the ratio we are constituting is defined as the final consumption expenditure of households on the economic territory - domestic concept (P31_S14_DC). This aggregate can be retrieved from Eurostat’s database using the online data code nama_10_fcs.

filter <- paste0("A.CP_MNAC.","P31_S14_DC",".",url_country)

ITR_cons_den <- 
  rdb("Eurostat","nama_10_fcs",mask = filter) %>%
  filter(year(period)>=1995 & year(period)<2017) %>% 
  select(country=geo,period,value,var=na_item)

ITR_cons_minmax_d <-
  ITR_cons_den %>%
  na.omit %>%
  group_by(country) %>%
  summarize(mindate= min(year(period)),maxdate=max(year(period)))

kable(ITR_cons_minmax_d, "html", caption = "Final consumption expenditure of households: min/max Date") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed",  "responsive"), position = "center", font_size = 12)
Final consumption expenditure of households: min/max Date
country mindate maxdate
AT 1995 2016
BE 1995 2016
CY 1995 2016
DE 1995 2016
EE 1995 2016
EL 1995 2016
ES 1995 2016
FI 1995 2016
FR 1995 2016
IE 1995 2016
IT 1995 2016
LT 1995 2016
LU 1995 2016
LV 1995 2016
MT 1995 2016
NL 1995 2016
PT 1995 2016
SI 1995 2016
SK 1995 2016
ITR_consumption <- 
  bind_rows(ITR_cons_num,ITR_cons_den) %>%
  spread(var,value) %>%
  transmute(country,period,value=tx_cons/P31_S14_DC)

Step 4: Euro Area GDP-weighted average

After setting up the ITR on consumption for the 19 countries that compose the Euro Area, it is possible to build the GDP-weighted average for the Euro Area. First, it is necessary to establish the weights that will be used for this purpose, using the GDP of each country (million purchasing power standards). Data series for each country is available since 1995.

filter <- paste0("A.CP_MPPS.","B1GQ",".",url_country)

gdp <- 
  rdb("Eurostat","nama_10_gdp",mask = filter) %>% 
  select(period,value,country=geo) %>%
  add_column(var="gdp") %>% 
  filter(year(period)>=1995 & year(period)<2017)

EA_gdp <-
  gdp %>%
  group_by(period) %>%
  summarize(value=sum(value))

weights <-
  gdp %>%
  left_join(EA_gdp,by="period") %>%
  ungroup() %>%
  transmute(country, period, weight=value.x/value.y)

Now we apply these weights to our country data in order to build the Euro Area GDP-weighted average. The figure below shows the final series for France, Germany, Italy, Spain and the Euro Area.

ITR_consumption_EA_na <-
  ITR_consumption %>%
  left_join(weights,by=c("country","period"))

ITR_consumption_EA_na[is.na(ITR_consumption_EA_na)] <- 0

ITR_consumption_EA <-
  ITR_consumption_EA_na %>%
  transmute(period,value=value*weight) %>%
  group_by(period) %>%
  summarize(value =sum(value)) %>%
  add_column(country="EA19")

ITR_consumption_4 <- 
  ITR_consumption %>%
  filter(grepl('FR|DE|IT|ES', country))

ITR_consumption_FIN <- 
  bind_rows(ITR_consumption_4,ITR_consumption_EA) %>%
  add_column(var="Consumption tax")

ITR_consumption_FIN$country <- factor(ITR_consumption_FIN$country)                  
levels(ITR_consumption_FIN$country) <- listcountry

ggplot(ITR_consumption_FIN,aes(period,value,colour=country))+
  geom_line()+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle("Implicit Tax Rate on Consumption")

Implicit tax rate on Labour

The ITR on employed labour is defined as the sum of all direct and indirect taxes and employees’ and employers’ social contributions levied on employed labour income divided by the total compensation of employees working in the economic territory. As for the ITR on consumption, the Directorate-General for Taxation & Customs Union of the European Commission proposes a detailed calculation methodology here (p. 255). We follow this general methodology using Eurostat data (1995-2015). Given the nature of the ITR, we structure this section in 5 steps. We begin by gathering all data on employed labour taxes (the numerator), we add the specificities for France, Germany, Italy and Spain, then we deal with the special case of the personal income tax, after that we retrieve data on the total compensation of employees & wage bill and payroll taxes, and finally we constitute the Euro Area GDP-weighted average.

Step 1: taxes on employed labour

Following the DG Taxation & Customs Union’s methodology, we consider as taxes on employed labour the following aggregates:

  1. From taxes on income:
    1. Taxes on individual or household income including holding gains - part raised on labour income (D51A_C1). We deduce the part raised on labor income in the next step
  2. From other current taxes:
    1. Total wage bill and payroll taxes (D29C)
  3. From employers’ actual social contributions:
    1. Compulsory employers’ actual social contributions (D611C)
  4. From households’ actual social contributions:
    1. Compulsory employees’ actual social contributions (D613CE)

These aggregates can be found in Eurostat’s database, using the online data code gov_10a_taxag.

url_taxes <- paste(c("D51A_C1","D29C","D611C","D613CE"),
                   collapse = "+")
filter <- paste0("A.MIO_NAC.S13_S212.",url_taxes,".",url_country)

ITR_lab_num_raw <- 
  rdb("Eurostat","gov_10a_taxag",mask = filter)

ITR_lab_num1 <-
  ITR_lab_num_raw %>%
  transmute(country=geo,period,var=na_item,value) %>%
  filter(year(period)>=1995 &  year(period)<2017 & !grepl('D51A_C1', var))

Step 2: taxes on employed labour - specificities for France, Germany, Italy and Spain:

We pay special attention to France, Italy, Spain & Germany, and following the DG Taxation and Customs Union we add more specificities using a detailed list of taxes and social contributions according to national classification (NTLs - national tax lists), as follows:

France:

  1. From contributions on the value added of the corporations (D29A):
    1. (C08): taxes on wages.
  2. From capital transfers from general government to relevant sectors representing taxes and social contributions assessed but unlikely to be collected (D995):
    1. part raised on employers’ labour tax.
    2. part raised on employees’ labour tax.
    3. part raised on personal income tax.

Spain:

  1. Taxes on income assessed but unlikely to be collected (D995C).
    1. part raised on personal income tax.
  2. Employers’ actual social contributions assessed but unlikely to be collected (D995E).

  3. Households’ actual social contributions assessed but unlikely to be collected (D995F).

labour_specificities <- 
  read_csv("s_labour.csv") %>%
  select(country, period, corr_pit=total_pit, corr_leyrs=total_leyrs, corr_lees=total_lees, corr_prt=total_prt) %>%
  filter(year(period)>=1995 & year(period)<2017)

Step 3: personal income tax, part raised on labour income

The fundamental methodological problem in calculating the ITR on labour relies in this part: the personal income tax is broad-based and relates to multiple sources of income (i.e. employed labour, self-employed labour, income from capital and income in the form of social benefits and pensions received). For constituting this ITR, it is then only necessary to use the part raised on labour income. The DG Taxation & Customs Union uses disaggregated taxpayers’ data in order to allocate the personal income tax revenue across different sources of income. It provides data for estimating the part of the revenue from personal income tax that can be attributed to labour income. The three tables below can be found in the reports on Taxation Trends in the European Union in its 2018, 2017, 2016 and 2014 editions, pages 276, 330 and 303 respectively. We will chain the three tables by averaging the data points when they differ from table to table, in order to get the (1995-2015) series on the percentage of personal income tax revenue allocated to employed labour income. We use these percentages to obtain the final series on personal income tax raised on labour income.

url_country_pit <- paste(c("AT","BE","CY","EE","FI","FR","DE","EL","IE","IT",
                           "LV","LT","LU","MT","NL","PT","SK","SI","ES"),
                         collapse = "|")

pit_2018_raw <- read_csv("pit_2018.csv") %>%
  filter(grepl(url_country_pit, country))

pit_2018_raw_d <-
  pit_2018_raw%>%
  gather(period,value,-country) %>%
  mutate(period=year(period)) %>%
  spread(period,value)

kable(pit_2018_raw_d, "html", caption = "Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (2004–2016)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), position = "center", font_size = 12)
Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (2004–2016)
country 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016
AT 60.7 61.1 62.2 62.8 63.1 62.0 61.7 62.5 62.6 62.2 61.7 61.7 59.5
BE 76.7 76.7 77.0 77.3 77.6 77.9 78.0 78.1 77.3 77.0 76.1 75.3 74.8
CY 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5
DE 75.0 72.1 71.9 70.3 71.2 73.2 72.7 72.7 72.7 72.3 72.5 72.4 72.2
EE 90.2 86.4 88.6 90.4 90.4 89.3 88.8 89.2 90.7 91.2 91.3 90.7 90.9
EL 50.7 51.9 51.0 50.7 50.0 50.3 50.5 47.7 50.2 50.2 50.2 50.2 50.2
ES 70.9 69.9 67.2 68.2 70.9 72.4 73.0 72.1 70.7 69.5 68.4 67.6 67.1
FI 68.8 68.2 67.3 66.3 69.1 69.1 67.3 66.7 66.4 65.5 63.5 62.3 61.8
FR 59.3 59.4 58.2 58.4 58.1 57.8 54.2 54.2 56.8 55.4 55.4 55.2 55.8
IE 80.4 80.4 80.4 80.5 80.5 80.5 80.5 82.9 83.4 83.2 83.7 80.9 80.9
IT 55.4 55.2 54.4 54.4 55.6 55.1 54.7 54.5 55.0 54.4 53.5 53.9 53.9
LT 91.3 90.1 89.6 88.0 86.2 84.3 85.9 85.4 85.8 86.3 85.5 84.9 83.3
LU 72.6 72.3 72.8 71.8 74.5 73.3 73.2 72.4 72.1 73.4 73.9 74.2 74.2
LV 97.2 97.5 96.8 96.8 96.9 95.3 92.6 88.7 87.4 87.0 87.3 87.9 88.2
MT 69.4 68.4 69.6 69.3 69.8 69.5 69.9 70.0 70.7 70.6 70.8 69.8 73.1
NL 71.6 70.8 70.3 69.6 68.7 73.2 71.4 72.4 71.7 69.5 64.8 67.7 66.8
PT 63.7 63.5 63.6 60.6 58.9 59.1 61.2 59.1 54.8 55.6 55.4 57.3 57.3
SI 90.0 89.4 87.6 82.2 83.7 87.2 87.8 87.9 86.4 89.8 88.4 87.3 87.3
SK 82.6 84.8 85.4 86.5 88.1 93.9 94.3 93.8 94.4 93.8 93.9 94.3 94.9
pit_2018<-
  pit_2018_raw %>%
  gather(period,r_2018,-country)


pit_2017_raw <- read_csv("pit_2017.csv") %>%
  filter(grepl(url_country_pit, country))

pit_2017_raw_d <-
  pit_2017_raw%>%
  gather(period,value,-country) %>%
  mutate(period=year(period)) %>%
  spread(period,value)

kable(pit_2017_raw_d, "html", caption = "Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (2003–2015)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), position = "center", font_size = 12)
Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (2003–2015)
country 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
AT 61.4 60.7 61.1 62.2 62.8 63.1 62.0 61.7 62.4 62.6 62.2 61.1 61.6
BE 74.8 76.7 76.7 77.0 77.3 77.6 77.9 78.0 78.1 77.3 77.0 76.0 76.0
CY 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5
DE 76.1 75.0 72.1 71.9 70.3 71.2 73.2 72.7 72.5 72.3 72.1 72.1 72.4
EE 91.3 90.2 86.4 88.6 90.4 90.4 89.3 88.8 89.2 90.7 91.2 91.3 90.7
EL 46.4 50.7 51.9 51.0 50.7 50.0 50.3 50.5 47.7 50.2 50.2 50.2 50.2
ES 70.2 70.9 69.9 67.2 68.2 70.9 72.4 73.0 72.1 70.7 69.5 68.4 67.6
FI 70.3 68.8 68.2 67.3 66.3 69.1 69.1 67.3 66.7 66.4 65.5 63.5 63.4
FR 59.3 59.3 59.4 58.2 58.4 58.1 57.8 54.2 54.2 56.8 55.4 55.4 55.3
IE 80.2 80.4 80.4 80.4 80.5 80.5 80.5 80.5 82.9 83.4 83.2 83.7 83.7
IT 56.0 55.4 55.2 54.4 54.4 55.6 55.1 54.7 54.5 55.0 54.4 53.5 53.5
LT 91.2 91.3 90.1 89.6 88.0 86.2 84.3 85.9 85.4 85.8 86.3 85.5 84.9
LU 73.2 72.6 72.3 72.8 71.8 74.5 73.3 73.2 72.4 72.0 73.3 73.6 73.6
LV 96.8 97.2 97.5 96.8 96.8 96.9 95.3 92.6 88.7 87.4 87.0 87.3 87.9
MT 70.8 69.4 68.4 69.6 69.3 69.8 69.5 69.9 70.1 70.7 70.6 70.9 71.2
NL 76.4 71.6 70.8 70.3 69.6 68.7 73.2 71.4 72.4 71.7 68.5 63.8 67.1
PT 63.5 63.7 63.5 63.6 60.6 58.9 59.1 61.2 59.1 54.8 55.6 55.4 55.4
SI 90.8 90.0 89.4 87.6 82.2 83.7 87.2 87.8 87.9 86.4 89.1 87.8 87.8
SK 87.3 82.6 84.8 85.4 86.5 88.1 93.9 94.3 93.8 94.4 93.8 94.0 94.1
pit_2017<-
  pit_2017_raw %>%
  gather(period,r_2017,-country)

pit_2016_raw <- read_csv("pit_2016.csv") %>%
  filter(grepl(url_country_pit, country))

pit_2016_raw_d <-
  pit_2016_raw%>%
  gather(period,value,-country) %>%
  mutate(period=year(period)) %>%
  spread(period,value)

kable(pit_2016_raw_d, "html", caption = "Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (2002–2014)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), position = "center", font_size = 12)
Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (2002–2014)
country 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
AT 60.5 61.4 60.7 61.1 62.2 62.8 63.1 62.0 61.7 62.4 62.6 62.2 62.0
BE 74.9 74.8 76.5 76.5 76.7 76.8 76.9 77.7 77.8 77.8 77.0 76.8 76.8
CY 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5
DE 76.3 76.1 75.0 72.1 71.9 70.3 71.2 73.2 71.1 70.7 70.3 70.7 71.3
EE 91.5 91.3 90.2 86.4 88.6 90.4 90.4 89.3 88.8 89.2 90.6 91.3 91.3
EL 48.7 46.4 50.7 51.9 51.0 50.7 50.0 50.3 50.5 47.7 50.2 50.2 50.2
ES 70.1 70.2 70.9 69.9 67.2 68.2 70.9 72.4 73.0 72.1 70.7 69.5 68.4
FI 70.6 70.3 68.8 68.2 67.3 66.3 69.1 69.1 67.3 66.7 66.4 65.5 64.3
FR 59.3 59.3 59.3 59.4 58.2 58.4 58.1 57.8 54.2 54.2 56.8 55.3 55.3
IE 81.1 80.2 80.4 80.4 80.4 80.5 80.5 80.5 80.5 82.9 83.4 83.2 83.2
IT 56.8 56.0 55.4 55.2 54.4 54.4 55.6 55.1 54.7 54.5 55.0 54.4 54.4
LT 90.0 91.2 91.3 90.1 89.6 88.0 86.2 84.3 85.9 85.4 85.8 86.3 85.5
LU 74.7 73.2 72.4 73.1 74.4 74.0 77.5 77.5 77.2 74.3 73.7 75.5 75.5
LV 95.0 96.8 97.2 97.5 96.8 96.8 96.9 95.3 92.6 88.7 87.4 87.0 87.3
MT 71.2 70.8 69.4 68.4 69.6 69.3 69.8 69.5 70.0 70.2 70.8 70.7 71.4
NL 74.6 76.4 71.6 70.8 70.3 69.6 68.7 73.2 71.0 72.3 75.0 70.8 63.0
PT 64.1 63.5 63.7 63.5 63.6 60.6 58.9 59.1 61.2 59.1 54.8 54.8 54.8
SI 90.4 90.8 90.0 89.4 87.6 82.2 83.7 87.2 87.8 87.9 86.4 89.1 89.1
SK 83.0 87.3 82.6 84.8 85.4 86.5 88.1 93.9 94.3 93.8 94.4 93.9 94.0
pit_2016<-
  pit_2016_raw %>%
  gather(period,r_2016,-country)

pit_2014_raw <- read_csv("pit_2014.csv") %>%
  filter(grepl(url_country_pit, country))

pit_2014_raw_d <-
  pit_2014_raw%>%
  gather(period,value,-country) %>%
  mutate(period=year(period)) %>%
  spread(period,value)

kable(pit_2014_raw_d, "html", caption = "Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (1995–2012)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), position = "center", font_size = 12)
Personal income tax revenue allocated to employed labour income, in % of total revenue of personal income tax (1995–2012)
country 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
AT 62.9 60.4 62.4 62.2 62.5 62.9 59.5 62.0 63.0 62.4 63.0 64.0 64.5 64.7 63.7 63.3 63.8 64.8
BE 74.9 74.1 74.7 74.0 74.4 75.0 74.7 74.9 74.8 76.5 76.5 76.7 76.8 76.9 77.7 77.8 77.8 77.8
CY 89.1 89.1 89.1 89.1 89.1 89.1 89.1 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5 91.5
DE 75.7 72.9 73.4 72.4 70.4 73.6 75.2 76.3 76.1 75.0 72.1 71.9 70.3 72.4 72.9 72.9 72.0 73.4
EE 95.9 95.9 93.7 94.5 93.6 92.9 93.8 91.5 91.3 90.2 86.4 88.6 90.4 90.4 89.3 88.8 89.2 90.6
EL 47.3 48.4 49.7 48.4 49.8 49.5 49.4 48.7 46.4 50.7 51.9 51.0 50.7 50.0 50.3 50.5 47.7 50.2
ES 65.2 67.0 67.2 66.5 66.6 67.9 69.1 70.1 70.2 70.9 69.9 67.2 68.2 70.9 72.4 73.0 72.1 72.1
FI 66.1 67.6 67.3 68.6 68.3 67.9 70.3 70.6 70.3 68.8 68.2 67.3 66.3 69.1 69.1 67.3 66.7 66.4
FR 60.3 60.3 60.3 60.3 60.3 58.3 60.3 59.3 59.3 59.3 59.4 58.2 58.4 58.1 57.8 54.2 54.2 54.5
IE 84.3 84.2 84.0 83.0 84.2 83.3 81.7 81.1 80.2 80.4 80.4 80.4 80.5 80.5 80.5 80.5 82.9 82.9
IT 58.9 57.8 56.7 55.6 56.4 56.7 56.1 56.8 56.0 55.4 55.2 54.4 54.4 55.6 55.1 54.7 54.6 54.6
LT 91.7 91.7 91.7 91.7 91.7 90.8 90.4 90.0 91.2 91.3 90.1 89.6 88.0 86.2 84.3 85.9 85.4 85.8
LU 69.5 69.5 68.8 69.6 71.6 73.8 75.4 74.7 73.2 72.4 73.1 74.4 74.0 77.5 77.0 76.6 75.6 75.6
LV 99.5 99.3 99.2 98.9 97.5 95.3 96.5 95.0 96.8 97.2 97.5 96.8 96.8 96.9 95.3 92.6 88.7 87.4
MT 69.2 69.2 69.2 71.0 71.0 70.7 70.9 71.2 70.8 69.4 68.5 69.6 69.4 70.0 69.7 70.2 70.4 72.4
NL 65.5 65.1 64.7 65.9 67.0 68.2 64.3 65.9 67.4 68.8 70.2 70.2 73.0 73.0 73.0 73.0 73.0 73.0
PT 63.1 63.1 63.1 63.1 65.1 64.8 63.5 64.1 63.5 63.7 63.5 63.6 60.6 58.9 59.1 61.2 59.1 59.1
SI 89.4 88.9 89.1 89.3 88.9 90.2 90.7 90.4 90.8 90.0 89.4 87.6 82.2 83.7 87.2 87.8 87.9 87.9
SK 81.9 81.9 81.9 81.9 81.9 81.9 83.0 83.0 87.3 82.6 84.8 85.4 86.4 88.1 93.9 94.3 93.8 94.3
pit_2014<-
  pit_2014_raw %>%
  gather(period,r_2014,-country)

pit<-
  pit_2014 %>%
  full_join(pit_2016,by=c("country","period")) %>%
  full_join(pit_2017,by=c("country","period")) %>%
  full_join(pit_2018,by=c("country","period")) %>%
  transmute(country,period=ymd(period),a_weight=round(rowMeans(cbind(r_2018,r_2017,r_2016,r_2014)/100,na.rm = TRUE),3))


ITR_lab_num2 <-
  ITR_lab_num_raw %>%
  transmute(country=geo,period,var=na_item,value) %>%
  filter(year(period)>=1995 & year(period)<2017 & var=="D51A_C1") %>%
  left_join(labour_specificities, by=c("country","period"))%>%
  left_join(pit,by=c("country","period"))
  
ITR_lab_num2[is.na(ITR_lab_num2)] <- 0
 
ITR_lab_num2<-
  ITR_lab_num2 %>%
  transmute(country,period,var,value=((value+corr_pit)*a_weight))

ITR_lab_num <-
  bind_rows(ITR_lab_num1,ITR_lab_num2)

Step 4: compensation of employees, wage bill and payroll taxes

The total compensation of employees (D1) is part of the denominator of the ratio we are constituting. Following the DG Taxation & Customs Union’s methodology, it is defined as total remuneration, in cash or in kind, payable by an employer to an employee in return for work done. It consists of gross wages (in cash or in kind) and thus also the amount paid as social insurance contributions and wage withholding tax. In addition, employers’ social contributions (including imputed social contributions) as well as to private pensions and related schemes are included. Personal income taxes and social contributions paid by EU civil servants to the EU Institutions are not included. Compensation of employees is thus a broad measure of the gross economic income from employment before any charges are withheld. This aggregate can be retrieved from Eurostat’s database using the online data code nama_10_gdp.

filter <- paste0("A.CP_MNAC.","D1",".",url_country)

ITR_lab_den<- 
  rdb("Eurostat","nama_10_gdp", mask = filter) %>%
  transmute(country=geo,period,value,var=na_item) %>%
  filter(year(period)>=1995 & year(period)<2017)

ITR_labour_na <- 
  bind_rows(ITR_lab_num,ITR_lab_den) %>%
  spread(var,value)

ITR_lab_min_d <-
  ITR_labour_na %>%
  gather(var,value,-country,-period) %>%
  na.omit %>%
  group_by(country,var) %>%
  summarize(mindate= min(year(period))) %>%
  spread(var,mindate)

kable(ITR_lab_min_d, "html", caption = "Taxes on employed labour: min Date") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed",  "responsive"), position = "center", font_size = 12)%>%
  footnote(general = "The following aggregates are not applicable for some countries (in a determined period of time): D51A_C1, D29C, D611C, D613CE. Thus we replace their NA values by 0 for the calculation.", number = c("D1 has not been collected for IE before 1998. We will omit these points in the estimation.","D29C is not applicable for: EE, MT and SK; it is applicable for LT since 2002 and for LV since 2003.", "D611C is not available, exists but has not been transmitted/collected for PT.", "D613C is applicable for EE since 2002; it is not available, exists but has not been collected for PT before 2010"))
Taxes on employed labour: min Date
country D1 D29C D51A_C1 D611C D613CE
AT 1995 1995 1995 1995 1995
BE 1995 1995 1995 1995 1995
CY 1995 1995 1995 1995 1995
DE 1995 1995 1995 1995 1995
EE 1995 NA 1995 1995 2002
EL 1995 1995 1995 1995 1995
ES 1995 1995 1995 1995 1995
FI 1995 1995 1995 1995 1995
FR 1995 1995 1995 1995 1995
IE 1995 1995 1995 1995 1995
IT 1995 1995 1995 1995 1995
LT 1995 2002 1995 1995 1995
LU 1995 1995 1995 1995 1995
LV 1995 2003 1995 1995 1995
MT 1995 NA 1995 1995 1995
NL 1995 1995 1995 1995 1995
PT 1995 1995 1995 NA 2010
SI 1995 1995 1995 1995 1995
SK 1995 NA 1995 1995 1995
Note:
The following aggregates are not applicable for some countries (in a determined period of time): D51A_C1, D29C, D611C, D613CE. Thus we replace their NA values by 0 for the calculation.
1 D1 has not been collected for IE before 1998. We will omit these points in the estimation.
2 D29C is not applicable for: EE, MT and SK; it is applicable for LT since 2002 and for LV since 2003.
3 D611C is not available, exists but has not been transmitted/collected for PT.
4 D613C is applicable for EE since 2002; it is not available, exists but has not been collected for PT before 2010
ITR_lab_max_d  <-
  ITR_labour_na %>%
  gather(var,value,-country,-period) %>%
  na.omit %>%
  group_by(country,var) %>%
  summarize(maxdate= max(year(period))) %>%
  spread(var,maxdate)

kable(ITR_lab_max_d, "html", caption = "Taxes on employed labour: max Date") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed",  "responsive"), position = "center", font_size = 12)
Taxes on employed labour: max Date
country D1 D29C D51A_C1 D611C D613CE
AT 2016 2016 2016 2016 2016
BE 2016 2016 2016 2016 2016
CY 2016 2016 2016 2016 2016
DE 2016 2016 2016 2016 2016
EE 2016 NA 2016 2016 2016
EL 2016 2016 2016 2016 2016
ES 2016 2016 2016 2016 2016
FI 2016 2014 2016 2016 2016
FR 2016 2016 2016 2016 2016
IE 2016 2016 2016 2016 2016
IT 2016 2016 2016 2016 2016
LT 2016 2016 2016 2016 2016
LU 2016 2016 2016 2016 2016
LV 2016 2016 2016 2016 2016
MT 2016 NA 2016 2016 2016
NL 2016 2016 2016 2016 2016
PT 2016 2002 2016 NA 2016
SI 2016 2016 2016 2016 2016
SK 2016 NA 2016 2016 2016
ITR_labour_na <- 
  ITR_labour_na %>%
  left_join(labour_specificities, by=c("country","period"))

Portugal does not have 2 important series for the general calculation of the Implicit tax rate on labour. According to DG Taxation and Customs Union, it is possible to replace the D611C by D611 (using Eurostat’s database) and to recover D613CE before 2010 using Portugal’s detailed list of taxes and social contributions according to national classification available here (this aggregate has already been corrected, see step 2, table labour_specificities, country PT, variable D613CE (=corr_lees)).

url_taxes <- paste(c("D51A_C1","D29C","D611C","D613CE"),
                   collapse = "+")
filter <- paste0("A.MIO_NAC.S13_S212.",url_taxes,".",url_country)

ITR_lab_num_PT <- 
  rdb("Eurostat","gov_10a_taxag",mask = "A.MIO_NAC.S13_S212.D611.PT") %>%
  select(country=geo,period, corr_PT_D611=value) %>%
  filter(year(period)>=1995 &  year(period)<2017)

ITR_labour_na <-
  ITR_labour_na %>%
  left_join(ITR_lab_num_PT, by=c("country","period"))

ITR_labour_na[is.na(ITR_labour_na)] <- 0 

ITR_labour <-
  ITR_labour_na %>%
  mutate(corr_leyrs=corr_leyrs+corr_PT_D611) %>%
  transmute(country,period,ITR_labour=(D51A_C1+D29C+D611C+D613CE+corr_leyrs+corr_lees+corr_prt)/(D1+D29C+corr_prt),ITR_pi=D51A_C1/(D1+D29C+corr_prt),ITR_essc=(D613CE+corr_lees)/(D1+D29C+corr_prt),ITR_esscprt=(D611C+D29C+corr_leyrs+corr_prt)/(D1+D29C+corr_prt))

Step 5: Euro Area GDP-weighted average

After setting up the ITR on labour for the 19 countries that compose the Euro Area, it is possible to build the GDP-weighted average for the Euro Area. We use the same weights that were established for the ITR on consumption. The figure below shows the final series for France, Germany, Italy, Spain and the Euro Area.

ITR_labour_EA <-
  ITR_labour %>%
  left_join(weights,by=c("country"="country","period"="period")) %>%
  filter(ITR_labour<1) %>%
  transmute(period,ITR_labour=ITR_labour*weight, ITR_pi=ITR_pi*weight,ITR_essc=ITR_essc*weight, ITR_esscprt=ITR_esscprt*weight) %>%
  group_by(period) %>%
  summarize(ITR_labour =sum(ITR_labour),ITR_pi=sum(ITR_pi),ITR_essc =sum(ITR_essc),ITR_esscprt =sum(ITR_esscprt)) %>%
  add_column(country="EA19")

ITR_labour_4 <- 
  ITR_labour%>%
  filter(grepl('FR|DE|IT|ES', country))

ITR_labour_FIN1 <- 
  bind_rows(ITR_labour_4,ITR_labour_EA)

ITR_labour_FIN1$country <- factor(ITR_labour_FIN1$country)                  
levels(ITR_labour_FIN1$country)<-listcountry

ggplot(ITR_labour_FIN1,aes(period,ITR_labour,colour=country))+
  geom_line()+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle("Implicit Tax Rate on Labour")

For the analysis, it is possible to recover the evolution of the personal income tax, the employees’ SSC and the employers’ SSC as a share of the ITR on labour. The Figure below shows this evolution:

ITR_labour_shares <- 
  ITR_labour_FIN1 %>%
  transmute(country,period,w_pi=ITR_pi/ITR_labour,w_essc=ITR_essc/ITR_labour,w_esscprt=ITR_esscprt/ITR_labour) %>%
  gather(var,value,-period,-country)

listVar <- list("Personal Income Tax"  = "w_pi",
                "Employees' SSC"  = "w_essc",
                "Employers' SSC and payroll taxes" = "w_esscprt")

ITR_labour_shares$var <- factor(ITR_labour_shares$var)
levels(ITR_labour_shares$var)<-listVar

ggplot(ITR_labour_shares,aes(period,value,colour=var))+
  geom_line()+
  facet_wrap(~country ,scales ="fixed",ncol = 2)+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle(expression(atop("Personal Income Tax, Employees' SSC and Employers' SSC & payroll taxes", atop(italic("as a share of the ITR on Labour"), ""))))

The figure below shows the evolution of the composition of the ITR on labour:

ITR_labour_FIN <-
  ITR_labour_FIN1 %>%
  select(-ITR_labour) %>%
  gather(var,value, -period, -country)

listVar <- list("Labour income tax"  = "ITR_pi",
                "Employees' SSC"= "ITR_essc",
                "Employers' SSC and payroll taxes" = "ITR_esscprt")

ITR_labour_FIN$var <- factor(ITR_labour_FIN$var)
levels(ITR_labour_FIN$var)<-listVar

ggplot(ITR_labour_FIN, aes(fill=var, y=value, x=period)) + 
  geom_bar(stat="identity")+
  facet_wrap(~country ,scales ="fixed",ncol = 2)+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle("Composition of the Implicit Tax Rate on Labour")

And the last figure shows all the ITRs for a multi-country comparison:

ggplot(ITR_labour_FIN,aes(period,value,colour=country))+
  geom_line()+
  facet_wrap(~var ,scales ="free_y",ncol = 3)+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle("Implicit Tax Rates on Labour (%)")

Implicit tax rate on corporate income

The methodology for calculating the ITR on corporate income that proposes the DG taxation & Customs Union, may exceed the statutory corporate tax rate, for instance, on the payment by corporation of taxes referring to profits earned earlier, or on taxes paid on capital gains (which are not included in the ITR denominator owing to a lack of statistics). That is why, in this section we choose the top statutory corporate income tax rate (including surcharges) as a proxy. Data can be downloaded directly from the DG Taxation & Customs Union here. Concerning the GDP-weighted average for the Euro Area, we will use these country tax rates and the same weights that were established for the ITR on consumption to constitute it. The figure below shows the final series for France, Germany, Italy, Spain and the Euro Area.

ITR_corporate_income <- 
  read_csv("ITR_corporate_income.csv") %>%
  gather(period,value,-country) %>%
  transmute(country,period=ymd(period),value=value/100) %>%
  filter(year(period)>=1995 & year(period)<2017)

ITR_corporate_income_EA <-
  ITR_corporate_income %>%
  left_join(weights,by=c("country","period")) %>%
  transmute(period,value=value*weight) %>%
  group_by(period) %>%
  summarize(value =sum(value)) %>%
  add_column(country="EA19")

ITR_corporate_income_4 <- 
  ITR_corporate_income%>%
  filter(grepl('FR|DE|IT|ES', country))

ITR_corporate_income_FIN <- 
  bind_rows(ITR_corporate_income_4,ITR_corporate_income_EA) %>%
  add_column(var="Corporate income tax")

ITR_corporate_income_FIN$country <- factor(ITR_corporate_income_FIN$country)                  
levels(ITR_corporate_income_FIN$country)<-listcountry

ggplot(ITR_corporate_income_FIN,aes(period,value,colour=country))+
  geom_line()+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle("Implicit Tax Rate on Corporate Income")

Steady State

We summarize the steady state values of the implicit tax rates in the following table:

ITR <- 
  bind_rows(ITR_corporate_income_FIN,ITR_labour_FIN,ITR_consumption_FIN) %>% 
  na.omit() %>%
  mutate(value=round(value,3))

ss_ITR<-
  ITR %>%
  group_by(var,country) %>% 
  summarize(steady_state =mean(value)) %>% 
  mutate(steady_state=round(steady_state,3)) %>% 
  spread(country, steady_state) %>%
  ungroup() 

kable(ss_ITR, "html", caption = "Implicit tax rates steady state values") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), position = "center")
Implicit tax rates steady state values
var France Germany Italy Spain Euro Area
Consumption tax 0.206 0.192 0.175 0.147 0.191
Corporate income tax 0.366 0.396 0.378 0.325 0.356
Employees’ SSC 0.080 0.125 0.060 0.038 0.090
Employers’ SSC and payroll taxes 0.233 0.134 0.223 0.171 0.174
Labour income tax 0.084 0.124 0.157 0.098 0.118
ss_ITR_plot <-
  ss_ITR%>%
  gather(country,value,-var)

ggplot(ss_ITR_plot,aes(country, value, fill=country))+
  geom_bar(stat="identity")+
  facet_wrap(~var ,scales ="free_y",ncol = 3)+
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle("Implicit tax rates steady state values")

We can download ready-to-use data for France, Germany, Italy, Spain and the Euro Area in csv format:

listtau <- list("taun" = "Labour income tax" ,
                "tauwh" = "Employees' SSC",
                "tauwf" = "Employers' SSC and payroll taxes",
                "tauc" = "Consumption tax", 
                "tauk" = "Corporate income tax")

list_country <- list("FR"="France",
                     "DE"="Germany",
                     "IT"="Italy",
                     "ES"= "Spain",
                     "EA"="Euro Area")

ITR$country <- factor(ITR$country)                  
levels(ITR$country)<-list_country

ITR$var <- factor(ITR$var)                  
levels(ITR$var)<-listtau

ITR_eurodata <- 
  ITR %>% 
  unite("var",c("country","var")) %>%
  mutate(period=year(period)) %>%
  spread(var,value)

write.csv(ITR_eurodata,"ITR_eurodata.csv",row.names = FALSE)

Comparison

The Directorate-General for Taxation & Customs Union of the European Commission provides data on the implicit tax rates on consumption and labour since 2004 until 2016, using detailed revenue data provided by member states. You can find this data here. We compare in this section our series with the ones of the European Commission in the figure below.

labour_comp <-
  ITR_labour_FIN1%>%
  select(country,period,value=ITR_labour) %>%
  add_column(var="Labour tax")

conso_labour_comp <-
  bind_rows(labour_comp,ITR_consumption_FIN) %>%
  add_column(data_s="Updated")

eucom <- read_csv("eucom.csv") %>%
  rename(value=eucom)

eucom$country <- factor(eucom$country)                  
levels(eucom$country) <- listcountry

comparison <-bind_rows(conso_labour_comp,eucom)

comparison1 <-
  comparison %>%
  filter(var=="Consumption tax")

ggplot(comparison1,aes(period,value,colour=data_s))+
  geom_line()+
  facet_wrap(~country ,scales ="fixed",ncol = 3)+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle(expression(atop("Consumption tax", atop(italic("Comparison: European Commission vs. Updated Data"), ""))))

comparison2 <-
  comparison %>%
  filter(var=="Labour tax")

ggplot(comparison2,aes(period,value,colour=data_s))+
  geom_line()+
  facet_wrap(~country ,scales ="fixed",ncol = 3)+
  scale_x_date(expand = c(0.01,0.01)) +
  theme + xlab(NULL) + ylab(NULL) + 
  theme(legend.title=element_blank()) +
  ggtitle(expression(atop("Labour tax", atop(italic("Comparison: European Commission vs. Updated Data"), ""))))

References

“DG Taxation and Customs Union”. 2014. “Taxation Trends in the European Union.” Data for the EU Member States, Iceland and Norway.

———. 2016. “Taxation Trends in the European Union.” Data for the EU Member States, Iceland and Norway.

———. 2017. “Taxation Trends in the European Union.” Data for the EU Member States, Iceland and Norway.

———. 2018. “Taxation Trends in the European Union.” Data for the EU Member States, Iceland and Norway.

R Core Team. 2016. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org.

RStudio Team. 2016. RStudio: Integrated Development Environment for R. Boston, MA: RStudio, Inc. http://www.rstudio.com/.