日々の記録簿

日々のできごとの記録

日記

RからMplusを使う(MplusAutomation)

投稿日:

Mplusという統計ソフトウェアがあります。高機能なのですが、いかんせんエディタが残念仕様で使いづらい・・・。

と思っていたのですが、RからMplusを操作するMplusAutomationというパッケージがありましたので、ご紹介。

いろいろなことができるのですが、今回は、R上のデータフレームからMplus用のdatファイルを作成する方法と、Mplusの分析ファイル(inpファイル)をルールに従って生成する方法について書きます。

RからMplus用のdatファイルを生成する

ここでは、TIMSS2011 Grade4のデータを例に使う。今、TIMSSの数学得点(ASMMAT)と、家庭にある本の冊数(ASBG04)の関連を調べることを考えよう。せっかくMplusを使うので、マルチレベルモデルを使うことを考える。

# 必要なlibraryの読み込み
library(foreign)
library(MplusAutomation)

# TIMSSデータを読み込み
jp11 <- read.spss("asgjpnm5.sav", use.value.labels=F, 
                  to.data.frame=T, use.missing=T)

# mplusデータに変換
prepareMplusData(jp11, filename="example.dat",
                 keepCols=
                 c("IDSCHOOL", "ASMMAT01", "ASMMAT02", 
                   "ASMMAT03", "ASMMAT04","ASMMAT05",
                   "ASBG04"),
                 overwrite=T)

prepareMplusDataでは、上記のように、Rのデータフレーム名、Mplusのdatファイル名、必要な変数名を指定すればよい。overwriteは同名のファイルがあった場合、それを上書きするかどうかを指定できる。今回は、上書きする指定にしている。

Rの出力として、Mplusのinpファイルの一部が出力されるので、これを利用するとよい。今回の場合は、下記のような出力が得られる。

TITLE: Your title goes here
DATA: FILE = "example.dat";
VARIABLE: 
NAMES = IDSCHOOL ASMMAT01 ASMMAT02 ASMMAT03 ASMMAT04 ASMMAT05 ASBG04; 
MISSING=.;

Mplusの分析ファイルを生成する

TIMSSデータを扱う場合に面倒なのが、PV1からPV5まで、別々に計算する必要があるという点である。つまり、PV1のinpファイル、PV2のinpファイル・・・、といった具合に、よく似た5つのinpファイルを生成しなければならない。これはかなり面倒である。MplusAutomationには、これを自動化する機能がある。

具体的には、下記のようなファイルを用意する。拡張子は何でもよい。ここでは仮に、mplus_exampleとする。

[[init]]
iterators = PVs model;
PVs = 1:5;
model = 1:2;
outputDirectory="~/";
filename=model[[model]]pv[[PVs]].inp;
[[/init]]
Title: PV[[PVs]] of Model [[model]]

Data:
	File = "example.dat";

Variable:
	Names =	IDSCHOOL ASMMAT01 ASMMAT02 ASMMAT03 ASMMAT04 ASMMAT05 ASBG04;
 	Missing=.;
	Cluster = IDSCHOOL;
[[model = 1]]
	Usevariables = IDSCHOOL ASMMAT0[[PVs]];
[[/model = 1]]
[[model = 2]]
	Usevariables = IDSCHOOL ASMMAT0[[PVs]] ASBG04;
[[/model = 2]]

Analysis:
	Type = twolevel;
	Estimator = MLR;

Model:
[[model = 1]]
	%Within%
	ASMMAT0[[PVs]];
	%Between%
	ASMMAT0[[PVs]];
[[/model = 1]]
[[model = 2]]
	%Between%
	ASMMAT0[[PVs]] on ASBG04;
	%Within%
	ASMMAT0[[PVs]] on ASBG04;
[[/model = 2]]

ここで、前半のinit内がMplusAutomation独自の機能である。

[[init]]
iterators = PVs model;
PVs = 1:5;
model = 1:2;
outputDirectory="~/";
filename=model[[model]]pv[[PVs]].inp;
[[/init]]

まず、iteratorsでは、変数名を指定する。今回は、PVsとmodelという二つの変数を指定している。

続いて、それぞれの変数PVsとmodelの範囲を指定する。PVsは1から5まであるので1:5とし、今回は二つのモデルを試そうと思うので、model=1:2とした。

outputDirectoryは、出力するディレクトリを決める。今回はホームディレクトリを指定している。なお、Windowsの場合は、”C://”などにすると良いはずである。

filenameは、inpファイルのファイル名を指定する。ここで、[[model]]や[[PVs]]となっている部分は、iteratosで指定した変数名のことである。それぞれ、先ほど指定した範囲(PVs=1:5, model=1:2)の範囲で変化する。つまり今回は、model1pv1.inp、model1pv2.inp、model1pv3.inp・・・model2pv1.inp、model2pv2.inp・・・model2pv5.inpまで、合計10のinpファイルが生成される。なお、ファイル名をかぶせるように設定すると、ファイルが上書きされてしまうので注意。

後半は、基本的にmplusのinpファイルである。ただし、[[PVs]]や[[model]]内は指定した範囲で変化する。

また、[[model=1]]から[[/model=1]]でくくられた範囲は、model=1のときのみ出力され、model=2のときは出力されない。

こうしたmplus_exampleファイルを作成した後、R内で、下記のように実行するとinpファイルが生成される。

createModels("mplus_example")

続いて、inpファイルを実行すればよい。これも、R内で下記のようにすると、指定したディレクトリ内のすべてのinpファイルが実行される。

runModels("~/", 
          showOutput=TRUE, logFile=NULL)

shotOutputはmplusの出力をR上で見るためのものである。logFileはmplusのエラーログ等を保存してくれる。鬱陶しいので、今回はオフにしている。

今回のinpファイルはテキトーに作ったものなので、mplusではいくつかエラーがでるが、MplusAutomationの使い方は何となくわかると思う。

他にも、MplusAutomationには、outファイルの結果(係数やモデルの適合度など)をR上に読み込む関数も用意されている。細かいことは、使い方の例を読めば良い。RからMplusを使う方には、いろいろ便利なlibraryだと思うので、一度お試しあれ。

スポンサーリンク

スポンサーリンク

-日記

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

FactoMineRからベンゼクリの修正割合(Benzecri’s modified rates)を計算する

最近、多重対応分析(Multiple Correspondence Analysis)を勉強していた。RではFactoMineRのMCA関数がいい感じである。 ただ、ベンゼクリの修正割合を計算できると …

WordPressの投稿一覧で【この投稿タイプの投稿を編集する権限がありません】と表示される

その他、【プラグインの管理画面にアクセスできない】【ファイルをアップロードできない(この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか?)】等のエラー表示がでていました。 一方で …

XfburnでDVDドライブが認識されない!

XfburnでDVDを焼こうと思ったら、DVDドライブが認識されていないというエラーに遭遇したので、その対処法です。 症状は、「DVDドライブは接続済みにもかかわらず、メッセージがでて、ドライブが認識 …

knitrで複数頁に渡る表を作成する

knitrで複数頁に渡る表を作成する必要があったので、メモです。 と言っても、longtable をセットするだけなのですが。 仮に、longtable.Rというファイルがあったとします。データはTI …

Gnome 3.16 とTrackball Emulation

Gnome 3.16にアップデートしたら、Trackball Emulationによるスクロールが効かなくなったので、その解決方法です。 原因は、Gnome 3.16からTrackball Emula …