Skip to content

Instantly share code, notes, and snippets.

@tetlabo
Created March 22, 2020 12:56
Show Gist options
  • Save tetlabo/1c8b607e88535067c967db2eb7d2485d to your computer and use it in GitHub Desktop.
Save tetlabo/1c8b607e88535067c967db2eb7d2485d to your computer and use it in GitHub Desktop.
平成30年国民生活基礎調査に基づく、所得分布のシミュレーション
# 調査結果URL: https://www.mhlw.go.jp/toukei/saikin/hw/k-tyosa/k-tyosa18/index.html
# 統計表URL: https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00450061&kikan=00450&tstat=000001129675&cycle=7&tclass1=000001130605&stat_infid=000031835137&result_page=1
# 国民生活基礎調査より、年収分布の相対度数
vec.income.freq <- c(6.2, 13.7, 13.7, 13.6, 10.1, 8.5, 7.6, 5.9, 4.5, 4.2, 3.0, 1.8, 1.4, 1.6, 1.2, 0.5, 0.5, 0.4, 0.4, 0.1, 1.3)
# 相対度数をもとにした10000人のシミュレーション
vec.income.sim <- NULL
for (i in 1:10000) {
class <- sample(1:length(vec.income.freq), 1, prob = vec.income.freq)
if (class == 1){
# 100万円未満
income <- sample(seq(0, 99, 0.5), 1)
} else if (class == 2) {
# 100-200万円未満
income <- sample(seq(100, 199, 0.5), 1)
} else if (class == 3) {
# 200-300万円未満
income <- sample(seq(200, 299, 0.5), 1)
} else if (class == 4) {
# 300-400万円未満
income <- sample(seq(300, 399, 0.5), 1)
} else if (class == 5) {
# 400-500万円未満
income <- sample(seq(400, 499, 0.5), 1)
} else if (class == 6) {
# 500-600万円未満
income <- sample(seq(500, 599, 0.5), 1)
} else if (class == 7) {
# 600-700万円未満
income <- sample(seq(600, 699, 0.5), 1)
} else if (class == 8) {
# 700-800万円未満
income <- sample(seq(700, 799, 0.5), 1)
} else if (class == 9) {
# 800-900万円未満
income <- sample(seq(800, 899, 0.5), 1)
} else if (class == 10) {
# 900-1000万円未満
income <- sample(seq(900, 999, 0.5), 1)
} else if (class == 11) {
# 1000-1100万円未満
income <- sample(seq(1000, 1099, 0.5), 1)
} else if (class == 12) {
# 1100-1200万円未満
income <- sample(seq(1100, 1199, 0.5), 1)
} else if (class == 13) {
# 1200-1300万円未満
income <- sample(seq(1200, 1299, 0.5), 1)
} else if (class == 14) {
# 1300-1400万円未満
income <- sample(seq(1300, 1399, 0.5), 1)
} else if (class == 15) {
# 1400-1500万円未満
income <- sample(seq(1400, 1499, 0.5), 1)
} else if (class == 16) {
# 1500-1600万円未満
income <- sample(seq(1500, 1599, 0.5), 1)
} else if (class == 17) {
# 1600-1700万円未満
income <- sample(seq(1600, 1699, 0.5), 1)
} else if (class == 18) {
# 1700-1800万円未満
income <- sample(seq(1700, 1799, 0.5), 1)
} else if (class == 19) {
# 1800-1900万円未満
income <- sample(seq(1800, 1899, 0.5), 1)
} else if (class == 20) {
# 1900-2000万円未満
income <- sample(seq(1900, 1999, 0.5), 1)
} else {
# 2000万円以上
# ※実際にはもっと高所得の人もいるはずだが、全体の平均、中央値を調査結果と合わせようとするとこれくらいになる
income <- sample(seq(2000, 4499, 0.5), 1)
}
vec.income.sim <- c(vec.income.sim, income)
}
# 確認
mean(vec.income.sim)
median(vec.income.sim)
# 所得が平均以下の割合 (調査では62.4%)
sum(vec.income.sim <= mean(vec.income.sim)) / length(vec.income.sim)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment