Introduction
人間、30年以上生きていると一度はRからMplusを制御したいときがある(さて、どこで私は人生を間違ったのでしょうか...)
そんなときには、RのMplusAutomationパッケージを使えばいい(ということを小野滋氏のブログを読んでいて昨日知った)。
・Cranのマニュアル
・Vignette
・徳岡大氏による紹介記事
How to Use
Rから使うときには、基本的な流れは、
- データをMplusで扱えるように変換します
- 処理内容を記述した.inpファイルを作成します
- inpファイルの内容を、変換したデータに対して実行します(結果は.outファイルに吐き出されます)
- .outファイルの内容を、Rで確認します。
な感じです。
データの変換
dta_info <- prepareMplusData(test_df , filename= "/Users/Ronri_Rukeichi/Desktop/dt1.txt" , keepCols = c("log_income", "lbr_yr" , "grade_4to5th") )
みたいな感じで、prepareMplusData()関数をつかい、引数keepColsにて分析対象の変数を指定する。
inputファイル(に相当するなにか)をつくる
よく考えたらデータ変換する必要ない。なぜならば、このように、mplusObject()関数をつかうなかで直接指定できるからだ。
cmd_obj <- mplusObject(TITLE = "Regression(OLS)" , MODEL="log_income on lbr_yr grade_4to5th", rdata = test_df , usevariables=c("log_income", "lbr_yr" , "grade_4to5th") )
推定
推定計算の実行については、mplusModeler()関数を使う。
構文チェックはcheck = T で、実行の有無はrun(0ならinpファイルやdataを作るだけ、1なら普通に実行、2以上ならブートストラップ)引数で制御する。
modelout引数に、outputファイルの出力先を指定する。
res_mplus <- mplusModeler( cmd_obj , run = 1 ,dataout = "/Users/Ronri_Rukeichi/Desktop/out1.dat", modelout = "/Users/Ronri_Rukeichi/Desktop/out1.inp", check=T,hashfilename = F)
このとき、注意しなくてはならないのだが、引数dataoutに指定する文字列は.datで、modeloutは .inpで終わらせる必要がある。
そうしないとエラーが出る(内部をみると、setwd()関数の対象がファイルになってしまうようだ)。
また、hashfilename=Fを指定しないと、吐き出されるdatファイルの名前が、長大になる。
またmodelファイル(.inp)と同じディレクトリに、outファイルが吐き出される(あとでつかう)。
結果の確認
結果は主に以下の方法で確認する
# 1: mplusModeler関数の戻り値のobjectから。 print(res_mplus$results$summaries) #サマリ(AICやLLなど) print(res_mplus$results$parameters$unstandardized) #回帰係数など #2: Output fileから読み込む。 param_info <- readModels(target="/Users/Ronri_Rukeichi/Desktop/out1.out") print(param_info$summaries) print(param_info$parameters)
これで、RからMplusが使える。
Enjoy!!