毎日がんばれあたん

計量社会学に関するメモとモチベーションを高めてくれる推しについて

潜在成長曲線モデルメモ~stata~

 

 

潜在成長曲線モデリングはざっくり言えば,パネルデータ分析とマルチレベルとコラボした分析(と自分は理解してます).

パーソンレベルデータやワンショットの分析)の場合のマルチレベル分析は,レベル2が地域や学校,クラス,時代(コーホート)といった特定の個人が属するグループ変数,レベル1が個人を示す変数でたとえば,ある生徒が学校にネストされている構造を仮定する.

 ネスト構造を仮定するとは,個人の社会経済的地位や意識などはその個人が属する集団の影響を受けているという話.学校の例でいえば,ある生徒の学習能力(成績)は,進学校にいった場合とそうでない場合にまったくその伸びが違うとか,あとプロスポーツ選手の例でいえば仮に全く同じ成績を残したとしてもジャイアンツにいるのと広島カープにいるのでは年収が全然違うとかといったイメージである.

 また,このネスト構造は必ずしも2段階に限定されず3段階(レベル3),4段階・・・と考えられる.たとえば,ある個人がクラス,学年,学校,市町村,さらには都道府県,さらには,日本,アジア,ユーラシア,南半球,地球・・・などネスト構造はどんどん考えられるが,推定も重くなり,さらに構造が複雑になりすぎるので高次の構造はあまり考えない.  ほとんどがレベル2まで.一度だけレベル3の構造を仮定したものを見たことがあるが,正直解釈が複雑でよくわからなかった...

 

さて,パネルデータのマルチレベルの際には,ふつうレベル1にある個人がレベル2にいる.そして,レベル1にはある個人の各時点ごとの状態が入る.たとえばA君の高校1年生の時の成績,2年生の時の成績・・・のようなパターンである.当然ながら,成績というのはそれぞれの個人の中で何かしらの関連を持っていることが想定される(たとえば1年生の時に勉強を頑張れば2年生でも成績が良いとか)ため,ネスト構造を仮定することができる.

さらにパネルデータのマルチレベル分析の特徴としては,ある個人の各時点での状態というのは,時間に依存した関連を持っていることが考えられる.先ほどの成績の例を見ても,高校2年生の時のテストの成績は前年のテストの成績と関連をもっていそうだし,さらにいえば2年前の中学3年生の時の成績とも関連をもってそう,というように,各時点の情報が連なって関連を持つことが想定される.当然ながら,そうしたパターンが見いだせないこともある.この個人の関連,固い統計用語でいうながば,レベル1の誤差の分散共分散構造に何かしらの相関パターンを想定した分析を行うこととなる.

本来ならば,固定効果,ランダム効果(切片and傾き),交互作用などもまとめておいたほうがいいが,ここは省略.

 

stataのコマンドは以下の通り.mixedというコマンドで,もしロジスティック回帰分析を行う際にはmelogitを用いることになるが,全然計算が収束しないので,試したモデルがまずいのか,やはりロジスティック回帰分析の計算はそうとうきついのか,どちらかだと思う.

・まず,下準備としてreshapeによって,パーソンピリオドデータに変換しておく必要がある.これによって,1レコード(1行)は,ある個人のある時点における情報が並ぶことになる.

 

その上で,レベル1,レベル2の分散共分散のみを出力するコマンド

mixed  y || id:

yは従属変数idは個人を示す変数.これによって,yを説明する全体の分散を個人間の違いで説明できる分散と個人内の違いで説明できる分散とに分ける.もし,これで個人間の違いを説明する分散が極端に小さい場合には,わざわざマルチレベル構造を仮定する必要はなく,つまりはレベル2を仮定する必要はなく,レベル1のみ(つまりは固定効果のみ)で分析をすればよい.その場合には固定効果モデル(xtreg)というコマンドが使える.

(このあたりの説明も機会あれば少し丁寧にまとめたい). ちなみに,上記のコマンドを実行すると,本当にレベル2構造を仮定していいのかどうかの検定をやってくれて,出力の一番下にLR test vs. linear modelとあるので,そこで有意ならレベル2構造を仮定したほうが良いよね,というお墨付きをもらえることになる.出力の下に

Random-effects Parametersと出てきて,var(_cons)が個人間の分散,var(Residual)が個人内の分散である.また,出力のすぐ上に_consとあり,ここによく見る出力があるが,そのCoef.すなわち切片の値が,var(_cons)のEstimateの幅を持っているということが示されている.もう少し具体的にいうとyを成績を考えて,_consは調査の最初の時点での全個人の成績の平均ということになる.しかし,当然ながらスタート時点での成績は個人間で変わりうることが想定されるため,var(_cons)のEstimateの幅をもっている,ということになる.

 

mixed  y  || id:time

 

次にレベル2にtimeという変数を投入する.これは,時間変数で,たとえば調査を15,16,17歳と行うのであれば年齢の変数が入り,2018,2019,2020と1年ごとに調査を行うのであれば,年数の変数が入る.出力の中に,var(time)が増えているが,これは,レベル2の傾きのランダム効果となる.成績の例でいえば,当然ながら個人の成績は毎年伸びたり下がったりするわけで,つまりはある程度傾きをもっているわけであるが,成績の伸び方は各個人で全く違うわけである.たとえば成績が悪い子が急上昇するかもしれないし,成績が良い子はあまり伸びないまま一定であるかもしれない.そうした構造を仮定して,レベル2の傾きの分散を推定する. 簡潔なモデルを目指す場合あえてレベル2の分散を推定しないこともあるが,手順としては,一応踏んでおくのが良いと思われる.

 

mixed  y time  || id:time

 

次に,レベル1にtimeという時間変数を追加してtimeの固定効果を推定する.解釈は切片の時と同様で,個人の成績の変化の平均的な傾きは固定効果で求められた推定値となるが,それがレベル2(先ほどのvar(time))くらいの分散をもって傾きが変わりうることを想定することになる.

また,傾きのランダム効果を仮定することの統計的妥当性は,lrtestというコマンドで確認できる(中でどんな処理をやっているかはちゃんと調べてないので,調べる必要あり).ながれとしては,

mixed  y  || id:time

estimate store random_constant

mixed  y time  || id:time

estimates store random_slope

lrtest  random_constant  random_slope

とすると,尤度比検定が実行され,有意であれば,傾きのランダム効果(ランダムスロープ)を仮定することの妥当性が支持されることになる.

 

mixed y time  || id: time, covariance(unstructured)

 

次はレベル2残差にどういう関連(分散共分散構造)を仮定するかというコマンド.

レベル2はつまり個人間の成績に何か関連が見いだせそうかという話で,いくつかパターンが考えられるが,ここは通常,何かしらの構造を仮定しないことが多いためcovarianceの()の中は,無相関を仮定するunstructuredを入力することが多い.つまりは,各個人それぞれに異なる分散の構造を推定することになる.また,分散が全く同じである一致(identity)を仮定することも多い.これらも色々試してみて,上記のlrtestやestat ICなどによってどのモデルが最適か判断するのが良い.

 

mixed y time  || id: time, covariance(unstructured) residuals(ind)

 

次は,レベル1残差にどういう関連(分散共分散構造)を仮定するかというコマンド.これは最初の導入で説明した,今の成績は前の時点の成績と関連するよね,という話.どういう関連を持たせるか,いくつか代表的なものがあるが,簡単.residuals(identity)が同一で,これは,ある個人の各時点の残差の分散がすべて等しく,かつ各時点間の分散には関連がないことを表す.次に対角residuals(diagonal)は各時点の残差は異なるが,各時点間の分散には関連がないことを表す.次にresiduals(unstructured)は,残差も各時点の相関の仕方もすべて異なるという仮定である(つまり,全パラメータを推定することになるので,少し重たくなる).次に,residuals(ar1,t(time))は,は,各時点の残差の分散は同じで,各時点の相関を見た時に,時点によって何かしらの相関が見いだせそうなパターンである.たとえば,今の成績が1時点前と強く相関するが,2時点前との相関は少し弱くなり,3時点前はさらに弱くなり・・・というように何かしらの関連をもって相関が強く(弱く)なり,ar1とした場合は1次の自己回帰といって,1時点前後で相関が強く残り,2時点,3時点となるとある規則性をもって関連が弱くなることを想定している.個人的にはこれがけっこう好きで,かつ割と最適なモデルにもなりやすい気もする.次にresiduals(toeplitz)で,各時点の残差の分散は同じで時点が離れていくと相関が異なる(弱くなる)ことを仮定している.一次の自己回帰との大きな違いは,そこに規則性(パターン)がないため,たとえば,一次の自己回帰だと,相関は時点が遠くなると相関が一定の規則で弱くなるようなことを仮定するが,こちらは,次第に弱くなった関連が突如強くなるようなことも仮定している.そのため一次の自己回帰よりも少しパラメータの推定が多くなる.その他,いくつかあるが(exponentialやexchangeable),省略.また,もちろん自分で分散共分散行列を作成することもできる.

 

 

mixed y time  || id: time, covariance(unstructured) residuals(ind), reml

 

制限付き最尤法(reml)によって推定を行うコマンド.詳しくないので,後日勉強.

 

mixed y time x1 x2  || id: time, covariance(unstructured) residuals(ind)

 

今までの説明は,パネルデータにランダム構造を仮定して良いかどうかの話がメインで,そこが固まればようやく説明変数を投入していくことになる.普通の回帰分析同様にyの後にレベル1の独立変数を投入していく(固定効果).

 

mixed y time x1 x2 time#c.x1  || id: time, covariance(unstructured) residuals(ind)

 

時間変数と独立変数との交互作用をとる.要するに,注目している独立変数の効果が時間によって変わりうるのか検証する.これは通常の回帰分析の解釈を応用できる.仮にx1を女性ダミー変数と考え,主効果が正でかつ,交互作用効果が正であれば,女性は平均的に成績が高くなりやすく,かつ時点を経ると成績の伸びは女性のほうが大きい,となる(ここの解釈の部分少し不安定なので,少し再考必要).

 

また,こうした分析を行う前段階として,必ずグラフ等でx軸を時間変数,yを成績として各個人の成績を変化を示すようなグラフで視覚化する作業は必須であるので,そちらも必ず行う.

 

がんばれあたん