Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The aim of this blog post is to 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 report on Taxation trends in the European Union (2019) from the European Commission, and the previous reports since 2014.
This database is built and updated through DBnomics using the rdbnomics package. All the code is written in R, thanks to the RCoreTeam (2016) and RStudioTeam (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 DG Taxation & Customs Union of the European Commission proposes a detailed calculation methodology here. 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):
-
Value added type taxes (D211)
-
Taxes and duties on imports excluding VAT (D212)
-
Taxes on products except VAT and import duties (D214), excluding:
a. Stamp taxes (D214B)
b. Taxes on financial and capital transactions (D214C)
c. Export duties and monetary compensatory amounts on exports (D214K) -
From other taxes on production:
a. Taxes on international transactions (D29D)
b. Taxes on pollution (D29F)
c. Under-compensation of VAT (flat rate system) (D29G) -
From other current taxes:
a. Poll taxes (D59B)
b. Expenditure taxes (D59C)
c. 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)<yearmax) %>% select(country=geo,period,var=na_item,value)
We check the beginning and the end of the data series we have just obtained from Eurostat’s database:
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 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 | 2006 |
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 | NA | 1995 | NA | NA | 1995 | NA | NA | NA | NA |
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 | 1995 | 1995 | 1995 | 1995 | 1995 | 1995 | 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. |
country | D211 | D212 | D214 | D214B | D214C | D214K | D29D | D29F | D29G | D59B | D59C | D59D |
---|---|---|---|---|---|---|---|---|---|---|---|---|
AT | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
BE | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
CY | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
DE | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
EE | 2017 | 2017 | 2017 | NA | NA | NA | NA | 2017 | NA | NA | NA | NA |
EL | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
ES | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
FI | 2017 | 2017 | 2017 | 2002 | 2017 | NA | NA | 2017 | NA | NA | NA | 2017 |
FR | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
IE | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
IT | 2017 | 2017 | 2017 | 2017 | 2017 | NA | NA | 2017 | NA | NA | NA | 2017 |
LT | 2017 | 2017 | 2017 | 2017 | NA | NA | NA | 2017 | NA | NA | NA | 2017 |
LU | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 | 2017 |
LV | 2017 | 2017 | 2017 | NA | 2017 | 1999 | NA | 2017 | NA | NA | NA | 2017 |
MT | 2017 | 2017 | 2017 | 2017 | 2017 | NA | NA | 2017 | NA | NA | 1995 | 2017 |
NL | 2017 | 2017 | 2017 | NA | 2017 | NA | NA | 2017 | NA | NA | NA | NA |
PT | 2017 | 2017 | 2017 | 2017 | 2017 | NA | NA | 2017 | NA | 2017 | NA | 2017 |
SI | 2017 | 2017 | 2017 | NA | 2017 | NA | NA | 2017 | 2017 | NA | NA | 2017 |
SK | 2017 | 2017 | 2017 | 2015 | 2017 | 2015 | 2015 | 2017 | 2015 | 2015 | 2015 | 2017 |
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 – example of specificities for France, Germany, Italy and Spain
We pay special attention to France, Italy, Spain & Germany, and following the DG Taxation & Customs Union we add some specificities using a detailed list of taxes and social contributions according to national classification (NTLs – national tax lists), as follows:
-
From council tax (D59A):
a. (C05):part raised on consumption. -
From capital transfers from general government to relevant sectors representing taxes and social contributions assessed but unlikely to be collected (D995):
a. part raised on consumption.
- From other current taxes n.e.c. (D59F):
a. (C03): tax on radio and TV.
-
From stamp taxes (D214B):
a. (C01): excise duty on tobacco.
b. (C02): excise duty on spirits.
c. (C03): receipts from sale of denaturing agents and govemment seals -
From other current taxes on production n.e.c. (D29H):
a. (C02): other taxes on production.
b. (C05): fees to national & local economic bodies.
-
From taxes on products except VAT and import duties (D214) exclude also:
a. (D214L_C01): tax on building, equipment and works. -
From other taxes on production assessed but unlikely to be collected (D995B):
a. part raised on consumption.
To find more information about other EU country specificities, check the National Tax Lists online in the DG Taxation and Customs Union website, or Eurostat’s dedicated website on Tax Revenue Statistics.
conso_specificities <- read_xlsx("s_conso.xlsx") %>% mutate(period=as.Date(period)) %>% select(country, period, var, value=total) %>% filter(year(period)>=1995 & year(period)<yearmax) %>% 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 dataset “Final consumption aggregates by durability” (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)<yearmax) %>% select(country=geo,period,value,var=na_item)
country | mindate | maxdate |
---|---|---|
AT | 1995 | 2017 |
BE | 1995 | 2017 |
CY | 1995 | 2017 |
DE | 1995 | 2017 |
EE | 1995 | 2017 |
EL | 1995 | 2017 |
ES | 1995 | 2017 |
FI | 1995 | 2017 |
FR | 1995 | 2017 |
IE | 1995 | 2017 |
IT | 1995 | 2017 |
LT | 1995 | 2017 |
LU | 1995 | 2017 |
LV | 1995 | 2017 |
MT | 1995 | 2017 |
NL | 1995 | 2017 |
PT | 1995 | 2017 |
SI | 1995 | 2017 |
SK | 1995 | 2017 |
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)<yearmax) 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 DG Taxation & Customs Union of the European Commission proposes a detailed calculation methodology here. We follow this general methodology using Eurostat data. 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:
- From taxes on income:
a. 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 - From other current taxes:
a. Total wage bill and payroll taxes (D29C) - From employers’ actual social contributions:
a. Compulsory employers’ actual social contributions (D611C) - From households’ actual social contributions:
a. Compulsory employees’ actual social contributions (D613CE)
These aggregates can be can be retrieved from Eurostat’s dataset “Main national accounts tax aggregates” (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)<yearmax & !grepl('D51A_C1', var))
Step 2: taxes on employed labour – example of specificities for France, Germany, Italy and Spain:
We pay special attention to France, Italy, Spain & Germany, and following the DG Taxation & Customs Union we add some specificities using a detailed list of taxes and social contributions according to national classification (NTLs – national tax lists), as follows:
-
From contributions on the value added of the corporations (D29A):
a. part raised on employers’ labour tax. -
From capital transfers from general government to relevant sectors representing taxes and social contributions assessed but unlikely to be collected (D995):
a. part raised on employers’ labour tax.
b. part raised on employees’ labour tax. -
From taxes on individual or household income including holding gains – part raised on labour income (D51A_C1), exclude the following for the calculation of the personal income tax:
a. (D51A_C02): used dividend imputation (positive).
b. (D51A_C05): civil servants contribution to the unemployment insurance regime.
c. (D51A_C06): other social levies.
d. (D51A_C08): levies on the income from financial assets (PRCM). -
From taxes on individual or household income including holding gains – part raised on labour income (D51A_C1), include the following for the calculation of the Employees’ SSC:
a. (D51A_C05): civil servants contribution to the unemployment insurance regime.
- Taxes on income assessed but unlikely to be collected (D995C).
a. part raised on personal income tax.
For Italy and Germany, it is also possible to apply some specificities, e.g. for Germany the trade tax (D51M_C4) can be excluded from D51A_C1, and for Italy part of the Revenu from IRAP tax can be included to labour and employers’ SSC. However, the general formula was already sufficient to recover the general trend of the implicit tax rate. To find more information about other EU country specificities, check the National Tax Lists online in the DG Taxation and Customs Union website, or Eurostat’s dedicated website on Tax Revenue Statistics.
labour_specificities <- read_xlsx("s_labour.xlsx") %>% mutate(period=as.Date(period)) %>% select(country, period, corr_pit=total_split1,corr_leyrs=total_leyrs, corr_lees=total_lees) %>% filter(year(period)>=1995 & year(period)<yearmax)
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 tables below can be found in the reports on Taxation Trends in the European Union in its 2019, 2018, 2017, 2016 and 2014 editions (pages 292, 292, 276, 330 and 303 respectively). We will chain the tables by averaging the data points when they differ from table to table, in order to get the (1995-2017) 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_2019_raw <- read_csv("pit_2019.csv") %>% filter(grepl(url_country_pit, country))
country | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 | 60.3 | 60.3 |
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 | 73.9 | 73.9 |
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 | 91.5 |
DE | 75.0 | 72.1 | 71.9 | 70.3 | 71.2 | 73.2 | 72.7 | 72.7 | 72.7 | 72.8 | 72.6 | 72.5 | 71.7 | 72.0 |
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 | 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 | 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.3 | 66.6 |
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 | 61.0 |
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 | 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 | 83.6 | 83.6 |
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.8 | 53.8 |
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 | 83.3 |
LU | 72.6 | 72.3 | 72.8 | 71.8 | 74.5 | 73.3 | 73.4 | 72.7 | 72.5 | 73.7 | 73.4 | 73.9 | 73.5 | 73.5 |
LV | 97.2 | 95.5 | 95.7 | 96.6 | 96.3 | 94.4 | 89.0 | 87.1 | 87.1 | 86.8 | 86.1 | 86.5 | 85.8 | 84.7 |
MT | 69.4 | 68.4 | 69.5 | 69.2 | 69.7 | 69.3 | 69.7 | 69.8 | 70.4 | 70.3 | 70.5 | 69.7 | 70.4 | 74.1 |
NL | 71.6 | 70.8 | 70.3 | 69.6 | 68.7 | 73.2 | 71.4 | 72.4 | 71.7 | 69.5 | 63.9 | 66.7 | 66.2 | 61.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 | 59.0 | 59.0 |
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 | 88.0 | 88.0 |
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 | 95.0 | 96.4 |
pit_2019 <- pit_2019_raw %>% gather(period,r_2019,-country) pit_2018 <- read_csv("pit_2018.csv") %>% filter(grepl(url_country_pit, country)) %>% gather(period,r_2018,-country) pit_2017 <- read_csv("pit_2017.csv") %>% filter(grepl(url_country_pit, country)) %>% gather(period,r_2017,-country) pit_2016 <- read_csv("pit_2016.csv") %>% filter(grepl(url_country_pit, country)) %>% gather(period,r_2016,-country) pit_2014 <- read_csv("pit_2014.csv") %>% filter(grepl(url_country_pit, country)) %>% gather(period,r_2014,-country) pit <- pit_2014 %>% full_join(pit_2016,by=c("country","period")) %>% mutate(r_2016=ifelse(is.na(r_2016),r_2014,r_2016)) %>% full_join(pit_2017,by=c("country","period")) %>% mutate(r_2017=ifelse(is.na(r_2017),r_2016,r_2017)) %>% full_join(pit_2018,by=c("country","period")) %>% mutate(r_2018=ifelse(is.na(r_2018),r_2017,r_2018)) %>% full_join(pit_2019,by=c("country","period")) %>% mutate(r_2019=ifelse(is.na(r_2019),r_2018,r_2019)) %>% transmute(country,period=ymd(period),a_weight=r_2019/100) ITR_lab_num2 <- ITR_lab_num_raw %>% transmute(country=geo,period,var=na_item,value) %>% filter(year(period)>=1995 & year(period)<yearmax & 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 dataset “GDP and main components (output, expenditure and income)” (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)<yearmax) ITR_labour_na <- bind_rows(ITR_lab_num,ITR_lab_den) %>% spread(var,value)
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 | 2006 | 2006 | 2006 | 2006 |
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 | 1996 |
SI | 1995 | 1995 | 1995 | 1995 | 1995 |
SK | 1995 | 1995 | 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 |
country | D1 | D29C | D51A_C1 | D611C | D613CE |
---|---|---|---|---|---|
AT | 2017 | 2017 | 2017 | 2017 | 2017 |
BE | 2017 | 2017 | 2017 | 2017 | 2017 |
CY | 2017 | 2017 | 2017 | 2017 | 2017 |
DE | 2017 | 2017 | 2017 | 2017 | 2017 |
EE | 2017 | NA | 2017 | 2017 | 2017 |
EL | 2017 | 2017 | 2017 | 2017 | 2017 |
ES | 2017 | 2017 | 2017 | 2017 | 2017 |
FI | 2017 | 2014 | 2017 | 2017 | 2017 |
FR | 2017 | 2017 | 2017 | 2017 | 2017 |
IE | 2017 | 2017 | 2017 | 2017 | 2017 |
IT | 2017 | 2017 | 2017 | 2017 | 2017 |
LT | 2017 | 2016 | 2017 | 2017 | 2017 |
LU | 2017 | 2017 | 2017 | 2017 | 2017 |
LV | 2017 | 2017 | 2017 | 2017 | 2017 |
MT | 2017 | NA | 2017 | 2017 | 2017 |
NL | 2017 | 2017 | 2017 | 2017 | 2017 |
PT | 2017 | 2002 | 2017 | NA | 2017 |
SI | 2017 | 2017 | 2017 | 2017 | 2017 |
SK | 2017 | 2015 | 2017 | 2017 | 2017 |
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_labour_na <- ITR_labour_na %>% left_join(labour_specificities, by=c("country","period")) ITR_labour_na[is.na(ITR_labour_na)] <- 0 ITR_labour <- ITR_labour_na %>% transmute(country,period, ITR_labour=(D51A_C1+D29C+D611C+D613CE+corr_leyrs+corr_lees)/(D1+D29C), ITR_pi=D51A_C1/(D1+D29C), ITR_essc=(D613CE+corr_lees)/(D1+D29C), ITR_esscprt=(D611C+D29C+corr_leyrs)/(D1+D29C))
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 chart 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 chart 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(plot.title=element_text(size=16), legend.title=element_blank()) + ggtitle("Personal Income Tax, Employees' SSC and Employers' SSC & payroll taxes \n (as a share of the ITR on Labour)")
The chart 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 = 3)+ 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 chart shows all the ITRs for a multi-country comparison:
ggplot(ITR_labour_FIN,aes(period,value,colour=country))+ geom_line()+ facet_wrap(~var ,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 due 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 chart 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)<yearmax) 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")
Average values
We summarize the average 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()
var | France | Germany | Italy | Spain | Euro Area |
---|---|---|---|---|---|
Consumption tax | 0.211 | 0.195 | 0.175 | 0.146 | 0.191 |
Corporate income tax | 0.369 | 0.389 | 0.374 | 0.322 | 0.353 |
Employees’ SSC | 0.081 | 0.122 | 0.060 | 0.038 | 0.085 |
Employers’ SSC and payroll taxes | 0.234 | 0.132 | 0.223 | 0.175 | 0.169 |
Labour income tax | 0.080 | 0.124 | 0.157 | 0.100 | 0.117 |
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(), strip.text=element_text(size=12)) + ggtitle("Implicit tax rates - average values")
We can download ready-to-use data for France, Germany, Italy, Spain and the Euro Area in csv format here.
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 2005, 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 charts below.
The main steps, together with some specificities, allow to recover the general trend of the implicit tax rates. Some differences remain, and they stem mainly from the last update of National Tax Lists, which was on October 2019, whereas the last update of the Taxation Trends Report was on January 2019. Other minimal differences could stem from taxes assessed but unlikely to be collected when the data was released, or eventually discretionary adjustments or specificities applied by the DG Taxation and Customs Union.
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) %>% mutate(value=value/100) 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"), ""))))
Bibliography
R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria, 2016. URL: https://www.R-project.org. ↩
RStudio Team. RStudio: Integrated Development Environment for R. RStudio, Inc., Boston, MA, 2016. URL: http://www.rstudio.com/. ↩
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.