見出し画像

説明できない男女賃金格差の調べ方

女性活躍推進法によって、男女の賃金格差が注目されています。また、メルカリの説明できない格差の是正アクションはNHKなどのマスコミにも報道されて話題になりました。

では、この説明できない男女賃金格差はどのように調べられるのでしょうか?
Mercerがわかりやすい記事をだしています。

手法と必要なデータは次のとおりです。

手法:Blinder-Oaxaca分解
男女の賃金差異要因4項目
・年齢
・勤続年数
・職階(一般社員や課長級など)
・職種(営業、製造、人事、経理など)
※この要因の他に性別、賃金のデータが必要

男女の賃金差異の公表義務化 貴社は本当の男女の賃金差異を説明できますか?

実際にBlinder-Oaxaca分解で男女賃金格差を分析する方法を示します。

環境

言語:R言語
環境:Jupyter Labなど
利用するライブラリ:GeneralOaxaca

私の場合はGoogle Cloud Vertex AI Workbenchを利用しましたが、R言語が実行できる環境であればどこでも実行できるはずです。
なお、Vertex AI WorkbenchでR言語を使う場合は次のとおり少し設定が必要です。

分析

基本的には、ライブラリのドキュメントに記載されているサンプルコードがベースになります。
ただし、職階、職種はダミー化する必要があります。
ダミー化は、例えば、職階の項目に部長、課長がある場合、職階(部長)と職階(課長)の2つの項目に分解して、該当する項目に1をたてます。

$$
\begin{array}{|c|c|c|} \hline
 & 職階 \\ \hline
Aさん & 部長 \\ \hline
Bさん & 課長 \\ \hline
\end{array}
$$

$$
\begin{array}{|c|c|c|} \hline
 & 職階(部長) & 職階(課長) \\ \hline
Aさん & 1 & 0  \\ \hline
Bさん & 0 & 1 \\ \hline
\end{array}
$$

データのカラムを次のとおりだとします。

  • annual_salary: 年俸

  • is_female: 女性なら1、男性なら0

  • age: 年齢

  • work_age: 勤続年数

  • job_grade: 職階

  • job_domain: 職種

このとき、次のコードでOaxaca分解できます。

# ファイルの読み込み
data <- read.csv("your_data.csv")
head(data)

# カテゴリカル変数を因子へ変換
data$job_domain <- as.factor(data$job_domain)
data$job_grade <- as.factor(data$job_grade)
head(data)

# ダミー変数の作成
job_domain_dummy <- model.matrix(~ job_domain - 1, data = data)
job_grade_dummy <- model.matrix(~ job_grade - 1, data = data)

# ダミー変数を元のデータフレームに結合
data <- cbind(data, job_domain_dummy)
data <- cbind(data, job_grade_dummy)
head(data)

# ダミー変数の名前を取得
job_domain_dummy_names <- colnames(job_domain_dummy)
job_grade_dummy_names <- colnames(job_grade_dummy)

# その他の回帰変数
other_vars <- c("age", "work_age")

# すべての説明変数を結合
all_vars <- c(other_vars, job_domain_dummy_names, jg_dummy_names)

# モデル式の作成
formula_string.1 <- paste("annual_salary ~", paste(all_vars, collapse = " + "), "| is_female")
formula.1 <- as.formula(formula_string.1)
print(formula.1)

# Oaxacaパッケージ
if(!require('oaxaca')) {
  install.packages('oaxaca')
  library('oaxaca')
}

# set random seed
set.seed(03104)

# perform Blinder-Oaxaca Decomposition:
# explain differences in log real wages across native and foreign-born groups
oaxaca.results.1 <- oaxaca(formula.1, data = data, R = 30)

# print the results
print(oaxaca.results.1)

評価

結果の評価はドキュメントを理解して解釈する必要がありますが、GeminiやChatGPTに次のように聞いてしまうとよいです。

以下は、Oaxaca分解法で男女賃金格差を分析した結果です。
job_domainは職種、job_gradeは職位、ageは年齢、work_ageは在職年数です。
job_domainとjob_gradeはダミー化しています。
男女間で年齢、在職年数、職種、職位では説明できない差があるかどうか教えて下さい。

ChatGPTだと文字数制限にひっかかる可能性が高いので、必要な部分を切り出すなどの工夫が必要かもしれません。
Geminiの場合は、Google Cloud Vertex AI Studioを使うと便利です。


いいなと思ったら応援しよう!