[Stata]Oaxaca分解(oaxaca, xtoaxaca) Part1

Kitagawa-Oaxaca-Blinder分解(以下、Oaxaca分解)を行うためのStataコードを2つご紹介します。1つ目はスタンダードなoaxaca、もう1つは前者を応用したxtoaxacaというコードです。紙幅の都合上、本記事ではoaxacaのみご紹介し、次回記事でxtoaxacaについてご紹介します。

oaxacaは基本的なOaxaca分解を行うためのユーザ関数で、ほとんどすべての推計モデルを使用して分解を行うことができます。基本的な文法は以下の通りです。

oaxaca y x1 x2, by(group) model1(reg) model2(reg)

ここで、group変数は男性ダミーなどの2値変数を使用します。

 コードの内容を簡単に説明すると、まず男女などのgroupごとにmodel1, model2の()内の推計モデルを適用します。デフォルトではその結果を、属性(Endowments)の差、係数(Coefficients)の差、そして両者からは説明されない交互作用効果(Interactions)の3つに分解します。model()の中身を変えることで、プロビットモデルやへキットモデル、パネルデータの構造を考慮した推計などを行うことも可能です。

 しかし、残念ながらoaxacaコマンドではfactor variableに対応していないため、i.industryi.yearなどのグループ変数を個別ダミー化したものを説明変数に投入することができません。対処法としては、次のようにすると良いでしょう。まず、factor variableとして使用したいグループ変数(以下の例ではindustryyear)を、次のようにカテゴリごとに個別ダミー化します。

tab industry, gen(di)
tab year, gen(dy)

こうすることで、業種ごとにdi1, di2, …という業種ダミーが、年ごとにyd1, yd2, …という年ダミーがそれぞれ作成されます。この個別化したダミー変数を説明変数に投入すれば上手く推計されます。
 なお、グループにサンプルが存在しない場合はエラーが出て推計されません。ミクロパネルデータを使用している場合、例えば農林水産業従事者のサンプルが存在しないといったケースがあります。サンプルが存在しないダミー変数がどれかわかっている場合は、説明変数からそのダミー変数を除けば良いですが、わからない場合はrelaxというオプションをつけることで解決可能です。

 ここで具体例として、男女の賃金格差を2way-fixed effects modelを用いてOaxaca分解を行う場合は以下のようなコードが書けます。

oaxaca wage age age_sq tenure tenure_sq largecop di1 di2 ..., by(men) model1(reghdfe, absorb(id year) vce(cluster id year)) model2(reghdfe, absorb(id year) vce(cluster id year))

この推計ではまずサンプルを男女に分け、以下のコードで表されるような2way-fixed effects modelを推計します。

reghdfe wage age age_sq tenure tenure_sq largecop di1 di2 ..., absorb(id year) vce(cluster id year)

この結果を用いて、男女の賃金格差の寄与度分解を行うわけです。注意点ですが、Oaxaca分解はモデルの当てはまりがよく、有意な説明変数が多いことが前提となっています。有意な説明変数が少ない場合は、次善策としてモデルを変えてみたり、サンプルを限定したりすると良いかもしれません。次の記事ではxtoaxacaをご紹介します。

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