Data

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

US Top 1% Income Share vs Top Marginal Tax Rates

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

# png(file = "../pics/US_Top_Income_Share_vs_MTR_72dpi_en.png", width = 864, height = 486)
# png(file = "../pics/US_Top_Income_Share_vs_MTR_300dpi_en.png", width = 1280, height = 720)
#> 왼쪽, 오른쪽 수직 축의 축 눈금을 수평하게 놓을 수 있도록 공간 조정
par(mar = c(5, 6, 4, 6) + 0.1,
    family = "KoPubWorldDotum Medium")
#> 점과 선을 함께 사용하여 소득 상위 1%의 점유율 표시.
top_income_tax %>%
  plot(P99_100_z ~ Year, data = ., 
       type = "b", pch = 17, 
       axes = FALSE, ann = FALSE, 
       xlim = c(1910, 2020), ylim = c(0, 1))
#> 점유율 도표를 박스 안에
box()
#> 수평축 눈금 표시
seq(1910, 2020, by = 10) %>% 
  axis(side = 1, at = ., labels = .)
# axis(side = 1, at = seq(1910, 2020, by = 10), labels = seq(1910, 2020, by = 10))
#> 상위 1% 소득점유율을 왼편 수직축에 표시. 수직축 눈금을 표시하기 위하여 선형변환 함수를 이용하되, 실제 표시되는 눈금은 상위 1% 소득점유율의 실제 값이 표시될 수 있도록 최소값과 최대값을 범위로 하고 중간에는 10%, 17%, 20%만 나오도록 함. 
y1_at <- top_income_tax$P99_100 %>%
  z(., c(10, 17, 20)) %>%
  c(0, ., 1)
# y1_at <- c(0, z(top_income_tax$P99_100, c(10, 17, 20)), 1)
labels1_at <- top_income_tax$P99_100 %>%
  min %>%
  c(., seq(10, 20, by = 5), max(top_income_tax$P99_100)) %>%
  format(digits = 2, nsmall = 1)
# labels1_at <- format(c(min(top_income_tax$P99_100), seq(10, 20, by = 5), max(top_income_tax$P99_100)),
#                     digits = 2, nsmall = 1)
axis(side = 2, at = y1_at, labels = labels1_at, las = 1)
#> 왼편 수직축 가장자리에 석 줄을 띠워 놓고 축 이름 표시.
mtext("상위 1% 소득점유율(%)", side = 2, line = 3)
#> 범위를 0에서 1사이로 변환한 한계소득세율을 도표에 추가.
top_income_tax %>%
  lines(Marginal_z ~ Year, data = ., 
        type = "l", lty = 2, lwd = 2, col = "red", 
        xlim = c(1910, 2020), ylim = c(0, 1))
#> 오른편 수직축에 한계소득세율의 눈금을 표시하기 위하여 역시 선형변환 함수를 이용하고 실제 표시하는 눈금은 한계소득세율의 실제값 사용.
y4_at <- top_income_tax$Marginal %>%
  z(., seq(20, 80, by = 20)) %>%
  c(0, ., 1)
# y4_at <- c(0, z(top_income_tax$Marginal, seq(20, 80, by = 20)), 1)
labels4_at <- top_income_tax$Marginal %>%
  min %>%
  c(., seq(20, 80, by = 20), max(top_income_tax$Marginal)) %>%
  format(digits = 2, nsmall = 1)
# labels4_at <- format(c(min(top_income_tax$Marginal), seq(20, 80, by = 20), max(top_income_tax$Marginal)),
#                     digits = 2, nsmall = 1)
axis(side = 4, at = y4_at, labels = labels4_at, las = 1)
#> 오른편 수직축의 이름을 석 줄 띄워 표시.
mtext("최고 한계세율(%)", side = 4, line = 3)
#> 메인 타이틀 작성
title(main = "상위 1% 소득점유율과 최고 한계세율", xlab = "연도", cex.main = 1.5)
#> 어느 선이 어느 변수인지 텍스트로 표시
text(x = 1955, y = 0.93, labels = "최고 한계세율", cex = 1.2)
text(x = 1962, y = 0.20, labels = "상위 1% 소득점유율", cex = 1.2)

#> 외부 그림 파일로 저장.
dev.copy(png, file ="../pics/US_Top_Income_Share_vs_MTR_kr.png", width = 960, height = 540)
## quartz_off_screen 
##                 3
dev.off()
## quartz_off_screen 
##                 2

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

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

# png(file = "../pics/US_Top_Income_Share_vs_MTR_72dpi_en.png", width = 864, height = 486)
# png(file = "../pics/US_Top_Income_Share_vs_MTR_300dpi_en.png", width = 1280, height = 720)
par(mar = c(5, 6, 4, 6) + 0.1,
    family = "KoPubWorldDotum Medium")
plot(P99_100_z ~ Year, data = top_income_tax, 
     type = "b", pch = 17, 
     axes = FALSE, ann = FALSE, 
     xlim = c(1910, 2020), ylim = c(0, 1))
box()
axis(side = 1, at = seq(1910, 2020, by = 10), labels = seq(1910, 2020, by = 10))
y1_at <- c(0, z(top_income_tax$P99_100, c(10, 17, 20)), 1)
labels1_at <- format(c(min(top_income_tax$P99_100), seq(10, 20, by = 5), max(top_income_tax$P99_100)),
                    digits = 2, nsmall = 1)
axis(side = 2, at = y1_at, labels = labels1_at, las = 1)
mtext("상위 1% 소득점유율(%)", side = 2, line = 3)
#> 변환된 한계소득세율을 뒤집는다.
top_income_tax$M_inv <- 1 - top_income_tax$Marginal_z
lines(M_inv ~ Year, data = top_income_tax, 
      type = "l", lty = 2, lwd = 2, col = "red", 
      xlim = c(1910, 2020), ylim = c(0, 1))
y4_at <- c(0, z(top_income_tax$Marginal, seq(20, 80, by = 20)), 1)
labels4_at <- format(c(min(top_income_tax$Marginal), seq(20, 80, by = 20), max(top_income_tax$Marginal)),
                    digits = 2, nsmall = 1)
axis(side = 4, at = y4_at, labels = rev(labels4_at), las = 1)
mtext("최고 한계세율(%)", side = 4, line = 3)
title(main = "상위 1% 소득점유율과 최고 한계세율", xlab = "연도", cex.main = 1.5)
text(x = 1977, y = 0.60, labels = "1 - 최고 한계세율", cex = 1.2)
text(x = 1948, y = 0.60, labels = "상위 1% 소득점유율", cex = 1.2)

dev.copy(png, file ="../pics/US_Top_Income_Share_vs_inverse_MTR_kr.png", width = 960, height = 540)
## quartz_off_screen 
##                 3
dev.off()
## quartz_off_screen 
##                 2