この記事では、所得の中央値とジニ係数という2つの代表的な指標のみを用いて所得分布を簡易的に推定する方法を紹介します。
本記事では,これら2つの統計量から簡単に所得分布を再現可能な確率分布として,対数ロジスティック分布に着目します。
所得分布のモデル化
対数ロジスティック分布は,経済学ではFisk分布としても知られており,所得分布を表すのによく用いられています. この確率分布の利点は,所得の中央値とジニ係数から簡単にパラメータを推定できる点にあります.
具体的には,この確率分布は尺度(scale)パラメータ\(\alpha\)と形状(shape)パラメータ\(\beta\)の2つのパラメータをもちますが, これらのパラメータについて以下のような関係が成り立つことが知られています. これらの関係式より,所得の中央値とジニ係数から簡単に対数ロジスティック分布のパラメータを設定することができます.
使用データ
この記事では,OECDが公開しているSociety at a Glance 2024: OECD Social Indicatorsに掲載されている以下のデータを使用します.
まず,以下のコードでデータをダウンロードします.
コード
library(fs)
library(tidyverse)
file_median_income <- "income-distribution-from-median-and-gini-log-logistic/median_income_oecd_2021.xlsx"
if (!file_exists(file_median_income)) {
curl::curl_download("https://stat.link/1or2b8", file_median_income)
}
file_gini_coefficient <- "income-distribution-from-median-and-gini-log-logistic/gini_coefficient_oecd_2021.xlsx"
if (!file_exists(file_gini_coefficient)) {
curl::curl_download("https://stat.link/3f18vc", file_gini_coefficient)
}
所得分布の可視化
まず,ダウンロードしたExcelファイルから必要なデータを読み込みます.
コード
library(readxl)
median_income <- read_excel(
file_median_income,
sheet = "Data4.1",
range = cell_limits(ul = c(12, 1), lr = c(NA, 3)),
col_names = c("country_name", "country_code", "median_income_usd_ppp"),
col_types = c(rep("text", 2), "numeric")
) |>
drop_na(country_name) |>
arrange(country_name)
gini_coefficient <- read_excel(
file_gini_coefficient,
sheet = "data",
range = cell_limits(ul = c(12, 4), lr = c(NA, 5)),
col_names = c("country_name", "gini_coefficient"),
col_types = c("text", "numeric")
) |>
drop_na(country_name) |>
arrange(country_name)
読み込んだデータは以下の通りです.
次に,読み込んだデータを結合し,対数ロジスティック分布のパラメータを計算します.
income_distribution_params <- median_income |>
inner_join(gini_coefficient, by = join_by(country_name)) |>
mutate(
scale_param = median_income_usd_ppp,
shape_param = 1 / gini_coefficient,
.keep = "unused"
)
income_distribution_params
次に,各国の所得分布を可視化します. 以下のコードでは,対数ロジスティック分布の確率密度関数を用いて, G7各国の所得分布をプロットしています.
data_income_distribution_params <- income_distribution_params |>
# G7
filter(
country_name %in%
c(
"Canada",
"France",
"Germany",
"Italy",
"Japan",
"United Kingdom",
"United States"
)
) |>
expand_grid(
income = seq(0, 150000, by = 1000)
) |>
mutate(
density = VGAM::dfisk(
income,
scale = scale_param,
shape1.a = shape_param
)
) |>
select(!c(scale_param, shape_param))
plot_income_distribution <- data_income_distribution_params |>
ggplot(aes(x = income, y = density, color = country_name)) +
geom_line() +
scale_x_continuous(labels = scales::dollar_format(prefix = "$", big.mark = ",", accuracy = 1)) +
scale_y_continuous(labels = scales::comma_format(accuracy = 0.0001)) +
labs(
title = "OECD各国の所得分布の推定(対数ロジスティック分布)",
x = "所得(USD PPP)",
y = "確率密度",
color = "国名"
) +
theme_minimal()
plotly::ggplotly(plot_income_distribution)
おわりに
この記事では,対数ロジスティック分布を用いて所得の中央値とジニ係数から所得分布を再現する方法を紹介しました. 対数ロジスティック分布を用いることで,所得の中央値とジニ係数という2つの指標から所得分布の概形を捉えることができます.
なお,この方法は,実際の所得分布とは異なる場合があることに注意してください. より正確な所得分布を推定するには,追加のデータやより複雑なモデルが必要となります.