先日(2015年9月19日)HiRoshima.Rに参加して,MplusAutomaitonパッケージの使い方について発表してきました(発表スライドでは,mplusAutomationとなっていますがMplusAutomationが正しいパッケージ名です)。MplusAutomationパッケージはRのパッケージで,MplusをRで便利に使うためのパッケージです。せっかくなので,HiRoshima.Rでの発表資料をもとにもう少し説明を加えていこうと思います。
発表スライドはslideshareにもおいているので出力などのイメージがつかないという場合にはスライドをみてください(スライドへのリンク)。いくつかのサイトを参考にはしましたが,基本的にはMplusAutomationパッケージ開発者のvignett(PDF注意)とマニュアル(PDF注意)を元に基本的な関数を抜粋して紹介していますので,そっちを読んだほうが情報量は多いです。ちなみに,MplusAutomationパッケージのバージョンはcranだと0.6とかですが,最近はgithubで開発を進めているようなのでgithubのページにいくと最新版をインストールして使うこともできます。
MplusAutomationパッケージでできること
- 特定のフォルダ内に存在する.inpファイル(分析コード)を全てor指定ファイルの実行
- 特定のフォルダ内に存在する.outファイル(分析結果)を全てor指定ファイルの出力をRに読み込む
- R上でMplusの.inpファイルやMplusで読み込めるデータセット(.datや.txt形式)を作成する
- モデル比較(尤度比検定)を行う
以下では,上記の3つに関わる関数を紹介してきます。尤度比検定についてはまた後日ふれたいと思います。サンプルデータとコードも置いておきますが,当然ながらMplusがインストールされているPCでないと走りません。Mplusを持っている方はコードを走らせてみるとMplusAutomationの楽しさが少しは伝わるかと思います。サンプルデータは,徳岡・杉村・前田(投稿中)のデータをもとに発生させた12項目の仮想データセットです。Mplusをもっている方で試したみたいという方はこちらのDropboxへのリンクからHiroshimaR05.csvファイルをダウンロードしてください。
特定のフォルダ内に存在する.inpファイル(分析コード)を全てor指定ファイルの実行
- runModels関数
runModels関数では,特に引数をしてしない場合,作業ディレクトリに指定してあるフォルダ内にある”.inp”という拡張子を探して実行するようです。私は,HiRoshima.Rの準備でいろいろと使ってみるまでMplusでの分析データを別に管理していました(MplusのデータはMplus用のフォルダを作ってさらに研究とか分析別にサブフォルダを作っている感じです)。なので,runModels関数を走らせるには引数にデータセットと分析ファイル(.inp)が入っているフォルダまでのパスを書いて実行していました。
フォルダまでのパスを書くのがめんどくさい(特にWindowsとMacを使っていると”:C/”から始まるのと”Users/”から始まるのでいちいちパスを書き換える必要がある)という私のような方は,Rで作成したプロジェクトの中に分析したい.inpファイルの入っているMplusのフォルダをコピーしてRのプロジェクト内に貼りつけるなんなりしてください。すると,引数にrecursive = TRUEと入力するだけで作業ディレクトリ内にあるMplusフォルダを全て実行してくれます。
- 便利そうな引数の紹介
- recursive = TRUE #指定したディレクトリにあるサブフォルダ内の.inpファイルも実行する
- replaceOutfile = “modifiedDate” #フォルダ内の編集された.inpファイルだけを実行する(.outファイルと.inpファイルの更新時間が異なるもの)
- 使用例
runModels(recursive=TRUE, replaceOutfile = "modifiedDate")
特定のフォルダ内に存在する.outファイル(分析結果)を全てor指定ファイルの出力をRに読み込む
- extractModelSummaries関数,extractModelParameters関数
たぶんMplusAutomationパッケージの目玉機能の1つです。特定のフォルダ内のMplusの出力(.outファイル)をRに読み込めます。extractModelSummaries関数は適合度指標を,extractModelParameters関数はパラメタの推定値をRに読み込みます。runModels関数と同様に作業ディレクトリもしくは引数に指定したフォルダの.outファイルを読み込みます。
特定の.outファイルを読み込みたい場合,extractModelSummaries関数では,引数にfilefilter = “ファイル名.*”としてください(拡張子の部分を.outとするのではなく.*とすること)。extractModelParameters関数では,結果を見たいファイルまでのパスを指定する必要があります。
下記の使用例のところで示しているように,extractModelSummaries関数の結果はデータフレームとして格納できるので,あとは必要な適合度を取り出したり,いらないモデルを行から消すなどしてからwrite.csv関数などで出力してやればそのまま論文報告などの表に使えると思います。
extractModelParameters関数の場合,結果を格納するとリストとして保存されるので,そのリストから結果を取り出してくる必要があります。コードをみるとかなり長くみえますが,やっていることは(1)作業ディレクトリまでのパスと結果を見たいファイルの指定(2)標準化と非標準化のどちらの結果をみたいのか,をしているだけです。さらに,試しに打ってみるとわかると思いますが,$を打つと,下に示したようにリストに保存されているものが表示されるので,それをクリックすれば自動的に入力されるので,実際にはかなり楽です。
- 使用例
# extractModelSummaries関数の例 summaries <- extractModelSummaries(recursive=TRUE) result<-subset(summaries, select=c(Title, Filename, ChiSqM_Value, ChiSqM_DF, ChiSqM_PValue, CFI, TLI, SRMR, RMSEA_Estimate, AIC, BIC)) # Latexに出力 LatexTable <- LatexSummaryTable(summaries, keepCols = c("Title", "CFI", "SRMR","AIC"), sortBy="AIC", caption="Sample Results ", label="tab") print (LatexTable) # extractModelParameters関数の例 modelResults <- extractModelParameters(recursive=TRUE) # 以下は,抽出した結果をデータフレームにもってくるコードですが,私のディレクトリ設定なのでコピペをしても走りません。 stdResults <- modelResults$X.Users.masaru.Dropbox.R.asobi.HiRoshimaR05.3fb_model.out$stdyx.standardized
R上でMplusの.inpファイルやMplusで読み込めるデータセット(.datや.txt形式)を作成する
- mplusObject関数,mplusModeler関数,prepareMplusData関数
ここまでは,すでに作成してあるMplusのinput(.inp)ファイルを走らせたり,結果をRに読み込ませていました。ここからはMplusのinputファイルやMplusで使用するデータセットの作成をR上で作成する例を紹介していきます。使用例では,summaryやscreenregなどの関数を使って結果を取り出していますが,これまで紹介してきた関数で取り出すことももちろん可能です。
- 使用例
# R上でMplusのinputファイルを作成そして実行 dat <- read.csv ("HiRoshimaR05.csv") #まずはデータの読み込み cfa_model <- mplusObject( TITLE = "Sample - CFA Model;", MODEL = " m BY v1* v3 v7 v5 v9 v11; p BY v2* v4 v8 v6 v10 v12; m@1 p@1;", OUTPUT = " SAMPSTAT STDYX MODINDICES(ALL);", rdata = dat) # 作成したモデルをMplusのファイルに変換し,Rに読み込んだデータフレームをMplusで分析可能な形に変換 fit <- mplusModeler(cfa_model, "HiRoshimaR05.dat", modelout = "model1.inp", run = 1L) # run = 0Lにするとdatasetとinputファイルは作成されるが計算は実行されない # defaltは0L summary(fit) # 適合度の外観 # もう少し詳しく結果をみる方法 library(texreg) screenreg(fit, summaries = c("Observations", "CFI", "SRMR", "RMSEA_Estimate"), single.row=TRUE) # 読み込んだデータをMplus用に変換したものを作業ディレクトリ内に作成し,MplusのVARIABLEブロックまでを書いてくれる関数 example01 <- prepareMplusData(dat, "example01.dat") # コンソールに出力された結果をMplusのエディタにコピペして使用可能