各国の所得税率・社会保障負担率を比べてみた(可視化のRコード付き)
はてなブログの方がPVがいいので、noteの記事を貼る。コピペなので汚いです。ご関心があればnote記事に飛んで頂けますと幸いです。
イントロ
「日本の所得税率は世界でトップクラスに高い」という話をちらほら聞く。気になったので調べてみた。
日本の所得税最高税率は45%世界で、住民税(約10%)が加算されると約55%となり、この税率は世界で2番目に高いらしい(1位はスウェーデンの約57%)*1, 2。
あくまで「最高」税率の話であって、私みたいな貧乏人の所得税率はもっと低い。控除額と合わせて国税庁のHPに掲載されているので、詳細はそちらに。
気になったのは、一般庶民の所得から何%が所得税や社会保険・保障料として持っていかれているか。OECDがレポートを出していたので、そのレポートとデータを見てみた。データが綺麗に整備されてDLできたので、Rのggplotを叩いて図も作ってみた。
注意:税金や社会保障の素人です。勝手な解釈はしていないつもりですが、間違った記述があれば指摘して下さい。使用しているデータはOECDのTaxing Wages 2021です。
総賃金収入に対する平均所得税率・平均社会保障負担率
(濃い紫)総賃金収入に対する平均所得税率(%) (薄い紫)総賃金収入に対する平均社会保障負担率(%) それぞれ、平均的な所得を得ている単身・子ども無しの場合。
上記の条件で見ると、日本の所得税+社会保障は所得のうち22%くらいになる。冒頭に記載した最高税率とはかなりギャップがある。
先進国の中でもかなりギャップがあるが、保険料を国に納める場合はこのOECD統計に集計されている(ハズだ)が、国によって制度が異なるのは当然のこと、民間企業が運営する保険への支払いは計上されていないと思うので、解釈には注意が必要だ。
Tax Wedge・税のくさび
OECDの説明では、「「税のくさび」(tax wedge) とは、労働所得に対して課され、被雇用者と雇用主が支払う税金の尺度である」とされている。 上記の図に、「雇用主の平均社会保障負担率」を足したものとなる。
日本の平均の税のくさび(32.7%)はOECD加盟国の平均値(34.6%)よりも若干低い。
可視化のRコード
データクリーニングのコードも載せている。 データはhttps://www.oecd.org/tax/taxing-wages-20725124.htmの下にある"METHODOLOGY & DATA"からcsvをDLして"tax.csv"としてDirectoryに入れた。
library(tidyverse) d <- readr::read_csv("data/tax.csv") # Income Tax and Social Security income_tax_security <- d %>% dplyr::filter(Indicator %in% c("Average income tax rate (% gross wage earnings)", "Average rate of employees' social security contributions (% gross wage earnings)"), FAM_TYPE == "SINGLE2", Year == 2020) # Tax Wedge tax_wedge <- d %>% dplyr::filter(Indicator == "Average tax wedge (% labour costs)", FAM_TYPE == "SINGLE2", Year == 2020) f1 <- income_tax_security %>% dplyr::filter(!Country %in% c("Australia", "Denmark", "New Zealand", "Colombia", "Chile")) %>% ggplot(aes(x = reorder(Country, -Value), y = Value, fill = Indicator)) + geom_bar(stat = "identity", position = position_stack(reverse = TRUE)) + geom_text(aes(label = sprintf("%0.1f", round(Value, digits = 1))), size = 4, hjust = 1.1, color = "white", position = position_stack(reverse = TRUE), family = "Optima") + scale_y_continuous(expand = c(0, 0.1), limits = c(0, 50)) + scale_fill_manual(values = c("#6A51A3", "#9E9AC8")) + coord_flip() + theme_minimal() + theme(legend.position = "bottom", axis.title.x = element_blank(), axis.title.y = element_blank(), legend.title = element_blank(), text = element_text(size = 14, family = "Optima"), plot.title = element_text(size = 16)) + guides(fill = guide_legend(nrow = 2)) + labs(title = "Average income tax rate (% gross wage earnings) \nAverage rate of employees' social security contributions (% gross wage earnings)", subtitle = paste(income_tax_security$`Household type`, "(Year: 2020)")) ggsave(f1, filename = "fig/tax/income_tax_social_security.png", width = 10, height = 8) f2 <- tax_wedge %>% dplyr::filter(Value != 0) %>% ggplot(aes(x = reorder(Country, -Value), y = Value)) + geom_bar(stat = "identity", position = "stack", fill = "#9E9AC8") + geom_text(aes(label = sprintf("%0.1f", round(Value, digits = 1))), size = 4, hjust = 1.1, color = "white", family = "Optima") + scale_y_continuous(expand = c(0, 0.1), limits = c(0, 60)) + # scale_fill_manual(values = c("#6A51A3", "#9E9AC8")) + # scale_fill_manual(values = c("#6A51A3")) + coord_flip() + theme_minimal() + theme(legend.position = "bottom", axis.title.x = element_blank(), axis.title.y = element_blank(), legend.title = element_blank(), text = element_text(size = 14, family = "Optima"), plot.title = element_text(size = 16)) + guides(fill = guide_legend(nrow = 2)) + labs(title = tax_wedge$Indicator, subtitle = paste(tax_wedge$`Household type`, "(Year: 2020)")) ggsave(f2, filename = "fig/tax/tax_wedge.png", width = 10, height = 8)