Data Preparation

준비한 자료는 E. Saez 교수의 홈페이지에 있는 TabFig2017prel.xlsTax Foundation에서 제공하는 자료를 손봐서 불러들인 것이다. 연도를 공통으로 수평축에 놓고, 상위 1%의 소득점유율과 한계소득세율을 한 화면에 함께 표현해야 하기 때문에 선형변환을 이용하여 범위를 0에서 1사이로 맞추고, 각 변수의 변환하기 전 원시 값은 좌측 수직축과 우측 수직축에 표현하는 트릭을 써 보자. 이 작업에서 반복되는 선형 변환은 사용자 정의 함수를 작성하여 활용한다. R Base Plot 단계에서 만든 US_top_income_shares_vs_tax_rates_2017_v2.RData 를 불러들여서 활용한다.

US Top 1% Income Share vs Top Marginal Tax Rates

이 중에서 상위 1%의 소득 점유율(P99_100)과 한계 소득세율(Marginal Tax Rates) 간의 관계를 살펴보자

M1 <- ggplot(data = M_tbl, 
             mapping = aes(x = Year, y = Values, 
                           colour = Variables, 
                           linetype = Variables)) +
  geom_line(show.legend = FALSE) +
  geom_point(data = subset(M_tbl, Variables == "P99_100_z"),
             mapping = aes(x = Year, y = Values), 
             shape = 24, 
             fill = "black",
             size = 3, 
             stroke = 2,
             color = "white",
             show.legend = FALSE)
M2 <- M1 +
  scale_colour_manual(values = c("black", "red")) +
  scale_linetype_manual(values = c("solid", "longdash")) 
M3 <- M2 + 
  theme_bw() + 
  scale_x_continuous(name = "연도", 
                     breaks = seq(1910, 2020, by = 10), 
                     labels = seq(1910, 2020, by = 10)) +
  scale_y_continuous(name = "상위 1% 소득 점유율(%)", 
                     breaks = y1_at, 
                     labels = labels1_at, 
                     limits = c(0, 1),
                     sec.axis = sec_axis(name = "한계 소득세율(%)", 
                                         trans = ~ z(., q = .), 
                                         breaks = (y4_at + 0.05 )/1.1, 
                                         labels = labels4_at)) +
  labs(title = "상위 1% 소득점유율과 한계 소득세율") +
  annotate("text", x = c(1975, 1955), y = c(0.8, 0.35), 
           label = c("한계 소득세율", "상위 1% 소득점유율"), 
           family = "HCR Dotum LVT", size = 6) +
  theme(plot.title = element_text(family = "HCR Dotum LVT", 
                                  hjust = 0.5, 
                                  size = 20, 
                                  margin = margin(b = 12, unit = "pt")), 
        axis.title.x = element_text(family = "HCR Dotum LVT"),
        axis.title.y = element_text(family = "HCR Dotum LVT"))
M3

US Top 1% Income Share vs Inverted Top Marginal Tax Rates

위의 그림으로부터 한계소득세율이 높을 때 상위1%의 소득점유율이 낮고, 한계소득세율이 낮을 때는 반대로 상위1%의 소득점유율이 높은 것을 관찰할 수 있다. 이를 보다 명확히 파악하기 위하여 한계소득세율을 뒤집어 보면, 즉 u를 변환한 한계소득세율이라 할 때 1 - u를 비교 대상으로 그려보면,

Mi_tbl <- M_tbl
Mi_tbl[Mi_tbl$Variables == "Marginal_z", "Values"] <- 
  1 - Mi_tbl[Mi_tbl$Variables == "Marginal_z", "Values"]
Mi1 <- ggplot(data = Mi_tbl, 
              mapping = aes(x = Year, y = Values, 
                            colour = Variables, 
                            linetype = Variables)) +
  geom_line(show.legend = FALSE) +
  geom_point(data = subset(Mi_tbl, Variables == "P99_100_z"),
             mapping = aes(x = Year, y = Values), 
             shape = 24,
             fill = "black",
             size = 3, 
             stroke = 2,
             color = "white",
             show.legend = FALSE)
Mi2 <- Mi1 +
  scale_colour_manual(values = c("black", "red")) +
  scale_linetype_manual(values = c("solid", "longdash")) 
Mi3 <- Mi2 + 
  theme_bw() + 
  scale_x_continuous(name = "연도", 
                     breaks = seq(1910, 2020, by = 10), 
                     labels = seq(1910, 2020, by = 10)) +
  scale_y_continuous(name = "상위 1% 소득 점유율(%)", 
                     breaks = y1_at, 
                     labels = labels1_at, 
                     limits = c(0, 1),
                     sec.axis = sec_axis(name = "한계 소득세율(%)", 
                                         trans = ~ z(., q = .), 
                                         breaks = (y4_at + 0.05 )/1.1, 
                                         labels = rev(labels4_at))) +
  labs(title = "상위 1% 소득점유율과 한계 소득세율") +
  annotate("text", x = c(1985, 1955), y = c(0.8, 0.35), 
           label = c("1 - 한계 소득세율", "상위 1% 소득점유율"), 
           family = "HCR Dotum LVT", size = 6) +
  theme(plot.title = element_text(family = "HCR Dotum LVT", 
                                  hjust = 0.5, 
                                  size = 20, 
                                  margin = margin(b = 12, unit = "pt")),
        axis.title.x = element_text(family = "HCR Dotum LVT"),
        axis.title.y = element_text(family = "HCR Dotum LVT"))
Mi3