読者です 読者をやめる 読者になる 読者になる

社会学者の研究メモ

はてなダイアリーから移転しました。

Stataでマルチレベル・モデル(2)

計量分析

今回の内容は少々専門的なので注意。

Stataで計量経済学入門 第2版

Stataで計量経済学入門 第2版

第2版マニュアルでは(一部希望があったものの)見送ったStataでのマルチレベル・モデリングについて、少しだけ解説をする。とはいえStata社としては「マルチレベル・モデル」という言い方はあまりしていないようで、基本的には「混合効果モデル(mixed effects model)」という用語を使っている。固定効果とランダム効果の両方を含む、という意味合いである。

通常のOLSやランダム効果FGLSでも、固定効果とランダム効果(レベル別撹乱項)の両方が含まれているが、混合効果モデルでは撹乱項以外のランダム効果の分散について、「分散成分」という行列を設定してそれを自由にモデリングできるのが特徴である(たとえばランダム効果と説明変数の交差項を推定できる)。今回はStataを使ったときの分散成分(variance components)のモデリングについて説明する。

分散成分は、簡単にいえばモデルに含まれるランダム効果の分散の相関を表している。固定効果のように点推定するだけではなく、分散を推定し、最尤推定によって観察値にフィットするランダム効果の分散の大きさを推定するのが混合効果モデルの特徴である。

たとえば以下のような成長曲線モデルを考える。

賃金率=F切片+R切片+(F係数+R係数)勤続年数+撹乱項

Fは固定効果、Rはランダム効果を示している。分散成分は従って、R切片とR係数の相関をどのように設定するかによって(も)決まる。諸ランダム効果と撹乱項は相関していないという想定なので、この点は基本的にランダム効果FGLSモデルと同じである点に注意。Stataのxt関連マニュアルでは撹乱項部分をresidual errorと呼んでいる。residual errorについてもオプションを指定することで(系列相関など)相関の仕方を指定することができるが、今回はスキップ。

上記のように特定化したモデルの場合、StataのデフォルトではR切片とR係数が独立だという想定でReML推定を行う。賃金をwage、勤続年数をyear、個人を識別する変数をidとすると、具体的には、

xmixed wage year || id: year

となる*1

デフォルトでは、ランダム効果が1個だけの場合はidentity(それしかないから)、複数ある場合はindependent設定になっている。R切片とR係数が独立であるという仮定を無条件でするのは無理があるので、以下のようにランダム効果間の相関を許容したモデルを推定することもできる。

xmixed wage year || id: year, covariance(unstructured)

すると推定結果下部のランダムパートに共分散の点推定と区間推定が表示されるようになるので、たとえば95%信頼区間が0を含んでいなければ、偶然ではない相関があるとみるべきである。上記の例の場合、たとえば賃金が全体的に低い場合と高い場合とで勤続年数の効果のバラつきが異なるようなケースであるから、実際にもありそうである。(切片と勤続年数の相関ではない。)

ランダム効果が複数あるときのデフォルトはindependentである。(モデルに指定しなくても推定結果には表示されている。)これにより、ランダム効果が異なった分散を持つが独立(共分散がゼロ)という制約を課している。これに対して同じ分散を持つという制約でかつ共分散を許容するにはexchangeableを指定する。ランダム効果をn個設定するならば、推定されるランダム効果の分散共分散はidentity設定なら1個、exchangeableなら2個、independentならn個、unstructuredなら(n^2-n)/2+n個となる。したがって制約の強さとしては「identity>exchangeable>independent>unstructured」となるので、手間を惜しまないならunstructuredからはじめて、ランダム効果分散の検定結果をみる、それぞれのモデルの尤度比検定するなどしてモデルを選択していけばよい。

Stataのxtmixedコマンドではランダム効果部分を「II」で区切ってモデルを特定化する。||の直後にはクラスター変数を指定するが、異なったクラスター変数を複数指定するときにはStataは自動的にnested構造を前提する。これに対して同じクラスター変数で異なった分散成分のモデリングをしたいこともあるだろう。このときは、同じクラスター変数で複数の||区切りを使ってもよい(repeated level modeling)。つまり||が複数あるからといってnestedモデルであるとは限らない。

上記の例だと、R切片とR係数の分散の大きさが性別や学歴によって異なると考えるのは自然だろう。(特に日本のような賃金制度環境では。)性別でランダム切片の分散が異なると想定する場合、

賃金率=(F切片+R切片)女性+(F切片+R切片)男性+F係数×勤続年数+撹乱項

のようにモデリングする。女性をfemale、男性をmaleとすれば、

xtmixed weight year female male, nocons|| id: female, nocons|| id: male, nocons

となる。性別でランダム切片とランダム係数(勤続年数)の分散が異なると想定する場合、

賃金率=F切片×女性+F切片×男性+F係数×勤続年数+F係数(勤続年数×女性)+F係数(勤続年数×男性)+(R切片×女性+R係数(勤続年数×女性))+(R切片×男性+R係数(勤続年数×男性))+撹乱項

となる。コマンドは省略するが、あらかじめ交差項を作っておくほうがいいだろう。それぞれのランダムパートにおいて、分散成分を別様に構造化することができる(片方をindependentに、片方をunstructuredというふうに。)

特定化が煩雑になる場合、きちんと数式でモデルを書いてみて、数式中の固定効果とランダム効果の数と、ソフトウェアで推定されたパラメータの数が対応しているかどうかをチェックするようにしたほうがよい。

諸モデル間の選択は基本的に尤度比検定で行うことができるが、StataのデフォルトではReML(Full MLと自由度の算定の仕方が異なる)なので、ちくいちmlオプションをつけて推定する必要がある。

さしあたりこれくらいで。より詳細なヘルプや他の事例についてはウェブ等で検索すれば出てくると思います。

*1:ここでは--たいていのマルチレベルモデリングと同様--個人をクラスター変数に設定しているが、これは観察されない要因によって被説明変数が個人内/外で異なった変動をするという想定をしているからである。このような想定が経験的に非合理的であるような場合は、別の変数をクラスター変数に設定する必要がある。とはいえ性別などの変数については固定効果として組み込むのがよい。クラスター変数として選ばられる変数の傾向とはなにかということについては、研究会で説明する予定。