論理の流刑地

地獄の底を、爆笑しながら闊歩する

RからMplus制御

Introduction

人間、30年以上生きていると一度はRからMplusを制御したいときがある(さて、どこで私は人生を間違ったのでしょうか...)

そんなときには、RのMplusAutomationパッケージを使えばいい(ということを小野滋氏のブログを読んでいて昨日知った)。
Cranのマニュアル
Vignette
徳岡大氏による紹介記事

How to Use

Rから使うときには、基本的な流れは、

  1. データをMplusで扱えるように変換します
  2. 処理内容を記述した.inpファイルを作成します
  3. inpファイルの内容を、変換したデータに対して実行します(結果は.outファイルに吐き出されます)
  4. .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!!