mplusの使い方 中級編
DESCRIPTION
このスライドのコードはMplusデモ版で実行可能です。 http://www.statmodel.com/demo.shtml また、こちらのページにサンプルデータを置いています。 http://bit.ly/12NgDmI 初級編はこちらをどうぞ。 http://www.slideshare.net/simizu706/mplus-lecture-1TRANSCRIPT
Mplus中級編
清水裕士
広島大学大学院総合科学研究科
中級編のメニュー
• Mplusを使う上で知っとくといい知識 – 推定方法の違い、標準誤差の推定、欠損値推定
• 高度なモデルの制約
– MODEL Constraint:の利用
• 多母集団同時分析 – 複数のグループを同じモデルで比較
• カテゴリカル・非正規データの分析 – 2値データ、順序データ、様々な分布データ
• 便利なコマンドやオプションの利用 – 新しい変数の作成、データ入力フォーマットの選択など
知っておくと便利な知識
推定法について
• 我々がよく使う推定法 – 最小二乗法(Un-weighted Least Square Method)
• 分散分析、回帰分析などはすべてこの方法
• 構造方程式モデルの推定法 – 最尤法(Maximum Likelihood Method)
• 手元のデータが最も得られやすいようなモデルを推定 • ESTIMATOR = ML;あるいはMLR;
– 重みつき最小二乗法(Weighted Least Square Method) • 誤差を推定精度で重みづける最小二乗法 • ESTIMATOR = WLS; あるいはWLSMV;
– MCMCによるベイズ推定法 • ベイズの定理に基づいた、モンテカルロ法を使った推定法 • ESTIMATOR = BAYES;
標準誤差の推定法
• 普通の推定方法 – MLやWLS
– モデルの仮定に基づいて標準誤差を推定 • 多変量正規性の仮定
• ロバスト標準誤差の推定 – MLRやWLSMV
– データの分布に合わせて標準誤差を補正 • 多少多変量正規性から逸脱しても、妥当な結果
– 推定値そのものは同じ
• Mplusのデフォルトはこちらを使う。オススメはこちら。 – ただ、ロバスト標準誤差の推定では、χ2乗検定がやや複雑になる。そのため、今回はMLやWLSで書いている。
欠損値の推定法
• 従来の方法 – リストワイズ削除による分析
• 分散分析や回帰分析、因子分析はすべてこれを使う
• 推定結果は多くの場合、バイアスを受ける
• 構造方程式モデルの欠損値推定 – 完全情報最尤法(Full information ML)
• 特に指定はいらない。基本はこれを使ってくれる。
• サブジェクト全体を消すのではなく、欠損していない部分をすべて活用して推定
• 欠損値のパターンに基づいてサブグループを作る
• サブグループを多母集団分析でモデルを推定 – 実際はEMアルゴリズムで推定する
欠損値推定における注意点
• 完全情報最尤法の適用範囲 – 分散を推定している変数のみに適用
• 内生変数はすべて分散が推定される
• 外生変数は共分散を指定するか、分散を推定するように指定する必要がある
– 分散が推定されている変数すべてが欠損の場合は、その欠損は推定できない
• あらかじめ欠損値を補完する方法も有効 – DATA IMPUTATIONコマンドを使う
• 欠損値推定はしないよりも、したほうがいい!
高度なモデルの制約
高度なモデルの制約
• パラメータ名を付けることで、より詳細な制約が可能になる。 –例:talk と perのパスの合計が1になるようにする
• ※違うパラメータは、違う行に書く(セミコロンは最後)
MODEL:
idt on talk(p1)
per(p2);
Model constraint:
p1 = 1-p2;
新しいパラメータを作成する
• NEWオプションを使う – 既存のパラメーターから、新しいパラメータを作る – 例:媒介分析の間接効果をパラメータとして作成
MODEL: idt on talk(p1) con(p2); talk on con(p3); Model constraint: NEW(indirect); indirect = p1 * p3;
新しいパラメータの推定結果
多母集団同時分析
二つ以上のグループを比較する
• 実験条件と統制条件でモデルが違うかも。 – とはいえ、別々に分析するのは効率が悪い
• サンプルサイズが半分になる • パスの比較を直接的にできない
• 多母集団分析の利点 – 二つのグループでモデルが等しいかどうかを検討
• 情報量基準で等値モデルと非等値モデルを比較 • 同じであることが提案されたら、倹約的なモデルを提出できる
– 部分的なパスの違いを検討 • 一つのパスだけ異なっている、という仮定もOK
• 全部が違うわけではないので、サンプルサイズを有効利用できる
多母集団パス解析
• Sample1のデータを使う – 2つの条件(con = 0, con = 1)でパスモデルが等しいかどうかをチェック
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; GROUPING = con(0 = control 1 = experiment);
– Conが0のとき、1のときに名前を付ける(必須)。
非等値モデルのコード
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; GROUPING = con(0 = control 1 = experiment); ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: idt on talk per; OUTPUT: SAMPSTAT STDYX MODINDICES(ALL);
パス等値モデルのコード
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; GROUPING = con(0 = control 1 = experiment); ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: idt on talk per(p1-p2); OUTPUT: SAMPSTAT STDYX MODINDICES(ALL);
モデルの比較 1
• 尤度比検定による比較 – 尤度比検定:χ2乗検定を用いて、等値モデルが非等値モデルより有意に適合してないなら、非等値モデルを採択する • ネストされたモデルのみ比較可能
– 非等値モデル χ2(0) = 0
– 等値モデル χ2(2) = 2.518
– 尤度比 = χ2model2 – χ2model1 = 2.518 n.s. • 「等値モデルが適合していない」は採択されない
モデルの比較 2
• 情報量基準による比較 – 非等値モデル
– 等値モデル
– 情報量基準が小さいほうが適合 • 等値モデルが採用される
パス等値モデルの結果
誤差分散も等値モデルのコード
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; GROUPING = con(0 = control 1 = experiment); ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: idt on talk per(p1-p2); idt(var1); OUTPUT: SAMPSTAT STDYX MODINDICES(ALL);
誤差分散の等値モデルの結果
グループで違うモデルを指定
• 二つのグループでモデルが違う場合
MODEL: idt on talk per; MODEL experiment: idt on talk@0;
– con = 1の場合(experiment)だけ、talkのパスを0に固定する場合は、上のように記述する
多母集団因子分析
• Sample2のデータを使う。 – 男性と女性で因子構造が異なるかを検討
• 因子構造の等質性の段階 – 配置不変:測定される項目と因子数が等しい
• モデル図が同じ
– 測定不変:因子負荷量が等しい • 配置不変+因子負荷量を等値
– 弱因子不変:因子の分散と共分散が等しい • 測定不変+因子の分散・共分散を等値
– 強因子不変:測定項目の誤差分散も等しい • 弱因子不変+測定誤差分散を等値 • 強因子不変で初めて、標準化係数がすべて等しくなる
多母集団因子分析
• Mplusによる多母集団因子分析
–因子負荷量はデフォルトで等値になる
• 測定不変を仮定している
• 異なるモデルを想定する場合は、グループごとに指定する
–基本的な設定は、パス解析と同じ
• ただ因子分析のほうが検討するポイントが多い
–平均構造をオフにすると推定が簡単になる
• ANALYSISコマンドにMODEL = NOMEANSTRUCTURE;
配置不変のコード
MODEL:
F1 by v1-v3*;
F2 by v4-v6*;
F1-F2@1;
[F1-F2@0];
MODEL female:
F1 by v1-v3*;
F2 by v4-v6*;
F1-F2; [F1-F2];
測定不変のコード
MODEL: F1 by v1-v3*; F2 by v4-v6*; F1-F2@1; [F1-F2@0]; MODEL female: F1-F2; [F1-F2];
弱因子不変のコード
MODEL: F1 by v1-v3*; F2 by v4-v6*; F1-F2@1; [F1-F2@0]; F1 with F2(cov1); MODEL female: [F1-F2];
強因子不変のコード
MODEL: F1 by v1-v3*; F2 by v4-v6*; F1-F2@1; [F1-F2@0]; F1 with F2(cov1); v1-v6(err1-err6); MODEL female: [F1-F2];
因子構造の比較
• 配置不変 – BIC=2632
• 測定不変 – BIC=2606
• 弱因子不変 – BIC=2600
• 強因子不変 – BIC=2574
→強因子配置不変が有力候補
カテゴリカルデータの分析
これまではAmosでもできる
• ここからが、Mplusの真骨頂 – 変数の尺度や分布に様々な仮定を当てはめられる
• 尺度の水準 – 連続尺度・・・今までのモデル – 順序尺度・・・順序性があるカテゴリカルデータ – 名義尺度・・・順序性がないカテゴリカルデータ
• 目的変数の分布(後述) – 正規分布・・・今までのモデル – ポワソン分布・・・イベント生起度数の分布 – 打ち切りデータ・・・測定がある段階までしかされてない
多変量正規性の仮定と心理尺度
• 一般に、構造方程式モデルは最尤法を使う – よって、多変量正規性の仮定が必要
– しかし、心理尺度の多くは正規分布にならない
• 臨床尺度は、「極端な人」を識別することを目的とする • 回答の負担を減らすため、2~4件法もよく使われる • 天井・床効果もよく起こる
• 連続・正規性から、順序・非正規性へ – 無理に連続・正規性にこだわる必要はない
• 道具はそろっているし、その使い方も簡単 • 使うことで慣れていき、報告が増え、当たり前になる
順序回帰分析
• sample1のデータを使う。 – idtが1項目の尺度で測定されている
• 連続変量とは言い難い。
• 順序カテゴリカルの指定 – VARIABLES:コマンドにCATEGORICALオプション
CATEGORICAL = idt; • ※順序、名義尺度は値がすべて整数である必要
– ANALYSIS:コマンドで推定法を選択 • WLS:重みつき最小二乗法・・・順序プロビット回帰分析 • ML:最尤法・・・順序ロジスティック回帰分析
以下のコードを書く(ロジスティック回帰)
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; CATEGORICAL = idt; ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: idt on talk per;
推定結果
ロジスティック回帰分析の注意点
• ロジスティック回帰分析で欠損値推定
– ESTIMATOR = ML(MLR)で、外生変数の分散を推定することで欠損値推定した分析をしたい場合
• さっきのコードでは走らない
• モンテカルロ積分(数値計算積分)が必要
– ANLYSISコマンドで以下の文を書く
• INTEGRATION = MONTECARLO;
ロジスティック回帰の解釈
• 得られる係数は回帰分析とだいぶ違う – それは、背後にロジット分布を仮定しているから – 得られる係数はロジット得点
• 解釈はオッズ比のほうがわかりやすい – 1が基準 → オッズ比が1なら回帰係数=0 – オッズ比の解釈
• 説明変数が1点上がると、一つ上の段階に回答する確率が何倍増えるか
• オッズ比=1.8・・・説明変数が1点増えると、目的変数が一つ上の段階を選択する確率が1.8倍多くなる
• オッズ比=0.7・・・一つ上の選択率が0.7倍 = 一つ下の選択率が1.43倍多い
ロジスティック回帰の解釈
• あるいは標準化係数を見るという手もある – 順序尺度の場合は、背後に潜在変数を仮定し、その分散を使って標準化係数を計算できる
– 得られる係数の解釈は、説明変数が1SD増加した時、順序尺度の背後に仮定される潜在変数が1SD増加する、という感じ • 基本的には、重回帰分析の標準化係数と同じ解釈でよい
• よくわからなかったら、プロビット回帰を使う – プロビット回帰分析は標準正規分布を仮定するので、回帰係数を標準得点として解釈できる • 結果(説明率)は、ロジスティック回帰分析とほぼ変わらない
以下のコードを書く(プロビット回帰)
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; CATEGORICAL = idt; ANALYSIS: TYPE = GENERAL; ESTIMATOR = WLS; MODEL: idt on talk per;
推定結果
順序因子分析
• sample2のデータを使う – 5件法で測定された尺度で因子分析
• 基本的には5件であれば連続変量とみなしても構わないが、正規性が満たされない場合は順序尺度としてみなすのも一つの方法
• 指定方法は同じ CATEGORICAL = v1-v6;
– 因子分析ではWLS(あるいはWLSMV)がオススメ • 項目数と水準数が多い場合は、MLではメモリが足りなくなる場合もある
• また、順序のMLは適合度指標が限定される
以下のコードを書く
VARIABLE: NAMES = ID v1-v6 sex; USEVARIABLES = v1-v6; MISSING = .; CATEGORICAL = v1-v6; ANALYSIS: TYPE = GENERAL; ESTIMATOR = WLS; MODEL: F1 by v1-v3*; F2 by v4-v6*; F1-F2@1; [F1-F2@0];
推定結果
名義回帰分析
• sample2を使う。
– 順序性がない回帰分析
– 男性と女性(順序性はない)
• sexを名義尺度として分析
• ただし、2値の場合は順序も名義も結果は同じ
• 名義カテゴリカルの指定
– VARIABLES:コマンドにNOMINALオプション
NOMINAL = sex; – 名義回帰は、ML(あるいはMLR)でしか推定できない
以下のコードを書く
VARIABLE: NAMES = ID v1-v6 sex; USEVARIABLES = v1-v3 sex; MISSING = .; CATEGORICAL = v1-v3; NOMINAL = sex; ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: F1 by v1-v3*; F1@1; [F1@0]; sex on F1;
非正規性データの分析
打ち切りデータの分析
• 測定があるレベルで止まってしまうデータ – 東大生のセンター試験の得点
• 多くの人が100点近くを取ってしまう
• 本来は学力には差があるが、測定道具の限界であるレベル以上が識別できないような場合
– 心理尺度の天井効果 • これもある意味、打ち切りデータ
– このようなデータを、打ち切られなかった場合にどのような得点になるかを推定して分析をする
Mplusで打ち切りデータの分析
• sample1のデータを使う – Idtが仮に天井効果の場合を想定
• 5点の人を4点に変換して分析
– VARIABLES:コマンドに
CENSORED = idt(a);
– と書く。(a)は上が打ち切られている場合。天井効果。
– (b)は下が打ち切られている場合。床効果。
まずは元のデータの推定結果
次にidtを無理やり天井効果に
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; DEFINE: if(idt==5) then idt = 4; ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: idt on talk per;
次に変換後に普通の分析
係数が小さくなる 説明率も低め
最後に打ち切りデータとして分析
VARIABLE: NAMES = ID idt talk per skill con; USEVARIABLES = idt talk per; MISSING = .; CENSORED = idt(a); DEFINE: if(idt==5) then idt = 4; ANALYSIS: TYPE = GENERAL; ESTIMATOR = ML; MODEL: idt on talk per;
打ち切りデータの推定結果
かなり元の推定値を復元できている(誤差は大きめ)
カウントデータの分析
• カウントデータ – 一定時間内の特定のイベントの生起度数
• ポワソン分布に従うことが知られている – あるいは負の二項分布
• Mplusでのカウントデータの分析 – USEVARIABLESコマンドに
COUNT = idt(p); – と書く。(p)はポワソン分布のこと
– 負の二項分布は(nb)と書く。
ポワソンを仮定した分析結果
• BICなどの値から、このデータはポワソンを仮定しないほうが適合していることがわかる
便利なオプションの利用
DEFINEコマンドの利用 P574
• 新しい変数を作成
–読み込んだ変数を利用して、新しい変数を作る
–数値変換
• 線形・非線形変換、合成を行う
–条件式を利用した変数の作成
• IF文を使って、条件に当てはまる場合の得点を与える
–関数を利用した変数の作成
• Mplusに入っている関数を使って変数を合成・変換
数値変換
• 既存の変数で新しい変数を作る
– X1 = v1 + v2;
– X2 = v1 * v2 + v3 / v4 ;
– X3 = LOG(v1);
• 自然対数。常用対数はLOG10()
– X4 = ABS(v2);
• 絶対値
– X5 = SQRT(v3);
• 平方根
条件式を使う変換
• IF文を使う
– IF( v1 == 1 AND v2 == 1) THEN group = 1;
– IF( v1 == 2 OR v2 == 1 ) THEN group = 2;
• groupは新しく作った変数名
• “==“は等値を意味しており、”=“は代入を意味している – 混同しないように注意!
– IF( v1 == 4) THEN group = _MISSING;
• 欠損値に指定
Mplusの関数を使う
• MEAN:平均値を算出する – F1 = MEAN(v1-v3);
• SUM:合計値を算出する – F2 = SUM(v4-v6);
• CUT:カテゴリに分割する – CUT v1-v3(3);
• V1-v3を、3以下を0、3より大を1にコードする
– CUT v1 v3 v6( 2 4); • v1とv3とv6を、2以下を0、2より大4以下を1、4より大を2にコードする
DO文を使うと便利
• 複数の変数を一度に作成
x1 = SQRT(v1); x2 = SQRT(v2); X3 = SQRT(v3); x4 = SQRT(v4); x5 = SQRT(v5);
– こんなのも、下の1行で書ける
DO(1, 5) x# = SQRT(v#);
DEFINEで定義した変数の利用
• USEVARIABLESオプションで指定する。 – ただし、既存の変数の後に指定。 – 例えば、次のように書く
VARIABLE: NAMES = ID v1-v6; USEVARIABLES = f1 f2; MISSING = .; DEFINE: f1 = mean(v1-v3); f2 = mean(v4-v6);
DEFINE機能の便利な使い方
• いろんな従属変数で分析したい場合 – USEVARIABLESとMODELの両方を変更しないといけない。 – 次のように書いてみる
• Xの変数を変えるだけで、モデルを変更することなくいろんなモデルを試せる
VARIABLE: NAMES = ID v1-v6; USEVARIABLES =v2-v5 x; MISSING = .; DEFINE: x = v1; MODEL: x on v2-v5;
DATA:コマンドのTYPEオプション
• デフォルトはINDIVIDUAL – 個人と変数の行列形式 – 指定しなくてもこのタイプになる
• 要約データでの入力 – 共分散行列形式
• FULLCOV • 下三角行列の場合はCOV
– 相関行列形式 • FULLCORR • 下三角行列の場合はCORR
要約データセットの用意
• sample3にあるデータを数値部分だけコピー – メモ帳に張り付けて、sample3.datで保存
• 注意点 – 平均値が上で、共分散行列が次。
– 相関行列の場合は平均、標準偏差、相関行列の順
要約データでの入力
• 要約データを用意する
– sample3.datを利用する
–平均値が入っているので、MEANSも書く
–人数も別で指定する。NOBSERVATIONS=人数。
DATA:
FILE IS “sample3.dat";
TYPE = MEANS FULLCOV;
NOBSERVATIONS = 200;
VARIABLE:コマンドのUSEOBSERVATIONS
• 分析で使用するサブジェクトを指定する
–例えば、conが0のサブジェクトだけ使う場合
USEOBSERVATIONS = CON == 0;
– ==は等しい、という意味。=は代入なので違いに注意。
– <や>、<=も使える。ANDやORなども使用可。
中級編の応用
項目反応理論
• Mplusでも項目反応理論が可能
–他のソフトウェアと一致させるためには要工夫
• 1因子モデル
• 各項目をCATEGORICALで指定
• 推定法はML(あるいはMLR)で指定
• 因子の分散を1、平均を0に固定
• 推定値を1.702で割る
– PLOTコマンドで、情報量関数や項目特性を出力
• TYPE = PLOT3;
以下のコードを書く VARIABLE: NAMES = ID v1-v6 sex; USEVARIABLES = v1-v6; MISSING = .; CATEGORICAL = v1-v6;
ANALYSIS: ESTIMATOR = ML;
MODEL: F1 by v1-v6*(p1-p6); F1@1; [F1@0]; MODEL Constraint: NEW(a1-a6); DO(1,6)p# = 1.702*a#;
PLOT: TYPE = PLOT3;
推定結果
• 項目の係数ではなく、a1-a6を確認
– これはIRTの識別力を表している。
項目特性曲線(ICC)の見方
項目特性曲線
テスト情報関数
項目特性曲線
多母集団の項目反応理論
• 性別で項目反応理論の推定が等しいか検討 – MLによるカテゴリカル分析は多母集団同時分析では実行できない • よって、WLSによる推定を使う
– 閾値母数の指定方法 [v1$1-v1$3];
[v2$1-v2$4];
[v3$1-v3$4];
[v4$1-v4$4];
[v5$1-v5$4];
[v6$1-v6$4];
識別力は等値で閾値が異なるモデル
VARIABLE: NAMES = ID v1-v6 sex; USEVARIABLES = v1-v6; MISSING = .; CATEGORICAL = v1-v6; GROUPING = sex(1 = male 2 = female); ANALYSIS: TYPE = GENERAL; ESTIMATOR = WLS; MODEL: F1 by v1-v6*(p1-p6); F1@1; [F1@0];
MODEL female: F1 by v1-v6*(p1-p6); F1@1; [F1@0]; [v1$1-v1$3]; [v2$1-v2$4]; [v3$1-v3$4]; [v4$1-v4$4]; [v5$1-v5$4]; [v6$1-v6$4]; PLOT: TYPE = PLOT3;
MLによる多母集団の項目反応理論
• MLによるカテゴリカル分析は多母集団同時分析では実行できない
–そこで、潜在クラス分析のKNOWNCLASSオプションを利用して、同様の分析を行う
• ただし、数値計算が必要なのでいろいろオプションを追加する必要がある
– コードの詳しい意味は、上級編で。
識別力も閾値も異なるモデル
VARIABLE: NAMES = ID v1-v6 sex; USEVARIABLES = v1-v6; MISSING = .; CATEGORICAL = v1-v6; CLASS = c(2); KNOWNCLASS = c(sex = 1 sex = 2); ANALYSIS: TYPE = MIXTURE; ESTIMATOR = ML; ALGORITHM=INTEGRATION; MODEL: %OVERALL% F1 by v1-v6*(p1-p6); F1@1; [F1@0];
%c#2% F1 by v1-v6*(q1-q6); F1@1; [F1@0]; [v1$1-v1$3]; [v2$1-v2$4]; [v3$1-v3$4]; [v4$1-v4$4]; [v5$1-v5$4]; [v6$1-v6$4]; MODEL Constraint: NEW(a1-a6 b1-b6); DO(1,6)p# = 1.702*a#; DO(1,6)q# = 1.702*b#; PLOT: TYPE = PLOT3;